स्ट्रिंग की लंबाई लागू करना


51

चुनौती:

sपात्रों पर एक स्ट्रिंग को देखते हुए a- z, A- Z, 0- 9, sखुद की लंबाई को जोड़ते हैं, कुल लंबाई के हिस्से के रूप में लंबाई में अतिरिक्त चरित्र (ओं) की गिनती करते हैं s

इनपुट:

बस मनमानी लंबाई की एक स्ट्रिंग (खाली हो सकती है)।

आउटपुट:

एक ही स्ट्रिंग, लेकिन इसकी लंबाई के साथ अंत तक संलग्न है। लंबाई का प्रतिनिधित्व करने वाले पात्रों को भी लंबाई के हिस्से के रूप में गिना जाना चाहिए। ऐसे मामलों में जहां अपील करने के लिए कई वैध लंबाई हैं, सबसे छोटा एक संभव चुनें (उदाहरण के लिए परीक्षण मामलों को देखें)।

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

INPUT     -> OUTPUT       // Comment
aaa       -> aaa4
          -> 1            // Empty string
aaaaaaaa  -> aaaaaaaa9    // aaaaaaaa10 would also normally be valid, but violates using the smallest number rule mentioned above
aaaaaaaaa -> aaaaaaaaa11
a1        -> a13          // Input can contain numbers at the end of the string, you do not have to handle the fact that it looks like 13 rather than 3.

Longer test case(s):

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa101
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa102

नियम:

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है। मानक खामियों को मना किया जाता है। सबमिशन एक संपूर्ण कार्यक्रम या एक फ़ंक्शन हो सकता है, और आप या तो परिणाम को प्रिंट करने के लिए प्रिंट कर सकते हैं या इसे फ़ंक्शन से एक चर के रूप में वापस कर सकते हैं।


इनपुट में कौन से वर्ण दिखाई दे सकते हैं?
मार्टिन एंडर

@MartinEnder अल्फ़ान्यूमेरिक वर्ण केवल 0-9 और AZ / az। तो हां, आपके पास अंत में संख्याओं के साथ तार हो सकते हैं। मैं एक के लिए एक परीक्षण मामला जोड़ूंगा।
योदल

जवाबों:



18

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

f=(s,n=0)=>(s+n)[n]?f(s,n+1):s+n

यह काम किस प्रकार करता है

f = (s, n = 0) =>   // given a string 's' and starting with n = 0:
  (s + n)[n] ?      // if the Nth character of (s + n) exists:
    f(s, n + 1)     //   try again with n + 1
  :                 // else
    s + n           //   return s + n

इसके साथ शुरू करते हुए N=0, हम मूल इनपुट स्ट्रिंग और दशमलव प्रतिनिधित्व के संयोजन से बने स्ट्रिंग के Nth चरित्र (0-आधारित) का परीक्षण करते हैं NNजब तक यह चरित्र मौजूद नहीं होता तब तक हम वृद्धि करते हैं।

उदाहरण:

N =  0 : abcdefghi0
         ^
N =  1 : abcdefghi1
          ^
N =  2 : abcdefghi2
           ^
...
N =  8 : abcdefghi8
                 ^
N =  9 : abcdefghi9
                  ^
N = 10 : abcdefghi10
                   ^
N = 11 : abcdefghi11    -> success
                    ^

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


वाह, JS इसके लिए पायथन की तुलना में बहुत अधिक तनावपूर्ण है।
mbomb007 22

@Arnauld मैं इस के आसपास अपना सिर नहीं प्राप्त कर सकता। क्या आप यह समझाते हैं कि यह कोड कैसे काम करता है?
गौतम

12

LaTeX, 108/171

\newcounter{c}\def\s#1#2]{\stepcounter{c}\def\t{#2}\ifx\empty\t\arabic{c}\else#1\s#2]\fi}\def\q[#1]{\s#10]}

\q[] //1


वाह, मुझे नहीं लगता कि मैंने पहले कभी पीपीसीजी पर लेटेक्स उत्तर देखा है।
पजाकोंक

5

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

f=(s,t=s,u=s+t.length)=>t==u?t:f(s,u)
<input oninput=o.textContent=f(this.value)><pre id=o>


जब मैंने क्लिक किया तो मुझे Run Code Snippetएक त्रुटि संदेश देखने को मिला। मुझे जावास्क्रिप्ट का कोई ज्ञान नहीं है - मैं सिर्फ कोशिश कर रहा था
प्रसन्ना

@Prasanna फ़ायरफ़ॉक्स में मेरे लिए काम करता है; आप किस ब्राउज़र का उपयोग कर रहे हैं?
नील

@Prasanna नवीनतम Google Chrome पर काम करती है। क्या आप सुनिश्चित हैं कि आप IE11 या पुराने का उपयोग नहीं कर रहे हैं, ओपेरा या कुछ भी है जो ES6 का समर्थन नहीं करता है?
इस्माइल मिगुएल

मैं एक पुराने अच्छे क्रोम ( Version 48.0.2564.97) का उपयोग कर रहा हूं । मैं IE के साथ भी यही कोशिश करूंगा। मेरे क्रोम - कार्यालय सुरक्षा मुद्दों को अद्यतन नहीं कर सकते हैं
प्रसन्ना

5

सी, 67 65 61 बाइट्स

x;f(*v){printf("%d",(int)log10(x=-~printf(v))*-~(x%10>8)+x);}

Wandbox


1
ओह, हाँ, मुझे प्रिंट करना चाहिए ... वैसे भी, छोटे सी समाधान होने पर बधाई: डी +1
बिल्ली 16

4

लुआ 5.2, 32 बाइट्स

a=arg[1]print(a..#a+#(''..#a+1))

जहां चर एक इनपुट स्ट्रिंग है।


3

Pyke, 8 बाइट्स ( पुराना संस्करण )

.f+liq)+

स्पष्टीकरण:

.f    )  -  first where (i++)
  +      -    input + i
   l     -    len(^)
    iq   -   ^ == i
       + - input + ^

यहाँ कोशिश करो! (नया संस्करण, 9 बाइट्स)


यह हमेशा मुझे भ्रमित करता है कि चेतावनी या अन्य संदेशों के बीच वास्तविक उत्पादन कितना दफन है :-)
लुइस मेंडू

2
मुझे वास्तव में कॉपी लिंक में वेब बग को ठीक करने के लिए चारों ओर जाना चाहिए जो स्वचालित रूप से चेतावनी स्विच को निष्क्रिय कर देता है
ब्लू

3

पायथन 2, 54 48 46 बाइट्स

सरल उपाय। पुनरावृत्ति कम होने से समाप्त हो गई।

f=lambda s,n=0:f(s,n+1)if(s+`n`)[n:]else s+`n`

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


1
मुझे लगता है कि आप कर सकते हैं (s+`n`)[n:]के लिए n<len(s+`n`)
xnor

3

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

f s=[l|i<-[0..],l<-[s++show i],length l==i]!!0

प्रयोग उदाहरण: f "aaaaaaaa"-> "aaaaaaaa9"

बस 0 से शुरू होने वाले सभी नंबरों को आज़माएं और पहले जो फिट बैठता है उसे लें।


3

मैथेमेटिका, 57 बाइट्स

#<>ToString[(a=Length@#)+(i=IntegerLength)[a+i@a]~Max~1]&

इनपुट के रूप में वर्णों की एक सरणी लेने और एक स्ट्रिंग लौटाने का कार्य करें। इस तथ्य का उपयोग करता है कि यदि aइनपुट की लंबाई है, तो इनपुट को जोड़ने aकी संख्या प्लस ( a+ की लंबाई a) अंकों की संख्या है , न कि सिर्फ aअंकों की संख्या a। दुर्भाग्य से यह ~Max~1विशेष मामले के बिना खाली स्ट्रिंग इनपुट के लिए सही जवाब नहीं देगा ।


3

ब्रेकीलॉग , 13 बाइट्स

l<L$@:?rc.lL,

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

व्याख्या

मूल रूप से समस्या का वर्णन। यह Lइनपुट की लंबाई से बड़े हर मूल्य की कोशिश करेगा जब तक कि यह एक के लिए नहीं मिल जाता है, जिसके लिए इनपुट के लिए सहमति होने पर, उस सहमति की लंबाई होती है।

l<L              length(Input) < L
  L$@            Convert L to a string
     :?rc.       The Output is the concatenation of the Input with L as string
         .lL,    The length of the Output is L itself

3

ब्रेनफक, 258 बाइट्स

,>+<----------[++++++++++>+[>+<-],----------]<[<]>[.>]>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<+>+>[-]]<[<[->-<]++++++[->++++++++<]>.[-]]<<++++++[-<++++++++>]<.[-]<<[-<+>]

इनपुट को एक लाइनफीड (LF) द्वारा समाप्त किया जाना चाहिए। केवल 256 (LF सहित) से कम लंबाई वाले इनपुट के लिए काम करता है।

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

व्याख्या

# read first char and add one to cell #1
# the cell after the input will contain the length
,>+<
# subtract 10 to check for LF
----------
# while the input is not 10 (LF)
[
# restore the input to its original value
++++++++++
# add one to the length
>+
# cut and paste the length to the next cell, then read the input
[>+<-],
# subtract 10 to check for LF
----------
]
# for input abc, the tape here would be: a b c *0* 4
# rewind to the beginning of the input
<[<]>
# print the input string
[.>]>
# convert the length to ascii chars and output them
>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>>[-]>>>++++++++++<[->-[>+>>]>[+[-
<+>]>+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<+>+>[-]]<[<[->-<]++++++[->++++++++
<]>.[-]]<<++++++[-<++++++++>]<.[-]<<[-<+>]

नोट: मैंने इस एसओ उत्तर से कोड का उपयोग लंबाई को एससीआई आउटपुट में बदलने के लिए किया; मुझे उम्मीद है कि पीपीसीजी पर यह स्वीकार्य है। यह मेरा पहला कोडगॉल्फ सबमिशन है, और मेरा दूसरा BF प्रोग्राम है। प्रतिक्रिया का स्वागत किया है।


1
यह तब मान्य नहीं है, यह सभी परीक्षण मामलों को पारित करना होगा
बिल्ली

तो 999 तक की लंबाई का समर्थन करना पर्याप्त होगा?
फॉरन विंटियर

युक्ति कहती है "मनमाना लंबाई" जिसका अर्थ है "जब तक आपकी भाषा संभाल या स्मृति से बाहर निकलने में सक्षम है"
बिल्ली

आपके द्वारा उपयोग किए जा रहे ब्रेनफैक दुभाषिया में 8-बिट कोशिकाएं हैं, इसलिए जब तक आपका एल्गोरिथ्म मनमाना लंबाई के तारों के लिए काम करता है, तब तक यह ठीक होना चाहिए जब यह लंबाई 256 या उससे अधिक के तार के लिए विफल हो । एक बार स्ट्रिंग्स बहुत लंबा हो जाने पर सी और जावास्क्रिप्ट सबमिशन भी असफल हो जाएंगे।
डेनिस

धन्यवाद डेनिस, मैं अपने जमा को तदनुसार संशोधित करूंगा
फोर्सेंट विंटियर


2

रूबी, 62 58 56 बाइट्स

s=gets.chomp;p s+"#{(s+"#{(s+"#{s.size}").size}").size}"

में परीक्षण किया गया irb

ऐसा करने के लिए शायद एक बेहतर तरीका है, लेकिन यह पहली चीज थी जिसके साथ मैं आया था। गोल्फ में किसी भी मदद की सराहना की जाएगी।

संपादित करें: मुझे एहसास हुआ कि कोष्ठक का मेरा उपयोग अत्यधिक था।


आप केवल lएक ही स्थान पर उपयोग करते हैं । यदि आप इनलाइन करते हैं, तो आप 3 बाइट्स बचाएंगे l=;। लेकिन आपका समाधान अभी भी मेरी तुलना में अधिक लंबा होगा;)
डिप्रैडडैनियल

2

पर्ल 6 ,  46  35 बाइट्स

{$_~(.chars,*.chars+.chars...{$^a==$^b})[*-1]}
{$_~(.chars,*.chars+.chars...*)[2]}

कोशिश करो

विस्तारित:

{   # bare block lambda with implicit parameter 「$_」

  $_  # the input

  ~   # concatenated with

  (  # sequence generator

    .chars,  # the number of chars in 「$_」 (seed the generator)


    *\      # Whatever lambda input (represents previous value)
    .chars  # number of chars in that
    +       # plus
    .chars  # the number of chars in 「$_」


    ...     # keep doing that until

    *       # indefinitely

  )[2] # get the value at index 2 of the sequence
}


2

पायथन, 39 बाइट्स

lambda a:eval('a+str(len('*3+'a))))))')

लंबा रूप:

lambda a:a+str(len(a+str(len(a+str(len(a))))))

अजगर 2 (41 बाइट) में समान रूप से:

x=a=input();exec"x=a+`len(x)`;"*3;print x

xइनपुट स्ट्रिंग के रूप में शुरू करके a, x -> a + str(len(x))तीन बार परिवर्तन लागू करता है । मुझे अभी भी स्पष्ट नहीं है कि तीन बिंदुओं को हमेशा निर्धारित बिंदु तक पहुंचने की आवश्यकता क्यों है।


3 बार क्यों? पाठ की लंबाई को जोड़ने के लिए पहला, संख्या को शामिल करने के लिए लंबाई को समायोजित करने के लिए दूसरा, तीसरा कि समायोजन में एक अतिरिक्त अंक जोड़ा गया।
टॉम विनर


2

बैश, 47 बाइट्स

 for((n=-1;${#s} != $n;));{ s=$1$[++n];};echo $s

इसे स्क्रिप्ट के रूप में सहेजें, और इनपुट स्ट्रिंग को एक तर्क के रूप में पास करें।

यह एक क्रूर बल कार्यान्वयन है: जब तक आप एक काम नहीं करते, तब तक प्रत्येक संख्या को बदले में आज़माएं।


2

> <> (मछली) 35 बाइट्स

i:1+?!v:o
ln;v9l<  >
*9+>:&)?!^1l&a

स्टैक पर इनपुट लेता है, मानों के खिलाफ लंबाई 9,99,999 की जांच करता है ... और यदि लंबाई स्टैक की लंबाई 1 से जोड़ने से बड़ी है।



1

सी #, 77 बाइट्स

n=>{int a=n.Length;int c=(a+1).ToString().Length-1;return(n+(n.Length+1+c));}

1
मैं अब नहीं सी # करते हैं, लेकिन आप का उपयोग नहीं कर सकता है return(n+(a+1+c))के रूप में a=n.Length?
लकोनी

और यह भी ड्रॉप -1से int c=(a+1).ToString().Length-1और +1वापसी से?
लकोनी

1
रुको, क्या यह बड़े परीक्षण के मामलों को सही ढंग से संभालता है? ऐसा लग रहा है कि यह 99 टेस्ट केस के aa...a100बजाय रिटर्न करता है । aa...a101a
लकोनी

1

MATL , 11 बाइट्स

`G@Vhtn@>]&

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

`      % Do...while
  G    %   Push input
  @    %   Push iteration index (1-based)
  V    %   Convert number to string
  h    %   Concatenate horizontally
  t    %   Duplicate
  n    %   Get length of concatenated string
  @    %   Push iteration index
  >    %   True if length of concatenated string exceeds iteration index
]      % End. Run next iteration if top of stack is true; else exit loop
&      % Specifiy that next function (implicit display) takes only one input
       % Implicitly display top of the stack. This is the concatenated string
       % that had a length equal to the iteration index

1

रूबी, 51 बाइट्स (कार्यक्रम)

रूबी, 49 बाइट्स (फ़ंक्शन)

कार्यक्रम (अंतिम न्यूलाइन आवश्यक नहीं है और इस प्रकार अनसर्क्यूटेड):

x=gets.strip
i=0
i+=1 until(y=x+i.to_s).size==i
p y

समारोह (अंतिम नई पंक्ति बनाई गई है):

def f x
i=0
i+=1 until(y=x+i.to_s).size==i
y
end

1

फैक्टर, 55 बाइट्स

यह पार्क में टहलना है! सवाल पढ़ते ही मेरे दिमाग में यह बात उठी।

[ dup length dup log10 ⌈ + >integer 10 >base append ]

1

क्लोजर, 72 बाइट्स

(defn f([s](f s 1))([s n](if(=(count(str s n))n)(str s n)(f s(inc n)))))

1

आर, 49 बाइट्स

cat(a<-scan(,""),(t<-nchar(a))+nchar(t+1),sep='')

बहुत ही सीधा साधा समाधान।


यह मेरे लिए काम नहीं करता है Read 1 item Error in nchar(x + 1) : object 'x' not found:। मैंने पाया कि (t<-nchar(a))+...काम किया।
JAD

@JarkoDubbeldam: मेरा बुरा!
Frédéric

1

वुल्फराम, 56

#<>ToString@Nest[l+IntegerLength@#&,l=StringLength@#,2]&

यह देखते हुए l = StringLength[x]यह संलग्न कर देता है l + IntegerLength[l + IntegerLength[l]]करने के लिए x



1

फोर्सलैंग, 83 बाइट्स

set s io.readln()
label 1
set n 1+n
set t s+n
if t.len=n
 io.write t
 exit()
goto 1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.