간단한 고양이 프로그램


84

가장 일반적인 표준 작업 중 하나 (특히 난해한 프로그래밍 언어를 보여줄 때)는 "고양이 프로그램" 을 구현하는 것입니다 . 모든 STDIN을 읽고 STDOUT에 인쇄하십시오. 이것은 유닉스 쉘 유틸리티의 이름을 따서 명명되었지만 cat실제로 디스크에서 읽은 여러 파일을 인쇄 (및 연결)하는 데 사용되는 실제보다 훨씬 덜 강력합니다.

태스크

당신은 작성해야 전체 프로그램의 표준 입력 스트림의 내용을 읽고 표준 출력 스트림에 그대로 기록합니다. 귀하의 언어가 표준 입력 및 / 또는 출력 스트림을 지원하지 않는 경우 (대부분의 언어에서 이해되는 바와 같이), 대신이 용어를 귀하의 언어에서 가장 가까운 동등한 의미로 간주 할 수 있습니다 (예 : JavaScript prompt및 및 alert). 다른 인터페이스가 작업의 성격을 크게 바꾸고 답변을 훨씬 덜 비교할 수 있기 때문에 이것들은 유일하게 허용되는 I / O 형식입니다.

출력은 정확히 입력을 포함해야하며 다른 것은 포함 하지 않아야합니다 . 이 규칙의 유일한 예외는 인사말, ANSI 색상 코드 또는 들여 쓰기와 같이 억제 할 수없는 언어 해석기의 일정한 출력입니다. 이것은 후행 줄 바꿈에도 적용됩니다. 입력에 후행 줄 바꿈이 포함되어 있지 않으면 출력에 줄 바꿈이 포함되어서는 안됩니다! 언어가 실행 후 항상 줄 바꿈 문자를 항상 인쇄하는 경우는 예외입니다.

표준 출력 스트림에 예상 출력이 포함되어 있으면 표준 오류 스트림으로의 출력은 무시됩니다. 특히, 이는 표준 출력 스트림을 오염시키지 않는 스트림의 끝 (EOF)에 도달하면 오류로 프로그램이 종료 될 수 있음을 의미합니다. 이렇게하면 오류없는 버전을 답변에 추가하는 것이 좋습니다 (참조 용).

이는 언어 간이 아니라 각 언어 내에서 해결해야 할 과제이므로 몇 가지 언어 별 규칙이 있습니다.

  • 언어에서 표준 입력 스트림의 널 바이트를 EOF와 구별하는 것이 가능한 경우 프로그램은 다른 바이트와 같이 널 바이트를 지원해야합니다 (즉, 표준 출력 스트림에도 기록되어야 함).
  • 언어에서 임의의 무한 입력 스트림 을 지원하는 것이 가능하다면 (즉, 입력에서 EOF를 누르기 전에 출력에 바이트 인쇄를 시작할 수있는 경우),이 경우 프로그램이 올바르게 작동해야합니다. 예를 들어 s yes | tr -d \\n | ./my_cat의 무한 스트림을 인쇄해야합니다 y. 표준 출력 스트림을 인쇄하고 플러시하는 빈도는 사용자에게 달려 있지만 스트림에 관계없이 유한 한 시간 후에 발생해야합니다 (특히, 다음과 같은 특정 문자를 기다릴 수 없음을 의미 함) 인쇄 전 줄 바꿈).

널 바이트, 무한 스트림 및 외부 출력과 관련된 정확한 동작에 대한 답변을 메모에 추가하십시오.

추가 규칙

  • 이것은 가장 짧은 해결책으로 언어를 찾는 것이 아닙니다 (빈 프로그램이 트릭을 수행하는 곳이 있습니다)-이것은 모든 언어 에서 가장 짧은 해결책을 찾는 것 입니다. 따라서 답변이 수락 된 것으로 표시되지 않습니다.

  • 대부분의 언어에서 제출은 적절한 기존 인코딩 (보통 UTF-8은 아님)으로 바이트 로 채점됩니다 .

    Folders 와 같은 일부 언어 는 점수를 받기가 약간 까다 롭습니다. 의심스러운 경우 Meta에 문의하십시오 .

  • 이 도전보다 새로운 언어라도 언어 (또는 언어 버전)를 자유롭게 사용하십시오. 이 과제에 0 바이트 답변을 제출하기 위해 특별히 작성된 언어는 공정한 게임이지만 특별히 흥미롭지는 않습니다.

    제출물을 테스트하려면 통역사가 있어야합니다. 이전에 구현되지 않은 언어에 대해이 통역사를 직접 작성할 수 있습니다.

    또한 언어 프로그래밍 언어에 대한 일반적인 기준 을 충족해야합니다 .

  • 선택한 언어가 이미 답변이있는 다른 (잠재적으로 더 널리 사용되는) 언어의 사소한 변형 인 경우 (BASIC 또는 SQL 방언, Unix 쉘 또는 Headsecks 또는 Unary와 같은 사소한 Brainfuck 파생물을 생각하십시오) 기존 답변에 메모를 추가하십시오 동일하거나 매우 유사한 솔루션은 다른 언어에서도 가장 짧습니다.

  • 이전에 철회하지 않는 한 http://meta.codegolf.stackexchange.com/q/1061을 포함한 모든 표준 규칙이 적용됩니다 .

부수적으로, 골프가 많지 않은 언어에서는 지루한 (그러나 유효한) 답변을 공표하지 마십시오. 이들은 가능한 한 완전한 카탈로그를 컴파일하려고 시도하기 때문에이 질문에 여전히 유용합니다. 그러나 저자가 실제로 코드를 골프화하는 데 노력을 기울여야하는 언어로 답을 주로 투표하십시오.

목록

이 게시물의 맨 아래에있는 스택 스 니펫은 답변 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


52
Bash, 3 bytes :cat
TheDoctor

3
@TheDoctor 나는 이것이 "필요한 것을 정확하게 수행하는 내장을 사용하지 마십시오"규칙에 속할 것이라고 생각합니다.
Paŭlo Ebermann

5
@ PaŭloEbermann 그러한 규칙은 없으며 해당 표준 허점은 더 이상 허용되지 않습니다. ( shcatdd
실제로을

1
표준 입력 및 출력 방법을 사용하는 경우 ///, 0 bytes .
스파클 포니 동지

1
@SparklePony 슬래시와 백 슬래시를 피해야합니다.
Martin Ender

답변:


73

sed, 0


sed프로그램은 여기에 필요한 것을 정확하게 수행합니다.

$ printf "abc\ndef" | sed ''
abc
def$ 

3
글을 쓰면 yes | tr -d \\n | sed ''어떻게 되나요?
BenGoldberg

@BenGoldberg 기본적으로 sed는 라인 단위로 작동하므로이 경우 yes메모리가 부족할 때까지 하나의 패턴 버퍼로 계속 슬러 핑 됩니다. 내가 생각하는 경고 ...
Digital Trauma

POSIX는 패턴 공간의 크기가 IIRC 인 8192 바이트 이상이어야합니다. GNU 구현에는 사용 가능한 메모리에 의해서만 제한되는 동적 패턴 공간이 있으므로 그 부분에 대해 상당히 안전합니다.
Toby Speight

59

Ziim , 222 201 196 185 182 바이트

    ↓ ↓

 ↓ ↓     ↓
 ↗ ↗↙↔↘↖ ↖
 ↓↓⤡⤢  ⤢↙
↘ ↖⤡ ↖
  ↙
  ↕↘ ↑ ↙
→↘↖↑ ↙ ↑
→↖   ↑
→↖↘ ↙
  ↑↓↑

   ⤡

브라우저에 올바르게 표시되지 않을 수 있으므로 다음 코드 다이어그램이 있습니다.

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

Ziim에서 문제를 해결 하는 간단한 구조 를 생각할 수는 없지만 실제 코드는 여전히 골프 가능합니다.

Ziim은 프로그램이 끝날 때만 인쇄 할 수 있기 때문에 무한 스트림을 처리 할 수 ​​없습니다.

설명

Ziim은 다소 독특하고 선언적인 제어 흐름 모델을 가지고 있기 때문에 명령형 의사 코드 알고리즘은 여기서 자르지 않습니다. 대신, Ziim의 기본 사항과 현재 ASCII 코드와 유사한 그래픽 방식으로 위 코드의 정리 된 구조를 설명하겠습니다.

Ziim의 제어 흐름은 모든 곳에서 발생합니다. 다른 화살표로 표시되지 않은 각 화살표는 다른 스레드와 독립적으로 처리되는 "스레드"를 초기화합니다 (실제로 병렬은 아니지만 처리 순서를 보장 할 수는 없습니다) 연결을 통해 동기화하지 않는 한). 이러한 각 스레드는로 시작하는 이진 숫자 목록을 보유합니다 {0}. 이제 코드의 각 화살표는 하나 또는 두 개의 입력과 하나 또는 두 개의 출력을 갖는 일종의 명령입니다. 정확한 명령은 어느 방향에서 어떤 화살표를 가리키는 지에 달려 있습니다.

다음은 명령 목록입니다. 여기서 m -> n명령이 m입력을 받고 n출력을 생성 함을 나타냅니다 .

  • 1 -> 1, no-op : 단순히 스레드를 리디렉션합니다.
  • 1 -> 1, invert : 스레드의 각 비트를 무효화하고 리디렉션합니다.
  • 1 -> 1, read : 스레드 값 을 STDIN 의 다음 비트로 대체 하거나 EOF에 도달하면 빈 목록으로 대체합니다 .
  • 2 -> 1, 연결할 :이 스레드를 동기화 할 수있는 유일한 방법입니다. 실이 화살표의 한쪽에 닿으면 다른 실이 다른쪽에 닿을 때까지 중단됩니다. 이때 단일 스레드로 연결되고 계속 실행됩니다.
  • 2 -> 1, label : 다른 실행 경로를 결합하는 유일한 방법입니다. 이것은 단순히 두 가지 가능한 입력을 가진 no-op입니다. 따라서 두 경로 중 하나를 통해 "라벨"에 들어가는 스레드는 단순히 같은 방향으로 리디렉션됩니다.
  • 1 -> 2, split : 단일 스레드를 취하고 서로 다른 방향으로 두 개의 사본을 보냅니다.
  • 1 -> 1, isZero? : 스레드의 첫 번째 비트를 소비하고 비트가 0인지 1인지에 따라 스레드를 두 방향 중 하나로 보냅니다.
  • 1 -> 1, isEmpty? : 전체 목록을 사용하고 (예 : 빈 목록으로 대체) 목록이 이미 비어 있는지 여부에 따라 스레드를 두 방향 중 하나로 보냅니다.

이를 염두에두고 일반적인 전략을 알아낼 수 있습니다. 연결 을 사용 하여 전체 입력을 나타내는 문자열에 새 비트를 반복적으로 추가하려고합니다. 우리는 단순히의 출력 반복하여이 작업을 수행 할 수 있습니다 합칠 다시 입력 중 하나에 (그리고 우리는 선택을 취소하여, 빈 목록이 초기화 {0}IsEmpty 함수? ). 문제는이 프로세스를 어떻게 종료 할 수 있는가입니다.

현재 비트를 추가하는 것 외에도 EOF에 도달했는지 여부를 나타내는 0 또는 1을 앞에 추가 합니다. 우리가 isZero를 통해 문자열을 보내면? , 그것은 그 비트를 다시 제거 할 것입니다. 그러나 스트림의 끝을 구별 시키십시오.이 경우 우리는 단순히 스레드가 그리드의 가장자리를 떠나게합니다 (Zimim이 스레드의 내용을 STDOUT에 인쇄하고 프로그램을 종료시킵니다) .

EOF에 도달했는지 여부는 isEmpty 를 사용하여 확인할 수 있습니까? 입력 사본에.

약속 한 다이어그램은 다음과 같습니다.

              +----------------------------+   {0} --> isEmpty --> label <--+
              |                            |                    n    |      |
              v                            |                         v      |
    {0} --> label --> read --> split --> split ------------------> concat   |
                                 |                                   |      |
                           n     v     y                             |      |
 inv --> label --> concat <-- isEmpty --> concat <-- label <-- {0}   |      |
  ^        ^          |                     |          ^             |      |
  |        |          v                     v          |             |      |
 {0}       +------- split ---> label <--- split -------+             |      |
                                 |                                   |      |
                                 +-------------> concat <------------+      |
                                                   |                        |
                                              y    v                        |
                         print and terminate <-- isZero --------------------+

읽기 시작 위치에 대한 참고 사항 :

  • {0}왼쪽 상단 입력 루프를 시작하는 초기 트리거이다.
  • {0}오른쪽 상단을 향해 즉시 빈 목록으로 클리어 우리는 점차적으로 입력 채우기 것이다 초기 문자열을 나타내고있다.
  • 다른 두 개 {0}는 "생산자"루프 (하나는 거꾸로되어 있지 않음)로 공급 되어 문자열 앞에 추가해야하는 0s 및 1s를 무제한으로 제공 합니다.

29
뇌가 백만 개의 작은 조직 덩어리로 폭발하지 않고 어떻게 그런 프로그램을 작성할 수 있습니까?
Ashwin Gupta

40

헥사 고니 , 6 바이트

이전에는 3 바이트 였지만 (최신 버전의 언어 업데이트 이후에는 해당 버전이 더 이상 작동하지 않습니다.) 버전에서 사용한 오류를 의도적으로 도입 한 적이 없으므로이를 계산하지 않기로 결정했습니다.


오류가없는 솔루션 (즉, 고정 된 인터프리터와 작동하는 솔루션)은 훨씬 까다로워집니다. 2x2 그리드로 압축하는 데 문제가 있었지만 전체 7 바이트 가 필요하지만 지금 하나의 솔루션을 찾았습니다 .

<)@,;.(

펼친 후 우리는 다음을 얻습니다.

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

초기 메모리 에지가 0이므로 <무조건 명령 포인터를 북동 대각선으로 편향시켜 회색 경로로 감 쌉니다. 은 .no-op입니다. 이제 ,바이트를 읽고 )유효한 바이트 (널 바이트 포함)가 양수이고 EOF가 0이되도록 증가시킵니다.

따라서 EOF에서 IP @는 프로그램을 종료하는 빨간색 경로로 줄 바꿈됩니다 . 그러나 여전히 바이트를 읽는 경우 IP는 녹색 경로로 줄 바꿈하여 대신 (가장자리를 원래 값으로 감소시켜 ;STDOUT에 인쇄합니다. 이제 IP가 무조건 회색 경로로 다시 돌아가 프로세스를 반복합니다.


Truth Machine 답변에 대한 무차별 대입 스크립트 를 작성한 후 cat 프로그램에 대한 오류없는 6 바이트 솔루션 을 찾도록 설정했습니다 . 놀랍게도 가능한 모든 6 바이트 Hexagony 프로그램에서 하나의 솔루션을 찾았습니다. 진실 기계의 50 가지 해결책이 나온 후, 그것은 놀랍습니다. 코드는 다음과 같습니다.

~/;,@~

전개 :

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

의 사용 ~(단항 부정이) 대신 ()A) 제로에 어떤 조합이 없기 때문에, 흥미, B)는 지점의 측면을 스왑, C) 일부 코드에 하나가 ~그 자체로 작업을 실행 취소를 두 번 사용할 수 있습니다 . 그래서 여기에 무슨 일이 일어나고 있습니다 :

처음으로 (보라색 경로) 우리는 통과 ~하지 않습니다. 는 /대각선 북서부에 IP를 반영한다. 회색 경로는 이제 문자를 읽고 문자 코드에을 곱합니다 -1. 이렇게하면 EOF ( -1)가 정확한 값 (양수)이되고 유효한 모든 문자가 거짓 (양수가 아닌) 값이됩니다. EOF의 경우 IP는 빨간색 경로를 취하고 코드는 종료됩니다. 유효한 문자의 경우 IP는 녹색 경로를 사용하여 ~부정을 취소 ;하고 문자를 인쇄합니다. 반복.


마지막으로, 원래 버전의 Hexagony 인터프리터에서 작동했던 3 바이트 버전이 있습니다.

,;&

Labyrinth 응답과 마찬가지로 입력 스트림이 유한하면 오류와 함께 종료됩니다.

코드를 펼친 후 다음 16 진 격자에 해당합니다.

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

.어떤 작전 없습니다. 보라색 경로에서 실행이 시작됩니다.

,바이트를 읽고 바이트를 ;씁니다. 그런 다음 연어 (ish?) 경로에서 실행이 계속됩니다. 우리는 필요 &두 번째 행의 끝에 코너를 타격 할 때 IP가 보라색 행으로 다시 이동하도록 0으로 현재 메모리 가장자리를 재설정 할 수 있습니다. ,EOF에 도달 하면가 반환 되어 인쇄하려고 할 -1때 오류가 발생 ;합니다.


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


2
6 바이트 버전은 매우 영리합니다. 무차별 대단원은 엄청나게 대단 할 수 있습니다.
ETHproductions

당신은 당신의 짐승과 연결되어 있습니까?
MD XF

@MDXF 다양한 버전을 유지하지는 않지만 항상 이 Ruby 스크립트 의 일부 수정입니다 .
Martin Ender

36

TeaScript , 0 바이트

TeaScript는 JavaScript로 컴파일 된 간결한 골프 언어입니다


최근 업데이트에서 입력이 암시 적으로 첫 번째 속성으로 추가되었습니다.

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


또는 1 바이트

x

xTeaScript의 입력을 포함합니다. 출력은 암시 적


나는 이것을 게시하려고했다 :)
Kritixi Lithos

5
아, "대체로"는 언어 이름이라고 생각했습니다.
Quelklef

28

브라이언 & 척 , 44 바이트

#{<{,+?+}_+{-?>}<?
_}>?>+<<<{>?_}>>.<+<+{<{?

원래는 사용할 수없는 것으로 보이는 프로그래밍 언어를 만들기 위해이 언어를 만들었습니다 . 그것은 간단한 문제를 골프에 아주 좋은 운동으로 밝혀졌습니다.

기본 사항 : 두 줄은 각각 다른 프로그램의 소스 코드에서 작동하는 Brainfuck-like 프로그램을 정의합니다. 첫 번째 프로그램은 Brian이고 두 번째는 Chuck입니다. Brian만이 읽을 수 있고 Chuck만이 쓸 수 있습니다. Brainfuck의 루프 대신 ?다른 프로그램에 제어권을 넘겨줍니다 (명령 포인터 및 테이프 헤드의 역할도 변경됩니다). 브레인 퍽에 추가는 {하고 }있는 제 비제 셀 테이프 (또는 좌단)을 검사한다. 또한 _널 바이트로 대체됩니다.

이것이 최적이라고 생각하지는 않지만이 솔루션에 매우 만족합니다. 나의 첫번째 시도는 84 바이트 였고, Sp3000과의 여러 골프 세션 (그리고 그의 시도에서 영감을 얻은 후) 한 번에 몇 바이트 씩 천천히 44로 줄였습니다. 특히 훌륭한 +}+트릭은 그의 아이디어였습니다 (아래 참조).

설명

입력은 척 테이프의 첫 번째 셀로 읽힌 다음 인쇄가 진행되는 Brian 테이프의 끝 부분에 힘들게 복사됩니다. 끝까지 복사하면 이전 문자를 0으로 설정할 때 바이트를 절약 할 수 있습니다.

#셀을 실행하지 않는 스위칭 제어 우리가 켜져 있기 때문에, 단순한 자리이다. {<{테이프 헤드가 척의 첫 번째 셀에 있는지 확인합니다. ,STDIN에서 바이트를 읽거나 -1EOF에 도달하면 그래서 우리와 함께 있음을 증가 +그렇지 않으면 EOF 0이 아닌 것이 영 만들 수 있습니다.

지금은 EOF에 있지 않다고 가정 해 봅시다. 따라서 셀은 양수이며 ?제어를 척으로 전환합니다. }>받는 (브라이언)에 테이프 헤드를 이동 및 백 브라이언에게 제어를 전달한다.+_?

{-이제 척의 첫 번째 셀이 감소합니다. 아직 0이 아닌 경우 제어를 통해 척으로 다시 제어를 전달합니다 ?. 이번에 }>는 마지막 0이 아닌 셀의 오른쪽에있는 2 개의 셀에서 테이프 헤드를 이동합니다. 처음에는 여기 있습니다 :

#{<{,+?+}_+{-?>}<?__
                   ^

그러나 나중에, 우리는 이미 거기에 몇 가지 캐릭터가 있습니다. 예를 들어, 이미 읽고 인쇄 abc한 경우 다음과 같습니다.

#{<{,+?+}_+{-?>}<?11a11b11c__
                            ^

를 Where 1s는 실제로 1 바이트 (우리는 나중에에 대해 무엇을 볼 수 있습니다).

이 셀은 항상 0이므로 이번에 ? 제어를 변경 하지 않습니다 . >다른 셀을 오른쪽으로 이동하고 +해당 셀을 증가시킵니다. 이것이 입력의 첫 번째 문자가 오른쪽에 3 개의 셀로 끝나는 이유 ?입니다.

<<<목록의 마지막 문자 (또는 ?첫 문자 인 경우) {>로 돌아가서 +Brian의 테이프 로 돌아가 루프를 반복하여 입력 셀을 Brian의 테이프 끝으로 천천히 전송합니다.

해당 입력 셀이 비워지면 ?이후 {-는 더 이상 제어를 전환하지 않습니다. 그런 다음 >}<척의 테이프 헤드를로 이동하고 _척의 후반이 대신 실행되도록 스위치를 제어합니다.

}>>ST의 STDIN에서 읽은 바이트 인 Brian의 테이프 끝을 지나서 작성한 셀로 이동하여 다시 인쇄합니다 .. 위해서는 }우리가이 널 (null) 바이트의 격차를 할 필요가 테이프에 새로운 문자 뒤로 실행, 그래서 우리는 그들을 증가하는 1<+<+(그래서 실제 문자 사이의 1 바이트가 마지막 테이프에가있는 이유). 마지막으로 {<{Brian 테이프의 처음으로 돌아가 처음 ?부터 모든 것을 시작합니다.

우리가 읽는 문자가 널 바이트라면 어떻게 될지 궁금 할 것입니다. 이 경우 새로 작성된 셀 자체는 0이되지만 Brian의 테이프 끝에 있고 그 끝이 어디에 있는지 상관하지 않으므로 간단히 무시할 수 있습니다. 입력이 ab\0de인 경우 Brian의 테이프는 실제로 다음과 같이 보입니다.

#{<{,+?+}_+{-?>}<?11a11b1111d11e

마지막으로, EOF에 도달하면 ?Brian의 테이프에서 첫 번째 는 작동하지 않습니다. 이 시점에서 프로그램을 종료합니다. 순진한 해결책은 척의 테이프 끝과 스위치 제어의 끝으로 이동하여 프로그램이 다음과 같이 종료되도록하는 것 >}>}<?입니다. Sp3000의 정말 영리한 아이디어는 3 바이트를 절약합니다.

+척의 첫 번째 셀을로 바꿉니다 1. 그것은 }시작점이 있고 _척 테이프의 중간에있는 것을 의미 합니다. 대신 과거 건너 뛰는, 우리는 단순히으로 돌려 격차를 1함께 +뿐만 아니라. 이제 Brian의 나머지 코드가이 수정 된 척과 어떤 관계가 있는지 봅시다 ...

{평소와 같이 척의 첫 번째 셀로 -돌아가서 널 바이트로 다시 바꿉니다. 그것은 그것이 ?no-op라는 것을 의미합니다 . 그러나 이제 >}<테이프 헤드를 척 테이프의 중간으로 이동 한 지금 은 척 테이프의 끝으로 바로 이동 ?한 다음 제어를 척으로 전달하여 코드를 종료합니다. 일이 잘 풀리면 좋네요 ... :)


25

하스켈, 16 바이트

main=interact id

interact입력을 읽고 인수로 제공된 함수에 전달하고 수신 된 결과를 인쇄합니다. idID 함수입니다. 즉, 입력을 변경하지 않고 반환합니다. Haskell의 게으름 interact은 무한한 입력으로 작동 할 수 있습니다.


23

sh + binutils, 3 2 바이트

dd

글쎄, 분명하지 않습니다. @ Random832에서

기발한:

cat

고통스럽게 명백한 ... : D


12
더 잘 할게요 : dd.
Random832

: 나는 고양이 ... D 할 거라고
ev3commander

1
예, 이것은 훌륭합니다 ...하지만 170을 입력하는 담당자는 cat???
MD XF

1
@MDXF 누가 segfault로부터 얼마나 많은 담당자를 알 수 있습니까? ;)
caird coinheringaahing

23

Funciton , 16 바이트

╔═╗
╚╤╝

(BOM과 함께 UTF-16으로 인코딩 됨)

설명

상자는 STDIN의 내용을 반환합니다. 느슨한 끝이 출력합니다.


19

Motorola MC14500B 기계 코드 , 1.5 바이트

16 진수로 작성 :

18F

바이너리로 작성 :

0001 1000 1111

설명

1   Read from I/O pin
8   Output to I/O pin
F   Loop back to start

오피 코드는 각각 4 비트입니다.


1
-1 스크린 샷 없음, 예 또는 온라인으로 사용해보십시오 link : P (jk)
MD XF

2
+1. 내가 이것을 더 최적화하기 위해 생각할 수있는 유일한 방법은 입력 핀을 출력 핀에 납땜하고 소켓에서 칩을 꺼내는 것입니다. : P
Wossname

16

모닝 턴 초승달 , 41 바이트

Take Northern Line to Mornington Crescent

Mornington Crescent가 null 바이트를 처리 할 수 ​​있는지 여부는 알 수 없으며 프로그램의 시작 전에 언어의 특성이므로 모든 입력을 읽습니다.


15

Brainfuck, 5 바이트

,[.,]

의사 코드와 동일합니다.

x = getchar()
while x != EOF:
    putchar(x)
    x = getchar()

무한 스트림을 처리하지만 널 바이트를 EOF로 처리합니다. BF 널 바이트를 올바르게 처리 할 수 있는지 여부 는 구현마다 다르지만 가장 일반적인 방법으로 가정합니다.


1
꿰매다! 5 분 동안 날 이겼어!
kirbyfan64sos

첫 번째 문자가 NULL이면 올바르게 실행되지 않습니다. 그래서해야 +[,.]맞죠?
Shelvacu

6
@Shel 0x00을 EOF 바이트로 사용합니다. 첫 번째 문자가 EOF이면 아무것도 인쇄하지 않고 예상대로 작동합니다.
Mego

2
"의사 코드"아, 그것은 대괄호로 묶이지 않은 C : P
MD XF

14

미로 , 2 바이트

,.

스트림이 유한 한 경우 이는 오류와 함께 종료되지만 오류에 의해 생성 된 모든 출력은 STDERR로 이동하므로 표준 출력 스트림이 정확합니다.

Brainfuck에서와 같이 ,바이트를 읽고 (미로의 메인 스택에 푸시) .바이트를 씁니다 (미로의 메인 스택에서 팝).

이 루프 이유는 둘이다 ,하고 ."막 다른 골목"는 소스 코드로 표시 (매우 사소한) 미로에,되도록 명령 포인터는 단순히 그 자리에서 돌아 서서 다른 명령으로 다시 이동합니다.

우리가 EOF를 누르면 유효한 문자 코드가 아니기 때문에 대신 ,push -1를 누르고 .오류를 발생시킵니다 -1. 이것은 실제로 미래에 변경 될 수 있지만 아직 결정하지 않았습니다.


참고 로 다음과 같이 6 바이트 오류없이이를 해결할 수 있습니다.

,)@
.(

여기에서 )우리가 읽는 바이트가 증가하여 0EOF에 긍정적 인 결과가 나타납니다. 값이 0인 경우 IP가 바로 이동 @하여 프로그램을 종료합니다. 값이 양수이면 IP는 대신 (스택의 상단을 원래 값으로 감소시키는 방향으로 우회전 합니다. IP는 이제 모퉁이에 있으며 다시 한 번 포크에 치기 전에 계속 오른쪽으로 돌리고로 인쇄 .하고 새 바이트를 읽 습니다..)


13

C, 40 바이트

main(i){while(i=~getchar())putchar(~i);}

main () {while (255-putchar (getchar ()));}은 몇 바이트 더 짧습니다.
Alchymist

1
슬프게도 0xFF 바이트에서 조기에 종료되고 0xFF 바이트를 포함하지 않으면 입력에 0xFF 바이트를 추가합니다.
Dennis

다음의 36 바이트는 어떻습니까 : main () {for (;; putchar (getchar ()));};
Johan du Toit

@ user2943932 EOF에 도달하면 -1을getchar 리턴 하므로 코드는 (유한) 입력 후 0xFF 바이트의 무한 스트림을 인쇄합니다.
Dennis

12

> <> , 7 바이트

i:0(?;o

여기에서 시도 하십시오 . 설명:

i:0(?;o
i        Take a character from input, pushing -1 if the input is empty
 :0(     Check if the input is less than 0, pushing 1 if true, 0 if false
    ?;   Pop a value of the top of the stack, ending the program if the value is non-zero
      o  Otherwise, output then loop around to the left and repeat

당신은 당신이 더 많은 입력을 줄 때까지 진행을 계속하려면 교체 ;와 함께 !.


사람 아, 나는> <> 답 ... 게시 기대했다 : P (+1을!)
El'endia Starman

1
io(2 바이트)는 동일하지만 something smells fishy...실행이 끝나면 충돌하고 STDERR에 씁니다 . 이는 허용됩니다.
Lynn

@Mauris 온라인 인터프리터는 오류로 끝나지 않고 null 바이트 만 출력합니다.
DanTheMan

11

X86 어셈블리, 70 바이트

분해 objdump:

00000000 <.data>:
   0:   66 83 ec 01             sub    sp,0x1
   4:   66 b8 03 00             mov    ax,0x3
   8:   00 00                   add    BYTE PTR [eax],al
   a:   66 31 db                xor    bx,bx
   d:   66 67 8d 4c 24          lea    cx,[si+0x24]
  12:   ff 66 ba                jmp    DWORD PTR [esi-0x46]
  15:   01 00                   add    DWORD PTR [eax],eax
  17:   00 00                   add    BYTE PTR [eax],al
  19:   cd 80                   int    0x80
  1b:   66 48                   dec    ax
  1d:   78 1c                   js     0x3b
  1f:   66 b8 04 00             mov    ax,0x4
  23:   00 00                   add    BYTE PTR [eax],al
  25:   66 bb 01 00             mov    bx,0x1
  29:   00 00                   add    BYTE PTR [eax],al
  2b:   66 67 8d 4c 24          lea    cx,[si+0x24]
  30:   ff 66 ba                jmp    DWORD PTR [esi-0x46]
  33:   01 00                   add    DWORD PTR [eax],eax
  35:   00 00                   add    BYTE PTR [eax],al
  37:   cd 80                   int    0x80
  39:   eb c9                   jmp    0x4
  3b:   66 b8 01 00             mov    ax,0x1
  3f:   00 00                   add    BYTE PTR [eax],al
  41:   66 31 db                xor    bx,bx
  44:   cd 80                   int    0x80

출처 :

sub esp, 1
t:
mov eax,3
xor ebx,ebx
lea ecx,[esp-1]
mov edx,1
int 0x80
dec eax
js e
mov eax,4
mov ebx,1
lea ecx,[esp-1]
mov edx,1
int 0x80
jmp t
e:
mov eax,1
xor ebx,ebx
int 0x80

1
따라서 objdump32 비트 코드로 분해했지만 16 비트로 컴파일 한 것 같습니다. 무엇을 믿어야합니까? 을 사용하기 때문에 int 0x80Linux 용으로 생각되지만 16 비트로 컴파일하는 이유는 무엇입니까?
Ruslan

나는 심지어 16 비트 컴파일 몰랐어요 @Ruslan ...
kirbyfan64sos

11

범용 Lambda , 1 바이트

!

범용 람다 프로그램은 8 비트의 청크로 잘게 바이너리 람다 용어의 부호화 인, 패딩 불완전 청크 모든 비트가 바이트 스트림으로 변환된다.

비트는 다음과 같이 람다 용어로 변환됩니다.

  • 00 람다 추상화를 소개합니다.
  • 01 는 두 개의 후속 용어의 적용을 나타냅니다.
  • 111..10함께 n 개의 비트의 반복 1은의 변수를 참조 N 상위 람다 일; 즉 , 단항 으로 De Bruijn 지수 입니다.

이 변환에 의해, 0010식별 함수 λa.a형태의 단일 바이트의 프로그램을 의미하며, 0010xxxxA는 cat프로그램.


1
그러나 !있다 0x21, 없다 0x4_?
wchargin

결정된. --------

10

PowerShell, 88 41 30 바이트

$input;write-host(read-host)-n

편집- $input파이프 라인 입력에 자동 변수를 사용할 수 없다는 것을 잊었습니다 ... EDIT2-존재 여부를 테스트 할 필요가 없습니다.$input

예, PowerShell의 STDIN은 ... 이상합니다. 모든 유형의 STDIN 에서 입력을 받아 들여야한다는 가정 하에이 카탈로그에 대한 한 가지 가능한 답변이며 다른 것도있을 것입니다. 1

PowerShell의 파이프 라인 입력은 생각대로 작동하지 않습니다. PowerShell의 파이핑은 언어의 기능이며 환경 / 쉘의 기능이 아니며 (그리고 PowerShell은 실제로 언어 만이 아닙니다 ) 동작에 약간의 문제가 있습니다.

초보자의 경우이 항목과 가장 관련이있는 파이프는 즉시 (대부분의 경우) 평가되지 않습니다. 의미, 우리가있는 경우에 command1 | command2 | command3우리의 쉘에서, command2입력을하지 않거나 할 때까지 처리를 시작 command1완료 ... 하지 않는 한 당신을 캡슐화 command1로모그래퍼 ForEach-Object... 이는 다른 것보다 ForEach. (하지만 ForEach에 대한 별칭 ForEach-Object이지만 ForEach별칭이 아닌 진술로 이야기하기 때문에 별도의 문제입니다 )

이것은 yes | .\simple-cat-program.ps1( yes실제로는 존재하지 않지만 무엇이든간에) 같은 것이 작동하지 않을 것이라는 것을 의미합니다 yes. 우리가 그렇게 할 수 있다면 ForEach-Object -InputObject(yes) | .\simple-cat-program.ps1(이론적으로) 효과가 있어야합니다.

Microsoft의 ForEach 및 ForEach-Object대해 알아보기 "Hy, Scripting Guy!" 블로그.

그래서 모든 단락은 왜 if($input){$input}존재 하는지 설명하고 있습니다. 파이프 라인 입력이있는 경우 자동으로 생성 된 입력 매개 변수를 가져 와서 존재하는지 테스트 한 다음 해당되는 경우 출력합니다.

그런 다음 (read-host)기본적으로 별도의 STDIN 스트림을 통해 사용자로부터 입력을 받고 플래그 ()를 write-host사용하여 다시 출력 합니다. 이것은 줄 바꿈이 입력 될 때만 완료되는 것처럼 (기술적으로 사용자가 "Enter"를 누를 때 기능적으로 동등한) 임의 길이의 입력을 지원하지 않습니다 .-n-NoNewLineread-host

1 그러나 다른 옵션이 있습니다.

예를 들어 파이프 라인 입력 에만 관심이 있고 전체 프로그램이 필요하지 않은 경우 | $_입력 한 내용 만 출력하는 것과 같은 작업을 수행 할 수 있습니다. (일반적으로 PowerShell은 계산 후 "남은"항목의 암시 적 출력을 가지기 때문에 다소 중복됩니다.

대화 형 사용자 입력에만 관심이있는 경우을 사용할 수 있습니다 write-host(read-host)-n.

또한이 함수에는 명령 줄 입력을 받아들이 는 기발한 기능 이 있습니다 .\simple-cat-program.ps1 "test"( 예 : $a변수 를 채우고 출력) .


내장 별칭을 잊지 마십시오!
Chad Baxter

10

Cubix , 6 5 바이트

이제 널 바이트를 처리합니다!

@_i?o

Cubix는 2 차원 스택 기반 esolang입니다. Cubix는 소스 코드가 큐브 외부에 둘러싸여 있다는 점에서 다른 2D 언어와 다릅니다.

온라인으로 테스트하십시오! 참고 : 반복 사이에 50ms의 지연이 있습니다.

설명

인터프리터가하는 첫 번째 일은 코드가 들어갈 가장 작은 큐브를 알아내는 것입니다. 이 경우 모서리 길이는 1입니다. 그런 다음 .6 개의면이 모두 채워질 때까지 코드에 op-op가 채워집니다 . 처리하기 전에 공백이 제거되므로이 코드는 위와 동일합니다.

  @
_ i ? o
  .

이제 코드가 실행되었습니다. IP (명령 포인터)는 맨 왼쪽에서 시작하여 동쪽을 가리 킵니다.

IP가 처음 접하는 문자는입니다. IP가 _북쪽이나 남쪽을 향하고 있으면 IP를 돌리는 거울입니다. 현재 동쪽을 향하고 있으므로 아무것도하지 않습니다. 다음은 iSTDIN에서 바이트를 입력하는입니다. ?상단 항목이 음수이면 IP를 왼쪽으로 돌리고 양수이면 오른쪽으로 돌립니다. 여기에는 세 가지 가능한 경로가 있습니다.

  • 입력 된 바이트가 -1 (EOF)이면 IP가 왼쪽으로 바뀌고 적중 @하여 프로그램을 종료합니다.
  • 입력 된 바이트가 0 (널 바이트)이면 IP는 간단히 계속 계속되어 바이트를 출력합니다 o.
  • 그렇지 않으면 IP가 우회전하여 바닥면을 가로 질러 거울에 부딪칩니다 _. 이것은 그것을 돌려서 다시 보내서 ?다시 오른쪽으로 돌리고 바이트를 출력합니다.

이 프로그램이 최적이라고 생각합니다. Cubix가 널 바이트 (EOF는 -1이 아닌 0)를 처리하기 전에이 프로그램은 널 바이트를 제외한 모든 작업에 적용되었습니다.

.i!@o

5 바이트 고양이 프로그램을 모두 찾기 위해 무차별 대입을 썼습니다 . 완료하는 데 ~ 5 분이 걸리지 만 최신 버전에서는 5 개의 프로그램을 찾았습니다.

@_i?o   (works as expected)
@i?o_   (works in exactly the same way as the above)
iW?@o   (works as expected)
?i^o@   (false positive; prints U+FFFF forever on empty input)
?iWo@   (works as expected)

한 번에 12 개의 게시물을 편집하지 마십시오. 첫 페이지가 넘칩니다. 한 번에 3 개는 문제가되지 않지만 그 이상을 수행 해야하는 경우 12 시간마다 작은 배치로 편집하십시오.
Martin Ender

@MartinEnder 죄송합니다. 방금 알았습니다. 나는 그들을 미래에 배치 할 것이다.
ETHproductions

9

Vitsy, 2 바이트

zZ

z모든 입력 스택을 가져 와서 활성 프로그램 스택으로 푸시합니다. Z모든 활성 스택을 STDOUT에 인쇄합니다.

다른 방법 :

I \ il \ O
입력 스택 길이에 대해 다음 문자를 반복하십시오.
  입력에서 항목을 가져옵니다.
   l \ 현재 활성화 된 프로그램 스택 길이에 대해 다음 문자를 반복하십시오.
     O 스택의 맨 위 항목을 문자로 출력합니다.

2
^ _ ^ 어쨌든 +1하세요! :)
El'endia Starman 16:30

동정 투표, 내가 가장 좋아하는!
애디슨

왜 다운 보트인가? 이것은 완벽하게 유효한 항목 인 것 같습니다
Conor O'Brien

1
그것은 이다 모든 사양으로 유효합니다.
Addison Crump

9

MarioLANG , 11 바이트

,<
."
>!
=#

이것이 최적인지는 확실하지 않지만 내가 찾은 가장 짧은 것입니다.

이것은 무한 스트림을 지원하며 EOF에 도달하면 오류로 종료됩니다 (적어도 Ruby 참조 구현은 수행함).

마리오를 두 배 점프 할 수있는 닌자로 바꾸는 또 다른 버전이 있습니다.

,<
.^
>^
==

두 경우 모두 Mario는 왼쪽 열 아래로 떨어지기 시작합니다. 여기 ,에서 바이트를 읽고 바이트를 .씁니다 ( ,유효한 문자를 반환하지 않기 때문에 EOF에서 오류가 발생 함 ). >마리오가 오른쪽으로 걸어 갈 수 있도록합니다 ( =그가 걸어 갈 수있는 땅입니다). 그런 다음 더블 점프를 ^하거나 엘리베이터 ( "#페어) <를 통해 왼쪽 열로 다시 이동하라는 지시를 내립니다.


8

rs , 0 바이트


진심으로. rs는 주어진 스크립트가 완전히 비어있는 경우 얻을 수있는 모든 것을 인쇄합니다.


7

GolfScript, 3 바이트

:n;

빈 프로그램은 표준 입력을 반영합니다. 이 언어는 무한 스트림을 처리 할 수 ​​없습니다. 그러나 @Dennis가 언급했듯이 개행을 추가합니다. 이 어레이 및 호출에 스택 전체를 감싸는 그렇게 puts정의되고 print n print, n줄 바꿈된다. 그러나 nSTDIN으로 재정의 한 다음 스택을 비울 :n;수 있습니다.


7

교통 혼잡시 반 고장난 자동차 , 9 + 3 = 12 바이트

#<
o^<
 v

HBCHT (Half Traffic)에서 반 고장난 차량은 입력을 명령 줄 인수로 사용하므로 다음과 같이 실행하십시오.

py -3 hbcht cat.hbc -s "candy corn"

+3은 -s플래그로 사용되며 문자로 출력됩니다. 또한 HBCHT는 모든 0이 출력에서 ​​삭제되므로 (예 : 97 0 982 개의 문자로 출력 됨 ab) NUL을 처리하지 않는 것 같습니다 .

설명

HBCHT에서는 차량이에서 출발하고 o목표는 출구 #입니다. ^>v<BF와 같은 테이프를 수정하면서 동시에 차량의 움직임을 지시합니다 (로 ^>v<변환 +>-<). 그러나 언어 이름에서 알 수 있듯이 자동차는 우회전 만 할 수 있습니다. 좌회전 시도는 완전히 무시됩니다 (메모리 효과 포함). 이것은 단지 회전에만 해당됩니다. 자동차는 전진 / 후진 방향으로 완벽하게 운전할 수 있습니다.

HBCHT의 또 다른 흥미로운 부분은 자동차의 초기 방향이 무작위이며 격자는 환상적이라는 것입니다. 따라서 우리는 네 가지 초기 방향에 대한 테이프를 수정하지 않고 자동차를 출구로 가져갈 필요가 있습니다.

  • 상하로 직접 출구로 향합니다.

  • 왼쪽의 경우 랩핑하고 실행 <하고로 증가시킵니다 ^. 다음에 왼쪽으로 돌릴 수 없으므로로 <줄 바꿈하고 v이전 증분을 무시하고 줄입니다. 이제 아래쪽으로 향하고 <있으므로 포인터를 두 번 이동하고 셀 값을 수정하지 않고 오른쪽에서 회전 하고 종료 할 수 있습니다 .

  • 오른쪽의 경우 왼쪽과 동일한 작업을 수행하지만 ^왼쪽으로 돌릴 수 없으므로 처음으로 건너 뜁니다 .


편집 : HBCHT 인터프리터는 명령 줄 플래그를 통해 단일 경로 만 실행할 수 있습니다.

py -3 hbcht -d left cat.hbc

그러나이 특정 질문에 대해 플래그가 너무 비쌀뿐만 아니라 (최소 5 바이트 " -d u") 코드를 실행하기 위해 모든 경로를 여전히 종료로 만들 수 있어야합니다.


7

Minkolang , 5 바이트

od?.O

여기에서 시도하십시오.

설명

o입력에서 문자를 읽고 ASCII 코드를 스택으로 푸시합니다 ( 0입력이 비어있는 경우). d그런 다음 스택 상단 (방금 읽은 문자)을 복제합니다. ?는 조건부 트램폴린으로, 스택 맨 위의 다음 명령이 점프하지 않습니다 0. 입력이 비어 .있으면가 점프되지 않고 프로그램이 정지됩니다. 그렇지 않으면 O스택 맨을 문자로 출력합니다. Minkolang의 환상적 특성은 이것이 처음으로 반복된다는 것을 의미합니다.


2
그래! 당신은 내 언어를 이겼다! 받아 들일 수 없다! +1
애디슨

7

INTERCALL , 133 바이트

INTERCALL IS A ANTIGOLFING LANGUAGE
SO THIS HEADER IS HERE TO PREVENT GOLFING IN INTERCALL
THE PROGRAM STARTS HERE:
READ
PRINT
GOTO I

누군가가 순수한 안티 골프 언어로 골프를 쳤던 것 같습니다 ... 133-116 = 17
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 고양이 프로그램은 매우 단순하기 때문에 모든 프로그램의 경우는 아닙니다
TuxCrafting

언어를 만든 사람은 로마 숫자를 사용하려고했지만 인쇄 할 경우 500(확실하지 않은 경우 ) PRINT D맞습니까? (헤더 제외)
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 아니는 인터콜은 ASCII 문자를 인쇄 할 수 있습니다 예를 코드는 ASCII 값 (20)와 caracter을 인쇄 할 수 있도록 스택을 사용 PUSH XX<newline>PRINT하거나 PUSH XX AND PRINT. 아, 그리고 난 인터콜의 창조자이다
TuxCrafting

7

V , 0 바이트

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

"메모리"에 대한 V의 아이디어는 거대한 2D 문자 배열입니다. 프로그램을 실행하기 전에이 배열에로드 된 모든 입력 ( "버퍼"라고 함). 그런 다음 프로그램이 끝나면 버퍼의 모든 텍스트가 인쇄됩니다.

즉, 빈 프로그램 고양이 프로그램입니다.


6

눈사람 1.0.2 , 15 자

(:vGsP10wRsp;bD

촬영 눈사람의에서 직접 examples디렉토리 . 줄을 읽고, 줄을 인쇄하고, 줄을 읽고, 줄을 인쇄합니다 ...

구현 세부 사항으로 인해 STDIN이 비어있는 vg경우 빈 행과 동일한 내용을 리턴합니다. 따라서 STDIN이 닫히면 무한 루프에 줄 바꿈이 반복적으로 인쇄됩니다. 향후 버전에서 수정 될 수 있습니다.

코드 설명 :

(        // set two variables (a and f) to active—this is all we need
:...;bD  // a "do-loop" which continues looping as long as its "return value"
         // is truthy
  vGsP   // read a line, print the line
  10wRsp // print a newline—"print" is called in nonconsuming mode; therefore,
         // that same newline will actually end up being the "return value" from
         // the do-loop, causing it to loop infinitely

5

FireType , 7 바이트

,
&
_
=

방금 밀어 넣은 변경 사항이 필요합니다 . 규칙은 다음과 같이 말합니다.

일반적인 규칙과 달리이 과제보다 새로운 언어라도 언어 (또는 언어 버전)를 자유롭게 사용하십시오.

그래서 나는 분명하다!


5

분열 , 4 바이트

R?J!

언어 자체 저장소에서 샘플 프로그램을 이길 때 좋지 않습니까? :) 참고로 7 바이트 솔루션이 있습니다.

R?J0;0!

설명

따라서 R오른쪽 원자로 제어 흐름을 시작합니다. ?STDIN에서 원자 질량으로 문자를 읽습니다. 문자를 읽는 동안 에너지는 0으로 유지되므로 J범프는 작동하지 않으며 !문자를 인쇄합니다. 원자는 시작으로 되돌아 가고 ( R현재는 작동하지 않음) 전체 프로세스를 반복합니다.

EOF에 도달 ?하면 원자의 에너지가로 설정 1되어 J펌프가 인쇄 명령을 건너 뜁니다. 그러나 EOF가 이미 반환 된 ? 원자가 충돌 하면 원자가 대신 파괴되어 프로그램이 종료됩니다.

(언어 작성자의 솔루션은 명시 적을 사용 ;하여 프로그램을 종료합니다 0. 그렇지 않으면 두 개의 포털 로 건너 뜁니다 .)


5

스트립 됨 , 20 바이트

e )
"
 r )
 s )
 "
"

이것은 인쇄 가능한 거의 모든 ASCII 문자열이 Shtriped에서 유효한 식별자임을 보여줍니다 .

작동 방식 :

e )   \ declares a variable named )
"     \ defines a function with 0 arguments named "
 r )  \ gets a line of string input, saving it to )
 s )  \ prints ) as a string
 "    \ recursively calls ", effectively looping forever
"     \ calls " from the main scope to get things started

EOF를 감지하는 실제 방법은 없으므로 파이썬 답변 처럼 영원히 반복됩니다 .

빈 줄 (30 바이트)이 주어지면 쉽게 중지 할 수 있습니다.

e )
"
 r )
 d ) \ tries to decrement ), if it was the empty string, aka 0, it can't, so 0 is returned all the way up
 i ) \ increment ) to put it back to normal after possibly decrementing
 s )
 "
"

Shtriped I / O는 인쇄 가능한 ASCII , 탭, 줄 바꿈, 캐리지 리턴, 세로 탭 및 용지 공급 (총 100 자) 만 지원합니다. 내부적으로 문자열은 음이 아닌 임의의 정밀도 정수로 표시되며 모든 문자열을 인코딩하려면 유한 문자의 문자가 있어야하기 때문입니다.

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