एक स्ट्रिंग खोलना


29

एक स्ट्रिंग के स्लाइस की सूची के इनपुट को देखते हुए, मूल स्ट्रिंग को आउटपुट करता है।

प्रत्येक स्लाइस को लंबाई 2 की सूची के रूप में दिया जाएगा, जिसमें स्लाइस की शुरुआत स्थिति (एक पूर्णांक position0) और स्लाइस स्वयं होगी। यदि आपकी भाषा मनमाने प्रकार के सरणियों का समर्थन नहीं करती है, तो आप इसे एक संरचना या समान के रूप में भी ले सकते हैं, या बस एक स्ट्रिंग जिसमें संख्या, एक स्थान और फिर टुकड़ा हो सकता है।

प्रत्येक स्लाइस के दो तत्वों का क्रम आपके ऊपर है। इसके अलावा, यदि आप स्लाइस के प्रतिनिधित्व का उपयोग लंबाई -2 सरणी के रूप में करना चाहते हैं, तो आप इनपुट को 2-आयामी सरणी या एकल फ्लैट सरणी के रूप में ले सकते हैं। अंत में, पूर्णांक का प्रतिनिधित्व करने वाला स्थान या तो शून्य-अनुक्रमित या एक-अनुक्रमित हो सकता है (यहां सभी उदाहरण शून्य-अनुक्रमित हैं)।

दिए गए उच्चतम स्थिति तक पूरे स्ट्रिंग को निर्धारित करने के लिए इनपुट हमेशा पर्याप्त होगा। यही है, कोई "छेद" या "अंतराल" नहीं होगा। इसलिए, आउटपुट में कोई अतिरिक्त अनुगामी या अग्रणी वर्ण (विशिष्ट वैकल्पिक अनुगामी न्यूलाइन के अलावा) नहीं होना चाहिए। इनपुट हमेशा सुसंगत होगा, और कोई भी स्लाइस एक दूसरे के साथ संघर्ष नहीं करेगा।

चूंकि यह , बाइट्स में सबसे छोटा कोड जीत जाएगा।

परीक्षण के मामलों:

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

क्या स्ट्रिंग में कौन से वर्ण होंगे, इस पर कोई प्रतिबंध है?
GamrCorps

@GamrCorps नहीं, कोई विशेष प्रतिबंध नहीं।
दरवाज़े

1
क्या आउटपुट स्ट्रिंग की लंबाई पर कोई प्रतिबंध है?
Mego

@ मेमोरी / मेमोरी द्वारा लगाई गई प्राकृतिक सीमा से कोई भी अलग नहीं है।
दरवाज़े

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का उपयोग करके एक स्ट्रिंग के लिए [2::5]


Whats 2 :: 5 ट्रिक? यह एक तार से कैसे जुड़ता है? क्या हर 5 वां सूचकांक 2 से शुरू नहीं होता है?
रॉबर्ट फ्रेजर

देखें @RobertFraser यहाँ
23

8

पर्ल, २५

के लिए +2 जोड़ा गया -lp

STDIN से इनपुट प्राप्त करें, जैसे

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

(^ D या ^ Z के साथ बंद करें या जो भी आपके सिस्टम पर STDIN बंद करता है)

slices.pl:

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

क्या v0आपको दो बाइट्स बचाने के बजाय अशक्त बाइट नहीं होगी (क्योंकि आप इससे पहले भी जगह छोड़ सकते हैं x)? संपादित करें: Hm, नहीं, जब मैंने इसकी कोशिश की, तो मुझे Can't locate object method "x" via package "2"किसी कारण से (या जो भी संख्या मेरी पहली पंक्ति में है) मिल गई।
msh210

1
केवल सी वेरिएबल जैसे नाम ही अनधिकृत शाब्दिक हो सकते हैं। तो v0 सबसे छोटा तरीका है \ 0 पाने के लिए (या अतिरिक्त स्थान के कारण इस मामले में एक टाई के लिए उद्धरणों के बीच a \ 0)
टन हास्पेल

8

जावास्क्रिप्ट (ईएस 6), 61 बाइट्स

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

संपादित करें: सहेजे गए 4 बाइट @ edc65 के लिए धन्यवाद।


a => a.map (([o, s]) => [... s] .map (c => r [o ++] = c), r = []] && r.join`` 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

MATL , 15 बाइट्स

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

भाषा / संकलक के वर्तमान संस्करण (13.0.0) के साथ काम करता है ।

इनपुट घुंघराले ब्रेसिज़ और सिंगल कोट्स के साथ है। (MATLAB / MATL में घुंघराले ब्रेस सेल सरणियों को परिभाषित करते हैं , जो ऐसी सूचियाँ हैं जिनमें मनमानी, संभवतः विभिन्न प्रकार की सामग्री हो सकती है।) परीक्षण के मामले इस प्रकार हैं:

{{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
यह एक जवाब है!
कॉनर ओ'ब्रायन

3

डीयूपी , 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}

DUP के लिए हुर्रे!
बिल्ली

2

PHP, 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 वर्णों से लघु लिपि। : डी


" यूजर इनपुट का मूल्यांकन करना कभी भी एक अच्छा विचार नहीं है " कोड गोल्फ सबसे खराब व्यवहारों के बारे में है: D
बिल्ली

$a[$f]=$c;$f++;मैं PHP नहीं जानता, लेकिन यह नहीं हो सकता है $a[$f++]=c;?
बिल्ली

बीमार इसे आज़माएँ ..: D
timmyRS

@cat Thx दोस्त, इसे 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++]));
}

Ideone.com पर टेस्ट करें


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

यह शायद मेरे द्वारा लिखे गए अधिक सुरक्षित कोड में से कुछ है। विचार सरल है। उपयोगकर्ता इस तरह से स्वरूपित एक सरणी में प्रवेश करेगा: {{1, "1"}, {3, "3"}, {2, "2"}}और फिर तालिका को पहले सूचकांक द्वारा क्रमबद्ध किया जाएगा और दूसरा सूचकांक मुद्रित किया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.