स्प्लिट स्ट्रिंग को n टुकड़ों में (या लंबाई n के टुकड़ों)


11

चुनौती

इस चुनौती में आपको इनपुट के क्रम के आधार पर दो अलग-अलग (लेकिन संबंधित) कार्य करने होंगे।
आपका प्रोग्राम इनपुट और वसीयत के रूप में एक स्ट्रिंग sऔर पूर्णांक प्राप्त nकरेगा

  • विभाजित sलंबाई के टुकड़ों में nयदि sपहले आता है। यदि आवश्यक हो तो अंतिम तत्व कम होगा।
  • बराबर लंबाई के टुकड़ों sमें विभाजित nअगर nपहले आता है। यदि पहला तत्व len(s)एक से अधिक नहीं है, nतो len(s) mod nएक लंबा हो जाएगा।

आप केवल उन 2 इनपुट को ले सकते हैं। sकभी भी केवल अंक नहीं होंगे।

टिप्पणियाँ

  • आप रिवर्स मैपिंग का उपयोग कर सकते हैं। यदि आप ऐसा करते हैं तो अपने उत्तर में इस पर ध्यान दें।
  • sकेवल मुद्रण योग्य ASCII वर्ण (कोई नया अंक नहीं) होगा।
  • आप किसी भी ऐसे भवन का उपयोग नहीं कर सकते हैं जो उन दोनों कार्यों को सीधे हल करता है। अन्य सभी निर्माणों की अनुमति है।
  • आपको दोनों तर्कों को एक ही स्रोत से लेना होगा।
  • आप एक आदेशित सूची या किसी अन्य प्रारूप में तर्क ले सकते हैं जो स्पष्ट रूप से उनके आदेश को स्पष्ट रूप से इंगित करता है जब तक कि यह अस्पष्ट है।
  • आप इनपुट को एक स्ट्रिंग / स्ट्रीम के रूप में ले सकते हैं और एक चरित्र का उपयोग कर सकते हैं जो उन्हें अलग करने के लिए एक वैध इनपुट (एक नलबीट की तरह) नहीं है।
  • nहमेशा लंबाई के बराबर या sशून्य से कम या अधिक होगी।
  • जब तक यह स्पष्ट रूप से विशेष टुकड़ों और उनके आदेश को इंगित करता है तब तक आप परिणामस्वरूप सूची को किसी भी resonable प्रारूप में आउटपुट कर सकते हैं।

उदाहरण

इनपुट: programming, 3
अंतिम तत्व में केवल 2 वर्ण होते हैं, क्योंकि 11 3. से विभाज्य नहीं है।
आउटपुट: ["pro", "gra", "mmi", "ng"]

इनपुट: 3, programming
11 3 की एक बहु नहीं है, इसलिए पहले 2 तत्व एक हो जाएंगे:
आउटपुट: ["prog", "ramm", "ing"]

नियम

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

इस पाइथ प्रोग्राम के साथ परीक्षण के मामले उत्पन्न हुए ( बिल्डिन का उपयोग करता है, इसलिए कोई मान्य उत्तर नहीं)। उस का आधार संस्करण प्रदान करने के लिए @FryAmTheEggman को धन्यवाद!

3, हेलोवर्ल्ड -> ['नर्क', 'ओवो', 'रल्ड']
helloworld, 3 -> ['hel', 'low', 'orl', 'd']
1, प्रोग्रामिंग -> ['प्रोग्रामिंग']
प्रोग्रामिंग, 1 -> ['p', 'r', 'o', 'g', 'r', 'a', 'm', 'm', 'i', 'n', 'g']
8, प्रोग्रामिंग -> ['pr', 'og', 'ra', 'm', 'm', 'i', 'n', 'g']
प्रोग्रामिंग, 8 -> ['प्रोग्राम', 'आईएनजी']
9, कोड गोल्फ -> ['सी', 'ओ', 'डी', 'ई', '', 'जी', 'ओ', 'एल', 'एफ']
कोड गोल्फ, 9 -> ['कोड गोल्फ']
4, 133tspeak -> ['133', 'ts', 'pe', 'ak']
133tspeak, 4 -> ['133t', 'spea', 'k']

हैप्पी कोडिंग!


आप उन दो कार्यों को हल करने वाले किसी भी निर्माण का उपयोग नहीं कर सकते हैं। क्या इसमें अन्य बिल्ट-इन शामिल हैं, जैसे कि स्ट्रिंग से प्रत्येक एन-वें चरित्र प्राप्त होता है या घटनाओं में विभाजित होता है ?
डेनिस

@ डेनिस यह सिर्फ उन बिल्डरों पर शासन करने के लिए था जो इसे सीधे हल करते हैं। मैंने स्पष्ट किया।
डेनकर

यदि हमारी भाषा सरणियों का समर्थन नहीं करती है, तो हमें आउटपुट कैसे करना चाहिए? क्या स्ट्रिंग के प्रत्येक परिणाम के बीच एक नई रेखा स्वीकार्य होगी?
कॉनर ओ'ब्रायन

इसके अलावा, उन भाषाओं के लिए जहां इनपुट अस्पष्ट संख्याओं की एक सरणी है, प्रक्रिया क्या होनी चाहिए?
कॉनर ओ'ब्रायन 3

@ C @O'Bʀɪᴇɴ नहीं हो सकता। s में कभी भी केवल अंक नहीं होंगे । इसके अलावा, आप परिणामस्वरूप सूची को किसी भी प्रतिध्वनिनीय प्रारूप में तब तक आउटपुट कर सकते हैं जब तक यह स्पष्ट रूप से विशेष टुकड़ों और उनके आदेश को इंगित करता है जिसमें बहुस्तरीय आउटपुट शामिल है।
डेनकर

जवाबों:


3

MATL, 46 26 21 27 29 42 बाइट्स

jtU?jtbUe!tn2Gn>?0t(]tgbw(}ie]!2t$X{Oc''Zt

इसे ऑनलाइन आज़माएं! (भाषा के नवीनतम संस्करण के साथ काम करने के लिए थोड़ा अपडेट किया गया)

व्याख्या

j           % Explicitly grab the first input as a string
t           % Duplicate
U           % Attempt to convert it to a number
?           % If the conversion to a number was successful
    j       % Explicitly grab the second input as a string
    t       % Duplicate the value
    b       % Bubble-up the first element in the stack
    U       % Convert to a number from a string
    e       % Reshape the string into a nGroup x nPerGroup matrix
    !       % Take the transpose
    t       % Duplicate the result
    n       % Number of characters in the repmat result
    2Gn     % Number of characters in the string
    >?      % If chars in repmat > chars in string
        O   % Zero
        t   % Duplicate 
        (   % Assign the last element to a null character (bug in MATL)
    ]       % End if statement
    t       % Duplicate this matrix
    g       % Convert to a logical matrix
    b       % Bubble-up the original string
    w       % Flip the top two elements
    (       % Assign the non-empty characters to the chars from the input string
}           % Else the string comes first
    i       % Explicitly grab the second input (the number)
    e       % Reshape the characters into an nPerGroup x nGroup 2D array
]           % End of if statement
!           % Take the transpose so it reads left-to-right
2           % Number literal
t           % Duplicate
$X{         % Call num2cell to convert to a cell array
Oc          % Null character
''          % Empty string
Zt          % Replace null chars with empty strings
            % Implicit display of stack contents

कुछ सूची तत्वों के अंत में दिखाई देने वाले वे क्या हैं? वे इनपुट का हिस्सा नहीं हैं और इसलिए आउटपुट का हिस्सा भी नहीं होना चाहिए।
डेनकर

eनिषिद्ध बिलिन नहीं है?
FliiFe

हो सकता है कि दो शाखाओं XUZN?...द्वारा प्रतिस्थापित U?...और स्वैप करें if। इसके अलावा, आप की जरूरत नहीं है3$
लुइस मेंडो

@DenkerAffe इसके बारे में क्षमा करें। अब तय होना चाहिए।
स्वेवर

@FliiFe प्रारंभिक पोस्ट पर टिप्पणियों के आधार पर eसीधे समस्या का समाधान नहीं करता है, इसलिए मैं इसे निषिद्ध नहीं मानता, नहीं।
स्वेअर

4

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

(s,t)=>+t?[...Array(-~(~-s.length/+t))].map((_,i)=>s.substr(i*t,t)):[...Array(s=+s)].map(_=>t.slice(p,p-=~((t.length-p-1)/s--)),p=0)

यह शायद निराशाजनक रूप से अति-इंजीनियर है।


खैर, मेरा (अब मृतक) समाधान मोटे तौर पर अंडर-इंजीनियर था। +1 आपके लिए
edc65

4

जावास्क्रिप्ट (फ़ायरफ़ॉक्स), 88 87 बाइट्स

a=>b=>(s=+b?a:b,i=x=0,l=s.length,[for(c of s)if(r=s.slice(x,x+=+b||l/a+(i++<l%a)|0))r])

इसे (...)("programming")(3)फ़ायरफ़ॉक्स 30+ का उपयोग करके कॉल करें ।


2

रूबी, 119 बाइट्स

->x,y{r=[t=0];x.to_s==x ?(r.push x[t...t+=y]while x[t]):x.times{r.push y[t...t+=y.size/x+(r[y.size%x]? 0:1)]};r[1..-1]}

और मैं 2 बाइट्स से पहला स्थान लेता हूं ...


रूबी में रेगेक्स ऑब्जेक्ट्स में मानों को इंजेक्ट किया जा सकता है उसी तरह से तार कर सकते हैं, इसलिए x.scan(/.{,#{y}})पहले मामले में स्ट्रिंग्स को विभाजित करने के लिए भी काम करता है। या कि एक बिल्डिन के रूप में गिनती करता है?
वैल्यू इंक

2

AWK, 121 130 128 122 बाइट्स

$1~/^[0-9]+$/{s=1}{a=$(s+1)
b=s?$1:$2
$0=""
for(j=-b;j<=c=length(a);)$0=$0 substr(a,j+=b+s,b+(s=s&&j<c%b*(b+1)?1:0))" "}1

एकमात्र समस्या यह है कि यदि पहली प्रविष्टि एक स्ट्रिंग है जो एक संख्यात्मक मान से शुरू होती है। यह AWKस्ट्रिंग को उस संख्या के रूप में और दूसरी प्रविष्टि को स्ट्रिंग के रूप में देखने का कारण होगा ।

ठीक है ... सांख्यिक समस्या ठीक की, लेकिन इसमें 9 बाइट जोड़े गए :(।

युगल बाइट को बचाने के लिए थोड़ा सा काम किया।

लगभग मूल लंबाई पर वापस। :)


ठीक है, @DenkerAffe, ने इसे सामान्य रूप से काम करने के लिए तय किया और केवल (अंततः) 1 बाइट जोड़ा।
रॉबर्ट बेन्सन

1

हास्केल, 131 बाइट्स

import Data.Lists
q(d,m)=splitPlaces$(d+1<$[1..m])++[d,d..]
a#b|all(`elem`['0'..'9'])a=q(divMod(length b)$read a)b|1<2=q(read b,0)a

उपयोग उदाहरण:

*Main> "8" # "programming"
["pr","og","ra","m","m","i","n","g"]
*Main> "programming" # "8"
["programm","ing"]

यह कैसे काम करता है: मुख्य कार्य सहायक फ़ंक्शन द्वारा किया जाता है qजो संख्याओं की एक जोड़ी (d,m)और एक स्ट्रिंग लेता है s। यह पहली mबार d+1अनंत कई d(जैसे (1,3)-> [2,2,2,1,1,1,1,1,...]) के बाद की सूची बनाता है । यह तब सूची द्वारा दी गई लंबाई के टुकड़ों में splitPlacesविभाजित करने के लिए उपयोग करता है ssplitPlacesअगर sतत्वों से बाहर निकलता है, तो एक अनंत सूची ठीक है।

मुख्य फ़ंक्शन यह #जांचता है कि कौन सा पैरामीटर संख्या n/ स्ट्रिंग है strऔर या qतो प्लस के साथ कॉल करता है । (div (length str) n, mod (length str) n)(n, 0)str


0

C # (LINQPAD) - 335 बाइट्स

var y=Util.ReadLine().Split(',');int x,j=0;var t=int.TryParse(y[0].Trim(),out x);x=x==0?int.Parse(y[1].Trim()):x;var i=t?y[1].Trim():y[0];var z="";if(!t){while(i.Substring(j).Length>x){z+=i.Substring(j).Length>x?i.Substring(j,x)+", ":"";j+=x;}z+=i.Substring(j);}else z=string.Join(", ",i.Split(x).Select(s=>string.Concat(s)));z.Dump();

इनपुट रीडिंग पार्ट ने थोड़ी जगह ले ली। सबसे लंबे उत्तर के विजेता।

उपयोग # 1:

$ 3, helloworld

>> hell, owo, rld

उपयोग # 2:

$ helloworld, 3

>>hel, low, orl, d


0

पायथ, 181 बाइट्स

आइए बाइट्स में सबसे लंबे कोड का नाटक करते हैं \ O /

DyGK@G0J:@G1"."1=YJV%lJKW<l@YN.EclJK=YXYN+@YN@YhN=Y.DYhN)FNr%lJK/-lJ%lJK/-lJ%lJKKW<l@YNsclJK=YXYN+@YN@YhN=Y.DYhN))RY)DPG=K@G1=J:@G0"."1=YJV/lJKW<l@YNK=YXYN+@YN@YhN=Y.DYhN))RY).xyQPQ

यहाँ यह कोशिश करो! (ऑनलाइन दुभाषिया एक बग है, यह इनपुट प्रदर्शित करता है, जबकि यह नहीं होना चाहिए)

यहाँ टर्मिनल से आउटपुट है:

» pyth split.pyth <<<'["helloworld", 3]' 
['hel', 'low', 'orl', 'd']
» pyth split.pyth <<<'[3, "Helloworld"]'
['Hell', 'owo', 'rld']

गंभीरता से, मैं नए दृष्टिकोण के लिए खुला हूं। मैं अजगर के लिए नया हूं, इसलिए मैं शायद कुछ शॉर्टहैंड से चूक गया।

मेरा मतलब है, मुझे लगता है कि मेरा उत्तर उस बिंदु से अलग है जो जावास्क्रिप्ट उत्तर से अधिक लंबा है ...


क्या आप एक नमूना इनपुट और आउटपुट प्रदान कर सकते हैं?
लीके नन

हेडर के तहत आधिकारिक समाधान पर ध्यान दें testcases। टेस्टेस पाइथ द्वारा उत्पन्न होते हैं। इसका समाधान है .xcsJKcJsK, दो तर्क कहाँ Jऔर Kहैं।
लीके नन

@ केनीलाऊ I ने ऑनलाइन pyth दुभाषिया के लिए एक लिंक जोड़ा। अजीब बात है, यह इनपुट को आउटपुट करता है जबकि मुझे यकीन है कि यह कल नहीं था ... इसे ठीक करने की कोशिश करेंगे।
फ्लिफी

मुद्रण को दबाने के लिए रिक्त स्थान का उपयोग करें
Leaky Nun

@ केनीलाऊ स्थान कहाँ?
FliiFe

0

PHP, 114 बाइट्स

[$t,$n,$p]=$argv;for(@+$p?$s=$n:$f=$n*($p=strlen($s=$p)/$n)%$n;$t;)echo$t=substr($s,$a+=$e,$e=$p+($i++<$f)|0),"
";
  • स्ट्रिंग को अंकों से शुरू नहीं करना चाहिए।
    ( ठीक करने के +@$pसाथ बदलें is_numeric($p)।)
  • आउटपुट में एक चंक "0" नहीं होना चाहिए।
    ( फिक्स करने से पहले किसी भी ASCII के ~लिए प्रिंट करने योग्य ASCII के लिए सम्मिलित करें ।)a&$t;
  • इसे ऑनलाइन चलाएं -nrया इसके लिए प्रयास करें

0

पॉवरशेल , 122 118 बाइट्स

param($a,$b)if($a-is[int]){$a,$b=$b,((($l=$b|% Le*)-($c=$l%$a))/$a)}$a-split("(..{$b})"*$c+"(.{0,$b})"*$a.Length)-ne''

इसे ऑनलाइन आज़माएं!

कम गोल्फ वाला:

param($a,$b)
if($a-is[int]){
    $length=$b|% Length
    $c=$length%$a
    $a,$b=$b,(($length-$c)/$a)  # recalc length and swap
}
$pattern="(..{$b})"*$c+"(.{0,$b})"*$a.Length
$parts=$a -split $pattern       # pattern like '(..{3})(..{3})(.{0,3})(.{0,3})(.{0,3})'
$parts -ne ''                   # output not empty parts
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.