1, 2, 3, 4, 5, 6, 7, 8, 9를 "1", "2", "3"등으로 변환


47

수상자 : professorfish의 bash 답변 ! 전체 9 바이트! 와!

답변을 계속 제출할 수 있지만 더 이상 이길 수 없습니다. 후손을 위해 보관 된 원본 게시물 :


당신의 목표는 1-9 사이 의 정수를 그것이 나타내는 단어로 변환하는 입니다.

  • 소수에 대해 걱정할 필요가 없습니다.
  • 사용자가 숫자를 입력합니다. 그들이 10 이상을 입력하지 않을 것이라고 가정하십시오.
  • 사용자는 특정 시점에 숫자를 입력해야 하지만 프로그램에서 읽는 방법은 중요하지 않습니다. stdin을 사용하거나 텍스트 파일을 읽는 등의 작업을 수행 할 수 있지만 사용자는 일정 시점에서 키보드의 9 버튼을 눌러야합니다
  • 대소 문자를 구분하지 않습니다 (예 : "one", "One", "oNe", "OnE"등 모두 허용)
  • HTTP / etc 요청은 허용 되지만 서버에서 실행되는 모든 코드는 최종 코드의 바이트 수로 계산됩니다 (예 : C ++ 프로그램이 HTTP 요청을하면 HTTP 요청에 사용 된 PHP 코드가 계산됩니다) )
  • 컴파일하고 실행할 수있는 모든 것이 허용됩니다.

  • 이 콘테스트 2014 년 6 월 27 일에 게시되었습니다 (게시 후 7 일).
  • 이것은 이므로 가장 짧은 코드가 승리합니다.

2
후행 공백 (예 :)이 one 허용됩니까?
grc

1
프로그램이 단어를 출력하는 한 @grc 예.
Jon

1
주어진 번호 만 인쇄하고 다른 번호는 인쇄하지 않도록 지정해야합니다.
Pinna_be

1
예를 들어 @Pinna_be를 입력 하면 기술적으로 출력 하더라도 3출력 할 수 없습니다 . 마찬가지로 출력 할 수 없습니다 .one two three four five six seven eight ninethreethree seven
Jon

1
이 질문은 아주 좋았습니다. 그러나 날짜 제한을 추가하는 것을 좋아하지 않습니다. 특히, 날짜 제한은 7 일이 아니라 날짜 제한 직전에 추가되었습니다.
Nicolas Barbulesco

답변:


19

배쉬 (bsdgames 포함), 9

number -l

표준 입력에서 읽습니다.

왜 이것에 대한 유틸리티가 있는지 모르겠지만 무엇이든간에.


2
예약이 주관적임을 인정하지만 bsdgames를 설치 한 다음 "bash"라고 부르는 것이 확실하지 않습니다.
Paul Draper

@PaulDraper 저도 제가 다른 답변 중 하나가 인정하는 자격 생각, 심각한 대답은이를 게시하지 않았다 않는다

5
이것이 표준 허점이 아닌가?
Justin

2
@Quincunx 네, 기본적으로입니다. 대부분의 것들이 Bash의 외부 유틸리티이지만 bsdgames 패키지를 grep, wget, coreutils, sed, bc와는 달리 매우 허용 가능한 것으로 간주하지는 않습니다.

132

파이썬 2, 64

print' ottffssennwhoiieiieoruvxvgn  ere ehe  e   nt'[input()::9]

이것은 여분의 공백이있는 문자열 모양입니다 (수직으로 읽으십시오).

o t t f f s s e n
n w h o i i e i i
e o r u v x v g n
    e r e   e h e 
    e       n t

아래 주석에서 설명한대로 [input()::9]주어진 색인에서 시작하여 9 번째 문자마다 선택합니다.


9
오, 젠장 그건 그렇고 이것은 파이썬 2라는 것을 지적 할 가치가 있습니다.
undergroundmonorail

3
설명을 부탁드립니다! :)
Christofer Ohlsson 2016 년

6
@ChristoferOlsson input()::9은 또는 같은 input()단계로 문자열의 끝에서 끝까지의 범위 이며 9, 해당 단어의 문자가 발견되는 정확한 인덱스입니다. 1,10,19,28,373,12,21,30,39
Martin Ender 2016 년

1
@ m.buettner 감사합니다! 좋습니다.
Christofer Ohlsson 2016 년

6
레일 펜스 암호와 같은 것이 아닌가? (그런데 깔끔한 해결책을 위해 +1)
Lou

18

일반적인 Lisp-22 바이트

다음은 일반적인 것입니다 (10 개가 아닌) :

(format nil"~R"(read))

아, 서수를 원하십니까 (첫째, 둘째, ... 삼백 ...)? 승인!

(format nil"~:R"(read))

10
이것이 표준 허점이 아닌가?
seequ

2
어떤 의미에서 허점? 하이퍼 스펙
filcab


3
표준 허점인지 여부에 관계없이 게시하기 위해 여기에 왔던 것입니다. +1 :)
Joshua Taylor

5
@TheRare 그 답변에 대한 의견을 보면, 이것이 허점이라는 강력한 커뮤니티 합의가 있다고 생각하지 않습니다. 내 생각에 이런 종류의 내장 함수를 사용하지 않으면 질문을 명시 적으로 금지해야합니다.
디지털 외상

16

배쉬 51

그래서 나는 두 번째 아이디어와 다른 사람들의 도움을 사용하여 다른 것을 만들었습니다.

set one two three four five six seven eight nine

$X

여기서 'X'는 원하는 숫자입니다.


배쉬 48 (67)

\n줄 바꿈이있는 67

파일에서 읽고 있기 때문에 이것이 완전히 계산되는지 확실하지 않지만 다음과 같습니다.

sed -n Xp a

여기서 "X"는 입력이고 다음 a은 파일이있는 파일입니다.

one
two
three
four
five
six
seven
eight
nine

파일은 36 자이며 bash 명령은 13입니다.

작동 방식 :

파일의 각 줄은 1부터 시작하여 번호가 매겨집니다. 따라서 '1'은 첫 번째 줄에 있고 '2'는 두 번째 줄에 있습니다. sed -n 'Xp' a"파일 'a'의 'X'행에 표시된 내용을 인쇄하십시오" 라는 명령 sed은 Unix 스트림 편집기입니다. -n조용히 또는 본질적으로 다른 모든 것을 무시한다는 의미입니다. Xp'X'행에있는 것을 인쇄하는 것을 의미합니다.


2
좋은 첫 번째 대답! 이 사이트에서 답변의 형식을 지정하는 데 시간을내어 주셔서 감사합니다. 프로그래밍 퍼즐과 코드 골프에 오신 것을 환영합니다!
Justin

2
의 줄 바꿈을 계산하지 않았습니다 a.
데니스

1
1 바이트보다 작고 명령 줄 인수를 허용하며 추가 파일이 필요하지 않습니다. pastebin.com/qdbXKQGP Bash는 누락 된 heredoc 구분 기호에 대해 불평하지만 Dash 및 Zsh에서는 제대로 실행됩니다.
Dennis

1
@Dennis 아 멋져요. 지금 귀하의 답변을 편집해야합니까? 죄송합니다. 골프 골프를 처음 사용하십시오.
Eric Lagergren

1
'따옴표 를 생략 할 수 있습니다 . 외부 파일 대신 here 문자열을 사용해 볼 수도 있습니다. 그러나 실제로 파일의 줄 바꿈을 계산해야합니다.
디지털 외상

16

C #-127 (86/46)

실행 가능한 부분 만 취하는 경우 ...

Console.Write(((HourOfDay)Console.Read()-48));

HourOfDay시스템 네임 스페이스의 일부인 경우 46자가 필요합니다. 불행히도 그것은 System.DirectoryServices.ActiveDirectory86 ... 다른 소음이 그것을 망치게합니다.

이것은 커맨드 라인에서 컴파일 가능하고 실행할 수 있습니다 (127 자).

using System;class P{static void Main(){Console.Write((System.DirectoryServices.ActiveDirectory.HourOfDay)Console.Read()-48);}}

cg2.cs라는 파일에 저장된 경우

csc cg2.cs /r:System.DirectoryServices.dll  && cg2

어떻게 작동합니까?

HourOfDay 마법 상수 대신 이름을 사용할 수있는 열거 형입니다. 열거 형 유형에는 이름 을 제공하는 ToString () 구현이 있습니다 . 정수에 열거 형을 캐스트 할 수 있습니다. Console.Read () 는 입력 스트림에서 문자를 정수로 읽습니다. '1'을 입력하면 49 , 뺄셈 48이 1이되고 캐스트 / 상자가 HourOfDay'One'을 반환합니다.

이 같은 트릭의 Powershell 버전을 살펴보십시오


어떻게 작동합니까? 내가 9를 입력한다고 가정 해 봅시다. 그러면 프로그램은 무엇을합니까?
Nicolas Barbulesco 2016 년


이것은 무엇을 않습니다 -48여기합니까?
Nicolas Barbulesco 2016 년

2
@NicolasBarbulesco는 어떻게 작동합니까? 절. 말이 되나요?
rene

1
@NicolasBarbulesco-알파벳순으로 정렬됩니다. "이 단어는 숫자"를 제외한 모든 상황에서 의미가 있습니다. 문서가 자동으로 생성된다고 확신하므로 한 기사의 특별한 경우에는 의미가 없습니다.
Bobson

13

비 펀지 98 116 105 103 바이트

&1-       v
vvvvvvvvvj<
"""""""""
etnxereoe
nheivuewn
igvsiorto
nie"ffh""
"es ""t
 ""   "
>>>>>>>>>4k,@

Befunge는 이것을 위해 만들어지지 않았습니다 ...

설명:

&1-           ;Grab the input number (`n`) and subtract 1 from it
&1-       v   ;Start moving downwards
          <   ;Start moving leftwards
         j    ;Jump `n - 1` characters to the left.
vvvvvvvvvj    ;Redirect each of the possible locations to jump to, sending the IP down.

        "     ;If `n` was 1, push `o, n, e` onto the stack (`o` is at the bottom)
        e
        n
        o
        "

       "      ;If `n` was 2, push `t, w, o` onto the stack
       o
       w
       t
       "

    *
    *
    *

"             ;If `n` was 9, push `n, i, n, e` onto the stack
e
n
i
n
"

>>>>>>>>>     ;Collect all the different possible positions the IP could be in, and send it right
>>>>>>>>>4k,  ;Print the top 5 chars. If there are less than 5, the rest are null characters. This is allowed
            @ ;End of program

8
@ 데니스 나는 그렇게 어려울 수있는 방법을 볼 수 없습니다. 단순히 파일을 걸릴로 돌려 char[][], 유지 xy위치를 해당 위치에있는 문자를 실행합니다. 가장 어려운 것은 가능한 모든 문자에 대한 작업을 정의하는 것입니다.
Justin

1
로 2 바이트를 쉽게 저장할 수 있습니다 &1-.
har-wradim 2016 년

10

자바 스크립트 68

Atob / btoa는 가난한 사람의 압축 도구 일 수 있습니다 (그러나 콘솔에서 이것을 시도하려면 한 번에 표시되는 서식있는 텍스트에서 복사 할 수 없습니다. '편집'으로 이동하여 소스 패널에서 복사)

마크 다운 편집기는이 답변의 일부 문자를 좋아하지 않습니다. 일부 문자는 저장시 손실됩니다. 아직도, 나는 그것이 내 문제가 아닌 편집기 문제라고 생각합니다. 손실 된 문자는 8 비트 유니 코드 문자로 완벽하게 유효합니다.
(또는이 문제가 이미 메타에서 토론 된 경우 틀 렸습니다. 알려주세요) 여기에 잘못된 문자가 이스케이프 된 버전이 있습니다. 각 시퀀스 \ xNN은 1이어야합니다.

alert(btoa("×C§{Dð£Dá­ç´\x16\x8b«ÐX¯{D¢ÇD\x9e½éô\x12(!·Cb\x9dí").split(0)[prompt()])

간단한 테스트

파이어 폭스 콘솔에서 :

[0,1,2,3,4,5,6,7,8,9]
.map(x=>x +',' btoa("×C§{Dð£Dá­ç´\x16\x8b«ÐX¯{D¢ÇD\x9e½éô\x12(!·Cb\x9dí").split(0)[x])

비슷한 것을 시도했지만 숫자로 시작하는 유효한 base64 문자열을 알 수 없었습니다. 그래도 대답은 stackexchange에 의해 손상되었다고 생각합니다.
nderscore

@nderscore, 젠장. 게시물 수정, 여전히 그것은 나에 따라 유효합니다
edc65

1
이스케이프 문자가있는 버전을 사용하면 3과 8, 출력 TreeEightF.
Justin

3
@Quincunx 'Tree'는 영어를
못합니다

10

자바 스크립트 73

alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[prompt()])

69

alert(btoa("ôéÞõ5õ1ëxO_¢êý|Þöȱõ'xß^hSôا{Ý").split(9)[prompt()])

기술적으로는 같지 alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])않지만 8 바이트를 절약 할 수 있습니까? 사용자는 여전히 ... 그들이 원하는 번호를 입력
에릭 Lagergren에게

@eric_lagergren 사용자가 소스에서 숫자를 변경해야한다는 의미입니까? 나는 그것이 입력으로 계산되지 않을 것이라고 생각합니다.
nderscore

오, 알았어 무슨 말인지 알 겠어 콘솔에서 명령처럼 실행하면 소스가 아닌 입력의 일부가 될 것입니다.
Eric Lagergren

7

펄, 55

$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]

옵션 -p(+1 바이트)으로 실행됩니다 . 예 :

perl -pe '$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]'

STDIN에 입력이 예상되고 출력이 STDOUT에 기록됩니다.

코드는 배열을 생성하고 올바른 요소를 선택합니다. 옵션 -p은 입력 라인을 읽어서 $_결과를 인쇄합니다 $_.

변형 :

  • 후행 줄 바꿈 (+3)으로 :

    $_=(nine,eight,seven,six,five,four,three,two,one)[-$_].$/

    또는 (같은 바이트 수) :

    s/./(nine,eight,seven,six,five,four,three,two,one)[-$&]/e

최신 정보:

  • 대신 qw[...]Zaid 감사합니다.

  • 음수 색인은 바이트를 절약합니다 (감사합니다).


1
몇 문자를 저장하십시오 :$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
Zaid

2
@Zaid : 감사합니다. 2 바이트를 절약했습니다. (나는 익숙해졌다 use strict).
Heiko Oberdiek 2016 년

나는 "-1"을 좋아하지 않습니다. $_=(nine,eight,seven,six,five,four,three,two,one)[-$_]-한 글자 더 짧습니다.
aragaer

@aragaer : 감사합니다. 좋은 생각입니다.
Heiko Oberdiek 2016 년

6

오라클 SQL-46

select to_char(to_date(&1,'j'),'jsp')from dual

데모

여기에는 표준 허점 이 포함 되지만 SQL은 Golfscript보다 짧습니다. 나는 저항 할 수 없었다!

Oracle의 datetime 형식 모델을 사용하여 작동 합니다 . BC 4712 년 1 월 1 일 이후의 일 수인 율리우스 일로TO_DATE(n, 'j') 숫자를 변환합니다 . 이것을 문자열로 다시 정수로 변환합니다. 은 하는 것입니다 형식 요소 접미사 수를 주문. 이것은 실제로 많은 숫자로 작동합니다.TO_CHAR(<date>, 'jsp')sp

&1대체 변수입니다 인스턴스 SQL * Plus를위한 이용 약관을 읽고 동의를 클라이언트 만 작업을거야.


Oracle의 RDBMS와 사랑 / 증오 관계가 있지만 이것은 좋습니다.
rene

6

CJam, 45 43 바이트

"^AM-^L8M-xM-^L^US^_M-^WrM-rM- 1M-s^CHM-|M-X^HE,M-qM-^EM-q4"256bKb'ef+'j/li=

일부 문자는 인쇄 할 수 없으므로 위의 ^ 및 M 표기법을 사용합니다.

9 바이트를 더 사용하면 인쇄 할 수없는 문자를 피할 수 있습니다.

" one two three four five six seven eight nine"S/li=

온라인으로 사용해보십시오.

작동 원리

" Convert the string into an integer by considering it a base-256 number.                ";

"^AM-^L8M-xM-^L^US^_M-^WrM-rM- 1M-s^CHM-|M-X^HE,M-qM-^EM-q4"256b

" Convert the integer from above into an array by considering it a base-20 number.       ";

Kb

" Add the ASCII character code of “e” to all elements of that array. This casts to char. ";

'ef+

" So far, we've pushed the string “jonejtwojthreejfourjfivejsixjsevenjeightjnine”.       ";

" Split the the above string where the character “j” occurs.                             ";

'j/

" Read an integer from STDIN and push the corresponding substring.                       ";

li=

$ base64 -d > convert.cjam <<< IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YktiJ2VmKydqL2xpPQ==
$ wc -c convert.cjam
43 convert.cjam
LANG=en_US cjam convert.cjam <<< 5
five

와우, 우리의 대답은 길이조차도 동일합니다 (사용자가 문자열을 입력한다고 가정합니다).
Justin

1
@Quincunx : 모두 같은 생각이 훌륭합니다! : P 그러나 CJam에서는 사용자 입력을 읽는 데 2 ​​바이트가 필요하므로 다른 점을 고려해야합니다.
Dennis

@Quincunx : 아마도 바이트를 저장하지는 않지만 GolfScript에서도 작동합니다. Base64 덤프 :IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
Dennis

이것이 내가 생각해 낸 것입니다. 더 길다 : golfscript.apphb.com/…
Justin

ASCII가 아닌 문자에 대해 인코딩 골프 스크립트가 무엇을 기대하는지 알고 있습니까? utf-8이 아닌 것 같습니다
Justin

5

GolfScript, 51 바이트

~'
one
two
three
four
five
six
seven
eight
nine'n/=

간단한 조회 테이블입니다. 입력이 평가되고 ( ~), 값의 배열이 작성되고 색인이 발견됩니다.

여기 사용해보십시오


사용자는 문자열을 입력해야하며 하드 코딩 할 수 없습니다. 또한 Try it here링크에 붙여 넣은 코드와 다른 코드가 있습니다.
Jon

@Chipperyman 사용자는이 프로그램에서 문자열을 입력합니다. Try it here코드 의 링크 차이는 웹 페이지가 사용자 입력을 지원하지 않기 때문입니다. 의 문자열을 변경하십시오. 이는 ;사용자 입력과 동일합니다.
Justin

아, 알겠습니다 골프 스크립트를 잘 모르겠습니다. 알려 주셔서 감사합니다.
Jon

2
@Chipperyman : GolfScript는 스크립트 자체를 실행하기 전에 STDIN의 내용을 스택에 배치합니다.
데니스

2
하! 나는 당신 을 1 바이트로 이길 수 있습니다 ! ;-)
Ilmari Karonen 2016 년

4

펄, 60 바이트

$_=(ZOneTwoThreeFourFiveSixSevenEightNine=~/.[a-z]*/g)[$_]

-p스위치가 필요합니다 (2 바이트).

$ perl -p convert.pl <<< 5
Five

작동 원리

  • -pSTDIN에서 읽고 결과를에 저장합니다 $_.

  • =~/.[a-z]*/g 선행 베어 워드를 하나의 대문자 (대문자)와 그 뒤에 여러 소문자의 하위 문자열로 나눕니다.

  • (…) 하위 문자열을 배열로 수집합니다.

  • [$_] 사용자 입력에 해당하는 하위 문자열을 검색합니다.

  • $_=…에 결과를 저장합니다 $_.

  • -p의 값을 인쇄합니다 $_.


2
나는 정규식 트릭을 좋아한다. +1
seequ

3

DOS 배치-162 문자 (줄 바꿈 포함)

이 답변은 @grc의 Python 답변에서 영감을 얻었지만 비슷한 것을 생각했습니다.

@setlocal enabledelayedexpansion
@set s="ottffssennwhoiieiieoruvxvgn  ere ehe  e   nt
@set /a c=%1
@set z=!s:~%c%,1!
@if _%z%==_ exit /b
@echo %z%
@%0 %c%+9

용법:

[파일 이름] [번호]

예를 들어 코드가 speak.bat라는 파일에 있고 숫자 "five"를 보려면 다음과 같이 실행합니다.

speak 5

또한 출력은 왼쪽에서 오른쪽이 아니라 위에서 아래로 이루어집니다! 그래서 대신

다섯

당신은 볼 것이다

F

V
E


3

배쉬 + coreutils, 64

비경쟁 압축 개념

xxd -p<<<TàPnàõ:àsÀ~®@ãCN|tr 0-9a-d \\ng-inor-x|sed -n $1p

여기에 이국적인 문자 중 일부가 제대로 렌더링되지 않을 수 있으므로이 스크립트는 base64 표현으로 재구성 될 수 있습니다.

base64 -d <<< eHhkIC1wPDw8VOCLUIJu4PWWDzrgc8B+rkDjEoBDTnx0ciAwLTlhLWQgXFxuZy1pbm9yLXh8c2VkIC1uICQxcA==

출력 예

$ ./n.sh 1
one
$ ./n.sh 9
nine
$ 

설명

문자열 one two three four five six seven eight nine에는 문자 efghinorstuvwx와 공백 구분 기호 (총 15 자 값) 만 포함되어 있습니다 . 따라서 각 문자는 4 비트 또는 1 바이트 당 2 문자로 표시 될 수 있습니다. 각 바이트를 두 개의 16 진수로 나누는 쉬운 방법으로 바이트의 16 진 표현을 사용할 수 있습니다. 그런 다음 16 진수를 사용 tr하거나 비슷한 문자로 다시 변환 할 수 있습니다 . 운에는 그것이 있기 때문에, rstuvwx그래서 다음과 같이 표현 될 수있다, 연속 있습니다 r-xtr. 인코딩이되도록 배치 e하고 f그대로 방치하고, 우리가 사용할 수 있도록, 분리 된 워드 라인이 파단되는 것을 sed우리가 필요로하는 단지 라인 ouptut하기.

이 디코딩 프로세스는 상당한 양의 추가 공간을 사용하므로 쉘 스크립트 스타일의 답변으로 경쟁이되지 않지만 다른 언어에서는 유용한 개념이 될 수 있습니다.


3

(순수) 배쉬, 64

유효한 입력을 가정하여 입력을 첫 번째 인수로 사용합니다.

v=(o one two three four five six seven eight nine)
echo ${v[$1]}

배열 v을 만든 다음 입력에 지정된 요소에 액세스합니다. 배열은 인덱스가 0이므로 자리 표시 자로 0 번째 요소를 추가해야했습니다. 또는 (thnx @DennisWilliamson이 지적했습니다) :

v=(one two three four five six seven eight nine)
echo ${v[$1-1]}

2
같은 글자 수 : v=(one two three four five six seven eight nine)echo ${v[$1-1]}
데니스 윌리엄슨

3

파이썬 2.x- 65 64

@grc의 대답만큼 좋지는 않지만 확실히 더 읽기 쉽습니다 :-)

'one two three four five six seven eight nine'.split()[input()-1]

@flornquake 덕분에 하나의 적은 문자

'nine eight seven six five four three two one'.split()[-input()]

이것도 좋습니다. :-) 효과가있다.
Nicolas Barbulesco

3
다음과 같이 한 문자를 저장할 수 있습니다.'nine eight seven six five four three two one'.split()[-input()]
flornquake

좋은 것입니다!
Willem

3

자바 7-185

class Num{
public static void main(String[] args) {
    System.out.print("ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE".split(",")[(new java.util.Scanner(System.in)).nextInt()-1]);
    }}

3

C 111

#include <stdio.h>
int main(){printf("%.5s","one  two  threefour five six  seveneightnine"+5*(getchar()-'1'));}

여기의 길이는 신중하게 설계되었으므로 이진수로 해석 하여 10 진수 로 변환 수 있습니다. 7 자만으로 승자가 있다고 확신합니다!


1
+1 Code-golfers는 일반적으로 c 코드 가 사양을 충족하는 한 경고로 컴파일되는지 상관하지 않습니다 . 따라서 #includemain()의 반환 유형을 생략 할 수 있습니다 . 또한 표현에 대한 약간의 리팩토링 : main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}. 내 카운트에 86 문자.
디지털 외상

나는 길이의 물건을 얻지 못하고 7 문자가 어디에 있는지 알지 못합니다.
Nicolas Barbulesco

@NicolasBarbulesco : 111 자이지만 111이진수로 취급하면 710 진수 로 변환됩니다 .
Jerry Coffin

제리, 당신의 머리에 코드 골프가 달려 있습니다!
Nicolas Barbulesco

3

bash say (OS X) : 3 8

"당신의 목표는 1-9 사이의 정수를 그것이 나타내는 단어로 변환하는 것입니다"

내가 마지막으로 확인했을 때, 말하는 단어도 단어입니다. 이전 시도 (입력을받지 않음)

say 4

입력 내용을 읽을 수 있어야합니다.

say|read

숫자를 입력하면 단어가 나옵니다. 종료일이 마감일 인 것을 알고 있지만 컨테스트에서 우승해야합니다.

오디오 파일 예 : four.aiff


5가 아니어야합니까?
rpax

@rpax 나는 입력이 문자로 계산된다고 생각하지 않습니까?
CousinCocaine 2016 년

1
이것은 영리합니다. 그러나 이것은 입력을 그리워합니다.
Nicolas Barbulesco

1
불행히도 이것은 다음과 같은 이유로 유효한 답변이 아닙니다. 사용자의 입력을 절대로받지 않으며 숫자가 4 인 경우에만 작동합니다.
Jon

1
CousinCocaine의이 답변에 대한 Chipperyman의 의견은 사실입니다. 그러나 @RegisteredUser의 답변 도 마찬가지입니다. 그러나 Chipperyman은 CousinCocaine이이 답변을 거부했으며 등록 된 사용자 수상자 (예 : æquo)가 답변을 선언했습니다. 또한 등록 된 사용자의 답변은 CousinCocaine의이 답변의 복제본입니다. 이것은 불공평 한 것 이상입니다.
Nicolas Barbulesco

2

VBScript 98 80 75

msgbox split(" one two three four five six seven eight nine")(inputbox(""))

2

J- 68 또는 60 57 또는 53 바이트

대화식 버전 (stdin) :

>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1

기능 버전 :

f=:one`two`three`four`five`six`seven`eight`nine>@{~<:

설명:

f=:one`two`three`four`five`six`seven`eight`nine>@{~<:
                                                   <: Decrease by one
                                                 {~   Get the correct string
                                               >@     Unbox

".(1!:1)1 문자열을 읽고 정수로 변환


하나의 문자를 기차 ( (;:'one two blah')>@{~<:) 로 작성하고 다른 문자는 one`two`blah대신 gerund 를 사용하여 저장할 수 있습니다 ;:.
algorithmshark

트윗 담아 가기 나는 여전히 J를 배우고 있지만 열차 버전에는 텍스트가 무한 순위 (편집 : 분명히 그렇지 않은 이유는 무엇입니까?)가 필요하지 않으며 gerund 버전은 추가 인용 부호 (편집 : 오, 그것은 목록을 만듭니다) 상자)?
seequ

왼쪽 인수에는 포크가 명사를 가질 수 있는데, 이는 무한 순위 (qv Dictionary )의 명사를 생성하는 상수 동사의 약어입니다 . 그리고 gerund에 대한 따옴표는 없습니다. 정의되지 않은 이름은 동사에 대한 참조로 취급되며, gerund는 이름을 포함하는 박스형 문자열입니다.
algorithmshark

또한 STDIN 버전을 동사 표현으로 쓰지 않아도됩니다 >one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1. 3 자 더 짧습니다.
algorithmshark

1
@algorithmshark Haha, 왜 그렇게하지 않았습니까?
seequ

2

Perl 36 (58 독립형)

use Number::Spell;say spell_number<>

또는 추가 모듈없이 :

say qw(one two three four five six seven eight nine)[<>-1]

첫 번째 스크립트가 Mac에서 작동하지 않습니다. Can't locate Number/Spell.pm in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.2 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16 /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at toto.pl line 1. BEGIN failed--compilation aborted at toto.pl line 1.
Nicolas Barbulesco

두 번째 스크립트가 Mac에서 작동하지 않습니다. syntax error at titi.pl line 1, near "say qw(one two three four five six seven eight nine)" Execution of titi.pl aborted due to compilation errors.
Nicolas Barbulesco

2

AppleScript에서; 123 자

{"one","two","three","four","five","six","seven","eight","nine"}'s item((display dialog""default answer"")'s text returned)

이 스크립트는 대화 상자에서 입력을받습니다. 그런 다음 AppleScript의 결과로 출력을 제공합니다  .

예 :

  • 입력 : 6
  • 출력 : "six"

다음은 더 좋은 버전입니다.

set l to {"one","two","three","four","five","six","seven","eight","nine"}
set n to text returned of (display dialog "?" default answer "")
display dialog (l's item n) buttons ("OK") default button 1

이 버전은 멋진 대화 상자에 출력을 표시합니다.

예 :

  • 입력 : 9
  • 출력 : nine

[답변 편집 됨; 입력에 대한 대화가 약간 개선되었습니다. 여전히 124 자 답변이 다시 편집되었습니다. 이제 1 문자 이하! ]


1
set n to text returned of... 와.
seequ

2

파워 쉘 - 91 (74)

[Enum]::ToObject([System.DirectoryServices.ActiveDirectory.HourOfDay],[Console]::Read()-48)

Enum 및 ToObject 호출을 제거하기 위해 캐스트하는 방법을 찾았습니다.

[System.DirectoryServices.ActiveDirectory.HourOfDay]([Console]::Read()-48)

어떻게 작동합니까?

HourOfDay는 열거 형이므로 매직 상수 대신 이름을 사용할 수 있습니다. 열거 형 유형에는 상수 값의 이름을 제공하는 ToString () 구현이 있습니다. 정수에 열거 형을 캐스트 할 수 있습니다. Console.Read () 는 입력 스트림에서 정수로 표시되는 문자를 읽습니다. '1'을 입력하면 49, 뺄셈 48이 1이되고 HourOfDay로 캐스팅되어 'One'이 반환됩니다.

powershell은 출력 스트림에 기록되는 모든 객체에 대해 ToString을 수행하며이를 powershell 외에 실행 파일로 변환하기 위해 보풀이 필요하지 않기 때문에 ...


2

CJam-50

이것은 HTTP 요청을 사용하는 일반 ASCII 솔루션입니다 (질문에서 허용됨).

"aj21.com/"r+g

서버에는 각각 해당 단어를 포함하는 1, 2, ..., 9라는 9 개의 일반 텍스트 파일이 있습니다.

총 크기 : 14 + 3 ( "1") + 3 ( "2") + 5 + 4 + 4 + 3 + 5 + 5 + 4 = 50.
더 짧은 도메인을 사용하여 골프를 더 많이 할 수 있습니다.

온라인 인터프리터는 HTTP 요청을 지원하지 않으므로 프로그램은 java 인터프리터를 사용하여 실행해야합니다 .


1
downvoting 경우 의견을 추가하십시오.
aditsu

-1, 이것은 표준 허점 입니다.
nyuszika7h

3
@ nyuszika7h이 질문에 특별히 허용됩니다
aditsu

1
죄송합니다. 답을 편집하기 전까지는 다운 보트를 취소 할 수 없습니다.
nyuszika7h

1
@ nyuszika7h 편집
aditsu

2

배치-86

다른 배치 답변보다 훨씬 짧으며 실제로 놀랍도록 경쟁력이 있습니다.

for /f "tokens=%1" %%1 in ("one two three four five six seven eight nine") do echo>%%1

로 사용되며 filename.bat number출력은 올바른 번호의 이름을 가진 파일 형식입니다.


2

루비 64

p %w?one two three four five six seven eight nine?[$*[0].to_i-1]

1
x 대신 9를 직접 대체하여 몇 바이트를 더자를 수 있습니다
Mr. Alien

6
이 코드가 입력되는 위치를 알 수 없습니다. 그리고 왜 9-1말할 수있을 때 글을 쓰 8나요? 물론 모두 9-18잘못; 이 스크립트는 항상 "9"를 출력하고 입력을 무시합니다.
Ray Toal

2

배쉬 9

cousincoicane의 답변의 부끄러운 리눅스 복제

spd-say 1

하나 말해


1
입력이 1 인 경우에만 작동하지 않습니까?
Jon

1
@Chipperyman 그것은 모든 수에서 작동
등록 된 사용자

한계, 그러나 영리한!
Nicolas Barbulesco

입력이 누락되었습니다.
Nicolas Barbulesco

@nicolasbarbulesco 예. 그러나 입력을 놓친 다른 답변이 많았으므로 계속 진행했습니다.
등록 된 사용자

2

GolfScript, 50 바이트

Quincunx의 51 바이트 독립형 GolfScript 솔루션을 이길 수 있는지 확인하고 싶었습니다 . 충분한 트릭으로 1 바이트 단위로 가능하다는 것을 알 수 있습니다.

내가 사용하는 트릭 중 하나는 인쇄 가능한 ASCII 범위를 벗어난 바이트를 사용하는 것이므로 결과 프로그램을 여기에 직접 붙여 넣을 수 없습니다. 대신 16 진 덤프를 제공하고 있습니다. Unixish 시스템 사용자 xxd -r는 16 진 덤프에서 실제 50 바이트 GolfScript 프로그램을 재구성하는 데 사용할 수 있습니다 .

0000000: 7e6e 270b 97eb 442f e166 9894 9f00 c63c  ~n'...D/.f.....<
0000010: 8128 73a3 9b55 5065 a9fb f06a 2727 ff16  .(s..UPe...j''..
0000020: 277b 6261 7365 7d2f 2b6e 2f3d 7b39 392b  '{base}/+n/={99+
0000030: 7d25                                     }%

이 프로그램을 생성하는 데 사용되는 기본 트릭은 간단합니다. 나는 c문자 값에서 99 (문자의 ASCII 코드)를 빼고 결과 값을 기본 22의 숫자로 해석하여 Quincunx의 코드를 대부분 구성하는 긴 문자열 리터럴을 압축합니다. (문자를 최대 인코딩 할 수 있음 x) 그런 다음 밑줄 255에 결과 숫자를 다시 인코딩하여 프로그램의 전반부를 대부분 구성하는 인쇄 할 수없는 바이트 문자열을 생성하십시오. 그런 다음 나머지 프로그램은이 프로세스를 반대로하여 문자열을 다시 인쇄 가능한 것으로 디코딩합니다.

(실제로 숫자 이름에있는 가장 낮은 문자는 e이므로 ASCII 코드에서 101을 빼고 20을 사용하여 바이트 문자열을 더 단축 할 수 있습니다. 그러나 101을 빼면 문자 o가 줄 바꿈에 매핑됩니다. nGolfScript 의 내장 상수로 편리하게 사용할 수 있기 때문에 숫자 구분 기호로 사용하고 있습니다. 낮은 기본을 사용하면 1 바이트보다 많은 비용이들 수 있습니다. 오프셋 99를 사용하면 문자에 해당하는 줄 바꿈이 남습니다. m숫자 이름이없는 것이 편리합니다.)

디 골프 버전의 프로그램은 다음과 같습니다.

~       # eval the input, turning it into a number
n       # push a newline onto the stack; we'll need it later

# this is the byte string encoding the number names:
"\x0B\x97\xEBD/\xE1f\x98\x94\x9F\x00\xC6<\x81(s\xA3\x9BUPe\xA9\xFB\xF0j"

# convert the encoded string from base 255 to base 22
# (and, incidentally, from a string to an array):
"\xFF\x16" {base}/

+       # prepend the newline pushed earlier to the array, re-stringifying it
n/      # split the resulting string at newlines
=       # pick the substring corresponding to the input number
{99+}%  # add 99 to the character values in the chosen substring
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.