স্ট্রিং আনস্লাইস করুন


29

কোনও স্ট্রিংয়ের স্লাইসের তালিকার একটি ইনপুট দেওয়া হয়েছে, মূল স্ট্রিংটিকে আউটপুট দেয়।

প্রতিটি স্লাইসটি দৈর্ঘ্য 2 এর তালিকা হিসাবে দেওয়া হবে, এতে স্লাইসের প্রারম্ভিক অবস্থান (একটি পূর্ণসংখ্যা -0) এবং স্লাইসটি নিজেই থাকবে। আপনার ভাষা যদি স্বেচ্ছাসেবী প্রকারের অ্যারে সমর্থন করে না, আপনি এটিকে স্ট্রাক্ট বা অনুরূপ বা কেবল সংখ্যা, একটি স্থান এবং তারপরে স্লাইসযুক্ত স্ট্রিং হিসাবে গ্রহণ করতে পারেন।

প্রতিটি স্লাইসের দুটি উপাদানের ক্রম আপনার উপর নির্ভর করে। তদুপরি, আপনি যদি দৈর্ঘ্য -2 অ্যারে হিসাবে স্লাইসগুলির উপস্থাপনা ব্যবহার করতে চান, আপনি ইনপুটটিকে 2-মাত্রিক অ্যারে বা একটি একক ফ্ল্যাট অ্যারের হিসাবে নিতে পারেন। অবশেষে, পূর্ণসংখ্যার প্রতিনিধিত্বকারী অবস্থানটি শূন্য-সূচকযুক্ত বা এক-সূচকযুক্ত হতে পারে (এখানে সমস্ত উদাহরণ শূন্য-সূচকযুক্ত)।

প্রদত্ত সর্বোচ্চ অবস্থান পর্যন্ত পুরো স্ট্রিংটি নির্ধারণ করতে ইনপুট সর্বদা পর্যাপ্ত হবে sufficient অর্থাৎ কোনও "গর্ত" বা "ফাঁক" থাকবে না। অতএব, আউটপুটটিতে কোনও অতিরিক্ত ট্রেলিং বা নেতৃস্থানীয় অক্ষর থাকতে হবে না (আদর্শ optionচ্ছিক ট্রেলিং নিউলাইনলাইন ব্যতীত)। ইনপুট সর্বদা সামঞ্জস্যপূর্ণ থাকবে এবং কোনও টুকরো একে অপরের সাথে বিরোধ করবে না।

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।

পরীক্ষার কেস:

In                                                Out
-----------------------------------------------------------
[[2, "CG"], [0, "PP"], [1, "PC"]]               | PPCG
[[0, "foobarbaz"]]                              | foobarbaz
[[0, "foobar"], [6, "baz"]]                     | foobarbaz
[[2, "ob"], [5, "rba"], [0, "fooba"], [8, "z"]] | foobarbaz
[[0, "fo"], [0, "fooba"], [0, "foobarbaz"]]     | foobarbaz

স্ট্রিংগুলিতে কী অক্ষর থাকবে তা নিয়ে কি কোনও বিধিনিষেধ রয়েছে?
গ্যামারকর্পস

@ গ্যামার কর্পস নাপ, কোনও বিশেষ বাধা নেই।
ডুরকনব

1
আউটপুট স্ট্রিংয়ের দৈর্ঘ্যের উপর কোনও বিধিনিষেধ রয়েছে?
মেগো

@ মেগো মেমোরি / স্টোরেজ দ্বারা আরোপিত প্রাকৃতিক সীমা ছাড়া অন্য কেউ নয়।
Doorknob

1
হা! এটি আমার পাঠ্য সম্পাদকটিতে পূর্বাবস্থায় ফিরে আসার প্রক্রিয়া: D
slebetman

উত্তর:


5

জেলি, 10 9 বাইট

Ḣ0ẋ;Fµ€o/

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

কিভাবে এটা কাজ করে

Ḣ0ẋ;Fµ€o/  Main link. Input: A (list of pairs)

     µ€    Convert the chain to the left into a link, and apply it to each pair.
Ḣ          Pop the first element.
 0ẋ        Yield a list of that many zeroes.
   ;F      Concatenate the list of zeroes with the popped, flattened pair.
       o/  Reduce the generated lists by logical OR.
           Since all characters are truthy, this overwrites zeroes with characters,
           but never characters with zeroes.

14

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

lambda l:`map(max,*[' '*n+s for n,s in l])`[2::5]

প্রথমত, তাদের অফসেটগুলিকে স্পেস দিয়ে প্যাড করে স্ট্রিংগুলি সারি করুন (স্পষ্টতার জন্য আন্ডারস্কোর হিসাবে দেখানো হয়েছে)

[[2, "CG"], [0, "PP"], [1, "PC"]] 

__CG
PP
_PC

তারপর, ব্যবহারসমূহ mapথেকে zipএবং প্রতিটি কলাম, যা ক্ষুদ্রতর (ক্ষুদ্রতম মুদ্রণযোগ্য চরিত্র) স্পেস মান উপেক্ষা করে এবং সর্বোচ্চ নিতে Noneগুলি যেখানে কিছু স্ট্রিং খুব ছোট ছিল।

__CG
PP
_PC

PPCG

অবশেষে, কৌশলটি ''.joinব্যবহার করে একটি স্ট্রিংয়ে to[2::5]


2 :: 5 কৌশলটি কী? কিভাবে এটি একটি স্ট্রিং যোগ দেয়? যে প্রতি 5 তম সূচক 2 থেকে শুরু হয় না?
রবার্ট ফ্রেজার

@ রবার্টফ্রেজার এখানে দেখুন ।
xnor

8

পার্ল, 25

জন্য +2 যোগ করা হয়েছে -lp

STDIN থেকে ইনপুট পান, যেমন

perl -lp slices.pl
2 CG
0 PP
1 PC

(^ ডি বা ^ জেড বা আপনার সিস্টেমে এসটিডিএন বন্ধ করে যা দিয়ে বন্ধ করুন)

slices.pl:

/ /;$r|=v0 x$`.$'}{*_=r

v0আপনাকে দুটি বাইট বাঁচানোর পরিবর্তে নাল বাইটটি হবে না (কারণ আপনি এর আগেও জায়গাটি বাদ দিতে পারেন x)? সম্পাদনা করুন: এইচএম, না, আমি যখন চেষ্টা করেছি তখন কোনও কারণে আমি পেয়েছি Can't locate object method "x" via package "2"(বা নম্বরটি আমার প্রথম লাইনে যাই হোক না কেন)।
msh210

1
কেবলমাত্র সি ভেরিয়েবলের মতো নামগুলি অব্যক্ত আক্ষরিক হতে পারে। সুতরাং ভি 0 হ'ল সংক্ষিপ্ততম উপায় \ 0 (বা অতিরিক্ত জায়গার কারণে এই ক্ষেত্রে টাইয়ের জন্য কোটের মধ্যে একটি \ 0)
টন হসপেল

8

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

a=>a.map(([o,s])=>[...s].map(c=>r[o++]=c),r=[])&&r.join``

সম্পাদনা করুন: @ এডক 65 এর জন্য 4 টি বাইট সংরক্ষণ করা হয়েছে।


a => a.map (([o, s]) => [... s]। ম্যাপ (সি => আর [ও ++] = গ), আর = []) এবং & জো জিনে 4 বাইট সংরক্ষণ করে
edc65

7

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

import Data.List
map snd.sort.nub.(>>= \(n,s)->zip[n..]s)

ব্যবহারের উদাহরণ:

*Main> map snd.sort.nub.(>>= \(n,s)->zip[n..]s) $ [(2,"CG"),(0,"PP"),(1,"PC")]
"PPCG"

এটি কীভাবে কাজ করে: (index,letter)প্রতিটি স্লাইসের প্রতিটি অক্ষরের জন্য জোড়া তৈরি করুন , একক তালিকায় একত্রীকরণ করুন, নকলগুলি সরিয়ে ফেলুন, সূচী অনুসারে বাছাই করুন, সূচকগুলি সরিয়ে দিন।


4

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

''i"@Y:Y:tn:b+(

সঙ্গে কাজ করে বর্তমান সংস্করণ (13.0.0) ভাষা / কম্পাইলার করুন।

ইনপুটটি কোঁকড়ানো ধনুর্বন্ধনী এবং একক উদ্ধৃতি সহ। (এমএটিএলবি / এমএটিএল-এর কোঁকড়ানো ধনুর্বন্ধনী কোষের অ্যারেগুলি সংজ্ঞায়িত করে , যেগুলি তালিকাগুলিতে স্বেচ্ছাসেবী, সম্ভবত বিভিন্ন ধরণের সামগ্রী থাকতে পারে)) পরীক্ষার কেসগুলি হ'ল :

{{2, 'CG'}, {0, 'PP'} {1, 'PC'}}
{{0, 'foobarbaz'}}
{{0, 'foobar'}, {6, 'baz'}}
{{2, 'ob'}, {5, 'rba'}, {0, 'fooba'}, {8, 'z'}}
{{0, 'fo'}, {0, 'fooba'}, {0, 'foobarbaz'}}

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

''      % push empty string. This will be filled with the slices to produce the result
i       % take input: cell array of cell arrays. For example: {{0, 'foobar'}, {6, 'baz'}}
"       % for each (1st-level) cell
  @     %   push that cell. Example: {{0, 'foobar'}}
  Y:    %   unpack (1st-level) cell, i.e. push its contents. Example: {0, 'foobar'}
  Y:    %   unpack (2nd-level) cell array: gives number and substring. Example: 0, 'foobar'
  tn:   %   duplicate substring and generate vector [1,2,...,n], where n is length of
        %   current substring (in the example: 6)
  b+    %   add input number that tells the position of that substring within the whole
        %   string (in the example: 0; so this gives [1,2,...,6] again)
  (     %   assign substring to the total string, overwriting if necessary. Note that
        %   MATL uses 1-indexing
        % end for each
        % implicit display

1
এই উত্তর একটি bute!
কনর ও'ব্রায়েন

3

DUP , 14 বাইট

[0[$;$][,1+]#]

Try it here.

নামবিহীন ল্যাম্বদা। ব্যবহার:

2"CG"0"PP"1"PC"[0[$;$][,1+]#]!

দ্রষ্টব্য: ডুপের আসলেই অ্যারে নেই, তাই আমি আশা করি এই ইনপুট ফর্ম্যাটটি ঠিক আছে।

ব্যাখ্যা

ঠিক আছে, DUP এর স্ট্রিং বোঝাপড়াটি ... আকর্ষণীয়। স্ট্রিংগুলি সংখ্যা ভেরিয়েবলগুলির একটি সিরিজ হিসাবে সংরক্ষণ করা হয়, যার প্রতিটি স্ট্রিং থেকে একটি চারকোড ধারণ করে। কিছুটা এইরকম2"CG"স্ট্যাকের দিকে 2 চাপ দেওয়ার কাজ করে, তারপরে 2 থেকে শুরু করে সূচক দিয়ে একটি স্ট্রিং তৈরি করে।

যেহেতু এই সূচকগুলি সত্যই পরিবর্তনশীল, সেগুলি ওভাররাইট করা যেতে পারে। ইনপুটটি আসলে এটি করছে: ওভাররাইডিং! এর Stepজন্য আরও ভাল ধারণা পেতে দোভাষীর সাইটে চাপ দেওয়ার চেষ্টা করুন । এর পরে, আমরা একটি অনিবদ্ধ স্ট্রিং পাই।

এই যেখানে আউটপুটিং আসে।

[            ] {lambda}
 0             {push 0 to the stack as accumulator}
  [   ][   ]#  {while loop}
   $;$         {duplicate, get var at TOS value, see if that var is defined}
        ,1+    {if so, output charcode at TOS and increment accumulator}

ডুপের পক্ষে হুর!
বিড়াল

2

পিএইচপি, 146 অক্ষর

দ্রষ্টব্য: ব্যবহারকারীর ইনপুটটি মূল্যায়ন করা সর্বদা একটি ভাল ধারণা।

Golfed

<?$a=[];$f=0;eval("\$b={$argv[1]};");foreach($b as$d){$f=$d[0];$e=str_split($d[1]);foreach($e as$c){$a[$f++]=$c;}}ksort($a);echo join('',$a)."\n";

Ungolfed

<?php
$array = array();
$p = 0;
eval("\$input = {$argv[1]};");
foreach($input as $item)
{
    $p = $item[0];
    $str = str_split($item[1]);
    foreach($str as $part)
    {
        $array[$p++] = $part;
    }
}
ksort($array);
echo join('', $array)."\n";
?>

আপনি দেখতে পাচ্ছেন যে আমি কেবল প্রতিটি চরকে নির্দিষ্ট কী দিয়ে একটি অ্যারেতে ইনপুট লিখছি এবং তারপরে এটি সমস্ত আউটপুট করব।

টেস্ট

php unslice.php '[[0, "foobar"], [6, "baz"]]' -> ফুবারবাজ

php unslice.php '[[2, "CG"], [0, "PP"], [1, "PC"]]' -> পিপিসি

php shorten.php unslice.php-> 107 অক্ষর দ্বারা সংক্ষিপ্ত লিপি। : ডি


" ব্যবহারকারীর ইনপুটটি মূল্যায়ন কখনই ভাল ধারণা নয় " কোড গল্ফ সবচেয়ে খারাপ আচরণ সম্পর্কে: ডি
বিড়াল

$a[$f]=$c;$f++;আমি পিএইচপি জানি না কিন্তু এটি হতে পারে না $a[$f++]=c;?
বিড়াল

আমি এটি চেষ্টা করব ..: ডি
টিমমিআরএস

@ কেট থেক্স্স সাথী, এটি 3 টি অক্ষর দ্বারা সংক্ষিপ্ত করে : ডি
টিম্মিআরএস

1

গুরুতরভাবে, 48 বাইট

,`i@;l(;)+(x@#@k`M;`i@X@M`MMu' *╗`iZi`M`i╜T╗`MX╜

সিরিয়াসলি হয় গম্ভীরভাবে স্ট্রিং ম্যানিপুলেশন এ খারাপ।

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

ব্যাখ্যা:

,`i@;l(;)+(x@#@k`M;`i@X@M`MMu' *╗`iZi`M`i╜T╗`MX╜
,                                                 get input
 `              `M;                               perform the first map and dupe
                   `     `MM                      perform the second map, get max element
                            u' *╗                 increment, make string of that many spaces, save in reg 0
                                 `   `M           third map
                                       `    `M    fourth map
                                              X╜  discard and push register 0

মানচিত্র 1:

i@;l(;)+(x@#@k
i@;l            flatten, swap, dupe string, get length
    (;)+(       make stack [start, end, str]
         x@#@k  push range(start, end), explode string, make list of stack

মানচিত্র 2:

i@X@M
i@X     flatten, swap, discard (discard the string)
   @M   swap, max (take maximum element from range)

মানচিত্র 3:

iZi  flatten, zip, flatten (make list of [index, char] pairs)

মানচিত্র 4:

i╜T╗  flatten, push reg 0, set element, push to reg 0

সংক্ষেপে, এই প্রোগ্রামটি nফাঁকা জায়গায় একটি স্ট্রিং তৈরি করে , যেখানে ইনপুটটির nউপর ভিত্তি করে স্ট্রিং সর্বনিম্ন দৈর্ঘ্য হতে পারে। এটি প্রতিটি স্লাইসে প্রতিটি অক্ষরের ফলাফলের স্ট্রিংয়ের সূচকটি নির্ধারণ করে এবং ফলাফলের স্ট্রিংয়ে অক্ষরটিকে সেই সূচকে অক্ষরে সেট করে।


1

পাইথন, 91 বাইট।

1 টি বাইট বিড়াল ধন্যবাদ সংরক্ষণ করা।

এটি কিছুটা দীর্ঘ। আমি আরও কিছুটা নিচে গল্ফ করব।

def f(x):r={j+i:q for(i,s)in x for j,q in enumerate(s)};return"".join(map(r.get,sorted(r)))


0

সিজেম, 26 বাইট

q~{~0c*\+}%{.{s\s|}}*e_0c-

এটি অনলাইন চেষ্টা করুন! । আকারে ইনপুট নেয় [["CG"2]["PP"0]["PC"1]]

ব্যাখ্যা:

q~           Read and eval input

{~0c*\+}%    Convert input strings into workable format
{      }%     Map onto each input
 ~            Evaluate
  0c          Null character
    *\+       Multiply by input number and concat to string

{.{s\s|}}*   Combine strings
{       }*    Fold array
 .{    }       Vectorize, apply block to corresponding elements of arrays
   s\s         Convert elements to strings
      |        Set Union

e_0c-        Remove null characters

0

আর, 181 বাইট

n=nchar;m=matrix(scan(,'raw'),ncol=2,byrow=T);w=rep('',max(n(m[,2])+(i<-strtoi(m[,1]))));for(v in 1:nrow(m)) w[seq(i[v]+1,l=n(m[v,2]))]=unlist(strsplit(m[v,2],''));cat("",w,sep="")

লাইন বিরতি সহ:

n=nchar
m=matrix(scan(,'raw'),ncol=2,byrow=T)
w=rep('',max(n(m[,2])+(i<-strtoi(m[,1]))))
for(v in 1:nrow(m)) w[seq(i[v]+1,l=n(m[v,2]))]=unlist(strsplit(m[v,2],''))
cat("",w,sep="")

আর গুইতে কাজ করে (একক লাইন এক, বা একাধিক-লাইন একের জন্য সোসারি) তবে আদর্শে নয়, উদাহরণস্বরূপ:

> n=nchar;m=matrix(scan(,'raw'),ncol=2,byrow=T);w=rep('',max(n(m[,2])+(i<-strtoi(m[,1]))));for(v in 1:nrow(m)) w[seq(i[v]+1,l=n(m[v,2]))]=unlist(strsplit(m[v,2],''));cat("",w,sep="")
1: 2 ob 5 rba 0 fooba 8 z
9: 
Read 8 items
foobarbaz

ইনপুট পদ্ধতিতে নোট:

অথবা কেবল সংখ্যা, একটি স্থান এবং তারপরে স্লাইস যুক্ত স্ট্রিং।

আমি ধরে নিই যে আমি এই ধরণের ইনপুট দিয়ে এই অংশটির সাথে সম্মতি দিই, এটি একাধিক লাইনে দেওয়া যেতে পারে, যতক্ষণ ইনপুট শেষ করার জন্য ফাঁকা লাইন থাকবে না ততক্ষণ এর কোনও প্রভাব নেই।

আমি মনে করি +1 মুছে ফেলা এবং 1 ভিত্তিক সূচক ব্যবহার করে 2 টি অক্ষর বাঁচানো যেতে পারে তবে আমি চ্যালেঞ্জ ইনপুট দিয়ে শুরু করেছি।


0

সি, 110 বাইট

c,i,j;char s[99];main(){while(~scanf("%i ",&i))for(;(c=getchar())>10;s[i++]=c);for(;s[j]>10;putchar(s[j++]));}

এই প্রোগ্রামটি প্রতিটি ইনপুটের এক লাইনে তার সূচকের পরে স্লাইস নেয়।

Ungolfed:

c,i,j;char s[99];

main(){
    while(~scanf("%i ",&i))
        for(;(c=getchar())>10;s[i++]=c);
    for(;s[j]>10;putchar(s[j++]));
}

আইডোন.কম এ পরীক্ষা করুন


0

লুয়া, 113 বাইট

z=loadstring("return "..io.read())()table.sort(z,function(a,b)return a[1]<b[1]end)for a=1,#z do print(z[a][2])end

এটি সম্ভবত আমি লেখা আরও কিছু সুরক্ষিত কোড of ধারণাটি সহজ। ব্যবহারকারী এমনভাবে বিন্যাসিত একটি অ্যারে প্রবেশ করবে: {{1, "1"}, {3, "3"}, {2, "2"}}এবং তারপরে সারণিটি প্রথম সূচী অনুসারে বাছাই করা হবে এবং দ্বিতীয় সূচি মুদ্রিত হবে।

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