সাবস্ট্রিং চেনিফিকেশন


27

ভূমিকা

এই উদাহরণস্বরূপ, আসুন স্ট্রিং Hello, World!এবং অ্যারে নেওয়া যাক [3, 2, 3]। সাবস্ট্রিং চেইনটি সন্ধান করার জন্য, আমরা নিম্নলিখিত প্রক্রিয়াটি অনুসরণ করব:

অ্যারের প্রথম সংখ্যাটি হ'ল 3, সুতরাং আমরা সাবস্ট্রিংটি পাই [0 - 3]যা Hel। এর পরে, আমরা 3প্রাথমিক স্ট্রিং থেকে প্রথম অক্ষরগুলি সরিয়ে ফেলি, যা আমাদের ছেড়ে দেয় lo, World!

অ্যারের দ্বিতীয় সংখ্যাটি 2, সুতরাং আমরা [0 - 2]আমাদের নতুন স্ট্রিং থেকে সাবস্ট্রিং পাই যা আমাদের দেয় lo। বাকী স্ট্রিং হয়ে যায় , World!

শেষ সংখ্যাটি একটি 3, যা আমাদের দেয় , Wসাবস্ট্রিং শৃঙ্খল মিলিত সাবস্ট্রিং, যা আমাদের দেয় সব হল:

['Hel', 'lo', ', W']

আরও চাক্ষুষ উদাহরণের জন্য:

[3, 2, 3], 'Hello, World!'
3 -> Hel
2 ->    lo
3 ->      , W

কাজটি

প্রদত্ত একটি খালি নয় এমন স্ট্রিং এবং একটি খালি নয় এমন অ্যারের মাত্র গঠিত ধনাত্মক পূর্ণসংখ্যা ( > 0), আউটপুট সাবস্ট্রিং শৃঙ্খল । আপনি ধরে নিতে পারেন যে অ্যারের সমস্ত সংখ্যার যোগফল স্ট্রিংয়ের দৈর্ঘ্য অতিক্রম করে না।

আপনি ধরে নিতে পারেন যে স্ট্রিংগুলিতে কোনও নতুন লাইন থাকবে না।

পরীক্ষার মামলা

Input: abcdefghijk, [2, 1, 3]
Output: ['ab', 'c', 'def']

Input: Code Golf, [4, 1]
Output: ['Code', ' ']

Input: Ayyy, [3]
Output: ['Ayy']

Input: lexicographically, [2, 2, 2, 7, 4]
Output: ['le', 'xi', 'co', 'graphic', 'ally']

এটি , তাই বাইটসের স্বল্পতম সংখ্যার সাথে জমা দেওয়া!

উত্তর:



12

পাইথন 2, 42 বাইট

s,a=input()
for n in a:print s[:n];s=s[n:]

কখনও কখনও আপনি এটি বিরক্তিকর ভাবে করেন।


এখন পর্যন্ত খুব অজস্র উত্তরগুলির সংক্ষিপ্ততম
সাইওস

বাহ্যত স্পষ্টতই আমি এটিকে
উড়িয়ে দিচ্ছি

8

ব্র্যাচল্যাগ , 20 13 বাইট

h@[~c.:la~t?,

এটি অনলাইন চেষ্টা করুন!

এটি চূড়ান্তভাবে অক্ষম এবং শেষ পরীক্ষার ক্ষেত্রে টিআইওর সময়সীমা ছাড়িয়ে যায়।

ব্যাখ্যা

Input = [String, List of integers]

h@[            Take a prefix of the string
   ~c.         Take a possible list of strings which when concatenated results in that prefix
      :la      Take the lengths of each element of that list
         ~t?,  This list of lengths is equal to the list of integers of the Input

কিছুটা আরও দক্ষ সংস্করণ, 15 বাইট

টি।? {~ ঠ} একটি, এইচ @ [~ গ


8

পাইথন 3, 45 বাইট

f=lambda s,a:f(s[a[0]:print(s[:a.pop(0)])],a)

এটি প্রতি লাইনে একটি সাবস্ট্রিং প্রিন্ট করে এবং যখন কোনও ক্লান্ত হয়ে যায় তখন ত্রুটি দিয়ে শেষ হয়।

এটি repl.it পরীক্ষা করুন ।


2
প্রিন্টে ছিঁচকে দেখার কী দুর্দান্ত উপায়!
xnor

7

পাইথন, 52 , 46 বাইট

f=lambda a,s:a and[s[:a[0]]]+f(a[1:],s[a[0]:])

একটি পুনরাবৃত্ত ল্যাম্বদা ফাংশন।

ডেনিসকে 6 বাইট শেভ করার জন্য ধন্যবাদ!



5

হাস্কেল, 34 বাইট

s#(a:b)=take a s:drop a s#b
_#_=[]

ব্যবহারের উদাহরণ: "lexicographically" # [2,2,2,7,4]->["le","xi","co","graphic","ally"]

সাধারণ পুনরাবৃত্তি।

বা অন্তর্নির্মিত মাধ্যমে বিরক্তিকর 29 বাইট সমাধান:

import Data.Lists
splitPlaces

5

রুবি, 26 বাইট

->w,a{a.map{|n|w.shift n}}

স্ট্রিংগুলি অক্ষরের অ্যারে হিসাবে উপস্থাপিত হয়।


4

পাওয়ারশেল ভি 2 +, 46 বাইট

param($a,$b)$b|%{-join$a[$i..($i+=$_-1)];$i++}

ইনপুট স্ট্রিং $aএবং অ্যারে নেয় $b, লুপ হয়ে যায় $b। প্রতিটি পুনরাবৃত্তি, (ডিফল্ট , বা ) এবং বর্তমান সংখ্যার $aউপর ভিত্তি করে একটি অ্যারের স্লাইস করে । করার দরকার এবং কারণ পাওয়ারশেলের স্ট্রিংগুলি শূন্য-সূচকযুক্ত।$i$null0-1$i++

উদাহরণ

(এখানে আউটপুটটি স্থান-পৃথক, কারণ এটি অ্যারেগুলির জন্য পূর্বনির্ধারিত পদ্ধতি)

PS C:\Tools\Scripts\golfing> @('abcdefghijk',@(2,1,3)),@('Code Golf',@(4,1)),@('Ayyy',@(3)),@('lexicographically',@(2,2,2,7,4))|%{""+$_[0]+" -> "+(.\substring-chainification.ps1 $_[0] $_[1])}
abcdefghijk -> ab c def
Code Golf -> Code  
Ayyy -> Ayy
lexicographically -> le xi co graphic ally

4

পার্ল, 28 বাইট

এর জন্য +1 অন্তর্ভুক্ত -n

STDIN এ ইনপুট স্ট্রিং দিয়ে চালান প্রতিটি পৃথক লাইনে প্রতিটি নম্বর অনুসরণ করুন:

(echo "Hello, World!"; echo 3; echo 2; echo 3) | perl -nE 'say for/(??{"."x<>||"^"})/g'

শুধু কোড:

say for/(??{"."x<>||"^"})/g

23 বাইট সংস্করণটিও ||"^"বাছাই করে না কাজ করে তবে প্রসারিত ট্রেলিং নিউলাইনগুলি প্রিন্ট করে

"^"$_স্ট্রিংটিতে রেজেক্স মেটা অক্ষর না থাকলে প্রতিস্থাপন করা যেতে পারে


3

এমএটিএল , 8 বাইট

ys:)1bY{

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

y    % Implicitly take the two inputs: numerical array, string. Duplicate the array
s    % Sum of the array, say n
:    % Range from 1 to n
)    % Take first n characters of the string
1    % Push 1
b    % Bubble up the original copy of the string to the top
Y{   % Split into pieces of lengths given by the numerical array. The pieces are 
     % stored in a cell array, which is implicitly displayed, one cell per line

3

জাভাস্ক্রিপ্ট (ES6), 39 38 35 বাইট

ETH প্রোডাকশনের জন্য 3 বাইট সংরক্ষণ করা:

s=>a=>a.map(v=>s.slice(t,t+=v),t=0)

উদাহরণ:

//Definition
f=
s=>a=>a.map(v=>s.slice(t,t+=v),t=0)

//Call
f('lexicographically')([2, 2, 2, 7, 4]);

//Output
Array [ "le", "xi", "co", "graphic", "ally" ]


পূর্ববর্তী সমাধান:
হান্ট্রোকে 38 বাইট ধন্যবাদ

s=>a=>a.map(v=>s.substr(t,v,t+=v),t=0)

39 বাইট:

(s,a)=>a.map(v=>s.substr(t,v,t+=v),t=0)

1
আপনি
কারিরিং

2
.sliceকয়েকটি বাইট সংরক্ষণ করে:s=>a=>a.map(v=>s.slice(t,t+=v),t=0)
ETH প্রোডাকশনগুলি

3

ব্যাচ, 74 বাইট

@set/ps=
@for %%i in (%*)do @call echo %%s:~0,%%i%%&call set s=%%s:~%%i%%

আমি সি মারছি? এটা ঠিক হতে পারে না! STDIN এবং অ্যারেতে কমান্ড-লাইন আর্গুমেন্ট হিসাবে স্ট্রিং নেয়।


3

জাভা, 119 বাইট

String[] substringChainification(String s, int[] i) {
    String[] r = new String[i.length];
    int j = 0, f = 0;
    for (int t : i)
        r[j++] = s.substring(f, f += t);
    return r;
}

Golfed:

String[]s(String s,int[]i){String[]r=new String[i.length];int j=0,f=0;for(int t:i)r[j++]=s.substring(f,f+=t);return r;}

আমি রোমান গ্রাফের উত্তরে ( /codegolf//a/93992/59935 ) পরিবর্তন করেছি, তবে আমার কাছে মন্তব্য করার মতো যথেষ্ট সংবাদ নেই।

আমি লুপ বাস্তবায়ন পরিবর্তন করেছি এবং উত্সের স্ট্রিংটি প্রতিটি পুনরাবৃত্তিতে অন্য একটি স্ট্রিংয়ে সেট করার পরিবর্তে, আমি কেবল সূচকগুলি পরিবর্তন করি যা দিয়ে আমি স্ট্রিংটি পাই।


2
পিপিসিজিতে আপনাকে স্বাগতম! দুর্দান্ত প্রথম পোস্ট! গল্ফের পরামর্শ নিয়ে আপনার ঠিক এটি করা উচিত, তবে পর্যাপ্ত প্রতিনিধি নয়।
Rɪᴋᴇʀ

1
পিপিসিজিতে আপনাকে স্বাগতম! এবং আমি _ইস্টারলিআর্ক_ , প্রথম প্রথম পোস্টের সাথে একমত agree আমি আরও গল্ফ কিছু খুঁজে পেতে চেষ্টা করেছি, কিন্তু পারেনি। হতে পারে আপনি এটি ইতিমধ্যে দেখে ফেলেছেন তবে জাভাতে গল্ফ করার জন্য আপনার টিপসটি আকর্ষণীয় হতে পারে। আবার স্বাগতম, এবং আপনার থাকার উপভোগ করুন।
কেভিন ক্রুইজসেন


2

সেড (82 -2 for -rn) 84

s,^,\n,;:l;N;s,\n\n,\n,;:
s,^([^\n]*)\n(.)([^\n]*\n)1,\1\2\n\3,
t;P;s,^[^\n]*,,;tl

ইনপুট প্রথম লাইন স্ট্রিং হয়। এরপর প্রতিটি লাইনে একটি সাবস্ট্রিং আকার ইউনারী

উদাহরণ:

$ cat test.txt:
lexicographically
11
11
11
1111111
1111

$ cat hold | sed -rnf sed.txt
le
xi
co
graphic
ally

2

সিজেম , 11 বাইট

lq~{/(ns}/;

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

l    e# Read input string.
q~   e# Read array of lengths and eval.
{    e# For each length...
  /  e#   Split the string into chunks of the given size.
  (  e#   Pull off the first chunk.
  n  e#   Print with linefeed.
  s  e#   Flatten the remaining chunks into a single string again.
}/
;    e# Discard any remainder of the input string.

2

সি, 81 বাইট

i,j;f(s,l,k)char*s;int*l;{for(i=j=0;i<k;){write(1,s+j,l[i]);puts("");j+=l[i++];}}

কারণ write()আউটপুট বাফার করা হয় না কোন অনলাইন কম্পাইলার একটি কঠিন সময় এই outputting থাকবে।

test.c :

i,j;f(s,l,k)char*s;int*l;{for(i=j=0;i<k;){write(1,s+j,l[i]);puts("");j+=l[i++];}}
main(){
    int l[]={3,2,3};
    f("Hello, World!",l,3);
    int ll[]={2,1,3};
    f("abcdefghijk",ll,3);
    int lll[]={4,1};
    f("Code Golf",lll,2);
    int llll[]={3};
    f("Ayyy",llll,1);
    int lllll[]={2,2,2,7,4};
    f("lexicographically",lllll,5);
}

পাইপ ছাড়াই আউটপুট:

Hel
lo
, W
ab
c
def
Code

Ayy
le
xi
co
graphic
ally

উপরের সি প্রোগ্রামের আদর্শ সংকলক ল'আউটপুট [পর্দায় আরও প্রথম দিকের ফাংশনটি অনুলিপি করা] হ্যালো, ওয়াবসিডিফকোড আয়াইলিকোগ্রাফিকালি "" n "ছাড়াই ...
রোজলুপি

2

পিএইচপি, 98 বাইট

<?php
$b=$argv[1];foreach(explode(',',$argv[2])as$a){echo(substr($b,0,$a).' ');$b=substr($b,$a);}

ব্যবহার:

php chainification.php lexicographically 2,2,2,7,4


আউটপুট:

le xi co graphic ally


পিএইচপি দিয়ে সম্ভবত আরও ভাল সমাধান আছে।


2

পিএইচপি, 82 বাইট

<?php for($s=$argv[++$i],$j=-1;$n=$argv[++$i];){for(;$n--;)echo$s[++$j];echo"
";}

স্ট্রিং হিসাবে ইনপুট নেয় এবং তারপরে সংখ্যার একটি তালিকা, আউটপুট নতুন লাইন দ্বারা পৃথক করা হয়। যেমন

php chainify.php lexicographically 2 2 2 7 4

আপনি যদি সেই লোকগুলির মধ্যে একটি হন -আর দিয়ে আরজিভি ব্যবহার করতে সক্ষম হন তবে আপনি খোলার ট্যাগের জন্য ব্যবহৃত 6 বাইট সংরক্ষণ করতে পারবেন।


আমি ব্যবহার সম্পর্কে বিভ্রান্ত $argv[++$i]। কেন $argv[1]এবং না $argv[2]?
MonkeyZeus

এছাড়াও, এ পিএইচপি 7.0.2 ব্যবহার sandbox.onlinephpfunctions.com আমি 3 দ্বিতীয় সময় সীমা আঘাত
MonkeyZeus

এটি নয় $argv[2]কারণ আমাদের প্রস্তাবিত যুক্তিগুলির মাধ্যমে পুনরাবৃত্তি করা দরকার এবং এটি $argv[++$i]প্রথমবারের জন্য প্রয়োজনীয়তা এড়ানো ,$i=1এবং এইভাবে 2 বাইট সংরক্ষণ করা উচিত।
ব্যবহারকারী59178

2

পিএইচপি, 63 বাইট

<?foreach($_GET[a]as$p){echo" ".substr($_GET[s],$s,$p);$s+=$p;}

অ্যারে 85 বাইট হিসাবে আউটপুট

<?foreach($_GET["a"]as$p){$o[]=substr($_GET["s"],$s,$p);$s+=$p;}echo json_encode($o);

1

পাইথ, 7 বাইট

PcwsM._

ইনপুটকে নতুন লাইনের দ্বারা পৃথক করে স্ট্রিংটি অনস্ক্র্যাপ করা এবং অ্যারের পরে আসার সাথে নেয়। অনলাইনে চেষ্টা করে দেখুন!

ব্যাখ্যা:

     ._  Get all prefixes of Q
   sM    Map sum across each of these prefixes (to get the total indices)
 cw      Split the string at these locations
P        Remove the last "remainder" of the string

1

অক্টাভা / ম্যাটল্যাব, 31 বাইট

@(s,a)mat2cell(s(1:sum(a)),1,a)

এটি ইনপুটগুলি সহ একটি বেনামী ফাংশন s: স্ট্রিং; a: সংখ্যাযুক্ত অ্যারে।

Ideone এ ব্যবহার করে দেখুন

ব্যাখ্যা

এটি আমার এমএটিএল উত্তরের একটি বন্দর।

s(1:sum(a))        % Take first n characters of string s, where n is the sum of array a
mat2cell(...,1,a)  % Split into pieces of lengths given by a and store in a cell array

1

জাভা 142 বাইট

public static String[]substringChain(String s,int[]i){
  String[]r=new String[i.length];
  for(int j=-1;++j<i.length;){
    r[j]=s.substring(0,i[j]);
    s=s.substring(i[j]);
  }
  return b;
}

Golfed:

String[]s(String s,int[]i){String[]r=new String[i.length];for(int j=-1;++j<i.length;){r[j]=s.substring(0,i[j]);s=s.substring(i[j]);}return b;}

1

ওওক, 36 টি অক্ষর

{FIELDWIDTHS=$0;OFS=RS;getline}$1=$1

নমুনা রান:

bash-4.3$ awk '{FIELDWIDTHS=$0;OFS=RS;getline}$1=$1' <<< $'3 2 3\nHello, World!'
Hel
lo
, W

বাস্তব জীবনে আমি এটি এটির মতো ব্যবহার করব, কীভাবে এর স্কোর গণনা করা যায় তার কোনও ধারণা নেই:

bash-4.3$ awk -vFIELDWIDTHS='3 2 3' -vOFS='\n' '$1=$1' <<< 'Hello, World!'
Hel
lo
, W


1

জিএনইউ সেড, 55 + 2 (আরএন পতাকা) = 57 বাইট

1H;1d;G;:;s=.(\n.*)\n(.)=\1\2\n=;t;s=.==;P;s=[^\n]*==;h

এটি অনলাইন চেষ্টা করুন! (সেড যোগ করার জন্য @ ডেনিসকে ধন্যবাদ)

ব্যাখ্যা: ইনপুট স্ট্রিংটি প্রথম লাইনে এবং সংখ্যাগুলি, আনারীতে , তার পরে পৃথক লাইনে হওয়া উচিত। একটি নতুন লাইন চক্রের শুরুতে অন্তর্নিহিতভাবে পড়া হয়, প্রতিবার স্ক্রিপ্ট চালায়।

1H;1d                       # once: append string to hold space and start new cycle
                            #Initially, the hold space contains an useful '\n'.
G                           # append hold space to pattern space. The pattern space
                            #format will be: 'UNARY\n\nSTRING'.
:;s=.(\n.*)\n(.)=\1\2\n=;t  # iteratively remove a char from the string, as many
                            #times as unary chars, and store it on 2nd pattern line
s=.==;P                     # remove '\n', then print the new top line
s=[^\n]*==;h                # delete up to '\n' and update hold space

পরীক্ষা চালান: ইওএফের সাথে এখানে শেষের চিহ্নিতকারী হিসাবে একটি নথি ব্যবহার করুন

sed -rnf program.sed << EOF
> abcdefghijk
> 00
> 0
> 000
> EOF

আউটপুট:

ab
c
def

1

Vimscript, 79 78 বাইট

খুব সুন্দর নয়, আমি নিশ্চিত যে এটি উন্নত করা যেতে পারে ...

একটি ভিম বাফার নেয়, তারপরে echom string(A([2,3]))আউটপুটটি দেখতে কল করুন

fu A(l)
let r=[]
for i in a:l
exe "norm d".i."l"
let r+=[@"]
endfo
retu r
endf

আমি আসলে স্ট্রিংকে প্রতারণা এবং আউটপুট দেওয়ার কথা ভাবি ["abc", "def"]... তবে আমি প্রতিরোধ করেছি: পি

ব্যাখ্যা: মুছে ফেলুন (ডিফল্ট রেজিস্টারে রাখে) প্রতিটি অ্যারে আইটেম পরিমাণে অক্ষর এবং এটি অ্যারে যোগ করে r... সত্যই এক বিরক্তিকর উত্তর।


1

কমন লিস্প, 78 76 বাইট

ধরে নেই বেনামে ফাংশন অনুমোদিত:

(lambda(s l)(loop for x in l as y = x then(+ y x)collect(subseq s(- y x)y)))

ব্যবহার

(funcall #'(lambda(s l)(loop for x in l as y = x then(+ y x)collect(subseq s(- y x)y)))"AbCdefGhijK"'(3 2 3))

আউটপুট

("AbC" "de" "fGh")

-2 বাইট asপরিবর্তে ব্যবহার করে andএবং দুটি ভেরিয়েবলের মধ্যে প্রথম বন্ধনীতে ফিট করতে y সংজ্ঞা পরিবর্তন করে(subseq ...)


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.