문자열 길이 추가


51

도전:

- , - , - s문자에 문자열이 주어지면 길이의 추가 문자를 총 길이의 일부로 계산하여 길이를 추가하십시오 .azAZ09ss

입력:

임의의 길이의 문자열 만 (비어있을 수 있음)

산출:

같은 문자열이지만 길이가 끝에 추가됩니다. 길이를 나타내는 문자도 길이의 일부로 계산되어야합니다. 추가 할 유효 길이가 여러 개인 경우 가능한 가장 작은 길이를 선택하십시오 (예는 테스트 사례 참조).

테스트 사례 :

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

규칙 :

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다. 표준 허점은 금지되어 있습니다. 제출은 전체 프로그램 또는 함수일 수 있으며 결과를 stdout에 인쇄하거나 함수에서 변수로 리턴 할 수 있습니다.


입력에 어떤 문자가 나타날 수 있습니까?
Martin Ender

@MartinEnder 영숫자 만, 0-9 및 AZ / az. 예, 끝에 숫자가있는 문자열을 가질 수 있습니다. 테스트 케이스를 추가하겠습니다.
Yodle

답변:



18

자바 스크립트 (ES6), 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하여 원래 입력 문자열을 연결하고의 소수를 나타내는 문자열의 N 번째 문자 (0 부터 시작)를 테스트합니다 N. N이 캐릭터가 더 이상 존재하지 않을 때까지 증가 합니다.

예:

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

테스트 사례


와우, JS는 이것을 위해 파이썬보다 훨씬 더 무섭다.
mbomb007

@Arnauld 나는 이것 주위에 내 머리를 얻을 수 없습니다. 이 코드의 작동 방식을 설명 하시겠습니까?
Gowtham

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


우와, 내가 전에 ppcg에 라텍스 답변을 본 적이 있다고 생각하지 않습니다.
pajonk

5

자바 스크립트 (ES6), 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오류 메시지가 나타납니다. Javascript에 대한 지식이 없습니다. 방금 시도한 것입니다
Prasanna

@Prasanna Firefox에서 작동합니다. 어떤 브라우저를 사용하고 있습니까?
Neil

@Prasanna는 최신 Google Chrome에서 작동합니다. IE11 이상, Opera 또는 ES6를 지원하지 않는 것을 사용하고 있지 않습니까?
Ismael Miguel

오래된 좋은 크롬 ( Version 48.0.2564.97)을 사용하고 있습니다. IE 에서도이 작업을 시도합니다. 크롬을 업데이트 할 수 없음-사무실 보안 문제
Prasanna

5

C, 67 65 61 바이트

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

완드 박스


1
어, 그래, 나는 인쇄해야한다 ... 어쨌든, 더 짧은 C 솔루션을 갖는 것을 축하한다 : D +1
cat

4

루아 5.2, 32 바이트

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

변수 a 는 입력 문자열입니다.


3

파이크, 8 바이트 ( 이전 버전 )

.f+liq)+

설명:

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

여기 사용해보십시오! (새 버전, 9 바이트)


항상 실제 출력이 경고 또는 다른 메시지들 :-) 매립 방법 나를 혼란
루이스 Mendo

2
경고 링크를 자동으로 비활성화하는 복사 링크에서 웹 버그를 수정해야합니다.
Blue


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

Brachylog , 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

Brainfuck, 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
>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>>[-]>>>++++++++++<[->-[>+>>]>[+[-
<+>]>+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<+>+>[-]]<[<[->-<]++++++[->++++++++
<]>.[-]]<<++++++[-<++++++++>]<.[-]<<[-<+>]

참고 :이 SO 답변의 코드를 사용 하여 길이를 ASCII 출력으로 변환했습니다. PPCG에서 이것이 허용되기를 바랍니다. 이것은 첫 번째 Codegolf 제출이며 두 번째 BF 프로그램입니다. 의견을 환영합니다.


1
이것은 유효하지 않습니다. 모든 테스트 사례를 통과해야합니다
cat

999까지의 길이를 지원하는 것으로 충분합니까?
Forcent Vintier

스펙은 "임의의 길이"를 의미하며 "언어가 메모리를 다룰 수 있거나 메모리가 부족하지 않는 한"을 의미합니다.
cat

사용하는 brainfuck 인터프리터에는 8 비트 셀이 있으므로 알고리즘 이 임의의 길이의 문자열에 대해 작동하는 한 길이가 256 이상인 문자열에 실패하면 괜찮습니다 . 문자열이 너무 길면 C 및 JavaScript 제출도 실패합니다.
Dennis

데니스에게 감사합니다. 제출 내용을 적절하게 수정하겠습니다
포 티어 빈 티어


2

루비, 62 58 56 바이트

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

에서 테스트되었습니다 irb.

이 작업을 수행하는 더 좋은 방법이 있을지 모르지만 이것이 내가 처음으로 생각한 것입니다. 골프에 대한 도움을 주시면 감사하겠습니다.

편집 : 괄호 사용이 과도하다는 것을 깨달았습니다.


l한 곳 에서만 사용하십시오 . 인라인하면 3 바이트가 절약됩니다 l=;. )하지만 솔루션은 여전히 나보다 더 길어질 수 있습니다
DepressedDaniel

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 번입니까? 먼저 텍스트 길이를 추가하고, 두 번째는 숫자를 포함하도록 길이를 조정하고, 세 번째는 추가 숫자를 추가 한 경우입니다.
Tom Viner


2

bash, 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

C #, 77 바이트

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

1
나는 지금 C #이 아니지만, 당신은 return(n+(a+1+c))로 사용할 수 없었 a=n.Length습니까?
Laikoni

그리고 반환에서 -1출발 int c=(a+1).ToString().Length-1과 하락을 +1?
Laikoni

1
잠깐, 이것이 더 큰 테스트 사례를 올바르게 처리합니까? 99 테스트 사례 aa...a100대신 반환되는 것처럼 보입니다 . aa...a101a
Laikoni

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

R, 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

ForceLang, 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.