Wikipedia 에서 자연수의 이론 이론적 정의
자연수의 집합 N은 0을 포함하는 가장 작은 집합으로 정의되며 S (n) = n ∪ {n}에 의해 정의 된 후속 함수 S에서 닫힙니다.
이 방법으로 정의 된 처음 몇 숫자는 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}}, 3 = {0,1,2 } = {{}, {{}}, {{}, {{}}}}.
이 자연수 정의를 사용하면 문자열 길이를 계산합니다.
길이가 a-zA-Z 인 문자열을 입력하십시오 .
구분 기호없이 세트 표기법으로 문자열의 길이를 출력 합니다
예
빈 문자열 입력
출력 {}
입력
출력 {{}}
입력 aaa
출력 {{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}
구분 기호가있는 ‘aaaa’에 대한 가독성 출력은
{
{}
{{}}
{{} {{}} }
{{} {{}} {{} {{} } } }
}
정황
- 코드에 숫자 0 ~ 9가 나타나지 않습니다.
- 숫자를 생성하기 위해 문자 코드 변환을 사용하지 않습니다.
- 증분 및 감소를 포함한 산술 계산에 +-* /를 사용하지 않습니다.
- 부울 논리 이외의 수학 연산이 없습니다.
- 입력 문자열은 바이트 길이를 결정할 때 계산되지 않습니다.
우승자 가장 짧은 코드 길이 (바이트)입니다.
이것이 첫 번째 질문이므로 명확하고 엄격하게 작성했으면합니다. 친절한 조언을 받아 들였습니다.
답변
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
이 코드에서 .
편집 : 숫자를 제거