진실-기계 구현


148

진리 기계 (크레딧로 이동 이 사람 이와 주셔서) 언어의 I / O 및 제어 흐름을 시연하는 매우 간단한 프로그램입니다. 진실 기계가하는 일은 다음과 같습니다.

  • STDIN에서 숫자 (0 또는 1)를 가져옵니다.

  • 해당 번호가 0이면 0을 인쇄하고 종료하십시오.

  • 해당 번호가 1이면 1을 영원히 인쇄하십시오.

도전

선택한 언어로 위에서 설명한대로 진실 기계를 작성하십시오. 진실 기계는 다음 규칙을 따르는 완전한 프로그램이어야합니다.

  • STDIN 또는 적절한 대안으로 의견을 수렴
    • STDIN에서 언어를 입력 할 수없는 경우 프로그램에서 하드 코딩 된 변수 또는 이에 상응하는 변수를 사용하여 입력 할 수 있습니다.
  • STDOUT 또는 적절한 대안으로 출력해야합니다.
    • 언어가 문자를 출력 할 수없는 경우 01, 바이트 또는 단항 I / O가 허용됩니다.
  • 입력이 1계속되면를 인쇄 1하고 프로그램이 종료되거나 메모리가 부족한 경우에만 중지해야합니다.
  • 출력은 반드시 하나 일 0한쪽 개행 또는 공간 또는 무한 또는 다음 1각각의 1어느 하나 또는 개행 공간이나 하였다. 인사말, ANSI 색상 코드 또는 들여 쓰기 등 억제 할 수없는 언어 해석기의 일정한 출력을 제외하고는 다른 출력을 생성 할 수 없습니다. 줄 바꿈 또는 공백 사용은 일관되어야합니다. 예를 들어, 1줄 바꿈 후 출력을 선택 하면 줄 바꿈 뒤에 줄 바꿈이 1있어야합니다.

  • 입력에서 언어를 종료 할 수없는 경우에만 0코드가 아무 것도 출력되지 않는 무한 루프를 입력 할 수 있습니다.

이것은 카탈로그이기 때문에이 도전 이후에 만들어진 언어는 경쟁 할 수 있습니다. 제출물을 테스트하려면 통역사가 있어야합니다. 이전에 구현되지 않은 언어에 대해이 통역사를 직접 작성할 수 있습니다. 그 외에도 의 모든 표준 규칙을 준수해야합니다. 대부분의 언어로 된 제출물은 적절한 기존 인코딩 (보통 UTF-8)으로 바이트 단위로 채점됩니다.

목록

이 게시물의 맨 아래에있는 스택 스 니펫은 답변 a) 언어 당 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 카탈로그를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

## Ruby, <s>104</s> <s>101</s> 96 bytes

헤더에 여러 숫자를 포함하려는 경우 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

## Perl, 43 + 2 (-p flag) = 45 bytes

언어 이름을 링크로 만들면 스 니펫에 표시됩니다.

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


머신 코드 입력을 위해 프로세서가 작성된 코드 실행을 마치면 프로그램이 중지되었다고 가정 할 수 있습니까?
lirtosiast

3
모든 유효하지 않은 입력에 동작이 있다고 가정합니까?
Cruncher

3
@Cruncher 예, 당신이 얻을 것으로 예상해야하는 유일한 입력은 0과 1입니다
spaghetto

4
카탈로그가 중단되었습니다.
애디슨 크럼프

2
카탈로그는 다른 언어 를 고려 Bf하고 bf다른 것으로 보입니다 .
Mooing Duck 1

답변:


188

헥사 고니 , 6 바이트

이것은 놀랍게도 까다 롭고 최적이라고 확신하지 않습니다 ...

<.@!$?

코드를 채우고 펼친 후에는 다음 16 진 격자를 나타냅니다.

여기에 이미지 설명을 입력하십시오

이것은 최근 오류없는 고양이 프로그램과 유사한 제어 흐름을 사용하여 대각선을 따라 움직입니다. 이를 위해 명령 포인터 (IP)를 왼쪽으로 편향하여 시작합니다. 여기서 자주색 경로는 왼쪽 아래 모서리로 둘러싸입니다.

?입력을 정수로 읽습니다. !다시 인쇄합니다. .그냥 no-op입니다. 이제 그리드의 코너는 브랜치 역할을합니다.

입력이 0이면 IP는 빨간색 경로를 따라 계속 진행하며로 간단히 프로그램을 종료합니다 @.

입력이 1이면 IP는 녹색 경로에서 계속됩니다. 다시 말하지만, .no-op이지만 $Befunge의 트램펄린과 같습니다. 다음 명령을 건너 뜁니다. 줄 바꿈 후 다음 명령은 ?이지만 $실행 으로 인해 실제로 파란색 경로에서 계속 진행되어 !다른 사본을 인쇄합니다 1. 포함하는이 루프 !..$는 이제 무한정 반복됩니다.

Hexagony의 제어 흐름에 대한 연구 ...

위의 솔루션이 최적이라고 생각합니다. I는 포함 된 모든 6 바이트 Hexagony 프로그램을 검사하는 짐승 포서를 작성한 적어도 하나의 각 ?!@(필요한되는, I는 확인한 :%대신 @분할 0으로 에러로 종료 할 수 있지만 그것도 도움이되지 않았습니다). 이 검사는 a) 0입력시 생성 0및 종료 및 b) 최소 2 1초 (및 기타) 를 생성하고 프로그램의 처음 60 틱 (5 바이트 솔루션의 경우 200 틱) 내에 종료 되지 않는 모든 프로그램을 인쇄합니다. . 유효한 솔루션이 작은 눈금에 첫 번째 0또는 두 번째를 올바르게 인쇄하는 데 200 틱 이상이 걸릴 것이므로 의심되는 솔루션을 1놓친 것으로 생각하지 않습니다.

검색 결과 5 바이트에 대한 결과는 나오지 않았지만 6 바이트에 대해서는 57 개의 결과가 나타 @났습니다 (사용 ; 동일한 양의 바이트에서이 문제를 깨끗하게 해결할 수 있다면 오류로 종료 할 필요가 없습니다). 그 중 57 명 중 6 명만이 실제로는 2 초만 인쇄 1한 다음 더 이상 인쇄하지 않고 무한 루프에 들어갔습니다. 하나의 솔루션에는 두 개의 !명령 이 포함되어 있기 때문에 두 번 나열되었습니다 . 정확히 50 개의 유효한 솔루션이 남습니다.

하나 또는 두 개의 문자가 실질적으로 유효하지 않은 솔루션 사이에는 어느 정도의 퇴화가 있습니다. 솔루션은 23 개의 진정으로 구별되는 프로그램 세트로 그룹화 할 수 있습니다 (일부 경우 두 세트간에 문자 차이가 하나 뿐이지 만 제어 흐름이 크게 변경되므로 별도로 계산했습니다). 두 그룹은 예상치 못한 방식으로 여러 명령 포인터를 사용하기도합니다. 가지와 거울을 사용하는 이러한 방법 중 대부분을 생각해 낼 수 없었기 때문에 Hexagony에서 어떤 종류의 제어 흐름이 가능한지에 대해 매우 흥미로운 연구를하고 미래 골프에 대한 몇 가지 새로운 트릭을 확실히 배웠습니다.

전체 제어 흐름은 거의 항상 동일합니다 : 숫자를 읽고, 그것을 인쇄 할 수 있습니다. 에 0대한 방법을 찾으면을 @계속 반복하지 않으면 !가장자리 값을 유지 1합니다. 다음과 같은 네 가지 예외가 있습니다.

  • 하나의 솔루션 (두 개가있는 솔루션 !) 1은 그리드를 통해 반복 당 2 초를 인쇄하므로 대부분의 프로그램보다 약 2 배 빠릅니다. 나는 이것을 x2아래에 표시했습니다 .
  • 몇 가지 솔루션 (AN을 함유하는 사람들은 o)를 교체 1로모그래퍼 111(문자 코드 o), 그래서 그들은 인쇄 1 들이 프로그램의 대부분만큼 빠르게 세 번에 대해 인쇄하고, 반복 당들. x3아래에 이것을 표시했습니다 .
  • 두 가지 솔루션 이 각 반복에서 모서리 값에 a 를 추가 합니다 1(따라서 1-> 11-> 111-> ...). 인쇄 속도가 매우 빠르지 만 결국 메모리가 부족합니다. OoM아래에 이것을 표시했습니다 .
  • 두 가지 솔루션은 매우 타이트한 루프로 들어가서 단지 앞뒤로 튀어 오를 !때마다 매 5 초 대신에 다른 모든 틱에 인쇄하여 조금 더 빠르고 깔끔하게 만듭니다. ><아래에 이것을 표시했습니다 .

전체 동물원은 다음과 같습니다.

#1                #5                #12                #19
?!/$.@            ?$!>$@            .?!/$@             |!|?$@  # ><
?!/$1@  # OoM     ?$!|$@            =?!/$@
?!/$=@                                                 #20
?!/$\@            #6                #13                $@.?<!
?!/$o@  # x3      ?/!<|@            .?/!$@             $@1?<!  # OoM
?!/$!@  # x2                        =?/!$@             $@=?<!
                  #7                                   $@o?<!  # x3
#2                ?\!<|@            #14
?!>$)@                              \!?__@             #21
?!>$1@            #8                                   _>_!?@
?!>$o@  # x3      ?<!>$@  # ><      #15
?!|$)@                              \_?!$@             #22
?!|$1@            #9                                   <!@.$?
?!|$o@  # x3      ?\$!@$            #16                <!@/$?
                                    \_?!_@             <!@=$?
#3                #10                                  <$@!$?
?!|)$@            ?~#!@)            #17                <.@!$?
?!|1$@            ?~#!@1            $$?\@!             </@!$?
?!|o$@  # x3                                           <=@!$?
                  #11               #18
#4                ?$)\@!            \$?\@!             #23
?_!<@>            ?$1\@!                               <<@]!?
                  ?$o\@!  # x3

다음은 소수의 대표적인 그룹을위한 간단한 설명입니다. 특히 그룹 10과 23은 체크 아웃 할 가치가 있습니다. 다른 그룹에는 다른 흥미롭고 복잡한 경로가 많이 있지만 이것의 끝에서 나는 당신을 충분히 지루하다고 생각합니다. 실제로 Hexagony를 배우고 싶은 사람에게는 거울과 거울의 더 많은 사용을 보여주기 때문에 조사 할 가치가 $있습니다.

그룹 1

이것은 원래의 솔루션보다 훨씬 정교하지는 않지만 경로는 다른 방향으로 진행됩니다. 또한 가장 오른쪽에있는 no-op를 5 가지 명령으로 대체하여 구조를 변경하지 않고도이를 유효하게 만들 수 있으므로 단일 셀에서 가장 많은 변형을 허용합니다.

여기에 이미지 설명을 입력하십시오

그룹 2

이것은 수평으로 만 움직이므로 매우 흥미 롭습니다. 로 줄 바꿈 >하면 IP가 즉시 반전되어 구석에 지점이 생깁니다. 다이어그램이 완전히 보이지는 않지만 1우리 의 경우 첫 번째 행을 다시 통과하지만 이번에는 뒤로 이동합니다. 이것은 또한 우리가 ?다시 뛰어 들어 0(EOF)를 반환 한다는 것을 의미 합니다 . )인쇄를 유지하기 위해 (증가)로 고정됩니다 1. 이것은 또한으로, 5 변화를 가지고 )도 될 수있다 1또는 o, 및 >도 될 수있다 |:

여기에 이미지 설명을 입력하십시오

그룹 3

이것은 이전과 거의 동일하게 보이지만 지옥처럼 지저분합니다. |맨 아래 줄 을 치고 다시 가로 지르는 것은 동일합니다. 그러나 루프의 경우 $이제 미러 ) 건너 뜁니다 . 그래서 우리는 건너 뛰기, 현재 증가에 충돌, 오른쪽에있는 청록색 경로를 따라 @우리는 주위에 포장하기 전에 | 다시다음 상단에있는 녹색 경로로 돌아갑니다.

여기에 이미지 설명을 입력하십시오

그룹 4

나는 이것이 특히 멋 졌다고 생각했다.

여기에 이미지 설명을 입력하십시오

_오른쪽 상단 의 미러는 처음에는 작동하지 않으므로로 인쇄하고 !를 누르십시오 <. 0경로는 이제 수평 거울을 명중하고 종료합니다. 1경로는 정말 흥미로운 궤적을 취합니다 . 경로는 아래로 휘어지고, 줄 바꿈되어 !가로 방향으로 리디렉션 된 다음 다시 줄 바꿈 ! 됩니다 . 그런 다음이 마름모 모양으로 계속 움직이면서 반복 당 두 번 인쇄됩니다 (3 번째 틱마다).

그룹 8

이것은 매우 엄격한 인쇄 루프를 가진 두 가지 솔루션 중 하나입니다.

여기에 이미지 설명을 입력하십시오

<분기와 같은 역할을합니다. 두 번 포장 한 후, 0히트 @. 1반면에, 우선은 생략 ?하고 >상기에 보낸다 $즉 스킵하므로, 다시 @. 그런 다음, IP는 앞뒤로 사이 청록색 반송 경로로 래핑 >하고 <(그 사이의 에지 주위에 배치).

그룹 10

다른 명령 포인터를 사용하는 두 그룹 중 하나이며 절대적으로 아름답습니다. Hexagony에는 6이 있습니다-각각은 시계 방향 가장자리를 따라 다른 모서리에서 시작하지만 한 번에 하나만 활성화됩니다.

여기에 이미지 설명을 입력하십시오

평소처럼, 우리는로 읽습니다 ?. 이제 ~단항 부정이다 : 그것은 변 1-1. 다음으로을 누르십시오 #. 이것은 IP 사이를 전환하는 한 가지 방법입니다. 현재 에지 값 모듈로 6을 가져와 해당 IP로 전환합니다 (IP는 0시계 방향으로 번호가 매겨 짐 ). 따라서 입력이 0이면 IP는 그대로 유지되며 지루하게 직선으로 이동합니다 !@. 그러나 입력이 1이면 현재 값은 -1입니다 5 (mod 6). 그래서 우리는 동일한 셀 (녹색 경로)에서 시작하는 IP로 전환합니다. 이제 #no-op이며 ?메모리 에지를로 설정합니다 0. )증가하므로 !a를 인쇄합니다 1. 이제 우리는 ~다시#프로그램을 종료하는 IP 1로 전환하는 것과 달리 여전히 작동하지 않습니다. 이 작은 프로그램에서 모든 것이 얼마나 잘 어울리는 지 생각이 듭니다.

그룹 22

참고로 이것은 원래 솔루션이 속한 그룹입니다. no-op은 두 개의 다른 위치에있을 수 있으며 실제 (효과적인 no-op) 명령에 대한 몇 가지 선택이 있기 때문에 가장 큰 그룹이됩니다.

그룹 23

여러 IP를 사용하는 다른 그룹입니다. 실제로 이것은 3 개의 다른 IP를 사용합니다. 오른쪽 상단은 약간 엉망이지만이 과정을 안내해 드리겠습니다.

여기에 이미지 설명을 입력하십시오

따라서 이전에 본 시작 : <북동쪽을 편향하고 ?입력을 읽습니다. 이제 ]IP를 변경하는 또 다른 방법은 시계 방향으로 다음 IP를 제어하는 ​​것입니다. 그래서 우리는 제어를 남동쪽으로가는 북동쪽 모퉁이에서 시작하는 청록색 경로로 전환합니다. <북동쪽으로 가면서 남동쪽 코너로 포장되도록 즉시 반영됩니다 . 그것은 또한 (가) 히트 ]그래서 우리는 전환 다음 IP. 이것은 동쪽 모서리에서 시작하여 남서쪽으로가는 회색 경로입니다. 입력을 인쇄 한 다음 북동쪽 모서리로 줄 바꿈합니다. <경로를 수평으로 편향시켜 다른 방향으로 경로를 반영합니다 <. 이제 오른손<입력이 0이면 IP가 북동쪽으로 이동하고으로 래핑됩니다 @. 입력이 1이면 IP !가로 <이동하여 반영되는 레프-스 랜드 로 랩핑합니다 . 이제 코너에서 다시로 랩핑 !하고 오른쪽으로 편향되어 <왼쪽으로 반사되고 <경로가 시작됩니다. 위에...

꽤 엉망이지만 아름다운 엉망입니다. :)


Timwi의 놀라운 HexagonyColorer로 생성 된 다이어그램 .


55
우와. 우와
코너 O'Brien

6
^ 동의했다. 정말 멋져요 ...
El'endia Starman

28
닥치고 내 공짜를 가져가!
Mego

7
@ThomasOltmann 나는이 답변이 언어에 대한 기본적인 지식을 가지고 있다고 인정합니다. 당신이 그것에 대해 더 학습에 실제로 관심이 있다면, 나는 기초를 통과 한 이 대답이 대답 하지만, 당신이하지 않으면 내가 당신을 비난하지 않습니다. ;)
Martin Ender

5
그래 ... 메모리 모델은 약간 (나는 생각하지만, 1D 테이프보다 여전히 더 나은) 고통스러운 보이는
존 드보락

144

Motorola MC14500B 머신 코드, 2 바이트

16 진수로 :

58EC

설명:

5  OR the register with input from the data bus
8  Write the register to the data bus
E  Skip next instruction if register is zero
C  Jump

Motorola MC14500B는 1 비트 마이크로 컨트롤러입니다. 1 비트 레지스터와 1 비트 데이터 버스가 있습니다. opcode는 각각 4 비트이므로 16 개만 있습니다. 그중 절반은 레지스터와 데이터 버스의 비트 사이에서 논리 연산을 수행합니다.

점프 명령은 점프 플래그를 설정합니다. 주소가 제공되지 않으면 프로그램 카운터를 0으로 설정하는 것이 일반적입니다. 입력 비트가 0이면 프로세서가 점프하지 않습니다. 입력 비트가 1이면 프로세서가 시작으로 되돌아갑니다. 우리는 OR입력을 가지고 있기 때문에 입력 신호가 무엇인지는 중요하지 않습니다. 그러면 레지스터는 영원히 1이됩니다.

기존과 마찬가지로 레지스터는 0으로 초기화됩니다.

opcode 목록은 데이터 시트 또는 here 에서 찾을 수 있습니다 .


7
이 과제에서는 2 바이트가 반드시 필요합니다.
코너 O'Brien

23
@ CᴏɴᴏʀO'Bʀɪᴇɴ 나는 esolang과 4 비트 프로세서 목록을 통해 몇 시간 동안 찾고 있었는데 1 또는 1.5가 있는지 찾지 못했습니다.
lirtosiast

작업에 꼭 맞는 도구입니다.
휴고 징크

링크가
지겨워

@TheDoctor 두 링크 모두 잘 작동합니다
Mego

85

아놀드 C, 296 바이트

IT'S SHOWTIME
    HEY CHRISTMAS TREE i    
    YOU SET US UP @NO PROBLEMO
    BECAUSE I'M GOING TO SAY PLEASE i
        STICK AROUND i
            TALK TO THE HAND i
        CHILL
    BULLSHIT
        TALK TO THE HAND i
    YOU HAVE NO RESPECT FOR LOGIC
YOU HAVE BEEN TERMINATED

경쟁이 아니라 재미를 위해. 표준 입력을 지원하지 않습니다, 대신 @NO PROBLEMO@I LIED0 값에 대한. @No Problemo1입니다.

다음으로 실행 (파일이 truthmachine.arnoldc라고 가정) :

wget http://lhartikk.github.io/ArnoldC.jar
java -jar ArnoldC.jar truthmachine.arnoldc
java truthmachine

46
아름다운. 나는 10
spaghetto

10
BECAUSE I'M GOING TO SAY PLEASELOL
에릭 마르티네즈

8
이 방법은 if(i){while(i) print(i);} else {print(i);}분명히 더 짧은 것 print(i);while(i) print(i);입니까?
lirtosiast

16
BULLSHIT프로그램의 엔터테인먼트 가치에 크게 기여 하지만 기술적으로는 불필요합니다. 이후 BULLSHIT로 이동 하여 전체 분기를 제외 할 수 있습니다 . TALK TO THE HAND iYOU HAVE NO RESPECT FOR LOGIC
gaborsch

4
: @GaborSch 그 단 하나의 적절한 응답이 BULLSHIT)
coinheringaahing 케어 드

65

마인 크래프트, 18 바이트 (MC 버전 15w45a)

마인 크래프트 스케치

보시다시피, 명령이 반복되는 반복 명령 블록으로 향하는 레버가 say 1있습니다. 그 위에 신호 반전 토치가 있으며, 명령이있는 단일 실행 명령 블록에 전원을 공급 say 0합니다.

스위치가 진실로 향할 때마다 repeater 블록은 코드 say 1를 사용하여 무한을 출력 1합니다. 레버가 false로 리디렉션되면 단일을 출력합니다 0.

이것은 [@]기본적으로 a 를 출력합니다 . 당신이 경우 정말 그냥 똑바로 1과 0을하려면,이 명령 블록의 코드는 34 바이트가된다 tellraw @a [1]tellraw @a [0]. 이것은 Meta에서 찾을 수있는 @ Cᴏɴᴏʀ O'Bʀɪᴇɴ의 MC에 대해 제안 된 바이트 수를 사용 하고 있습니다 .


28
코드 골프에 비디오 게임을 사용했습니다. +1
RK.

11
@RK. 이것은 실제로 간단한 도전에 대한 상당히 표준적인 관행입니다. MC를 코드 골프 언어로 사용하는 다른 사용자가 두 명 이상 있습니다 is:answer Minecraft. c :
애디슨 크럼프

1
@FlagAsSpam lol 멋지게 완료했습니다. 또한 MC 답변을 검색하는 팁에 감사드립니다.
Ashwin Gupta

56

배쉬 + GNU 유틸리티, 13

grep 0||yes 1

배쉬, 35

read n;for((;n;));{ echo 1;};echo 0

3
당신은 예와 떠들썩한 파티 솔루션이 가능할 것이다 경우 궁금 해서요, 알고 ...
spaghetto

2
좋은! 그건 꽤 영리
spaghetto

38

루비, 20

print while/1/||gets

다음과 같이 경고를 피하기 위해 명령 행에서 실행하십시오.

ruby -e "print while/1/||gets" <<< 0
ruby -e "print while/1/||gets" <<< 1

설명:

덜 골프, 이것은

while /1/ || gets
  print
end

정규식이 조건부에서 사용될 때 변수 $_가 채워지고 패턴과 일치 하지 않으면 거짓으로 평가됩니다 . 루프를 통해 처음으로 $_비어 있으므로로 넘어 가서 STDIN에서 읽은 행으로 gets값을 설정합니다 $_. print인수없이 인쇄합니다 $_. 이제 조건을 다시 평가합니다. 1을 읽으면 단락되고 1을 다시 인쇄하는 식으로 영원히 계속됩니다. 그렇지 않으면로 넘어가 gets지만 두 번째 입력 줄이 gets없기 때문에 nil을 반환하므로 루프가 끝납니다.


18
"일반적인"언어로도 사소한 작업으로 인해 마인드 블로잉 솔루션이 허용되는 것이 좋습니다. :)
Martin Ender

||gets부분은 멋지지만 모두 gets;print while/1/바이트를 저장하고 저장할 수는 없습니까?
daniero

아니요, 0을 전혀 인쇄하지 않습니다.
histocrat

37

마이크로 스크립트, 3 바이트

i{p

내가 아는 가장 짧은 것.

설명:

i  Takes numeric input and puts it in register 1
{  while register 1 is truthy
  p  Print the contents of register 1

마이크로 스크립트는 종료시 레지스터 1을 암시 적으로 인쇄하므로 입력이 0한 번 인쇄됩니다.


@quartata 내가 당신을 일치 : D
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ : O
스파게티

2
질문이나 답을 먼저 쓴 적이 있는지 궁금합니다.
John Dvorak

1
질문. 나는 질문을 쓰는 동안 생각해 낸 가장 짧은 것이기 때문에 이것을 게시하고 싶었습니다. 카탈로그이므로 실제 우승자가 없습니다.
스파게티


25

자바 스크립트, 28 바이트

For 루프는 종종 while 루프보다 짧습니다.

alert(x)를 반환합니다 undefined. 이는 거짓이므로 비트 또는 연산자는 |로 캐스팅합니다 0. 따라서 xis 인 경우 "0"한 번만 경고하고 그렇지 않으면 계속 반복합니다. 이 답변alert 과 같은 STDOUT에 사용 합니다 .

for(x=prompt();alert(x)|x;);

쏴 버려 나는 이것을 정확하게 게시하려고했다! :) GG
도미노

와우, 그것은 내 것보다 더 영리합니다 :) +1!
ETHproductions

뒤에 세미콜론이 필요하지 않습니다.
코너 O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ 어떤 브라우저를 사용하셨습니까? 파이어 폭스와 크롬에서 테스트했으며 그것을 얻지 못했습니다 SyntaxError.
intrepidcoder

@intrepidcoder 아, 죄송합니다. 내 마음은 "트레일 링 세미콜론은 쓸모가 없습니다"모드에있었습니다. ^^ "
코너 오브라이언

24

파이썬 2, 29 바이트

a=input()
while 1:print a;1/a

이에 분할 오류로 종료 0되어, 기본적으로 허용 .


STDERR 출력이 양호합니다. > <> 답변에서도 사용됩니다.
스파게티

이것은 훌륭합니다 ^ _ ^
ABcDexter

인쇄하는 동안 일을 하시겠습니까? 죄송합니다, 나는 파이썬을 모른다.
Rohan Jhunjhunwala

1
@RohanJhunjhunwala 0의 경우 아무 것도 인쇄하지 않지만 한 번 인쇄해야합니다.
xnor

1
@ xnor 아, 내 나쁜.
Rohan Jhunjhunwala

20

브레인 포트, 41 36 31 30 바이트

입력 직후와 Ethan 및 user46915의 도움으로 인쇄하면 단축됩니다.

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

이전 버전 : 입력에서 48을 빼고 0이 아닌 경우 1을 48에 추가하여 ASCII를 1영원히 인쇄하고, 그렇지 않으면 print를 인쇄 0합니다.

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

나는 여기에서 그것을 실행 했지만 버퍼 출력으로 인해 프로그램이 종료되지 않으므로 출력을 볼 수 없습니다 1.

편집 : 0입력시 인쇄 를 잊어 버렸습니다 0. 지금 수정했습니다. 나는 >.<끝에 얼굴을 좋아한다 .


1
@ThomasKwa 나는 추측하지 않지만 모듈로 2 전용 알고리즘을 보지 못했기 때문에 확실하지 않습니다. divmod 알고리즘 은 약간 길다.
mbomb007

2
별도의 "48"레지스터를 사용하는 대신 입력 레지스터를 사용하여 코드 조각을 조금 더 잘 통합하고 직접 사용하면 코드를 조금 더 단축 할 수 있습니다.,.[>+>+<<-]-[>-<-----]>+++[>.<]
Ethan

mod 2로 솔루션을 시도했습니다. 48을 빼는 것이 올바른 방법입니다. ,.[->+>+<<]>>[->[>-<[-]]>+[<+>-]<<]>[<<.>>]
cardboard_box

1
@Ray 이것이 기본값이며 일반적으로 가정됩니다. 다른 구현을 사용했다면 그렇게 말했을 것입니다.
mbomb007

1
빼기와 복사를 결합하여 하나 이상의 바이트를 얻을 수 있습니다.,.+++[->>+<-----<]>>---<-[>.<]
user46915

19

피에트, 27 18 16 코덱

(Codel은 이미지를보기 위해 늘릴 때 혼란을 피하기 위해 사용되는 픽셀의 멋진 이름입니다. piet 스크립트가 이미지로 저장되므로 실제 크기가 다를 수 있기 때문에 바이트 대신 코덱을 계산했습니다. 이 piet은 가능한 한 효율적으로 11 바이트가 필요합니다. 실제로, 작은 gif 파일은 최적의 팔레트 데이터와 함께 62 바이트입니다.이 값을 코덱 크기 대신 항목의 크기로 사용해야하는지 알려주십시오.)

원본 이미지 : 작은 버전

크게 하는: 확대 버전

piet에서 두 색상의 차이는 어떤 명령이 실행되는지 결정하는 것이므로 동일한 색상을 두 번 본다고해서 동일한 동작을하는 것은 아닙니다. 왼쪽 상단 코덱에서 실행이 시작됩니다. 그런 다음 수평으로 이동하여 다음을 수행합니다.

  1. 숫자를 읽고 스택에 넣습니다.
  2. 스택 상단 복제
  3. 스택 상단을 팝하고 출력
  4. 스택의 상단을 팝하고 그 횟수만큼 시계 방향으로 회전합니다.

입력이 1이면 커서가 석회 코덱으로 이동하여 스택에서 1을 밀어냅니다. 그런 다음 실행은 계속 진행됩니다. 커서가 색상에서 흰색으로, 흰색에서 색상으로 이동하면 아무 일도 일어나지 않습니다. 검은 색도 벽으로 간주되기 때문에 커서는 상단 라인의 석회 코덱으로 돌아가서 2 단계부터 모든 것을 반복합니다.

그러나 입력이 0이면 커서가 내려 가지 않고 오른쪽의 파란색 J로 끝납니다 (pun 의도 된 것, 그만한 가치가 있음), 갇힌 상태 (위, 오른쪽, 왼쪽 및 이 J 자형 블록의 아래쪽은 검은 색 코덱 또는 이미지 가장자리 옆에 있습니다. 커서가 갇히기 때문에 실행이 종료됩니다.

예상치 못한 값 :
사용자가 다른 숫자를 쓰면 여전히 인쇄되며 값에 따라 커서가 다소 회전합니다.

  • 4 또는 0의 배수 : 실행이 수평으로 계속되고 종료됩니다.
  • 3의 배수 : 올라가는 것이 불가능하므로 커서가 즉시 시계 방향으로 회전하고 수평으로 계속 된 다음 종료됩니다.
  • 4의 배수가 아닌 2의 배수 : 커서가 회전하고 왼쪽으로 이동하기 시작합니다. 운 좋게도이 모든 작업은 프로그램 흐름에 영향을 미치지 않고 스택을 비우는 많은 작업을 수행하는 것입니다. 스택이 비어있어 작업을 수행 할 수없는 경우 단순히 무시됩니다. 왼쪽 상단 모서리에 도달하면 커서가 다른 곳으로 이동하지 않고 다시 오른쪽으로 이동하여 프로그램을 효과적으로 다시 시작합니다.
  • 다른 값 : 1과 같이 커서가 아래로 내려가 1을 영원히 인쇄합니다. 입력이 5이면 출력은5111111111111...

정수가 아닌 값은 프로그램을 종료합니다. 실행은 정상적으로 계속되지만 스택에 아무것도 없으므로 모든 작업이 무시됩니다. 어떤 식 으로든 프로그램은 충돌하지 않습니다. 프로그램이 정상적으로 중지되거나 영원히 반복됩니다.


PietDev 프렌 들리 버전

PietDev (매우 기본적인 온라인 Piet IDE)는 흰색 코덱에 문제가있는 것처럼 보이므로 올바른 흰색 코덱 자동 회전에 의존하는 대신 수동으로 다시 회전하는 새 버전을 만들었습니다. 그리고 나는 새로운 색을 사용할 필요조차 없었습니다! 테스트를 원한다면 PietDev는 사용자 정의 프로그램 크기를 지원하지 않기 때문에 코드 주위에 검은 색 테두리를 그려야합니다.

작은 버전

확대 버전


이전 버전

첫 번째 버전은 스택에서 1을 뒤로 밀지 않고 이전의 복제 명령으로 되돌아갔습니다. 또한 쓸모없는 장식용 코덱도있었습니다.

실제로 파이트 코드 인 작은 패턴

확대 버전

그런 다음 빈 줄을 제거하기 위해 스택에서 1을 밀어 넣는 아이디어가있었습니다. 장식용 코덱 덕분에 내가 어떻게 생각했는지 재미있다.

작은 버전

큰 버전

그런 다음 더 이상 필요하지 않은 불필요한 dup이 있음을 깨달았고 이미지의 팔레트 데이터를 저장하기 위해 색상 수를 줄였습니다. 나도 모르기 때문에 단일 장식 코덱을 제거했습니다.


7
나는 피에트의 대답은 codels 이외의 득점 본 적이 없어,하지만 난 최적의 바이트 수는 :) 포함하는 흥미 생각
undergroundmonorail

1
20 개의 서로 다른 코덱 값이 있습니다. 즉, 3 개의 코덱을 13 비트로 압축 한 다음 8 개의 삼중 항을 13 바이트로 압축하여 바이트 당 2.6 개의 코덱 밀도로 저장할 수 있습니다. 그러나 누군가는 그 언어를 먼저 정의해야합니다. 나는 이름이 DPPi = 조밀하게 포장 된 piet을 제안한다.
John Dvorak

1
@ JanDvorak 줄 바꿈을 위해 특별한 값을 추가하기 위해 21 개의 값을 계산했으며 첫 줄 바꿈을 얻은 후에는 파서가 다른 줄의 위치를 ​​추측 할 수 있습니다. 그러나 나는 코덱을 트리플렛으로 결합하는 데까지 가지 않았습니다. 코덱 당 5 비트를 낭비하는 것보다 훨씬 더 합리적입니다. 영리한.
Domino

1
치수를 첫 두 바이트로 추가하십시오. 추가 기호가 필요하지 않습니다.
John Dvorak

1
@ 시도하는 사람 : PietDev는 단일 1 만 인쇄하고 종료하기 때문에 PietDev 로이 솔루션을 시도하지 마십시오. 그러나 솔루션은 npiet과 올바르게 작동합니다.
ML

19

피스, 4 2

Wp

이 아니오! 후행 공간 (isaac :) 감사합니다). while 루프 컴파일에 필요한 공간 이었지만 Pyth가 업데이트되었습니다. 일반적으로 사용하면 실격 처리되지만 카탈로그이기 때문에 유효합니다.

설명:

Wp        : implicit Q = eval(input)
W         : while
 p        : print and return the value of Q, to be evaluated as the while condition
          : Functions without enough arguments automatically use Q now
          : do nothing in the body of the while loop

5
Pyth에 암시적인 내용 pass을 추가 한이 답변 에 의문을 가졌습니다. 공간은 이제 불필요합니다. pyth.herokuapp.com/?code=WpQ&input=0&debug=0
isaacg 1

52
십자형은 여전히 ​​4처럼 보입니다.
코너 O'Brien

1
Eh, 나는 방금 pyth를 지루해하는 것이 항상 모든 것을 지배합니다 :(. LOL.
Ashwin Gupta

1
@AshwinGupta 내 언어는 기술적으로 그것을 이겼으므로 완전히 지배적이지는 않습니다 :)
Cyoce

@Cyoce 그래! 잘 했어! 나는 무언가가 pyth lol을 이길 수 있다고 확신합니다.
Ashwin Gupta

16

, 6 바이트

e*faAs

칩은 집적 회로처럼 동작하는 2D 언어입니다. 한 번에 한 바이트 씩 입력을 받아 비트를 개별 입력 요소로 나눕니다. 출력은 출력 요소의 값을 바이트 단위로 다시 연결합니다.

이것을 분해하자 :

*소스 신호이며 모든 인접 요소에 실제 값을 보냅니다. ef출력의 제 5 및 제 6 비트에 대응한다. 따라서 ASCII 문자 "0"인 e*fbinary를 생성합니다 00110000.

이제 A입력 a의 첫 번째 비트가 출력의 첫 번째 비트이므로 aA해당 비트를 입력에서 출력으로 복사합니다. 따라서와 결합하면 e*fASCII "0"의 입력은 "0"을 생성하고 "1"은 "1"을 생성합니다. 신호를 생성하지 않기 때문에 f와 사이에는 상호 작용이 없습니다 a.

s진정한 신호에 의해 활성화되면 끝은, 모든 일이 같은 입력 다시 실행 즉, 다음의 바이트 진출의 입력을 방지 할 수 있습니다.

"0"의 첫 번째 바이트가 0이므로이 요소를 활성화하지 않으며 프로그램은 "0"을 인쇄하여 입력을 소진시켜 종료 할 수 있습니다. 그러나 "1"은이 요소를 활성화합니다. 즉, "1"이 출력되지만 입력에서 소비되지 않으므로 사이클이 무한정 반복 될 수 있습니다.

ASCII가 아닌 0x0 및 0x1 값이 출력에 사용되는 경우 해당 e*f부분을 제거하여 3 바이트 만 생성 할 수 있습니다 .

aAs

제로 오히려 닫 표준 입력 기대보다, 자신을 종료해야하는 경우, 우리와 함께 첫 번째 바이트를 반전 다음, 수 ~,과에 결과를 전달 t프로그램 (종료, 10 바이트 ) :

aA~te*f
 s

( t또한 신호를 생성하지 않으므로 t와 사이에 상호 작용이 없습니다 e.)


2
좋은 대답입니다! 이것은 카탈로그 챌린지이므로 이것을 비경쟁으로 표시 할 필요가 없으므로 해당 비트를 제거했습니다. PPCG에 오신 것을 환영합니다!
Mego

4
TIO에 Chip을 추가 할 자유를 얻었습니다. 온라인으로 사용해보십시오!
데니스

@Dennis, 질문 : TIO가 소스를 업데이트하도록하려면 어떻게해야합니까? 지난주에 칩 인터프리터의 버그를 수정했지만 변경 사항을 TIO로 전파하지 않았습니다. 다른 사람이 나를 위해해야 ​​할 일입니까?
Phlarx

칩을 뽑았습니다. 업데이트가 필요한 경우 talk.tryitonline.net에 메시지를 남겨 주세요 .
Dennis

14

Brainbool , 5 바이트

,.[.]

Brainbool은 Brainfuck이지만 비트에서만 작동하며 I / O 01문자를 수행합니다.


3
이것이 가능할 수있는 BF 파생물이 있어야한다는 것을 알았습니다.
스파게티

14
나는 "Boolfuck"이 더 나은 이름 일지 모르지만 잘 관계없이 이루어졌다.
제임스 머피

2
@JamesMurphy 이미 존재하는 것 같습니다 : esolangs.org/wiki/Boolfuck
DLeh

13

LOLCODE, 119 바이트

GIMMEH n
n R SUM OF n AN 0
BOTH SAEM n AN 0, O RLY?
YA RLY
 VISIBLE 0
NO WAI
 IM IN UR l
  VISIBLE 1
 IM OUTTA UR l
OIC

언 골프 드 :

HAI

BTW, Read n as a string from STDIN and convert to an integer
GIMMEH n
n R SUM OF n AN 0

BTW, Test n for equality with 0
BOTH SAEM n AN 0, O RLY?
YA RLY
    BTW, Write 0 to STDOUT and exit
    VISIBLE 0
NO WAI
    BTW, Loop forever, printing 1
    IM IN YR l
        VISIBLE 1
    IM OUTTA YR l
OIC

KTHXBYE

1. 어떤 통역사를 사용하십니까? 2. 당신 MAEK n A NUMBR은 캐스팅 할 수 있습니까 ? 3. DIFFRINT대신 BOTH SAEM조건 을 사용 하고 조건을 전환 할 수 있습니까 ?
lirtosiast

@ThomasKwa 나는 repl.it에있는 LOLCOFFEE를 사용하고있었습니다. (현재 중단 된 것으로 보이므로 제안이 백업되면 제안을 테스트하겠습니다.)
Alex A.

O RLY?부울로 캐스팅 하지 않습니까?
Leaky Nun

트윗 담아 가기 O RLY?postfix와 같습니다 if.
Alex A.

12

C, 37 바이트

C에서 다른 방법으로 수행하십시오.

main(c){for(gets(&c);putchar(c)&1;);}

c디폴트 int값 1의이 gets(&c)문자열을에서 얻을 stdin여기의 값을 건드리지, chackishly 때문에 c하지 않은 것입니다 char*. to putchar(c)값을 인쇄 하고를 반환합니다 . ASCII 는 48이고 49 이므로 마지막 비트 ( )를 사용하여 어떤 비트 인지 확인할 수 있습니다. 인 경우 루프가 중단됩니다. 그렇지 않으면 영원히 사라집니다.cstdoutc'0''1'&1'0'

에 대해 경고와 함께 컴파일 하고 Linux에서 gets실행됩니다 gcc-4.8.


2
아마도 이것은 리틀 엔디안 아키텍처에서만 작동합니다.
Neil

@ 닐 그렇게 생각합니다.
cbojar 2016

@Neil Endianness는 멀티 바이트 값의 바이트 순서에만 영향을줍니다.
LegionMammal978

1
@ LegionMammal978의 c기본값 int은 멀티 바이트 값인이며, 빅 엔디안 아키텍처에서는 gets잘못된 바이트를 설정합니다.

11

미로 , 7 바이트

 ?+
@!:

Labyrinth는 2D 스택 기반 언어로, 제어 흐름은 스택의 맨 위 요소 부호에 따라 결정되며 모든 명령 후에 확인됩니다. 실행은 맨 위 행의 첫 번째 유효한 명령에서 오른쪽으로 이동하기 시작합니다 (여기서는) ?.

관련 지침은 다음과 같습니다.

?      Input integer
+      Add top two elements (Labyrinth's stack has infinite 0s on the bottom)
:      Duplicate top element
!      Output as number
@      Terminate program

입력이 0이면 IP ?는로 입력을 읽고 스택의 맨 위 두 개 ( 0 + 0 = 0)를 더한 다음 0 을 복제 :하여 출력 !합니다. 여기서는 프로그램에서 유일한 접점을 발견하고 스택의 상단을 확인하여 결정해야합니다. 어디로 가야. 상단이 0이므로 앞으로 이동하고로 끝납니다 @.

다른 한편으로, 입력이 1이면,에서 접합점에 도달하기 전에 이전과 동일한 명령을 수행하지만 (1을 출력 함) !. 이제 스택의 맨 위가 양수로 바뀌고로 바뀝니다 ?. EOF 미로는 공을 밀어, 그래서 우리가 할 일 0 + 1 = 1상기 +, 복제 :및 출력 !. 다시 한 번 스택 상단에 1이 있고 루프는 계속됩니다.

보너스를 위해, @ MartinBüttner의 7 바이트 솔루션은 다음과 같습니다.

?+!@
1!

대부분의 언어와 달리 1실제로 n스택에서 튀어 나와서 밀어 내 n*10 + 1므로 많은 수의 빌드가 쉬워집니다. 그러나이 시점에서 스택의 상단이 비어 있으므로 단순히 1을 누르는 것과 다르지 않습니다.


10

> <> , 7 바이트

i2%:n:,

이것은> <>가 1 mod 2 인 EOF에서 -1을 눌렀다는 사실을 사용합니다. 또한 종료에 0으로 나누기를 사용합니다 (합의는 STDERR 출력이 무시되므로 괜찮습니다).

참고로 오류없이 깨끗하게 종료하는 것은 여분의 바이트입니다.

i2%:n?!;

10

APL, 6 바이트

→⎕←⍣⍲⎕

설명:

     ⎕ Read the input, then
 ⎕←    write it out
   ⍣   repeatedly
    ⍲  until NAND of it with itself becomes true.
→      Branch to zero to avoid printing the result again.

1
두 번째 문자와 마지막 문자가 다르게 보입니까? 그들은 나를 위해하지 않기 때문에.
John Dvorak

@ JanDvorak 아니, 그들은 동일합니다.
Alex A.

1
OK, 지금은 두 개의 화살표 있지만, 모바일 및 모든 그것을 찾고 있어요는 D는 나에게 같은 보이는
존 드보락

10

Brian & Chuck , 21 바이트

,}<-{-?<SOH>_{+?
_>+{?<.p

여기 <SOH>에서 해당 제어 문자 (0x01)로 바꿔야합니다.

설명

기본 아이디어는 p척의 끝 에서 입력의 문자 코드 (48 또는 49)를 빼는 것 ?입니다. 이는 유효한 명령입니다.@ no-op 인 것입니다.

,입력 문자를 척의 첫 번째 셀 (로 표시됨 _) 로 읽습니다 . 0다른 값을 변경하면서 루프 에서이 값을 낮추려고합니다 .

}<받는 사람 이동 p-를 감소시킵니다. 그런 다음 {입력 셀로 다시 이동하여 -감소시킵니다. 이것이 0이 아닌 한 ?척을 제어합니다. 이제 >Brian의 테이프 헤드 하나의 셀을 오른쪽으로 이동하고 (초기화 됨 1) +증가시킵니다. 그런 다음로 루프를 재설정합니다 {?.

척에 첫 번째 셀 히트 무렵 0<SOH>셀은 우리가 STDIN에서 읽은과 문자로 증가 된 것입니다 p될 것입니다 ?입력 1또는 @입력0 .

이제 ?더 이상 제어를 전환하지 않습니다. 0또는 1그것은 널 바이트이므로 무 조작 (로 표시되지 않으면 _). {척의 첫 번째 셀로 다시 이동하여 +양수인지 확인하여 ?손이 척으로 제어되도록합니다.

이 시간 >+은 Brian의 초기 테이프가 끝난 후 셀을 증가시킵니다. 그 세포는 쓰레기이지만 결코 사용하지 않을 것입니다. 이제 {Brian의 테이프 앞쪽으로 스캔하지 않고 _. 따라서 ?현재 셀이 0이기 때문에 no-op입니다. 그때<. 1을 왼쪽 (입력 문자의 사본)으로 이동하여 인쇄합니다.

마지막으로, 우리는 발생 ?또는 @. 입력 0이 있고이 셀이 작동 @하지 않으면 프로그램이 종료됩니다. 그러나 입력 1이 있고이 셀이 ?우리가 Brian에게 넘겨 {+?주면 Chuck의 루프를 재설정 할 것입니다. 이제 우리는 1영원히 인쇄하고 있습니다 (Brian의 테이프 끝에있는 셀의 정수가 메모리에 맞지 않을 때까지) 더, 나는 가정합니다 ...).

보너스

Sp3000과 저는 며칠 동안 골프를 치러 왔습니다. 우리는 약 40 바이트에서 시작하여 완전히 다른 두 가지이지만 26 바이트에서 묶인 솔루션에 도달했습니다. 내가 설명을 쓰기 시작했을 때만 위의 21 바이트 솔루션이 나에게 발생 했습니까? B & C의 아이디어를 던지고 서로에게 골프 트릭을 가르치는 Sp에게 감사드립니다. :)

이것은 그의 26 바이트 솔루션입니다.

>,----{?{>1?0
#I<?_}<.<<<?

그리고 이것은 내 것입니다 :

,{>-<-?_0+?_1{<?
_®{?_{>.?

®값이 174 인 바이트는 어디에 있습니까 (예 : 파일을 ISO 8859-1로 저장하십시오).

그 핵심에서 광산, 21 바이트의 용액에 유사하게 작동 ®하게 }입력 1~입력 (NO-OP) 0하지만 실행이 훨씬 고급이다.

그의 해결책은 소스 코드가 ASCII 전용이며 입력을 처리하기 위해 루프가 필요하지 않다는 점에서 매우 깔끔합니다. 대신에, ----회전 1-0,(척에 대한 무 조작). 그러면 Brian의 테이프 -에서 첫 번째 ?테이프 가로 바뀌어 케이스에 >대한 다른 제어 흐름이 만들어집니다 1.


10

비트 순환 태그 , 3 비트 또는 <1 바이트

Bitwise Cyclic Tag는 가장 간단한 Turing-complete 언어 중 하나입니다. 프로그램데이터 라는 두 개의 비트 열로 작동 합니다 . 프로그램 의 비트는 주기적으로 읽히고 다음과 같이 해석됩니다.

  • 0: 첫 번째 데이터 비트를 삭제하고 출력이있는 구현에서 출력합니다.
  • 1x: 첫 번째 데이터 비트가 1, 추가 x(나타내는 하나 0또는 1데이터의 끝). (첫 번째 데이터 비트가 0인 경우 아무 것도하지 마십시오.)

데이터 문자열이 비워 질 때까지 프로그램이 실행됩니다.

진실 기계

110

데이터 문자열이 다음으로 설정된 경우 0:

  • 11첫 번째 데이터 비트가 아니기 때문에 아무것도 추가하지 않습니다 1.
  • 0삭제 / 출력 0.
  • 데이터 문자열이 비어 있고 프로그램이 중지됩니다.

데이터 문자열이 다음으로 설정된 경우 1:

  • 11을 추가합니다 1.
  • 0삭제 / 출력 1.
  • 데이터 문자열은 단일 1로 돌아가고 프로그램은 원래 위치로 돌아 오므로 영원히 반복됩니다.

9

GNU sed, 10

:;/1/{p;b}

설명

  • : 명명되지 않은 라벨 정의
  • /1/입력은 정규식 일치하면 1다음을,
  • p 패턴 공간을 인쇄합니다 (예 : 1)
  • b 이름이없는 라벨로 돌아갑니다 (영원히)
  • 입력이 1이 아닌 경우 (즉, 0), 패턴 공간이 수정되지 않은 상태로 인쇄되고 프로그램이 종료됩니다.

:;p;/1/bn 플래그를 사용하여 1 개의 문자를 총 9 바이트로 줄입니다. sed -f어쨌든 스크립트 파일을 실행하는 데 사용 되므로 추가 플래그를 추가하는 데 2 ​​바이트가 필요하지 않습니다.
seshoumara

9

진심으로 , 4 3 바이트

4가 여전히 4 인 경우 :(

,W■

,STDIN에서 값을 읽습니다. W스택 맨 위에있는 값이 body로 진실 된 동안 실행되는 루프를 시작합니다 . 팝하지 않고 상단 스택 요소를 인쇄합니다. 루프는 암시 적으로 EOF에서 닫힙니다.

입력시 0 하면 루프가 실행되지 않고 ( 0false이므로) 프로그램이 EOF에서 종료되어 스택의 모든 값을 자동으로 팝업하여 인쇄합니다. 입력에 1(또는 임의의 값이 아니다 0, ""또는[] ), 루프 실행 무한히.

에서 사실 , 선두는 ,2 바이트까지 점수 차를 가져 오는 (암시 적 입력 덕분에) 필요하지 않습니다.


8

목요일, 34 바이트

1::=12
2::=~1
0::=~0
@::=:::
::=
@

설명:

1::=12 하위 문자열 "1"의 인스턴스는 "12"가 될 수 있습니다.

2::=~1 하위 문자열 "2"의 인스턴스를 제거하여 "1"을 인쇄 할 수 있습니다.

0::=~0 "0"을 인쇄하는 하위 문자열 "0"의 인스턴스를 제거 할 수 있습니다.

@::=::: 하위 문자열 "@"의 인스턴스는 입력의 문자열로 대체 될 수 있습니다.

::= 대체 규칙의 끝 목록

@ 초기 문자열은 "@"입니다.


8

아놀드 C, 134 바이트

IT'S SHOWTIME
HEY CHRISTMAS TREE i
YOU SET US UP 0         //or 1
STICK AROUND i
TALK TO THE HAND 1
CHILL
TALK TO THE HAND 0
YOU HAVE BEEN TERMINATED

이것은 다른 ArnoldC answer 만큼 재미 있지는 않지만 골프입니다. 예를 들어 들여 쓰기는 불필요하며 매크로 @NO PROBLEMO@I LIED.

입력 할 수없는이 언어 버전으로 테스트되었습니다 .


8

Cubix , 5 6 바이트

Cubix는 @ETHproductions의 새로운 2 차원 언어로, 명령이 큐브의면을 둘러싸고 있습니다. 온라인 통역사 절약을위한 @ETHproductions에 감사드립니다.

!I\@O

결국 큐브까지 확장됩니다

  !
I \ @ O
  .

I명령으로 시작합니다 . 스택에 정수를 입력하십시오.
\, no op 위로 명령 포인터를 아래로 리디렉션합니다.
O, 스택 상단의 숫자 값을 출력합니다.
!@스택 맨 위가 true이면 다음 명령 ( )을 건너 뜁니다 . \1
\이면 리디렉션 을 건너 뛰고 명령 포인터를 @종료 프로그램으로 리디렉션합니다 .

이것은 스택이 O ? !명령에 의해 팝되지 않는다는 사실을 이용 합니다.


좋은. 나는 다른 사람이 내 언어를 사용하는 것을 보게되어 정말 기쁩니다.
ETHproductions

@ETHproductions는 확실히 게시합니다. 나는 당신이 유망한 언어를 여기에 있다고 생각합니다 :)
MickyT

당신은을 제거하여 바이트를 저장할 수 있습니다 ?그냥 사용 !:!I\@O
ETHproductions

@ETHproductions 아주 좋은
MickyT

1
내가 쓴 짐승 - 강제 자 이에 대한 (경고 : 2 분을 위해 브라우저를 정지) 정확히 5 5 바이트 해결책을 제공 : @IOw!, @I?Ov, @!IOw, !IOW@,!I\@O
ETHproductions

7

Foo , 6 바이트

&1($i)

Foo에는 STDIN 입력이 없으므로 입력은 두 번째 문자로 하드 코딩됩니다. 우리는 지금 Foo가 최고라고 동의하지 않습니까? :)

설명

&1          Set current cell to 1
  (  )      Do-while loop (or, at least according to the interpreter)
   $i       Print current cell as int

2
나는 항상 Foo를 좋아했습니다.
스파게티

7

펄, 18 + 1 = 19 13 + 1 = 14 바이트

print while$_

다음과 같이 실행하십시오.

echo -n NUM | perl -p truth.pl

5 바이트를 깎아 낸 ThisSuitIsBlackNot (Perl 골프에서 나보다 더 나은 사람)에게 감사합니다.


2
문장 수정자는 당신의 친구입니다! 또한 입력에 후행 줄 바꿈이없는 경우 +0: echo -n 0 | perl -pe'print while$_'(13 bytes + 1)을 삭제할 수 있습니다 -p. perl -M5.010 -pe'say while$_'더 짧을 수도 있지만 0과 1 사이의 줄 바꿈이 일치하지 않습니다.
ThisSuitIsBlackNot

트윗 담아 가기 나는 $ _ 동안 인쇄를 시도했지만 왜 작동하지 않는지 알 수 없었습니다. 나는 당신이 입력에 후행 줄 바꿈을 가질 수 없다는 것을 몰랐습니다.
스파게티

네, 문자열 0은 거짓이지만 0+ 개행은 참입니다. 참조하십시오 perldoc perlsyn.
ThisSuitIsBlackNot

2
say-E여분의 바이트로 계산하더라도 더 짧습니다 .
Dennis

2
@Dennis ... 방금 깨달은 -l: perl -lpE 'say while$_'(11 bytes + 2 for -lp) 로 고정 할 수 있습니다 .
ThisSuitIsBlackNot

7

> <> , 6 바이트

::n?!;

스택의 입력을 푸시하여 시작

:        copy top element on stack
 :       copy top element on stack again
  n      pop and outputs top element
   ?     condition trampoline - pops top element, if it is zero skips next instruction
    !    trampoline skips next instruction
     ;   finish execution

1
여기 PPCG에서는 설명이 마음에 듭니다. +1
스파게티

3
48 ( '0') 및 49 ( '1') 와 함께 작동 해야하는 리터럴 0 및 1 입력에서만 작동한다고 확신합니다 . 내가 착각 했니?
undergroundmonorail

@quartata 나라면, 전통적인 입력 방법을 사용하는 답변에 공평하려면 스택에 48 또는 49를 넣어야합니다. 그것은 당신의 도전이지만 어쨌든 큰 문제는 아니므로 ¯ \ _ (ツ) _ / ¯
undergroundmonorail

2
이것에 또 다른 문제가 있습니다 : 스택이 미리 채워져 있으면 -v플래그에 3 바이트를 추가해야합니다 .
El'endia Starman

1
@Aaron : 가치가있는 것에 대해 2 바이트라고 생각한 -v후에 수정되었습니다. 그래서 당신은 유일한 사람이 아닙니다. :)
El'endia Starman 20
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.