세트 이론을 사용한 문자열 길이 이 방법으로 정의 된 처음

Wikipedia 에서 자연수의 이론 이론적 정의

자연수의 집합 N은 0을 포함하는 가장 작은 집합으로 정의되며 S (n) = n ∪ {n}에 의해 정의 된 후속 함수 S에서 닫힙니다.

이 방법으로 정의 된 처음 몇 숫자는 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}}, 3 = {0,1,2 } = {{}, {{}}, {{}, {{}}}}.

이 자연수 정의를 사용하면 문자열 길이를 계산합니다.

길이가 a-zA-Z 인 문자열을 입력하십시오 .

구분 기호없이 세트 표기법으로 문자열의 길이를 출력 합니다

빈 문자열 입력

출력 {}

입력

출력 {{}}

입력 aaa

출력 {{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}

구분 기호가있는 ‘aaaa’에 대한 가독성 출력은

{
    {}
    {{}}
    {{} {{}} }
    {{}   {{}}   {{} {{} } }   }
}

정황

  1. 코드에 숫자 0 ~ 9가 나타나지 않습니다.
  2. 숫자를 생성하기 위해 문자 코드 변환을 사용하지 않습니다.
  3. 증분 및 감소를 포함한 산술 계산에 +-* /를 사용하지 않습니다.
  4. 부울 논리 이외의 수학 연산이 없습니다.
  5. 입력 문자열은 바이트 길이를 결정할 때 계산되지 않습니다.

우승자 가장 짧은 코드 길이 (바이트)입니다.

이것이 첫 번째 질문이므로 명확하고 엄격하게 작성했으면합니다. 친절한 조언을 받아 들였습니다.



답변

GolfScript ( 18 17 바이트)

'{'\{;.'}'++}/'}'

스택에서 입력을받습니다 (따라서 stdin을 통해 프로그램으로 실행되는 경우). 출력을 스택에 두 개의 문자열로 남겨 둡니다 (따라서 프로그램으로 실행하면 올바른 출력이 stdout으로 전송 됨).

스택에 단일 문자열을 남기려면 +concat에 추가 하거나 다른 문자열을 사용하십시오.

'{}'\{;.);\'}'++}/

해부

# Stack: input-str
'{'\
# Stack: <0< input-str  where <0< means the string representing 0 without its final }
# Loop over each character of the input string
{
    # Stack: <n< char
    # Discard the input character
    ;
    # Concatenate two copies of <n< and a }
    .'}'++
}/
# Push the final } to the stack
'}'

대안 :

# Stack: input-str
'{}'\
# Stack: <0> input-str  (where <0> means the string representing 0)
# Loop over each character of the input string
{
    # Stack: <n> char
    # Discard the input character
    ;
    # Duplicate <n> and remove the final '}'
    .);
    # Stack manipulations
    \'}'
    # Stack: <n>-less-final-'}' <n> '}'
    # Concatenate the three strings to get <n+1>
    ++
}/

제한의 영향

감소가 허용되면 15 바이트 솔루션이 허용됩니다.

'{}'\{;..,(/*}/


답변

하스켈 기능, 35 34 자

f[]="{}";f(_:x)='{':f x++tail(f x)

하드 코드 된 입력을 가진 Haskell 프로그램 48 또는 49 47 자 또는 48 자

 f[]="{}";f(_:x)='{':f x++tail(f x);main=print$f"aaaa"

(출력 주위에 추가 따옴표가 마음에 들지 않으면 47 자, 그렇지 않으면 총 48 자 putStr대신 사용하십시오 print)

하스켈 프로그램, 51 50 자

f[]="{}";f(_:x)='{':f x++tail(f x);main=interact f


답변

파이썬 3-64

o=['{}']
for a in input():o+=['{'+''.join(o)+'}']
print(o.pop())

입력을 인라인 할 수있는 경우 :

파이썬 2-54

o=['{}']
for a in'whatever':o+=['{'+''.join(o)+'}']
print o.pop()


답변

자바 스크립트 70 (문자)

s='';c=prompt().split('');while(c.pop()){s+='{'+s+'}'}alert('{'+s+'}')

이것은 질문을 설정하기 전에 나의 노력이었습니다. 나는 아마 내가 이길 수있는 것보다 더 많은 Javascript 지식을 가진 사람을 가정합니다.

추가 축소에 대한 Jan Dvorak과 Peter Taylor에게 감사합니다

지금 62

s='{';c=prompt().split('');while(c.pop())s+=s+'}';alert(s+'}')

그리고 지금 61

s='{';for(c=prompt().split('');c.pop();)s+=s+'}';alert(s+'}')

원본 코드 설명

s를 비워 두십시오.

입력 문자열을 c로 배열로 분할

c에서 문자를 pop ()하고 s = s {s}를 후속 문자로 재설정하는 것이 가능합니다.

출력 전류이지만 세트 브래킷으로 둘러싸 야합니다.


답변

J- 22 20 자

'{','}' '{'&(,,~)~#

이것이 어떻게 도출 될 수 있습니까?

   #'123'                      NB. string length
3
   'Left' (,,~) 'Right'        NB. dyad to concat L,R,R
LeftRightRight
   '{' (,,~) '}'               NB. using braces
{}}
   '{'&(,,~) '}'               NB. bind left argument, now it's a monad
{}}
   '{'&(,,~) '{'&(,,~) '}'     NB. twice
{{}}{}}
   '{'&(,,~)^:2 '}'            NB. ^: is monad functional power
{{}}{}}
   '{'&(,,~)^:3 '}'            NB. any integer
{{{}}{}}{{}}{}}
   3 '{'&(,,~) '}'             NB. convenient feature of dyadic &
{{{}}{}}{{}}{}}
   '}' '{'&(,,~)~ 3            NB. swap argument order
{{{}}{}}{{}}{}}
   '}' '{'&(,,~)~ #'123'       NB. using string length
{{{}}{}}{{}}{}}
   '{', '}' '{'&(,,~)~ #'123'  NB. add final brace
{{{{}}{}}{{}}{}}
   ('{','}' '{'&(,,~)~#) '123' NB. works as a verb
{{{{}}{}}{{}}{}}

또는이라고 쓸 수도 '{','{'&(,,~)&'}'@#있는데 이는 같은 것을 의미합니다.

용법:

   '{','}' '{'&(,,~)~# 'aaaa'
{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}
   f =: '{','}' '{'&(,,~)~#  NB. can be assigned to a function
   f 'VeryBig'
{{{{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}{{{{}}{}}{{}}{}}{{{}}{}}{{}}{}}


답변

하스켈-35 문자

g[]="{}";g(_:x)=(init.g)x++g x++"}"

해결책은 Jan Dvorak의 영향을 받지만 순서를 바꾸지 않습니다.


답변

스칼라, 64 자

def f(s:String):String=s"{${s.tails.toSeq.tail.map(f)mkString}}"

중괄호와 s이 코드에서 .

편집 : 숫자를 제거