표준 출력을 뒤집고 표준 출력에 배치


58

요구 사항 :

  • 무제한 길이의 줄 바꿈 / 캐리지 리턴을 포함하여 stdin에 입력하십시오 (시스템 메모리에 의해서만 제한됩니다. 즉, 프로그램에는 고유 한 제한이 없습니다).
  • stdout에서 입력의 반전을 출력하십시오.

예:

입력:

Quick brown fox
He jumped over the lazy dog

산출:

god yzal eht revo depmuj eH
xof nworb kciuQ

최단 승리.

리더 보드 :

var QUESTION_ID=242,OVERRIDE_USER=61563;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


5
PHP와 같은 표준 라이브러리 기능을 허용합니까strrev
Ming-Tang

출력은 입력 대신 마지막 줄 바꿈을 시작 부분에 넣을 수 있습니까?
Joey Adams

@Joey Adams, 그래, 입력을 정확하게 복제해야합니다.
토마스 오

53
당신의 예는 다소 잘못되었습니다. 입력의 반대는 다음과 같습니다. ƃop ʎzɐʃ ǝɥʇ ɹǝʌo pǝdɯnɾ ǝH xoɟ uʍoɹq ʞɔınΌ;-P
ninjalj

코드를 실행하는 시스템에 입력 할 수있는 문자 만 지원해야합니까?
황금 비율

답변:


25

골프 스크립트-3 자

-1%

난독 화 된 버전도 3 자입니다.

0(%

여기에 방법에 대한 설명입니다 % 작품


9
우리는 어떻게 Golfscript와 경쟁 할 수 있습니까?
Thomas O

12
@ 토마스 : FlogScript를 사용하여 추측합니다. 어쨌든 사소한 작업을 게시하면 솔루션이 사소한 것으로 기대됩니다. 그리고 파이썬에서 세 번의 메소드 호출이 필요한 경우 Golfscript에서 세 문자 만 가능합니다.
Joey

1
@ 토마스 : 죄송합니다, 그것은 분명하지 않았다. 일부 회원들은 이미 유머가없는이 언어에 대해 조용히 열띤 토론을하고 있다는 점을 감안할 때, 여기에서도 이와 비슷한 것으로 가정하는 것은 무리가 없었습니다.
Joey

3
@Joey GolfScript가 훈련받지 않은 눈에 소음처럼 보이기 때문에 더 유머러스 한 절망이었습니다.
Thomas O

36
그래서 두 번째는 난독 화되지만 첫 번째는 난독 화되지 않습니다. 알았어
C0deH4cker 2016 년

44

배쉬-7

tac|rev

tac행 순서를 rev반대로하고 문자 순서 를 반대로합니다.


다음 단계로 넘어 가서 단일 문자 bash 명령으로 별칭을 지정하십시오! alias z='tac|rev'
Daniel Standage

18
@Diniel 그것은 매크로를 정의하기 위해 컴파일러 플래그를 사용하는 것과 같습니다. 즉 코드 골프 정신에 반합니다.
marcog

나는 rev|tac같은 점수를 얻었습니다 .Bash가 아닌 POSIX 쉘에서 작동한다는 메모를 추가하는 것입니다.
Toby Speight

35

BrainFuck, 10 자

,[>,]<[.<]

그러한 간단한 언어에 대한 많은 대답을 얻습니다.


2
DNA는 항상 순서를 거꾸로 유지하므로 정보의 특성과 계산에있어 근본적인 내용이있을 수 있습니다. 쉘 원 라이너로 rosalind.info의 문제를 해결하는 동안이 솔루션을 발견했습니다.
ixtmixilix

9
@ixtmixilix 실제로 스택과 리버 싱에 대한 기본적인 내용을 말합니다.
Cruncher

23

C, 37 바이트

main(_){write(read(0,&_,1)&&main());}

멋지지만 그것은 나를 위해 작동하지 않습니다.
Joey Adams

@Joey Adams : 여기 사용해보십시오 .
Quixotic

아, 나는 최적화없이 컴파일해야했습니다.
Joey Adams


16

파이썬, 41 40 바이트

import sys;print sys.stdin.read()[::-1]

41-> 40-프로그램 끝에서 세미콜론을 제거했습니다.

아마 최적화 될 수 있습니다!


PowerShell에서 무언가를 뒤집는 쉬운 방법이 있었으면 좋겠다. ;-)
Joey

6
화성인은 항상 유용합니다. [:: - 1]

1
그래서 print raw_input()[::~0]]? 그것은 여전히 ​​파이썬 2이기 때문에print
CalculatorFeline

다음은 코드 골프 항목 형식 팁입니다. 프로그램을 작성한 언어를 항상 다음 형식으로 작성하십시오.# Language Name, Character/Byte Count
dorukayhan

15

팬케이크 스택 , 342316 바이트

Put this nice pancake on top!
[]
Put this  pancake on top!
How about a hotcake?
If the pancake is tasty, go over to "".
Put this delightful pancake on top!
[#]
Eat the pancake on top!
Eat the pancake on top!
Show me a pancake!
Eat the pancake on top!
If the pancake is tasty, go over to "#".
Eat all of the pancakes!

입력이 널 문자 ( ^@명령 행에서)로 종료된다고 가정합니다 . 인터프리터를 사용한 예제 실행 :

Put this nice pancake on top!
[]
Put this  pancake on top!
How about a hotcake?
If the pancake is tasty, go over to "".
Put this delightful pancake on top!
[#]
Eat the pancake on top!
Eat the pancake on top!
Show me a pancake!
Eat the pancake on top!
If the pancake is tasty, go over to "#".
Eat all of the pancakes!
~~~~~~~~~~~~~~~~~~~~~~~~
Hello, World!^@
!dlroW ,olleH

12

APL, 2

⊖⍞

또는 문자가 나오지 않으면 CircleBar QuoteQuad, 즉 키보드 문자 반전을 의미합니다.


바이트 수를 반으로 줄이십시오! 당신은 필요하지 않습니다 . 다음과 같이 할당하고 사용할 수있는 완전한 익명 함수입니다 f←⌽ f 'The quick brown fox'.
Adám

^^^^ 수상자 ^^^^
CalculatorFeline

@ Nᴮᶻ : 글쎄, 스펙은 문자열 리터럴이 아닌 stdin에서 입력을
얻는다고 말했다

@jpjacobs 일반적인 PPGC 관행은 stdin을 지원하지 않거나 사용하기에 부 자연스러운 언어에 대해 stdin 대신 인라인 인수를 허용하는 것입니다.
Adám

11

펄-23

print scalar reverse <>

6
세 번째 공백을 제거 할 수 있습니다.
Timwi

6
실제로 print"".reverse<>는 17 자입니다. 그리고 Perl 5.10+를 사용하면 say대신에 두 개의 문자를 더 저장할 수 있습니다 print.
Ilmari Karonen

4
나는 이것이 매우 오래 print~~reverse<>
Dom Hastings

5
@DomHastings 그리고 Perl 5.10 이상에서 say~~reverse<>작동합니까? 14 자
Timtech



9

Windows PowerShell, 53 54

-join($x=[char[]]($($input)-join'
'))[($x.count)..0]

2011-01-30 (54) – 첫 번째 시도

2011-01-30 (53) – 인라인 줄 바꿈이 재미 있습니다.

2011-01-3- (52) – 인라인 변수 할당도.


-join($a="$args")[$a.Length..0]자체적으로 제공된 예제에서 작동하는 것 같습니다. crlfpsv2 또는이를 작성할 때 사용한 것이 무엇인지 확실하지 않은 Windows로 실행되는 줄 바꿈에 문제가 없습니다.
colsw

@ ConnorLSW : 그것은 stdin에서 읽지조차 않습니다. 그리고 $input열거자를 생성하는 열거 자이므로 그렇게 문자열 화 할 수 없습니다.
Joey


8

Befunge-93-11x2 (22 자)

>~:0`v >:v
^    _$^,_@

이 인터프리터를 사용하여 테스트했습니다 .


19
키보드에서 임의의 키를 누르지 않았습니까?
토마스 오

@Thomas-링크 된 인터프리터를 사용하지 않았습니까? 다운로드가 걱정되는 경우 웹 기반입니다.
MiffTheFox

4
난 단지 말장난했을 뿐이야. 나는 그것이 작동 할 것이라고 확신하지만, 당신이 어떤 키를 무작위로 누른 것처럼 보입니다. 그것은 매우 컴팩트 한 언어를 나타냅니다.
Thomas O

1


6

핵분열 , 16 14 12 바이트

DY$\
?
[Z~K!

설명

제어 흐름은 D하향 (1,0)원자로 시작합니다. 는 ?읽기 문자 코드와 에너지에 질량을 설정, STDIN, 한 번에 하나 개의 문자를 읽습니다 0. EOF에 도달 ?하면 대신 에너지를로 설정합니다 1. 는 [상 원자 리디렉션 Z스위치. 문자를 읽는 한 에너지는 0이므로 원자는을 통해 위쪽으로 편향됩니다 Z. 우리는 원자를 복제하여 하나의 사본을 다시 반복하여 ?입력을 읽습니다. 우리는에 다른 사본의 에너지를 증가 1$스택에 밀어 넣습니다 K. 입력 루프는 다음과 같습니다.

DY$\
?
[Z K

에너지가 1EOF에 기인 할 때, Z대신에 원자는 곧바로 통과하여 에너지를 0다시 감소시킨다 . ~에너지를 더 줄 -1입니다. 부정적인 에너지와 원자는 팝업 스택에서, 그래서 우리는 반대 순서로 문자를 검색하여 인쇄 할 수 있습니다 !. 이제 그리드는 환상 형이므로 같은 행의 왼쪽 가장자리에 원자가 다시 나타납니다. 우리는 초기에 푸시 된 원자의 에너지를 초기에 증가 시켰 $으므로, 원자는 이제 1마지막 출력과 같은 에너지를 가지고 ?다시을 곧게 통과 할 것 Z입니다. 따라서 EOF 이후의 경로는

?
[Z~K!

맨 아래 줄의이 루프는 스택이 비워 질 때까지 계속됩니다. 그렇게되면 원자가에서 반사되어 K에너지가 양이됩니다 ( +1). ~감소시키고 우리가 지금에 충돌 있도록 한 번 더, (왼쪽으로 이동) Z이 아닌 긍정적 인 에너지로. 이것은 원자를 아래쪽으로 편향시켜 원자가 Y저장된 곳 의 쐐기에서 끝나고 더 이상 움직이는 원자가 없기 때문에 프로그램이 종료됩니다.


lol 왜 이것이 마인 크래프트를 생각 나게 하는가?
밝게 돈

와우, 나는 언어 샘플에서의 구현이 16 자에서 가장 짧다고 생각했다. 감동적인!
C0deH4cker 2016 년

6

> <>, 16 14 바이트

@JoKing에 의해 -2 바이트

2 년 (!) 후에 정지 로직을 전환하여 입력을 읽는 데 여분의 -1을 제거합니다.

i:0(7$.
0=?;ol

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

다른> <> 답변과 마찬가지로 입력을 첫 번째 줄에서 읽는 방식으로 인해 스택을 되돌릴 필요가 없습니다. 나는 이것이 외관상 상당히 다르지만 개념 상 비슷하기 때문에 이것이 다른> <> 답변에 대한 제안이어야하는지 여부는 실제로 확실하지 않습니다.

가장 큰 차이점은 내 대답은 입력을 0과 비교하고 입력이 적을 경우 (즉, 입력이 없으면 입력이 없으면 i-1을 반환) 그렇지 않으면 (1,7)으로 이동한다는 것입니다. 7). 전자로 건너 뛰면 최상위 값 (-1)이 표시되고 인쇄 루프가 시작됩니다. 후자로 이동하면 입력 루프가 계속됩니다.

11 바이트, 오류와 함께 종료

@JoKing의 의례

i:0(7$.
~o!

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

나는 이것이 메타 합의를 통해 유효하다고 생각합니다.

이전 답변 (14 바이트)

i:0(7$.
~ol0=?;!

2
오류로 끝나는 -5 바이트 그렇지 않으면 -2 바이트 (빈 입력시 오류) 또한 빈 입력의 원래 오류는 o다음 을 이동하여 해결할 수 있습니다 .;
Jo King

1
@JoKing 좋은 캐치 o; 당시에는 눈치 채지 못했습니다. 그리고 저장해 주셔서 감사합니다. 마지막 -1을 제거하기 위해 영을 비교하는 영리한 사용.
Cole

1
흠, 실제로 (내가의 쉬운 스왑 놓친 믿을 수 없어 13 바이트뿐만 아니라 단지 작동 0=??!)
조 왕

@JoKing -1 바이트 ? 문자는 스택 상단을 0으로 확인하므로 길이와의 비교가 필요하지 않습니다.
청록 펠리칸

@TealPelican 네, 두 번째 의견에서
King King


5

스택 고양이 , 7 바이트

<!]T[!>

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

동일한 바이트 수에 대한 대안이 많이 있으며, 대부분 기본적으로 작동 방식이 동일합니다.

설명

짧은 스택 고양이 입문서 :

  • 모든 프로그램은 미러 대칭을 가져야하며, 코드를 미러링함으로써 역함수를 계산하는 새로운 코드를 얻습니다. 따라서 위 프로그램의 마지막 세 문자는 중앙의 명령이 아닌 경우 첫 세 문자를 실행 취소합니다.
  • 메모리 모델은 무한 스택의 테이프로, 맨 아래에 암시 적, 무한량의 0을 보유합니다. 초기 스택에는 -10이 맨 위에 있고 그 위에 입력 바이트가 있습니다 (첫 번째 바이트는 맨 위에 있고 마지막 바이트는 위에 있음 -1).
  • 출력을 위해 간단히 최종 스택을 가져 와서 -1맨 아래에 a 를 버리고 모든 값을 바이트로 STDOUT에 인쇄합니다.

실제 프로그램의 경우 :

<    Move the tape head one stack left (onto an empty stack).
!    Bitwise NOT of the implicit zero on top, giving -1.
]    Move back to the original stack, taking the -1 with the tape head.
     We're now back to the original situation, except that we have a -1
     on top.
T    Reverse the stack down to the -1 at the bottom. One of the reasons
     we needed to move a -1 on top is that T only works when the top of
     the stack is nonzero. Since the first byte of the input could have
     been a null-byte we need the -1 to make sure this does anything at
     all.
[    Push the -1 to the stack on the left.
!    Bitwise NOT, turning it back into 0 (this is irrelevant).
>    Move the tape head back onto the original stack.

Sp3000은 다른 7 바이트 솔루션을 찾기 위해 무차별 대입 검색을 설정 했으므로 다음과 같은 대안이 있습니다.

<]!T![>
>![T]!<
>[!T!]<

비트 NOT이 계산 될 때와 왼쪽에서 빈 스택을 사용할지 오른쪽에서 사용할 지에 차이가 있다는 점을 제외하면이 세 가지 변형은 본질적으로 동일합니다.

<]T!T[>
>[T!T]<

위의 설명에서 말했듯 T이 스택 맨 위가 0 일 때 아무것도하지 않습니다. 즉, 실제로 !대신 중간에 넣을 수 있습니다 . 즉, 제 수단 T우리는에 위에 제로 돌린 무 조작하지 -1다음 다음 제 T반전을 행한다. 물론 이것은 최종 메모리 상태가 -1원래 상태 옆의 스택에 있지만 현재 테이프 헤드 위치의 스택 만 출력에 영향을주기 때문에 중요하지 않습니다.

<*ITI*>

이 변형에서 사용 *(XOR 1) 대신에 !, 그것으로 제로 전환되도록 +1하고,이 I양의 값과 왼쪽에서 오른쪽으로 음의 값을 푸시 조건부 푸시, 우리는 아직도 끝낼하도록 (각각의 경우에이를 부정 -1우리가 발생할 때 원래 스택 위에 T) 따라서 궁극적으로 원래 <!]T[!>솔루션 과 동일하게 작동합니다 .


4

PHP, 82 29 24 29 28 자

<?=strrev(fread(STDIN,2e9));

82-> 29 :로 바꾸면 줄 바꾸기 문자가 유지됩니다 strrev.
29-> 24 : 이제 바로 가기 구문을 사용합니다.
24-> 29 : 이제 단일 행 대신 모든 행을 읽습니다.


한 가지 문제 : fgets(STDIN)첫 번째 줄만 읽습니다.
PleaseStand

모든 줄을 읽도록 코드를 업데이트했습니다.
케빈 브라운

인위적인 한도 인 1000자를 제외하고
익명의 겁쟁이

아래의 파이썬과 일치하도록 한도를 업데이트했습니다.
케빈 브라운

4

비 펀지-98 - (11) (10)

#v~
:<,_@#

(cfunge로 테스트)

아래 변형은 요구 사항을 약간 위반합니다. 작업을 수행하지만 그 후에 무한 바이트 스트림을 출력합니다 (종료하지 않음).

~#,

작동하는 방식은 ~한 번에 한 문자 씩 스택에 입력을 반복적으로 읽고 ( #) 쉼표 위로 건너 뛰는 ( ) 것입니다. EOF에 도달 ~하면 리플렉터 역할을하고 PC가 뒤집어 져 물결표 ,를 뛰어 넘는 동안 문자 ( )를 반복적으로 튀어 나와 출력합니다 ( ) #.


다음은 짧은 버전 (10 자)입니다. line 1 : #v~line 2 : :<,_@#. 사용 j하면 여기에서 개선되지 않습니다.
Justin

@Quincunx는 IP 방향을 일종의 암시 적 부정으로 사용하여 영리합니다.
FireFly

4

Pyth- 3 5 4 바이트

따라서 원래 3 문자 버전은 줄 순서를 바꾸지 않고 줄 순서를 바꾸지 않았습니다. 그런 다음이 5 문자 버전을 생각해 냈습니다.

_jb.z

@FryAmTheEggman 덕분에 1 바이트를 절약했습니다.

_j.z

라이브 데모.

설명:

  .w  read all the input into a list of strings
 j    join (j) by using a newline character
_     reverse the result
      Pyth implicitly prints the result on an expression

원래 (잘못된) 솔루션 :

Pyth가 2014 년에 만들어 졌기 때문에 기술적으로는 중요하지 않지만 여전히 GolfScript와 묶여있는 것은 깔끔합니다.

#_w

설명:

#    loop while no errors
  w  read a line of input (throws an error on end-of-file or Control-C)
 _   reverse the input line
     Pyth implicitly prints the result on an expression

2
불행히도 사양과 일치하지 않습니다. 라인 순서도 바꿔야합니다.
DLosc 2016 년

Fk_.z_k누군가가 이것보다 짧은 것을 얻을 수 있다고 확신하지만 그것이 내가 얻은 것입니다.
gcq

@gcq 나는 더 짧은 버전 (5 자)을 가지고 있지만 편집 할 기회를 얻지 못했습니다.
kirbyfan64sos 2016 년

@DLosc 수정! 방금 모든 입력을 읽고 줄 바꿈을 통해 결합하고 반대 방향으로 바꿨습니다.
kirbyfan64sos 2016 년

@FryAmTheEggman 아, 응! 몇 달 전에 다시 게시했을 때 그 사실을 몰랐습니다.
kirbyfan64sos

4

Cubix , 9 8 바이트

이 골프에 대해 Martin Ender에게 감사드립니다.

w;o@i.?\

온라인에서 작동하는지 확인하십시오!

이것은 다음 큐브가됩니다 ( >초기 명령 포인터를 나타냄).

      w ;
      o @
> i . ? \ . . . .
  . . . . . . . .
      . .
      . .

프로그램의 첫 단계는 모든 입력을받는 것입니다. i스택에 1 바이트의 입력을 넣습니다. 입력이 완료되지 않으면 ?큐브가에 도달 할 때까지 큐브 주위를 감싸면서 IP를 오른쪽으로 돌리고로 w다시 보냅니다 i.

입력이 끝나면 ?IP 헤드를 북쪽으로 만들어 출력 루프에 들어갑니다.

  • o: 스택 맨 위에 문자를 인쇄합니다
  • w: 오른쪽의 포인터를 '보도'
  • ;: 방금 인쇄 된 문자를 팝
  • \: IP를 반영하여 동쪽으로 보냅니다.
  • ?: 인쇄 할 문자가 남아 있으면 오른쪽으로 돌아 루프로 돌아갑니다.

?스택에 아무 ​​것도 남지 않으면 최종 시간 에 도달하고 대신 IP가 계속 진행됩니다.

  • i: 입력 바이트를 가져옵니다. 이 될 것입니다 -1입력을 완료한다.
  • \: IP를 북쪽으로 보내는 IP를 반영합니다.
  • @: 프로그램을 종료합니다.

9 바이트 솔루션

..o;i?@!/

온라인에서 작동하는지 확인하십시오!

큐브 형태로 :

      . .
      o;
> 나? @! /. . .
  . . . . . . . .
      . .
      . .

encoutered 첫 번째 문자 i는 입력 문자 코드를 사용합니다. 남아있는 입력이 없으면이 값은 -1입니다.

다음 캐릭터는 ?결정입니다. 스택의 최상위가 긍정적이면, 그것이 히트까지 큐브 주변 포장, 우회전 /위로로 전송하는 i입력 루프를 생성. 그러나 TOS가 음수이면 입력이 완료된 것이므로 출력 루프로 왼쪽으로 바뀝니다.

출력 루프는 간단합니다. o;TOS를 출력하고 팝합니다. 이것이 처음 실행될 때 -1스택의 최상위이지만 문자에 매핑되지 않으므로 무시됩니다. /IP가 왼쪽으로 이동하여 발생 !@하는 위치를 반영합니다 . 스택이 비어 있으면 프로그램이 종료됩니다. 그렇지 않으면 IP가 계속해서 ?다시 충돌 합니다. 스택이 비어 있지 않기 때문에 TOS는 문자 코드 여야합니다. 모두 양수 1 이므로 IP가 오른쪽으로 바뀌고 출력 루프가 계속됩니다.


1 두 솔루션 모두 입력에 널 바이트가 포함되지 않는다고 가정합니다.


4

05AB1E, 1 바이트

R

R은 입력을 반대로합니다.


1
05AB1E를 사용해 주셔서 감사합니다 :). ,아무 것도 인쇄되지 않으면 스택 상단이 자동으로 인쇄되므로 끝에는 필요하지 않습니다 .
Adnan

@Adnan 팁 주셔서 감사합니다.
penalosa

4

Wumpus , 12 바이트

i=)!4*0.l&o@

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


Martin의 대답 은 Wumpus의 삼각형 격자 제어 흐름을 잘 보여 주지만, 나는이 도전을 한 줄짜리로 시도해 볼 것이라고 생각했습니다.

이해하기 쉬운 버전 (1 바이트 이상)은 다음과 같습니다.

i=)!8*0.;l&o@

다음과 같이 작동합니다.

[Input loop]
i        Read a byte of input (gives -1 on EOF)
=)!      Duplicate, increment then logical not (i.e. push 1 if EOF, else 0)
8*       Multiply by 8 (= x)
0        Push 0 (= y)
.        Jump to (x, y), i.e. (8, 0) if EOF else (0, 0) to continue input loop 

[Output]
;        Pop the extraneous -1 at the top from EOF
l&o      Output <length of stack> times
@        Terminate the program

이제 중간에 다른 골프 버전을 살펴 보겠습니다.

i=)!4*0.l&o@

골프 버전은 ;외부 -1을 표시하기 위해 명시적인 명령 이 필요하지 않으므로 바이트를 절약합니다 . EOF에서이 프로그램 은 다시 실행되는 위치 (4, 0)대신 점프합니다. 이번에는 예외적으로 -1이 맨 위에 있습니다! 이로 인해 래핑으로 인해이 그리드 와 동일하게되어 불필요한 값을 동시에 소비하면서 원하는 위치 로 이동할 수 있습니다.(8, 0)4*0.(-4, 0)(8, 0)


4

Wumpus , 13 11 바이트

)?\;l&o@
=i

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

설명

Wumpus는 스택 기반 언어이므로 기본 개념은 모든 STDIN을 스택으로 읽은 다음 전체 스택을 위에서 아래로 인쇄하는 것입니다. 여기서 흥미로운 부분은 그리드를 통한 제어 흐름입니다.

제어 흐름을 이해하려면 실제 삼각형 격자 레이아웃을 살펴 봐야합니다.

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

IP는 왼쪽 상단에서 동쪽으로 시작합니다. 왼쪽에있는 6 개의 셀 그룹을 통해 루프가 있고의 분기가 있음을 알 수 \있습니다. 예상 한대로 루프는 모든 입력을 읽고 끝에있는 선형 섹션은 결과를 STDOUT에 다시 씁니다.

루프를 먼저 봅시다. 첫 번째 )?\는 루프의 일부가 아닌 것으로 생각 하고 실제 루프는에서 시작하는 것이 더 합리적 i입니다. 초기 비트는 다음과 같습니다.

)   Increment an implicit zero to get a 1.
?\  Pop the 1 (which is truthy) and execute the \, which reflects the IP
    to move southwest.

그런 다음 루프가 시작됩니다.

i   Read one byte from STDIN and push it to the stack (or -1 at EOF).
    Note that Wumpus's grid doesn't wrap around, instead the IP reflects
    off the bottom edge.
=   Duplicate the byte we've read, so that we can use it for the condition
    later without losing it.
)   Increment. EOF becomes zero (falsy) and everything else positive (truthy).
?\  If the incremented value is non-zero, execute the \ again, which 
    continues the loop. Otherwise (at EOF), the \ is skipped and the
    IP keeps moving east.

그러면 선형 섹션이 끝에 남습니다.

;   Get rid of the -1 we read at EOF.
l   Push the stack depth, i.e. the number of bytes we've read.
&o  Print that many bytes.



3

핵분열 , 20 15 바이트

KX$ \
!
SR?J%
~

알고리즘은 Martin과 매우 유사하지만 구현 방식이 크게 다릅니다.

작동 원리

모든 것은에서 시작 R하여 질량 1과 에너지 0의 동쪽 원자를 방출합니다.

?누르면 입력 문자가 원자의 질량으로 저장되고 stdin이 EOF를 반환하지 않으면 에너지는 0으로 유지됩니다.이 경우 에너지는 1이됩니다.

JFission의 점프 명령이며 현재 에너지와 동등한 수의 셀을 앞으로 원자로 점프하여 원자에 0 에너지를 남깁니다. 현재 우리 원자는 에너지가 0이며이 명령을 무시합니다.

그런 다음 %스위치를 누르십시오. 에너지가 0보다 크면 원자가 아래로 향하게 \되지만 (거울에 의해 반사되는 것처럼 ) 정확히 0 개의 에너지가 있으므로 반대쪽 미러에 의해 위쪽으로 보내집니다 /.

우리의 원자는 두 번째 거울에 부딪 칠 때까지 계속 \됩니다.

로 원자의 에너지를 1로 증가시키고 원자 를 복제하는 데 $사용 X합니다. 한 사본은 $명령 에 다시 반영되며 (그 사본은 2 에너지로 남겨두고) 다른 사본은 스택으로 푸시됩니다 K.

반사 된 사본은 %스위치가 다시 닿을 때까지 뒤로 이동 합니다. 우리는 긍정적 인 에너지를 얻었으므로 마치 마치 \거울 을 치고 마치 보드를 감싸고 다음으로 S에너지를 1로 줄입니다.

S명령은 우리의 방향을 보존하기 위해 1 에너지를 소비합니다. 우리에게 에너지가 없다면, 원자는 마치 \거울에 닿는 것처럼 아래쪽으로 편향되었을 것이다 . 대신 오른쪽으로 다시 이동하여 더 많은 입력을 ?받고 사이클이 반복됩니다.

원자가 EOF에 도달하면 ?명령은 원자에 1 에너지를 저장합니다. 따라서 J이번에 명령에 도달하면 %스위치를 완전히 건너 뛰고 S0 에너지로 스위치를 밟습니다.

이제 우리의 에너지가 급격히 소비 되었기 때문에 우리의 방향은 스위치에 의해 보존 되지S 않고 오히려 아래쪽으로 향하게됩니다. 그런 다음 ~명령으로 에너지를 -1로 줄이고 보드를 감 쌉니다. 부정적인 에너지에 부딪 치면 K명령 은 원자를 밀어내는 대신 원자를 튀 깁니다 . 새로 터진 원자를로 출력하고 !, 그 원자의 1 에너지를 사용하여 S스위치 를 우회 하면 사이클이 완료됩니다.

스택이 경우 K비어있는, 우리 원자의 에너지가 무효가됩니다 (+1 에너지의 결과로) 그리고 그것은 다시 위에 반영 ~타격시 에너지 0으로 떠나는 명령 S가 될 때까지 다시, 우리는 오른쪽으로 편향 ?강타한다. EOF에 도달 ?하면 원자가 파괴되고 프로그램이 종료됩니다.


3

미로 , 10 바이트

,)";@
:".(

일반적으로 Labyrinth 프로그램은 미로와 비슷하지만이 루프를 너무 단단히 압축하여 코드가 단일 블록 (룸?)으로 끝날 수있었습니다. 다음은 제어 흐름을 쉽게 따라갈 수있는 약간 확장 된 버전입니다.

,""")""""""";""@
"   "   "   "
:""""   ."""(

,STDIN에서 EOF에 도달 할 때까지 한 번에 한 바이트 씩 읽고를 리턴합니다 -1. )단위로이 값 있도록 우리는 EOF 각 읽기 바이트 제로에 대한 긍정적 인 무언가를 얻을. :중복 각 바이트를 읽습니다.

EOF에 도달하면 명령 포인터는 두 번째 루프로 진행하여 하나의 값 ;(초기에는 EOF, 나중에 각 바이트의 두 번째 사본)을 반복적으로 버린 다음 다음 값을 감소 (시키고로 인쇄합니다 .. 두 번째 사본 (항상 긍정적 임)으로 인해 우리는 IP가 정상에서 우회전하여이 루프를 계속할 것임을 알고 있습니다.

모든 바이트가 인쇄 된 후 스택의 상단이 다시 0이되고 IP가 바로 계속 진행되고 @프로그램이 종료됩니다.

각 바이트의 불필요한 중복은 (골프 버전의 좁은 루프에서도) IP가 항상 올바른 회전을 취하고 한 루프에서 다른 루프로 교차하지 않도록 보장합니다.

TheNumberOne과 Sp3000에 대한 팁은이 압축 솔루션을 찾는 데 큰 도움이되었습니다.

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