조옮김


10

이 유사 유형에서, 프로그램은 소스 코드를 대각선을 가로 질러 왼쪽 상단에서 오른쪽 하단으로 변환해야합니다. 예를 들면 다음과 같습니다.

당신의 프로그램
의 위에
네 줄

출력

 yof
 ono
 u u
 r r
    
 p l
 r i
 o n
 g e
 r s
 a
 m

출력의 공백은 임의적이지 않습니다. 공백이 두 가지 상황에 나타납니다 원래의 공간이있는 곳 (사이 예 rl네 번째 열에서) 어디 그것의 필요 패드 문자 (. 첫 번째 열에 예를 들어, 모든 공간) 모두 필요하며, 공간에 어디서든 나타날 수 없습니다 출력에서 다른.

출력에서 단일 후행 줄 바꿈은 선택적으로 무시할 수 있습니다. 소스 코드에서 후행 줄 바꿈은 출력에 영향을 미치지 않으며 소스 코드에서 선행 줄 바꿈은 위의 예와 같이 처리해야합니다. 줄 바꿈이 아닌 모든 문자가 너비가 1 열이고 키가 1 행이라고 가정합니다. 비록 탭과 같은 문자의 경우에는 못생긴 결과가 발생할 수 있습니다.

솔루션에는 개행 문자가 아닌 문자가 각각 2 개 이상인 줄이 2 개 이상 있어야하며 자체 전치가 아니어야합니다 (출력은 소스와 동일 할 수 없음).

소스 코드가 포함 된 파일에서 읽고, URL에서 데이터를 가져오고, quining 내장 기능을 사용하는 등의 부정 행위 퀴 는 허용되지 않습니다.

이것은 코드 골프입니다 : 가장 짧은 코드는 바이트입니다.


이것이 진정한 quine이어야합니까?
lirtosiast

2
@ThomasKwa 반대로?
Martin Ender

@ MartinBüttner 리터럴이 반향되는 언어가있을 수 있습니다. 만일을 위해서.
lirtosiast

@ThomasKwa 지정된 모든 규칙을 따르는 한 괜찮습니다.
Luke

외부 라이브러리 (예 : Javascript의 Lodash)를 사용할 수 없습니까?
Mama Fun Roll

답변:


5

CJam, 14 바이트

{`"_~".+N*}
_~

여기에서 테스트하십시오.

짧지 만 아마도 핵분열 솔루션보다 조금 덜 흥미로울 것입니다.

설명

{       e# Quine framework. Runs the block while another copy of it is on the stack.
  `     e# Stringify the block.
  "_~"  e# Push the remaining code as a string.
  .+    e# Element-wise append... essentially puts the two strings in a grid and 
        e# transposes it.
  N*    e# Join with linefeeds.
}_~

10

분열 , 17 바이트

아직도 quines에 대해 가장 좋아하는 언어는 ...

'"
!0
0+
;!
DN
"!

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

설명

이것은 기본 핵분열 퀴니 와 매우 유사합니다 . 사실, "각 줄 바꿈 문자가 적어도 두 개 이상인 줄이 두 개 이상 있어야합니다"규칙이 아니었다면 간단히 바꾸고 R로 바꿀 수있었습니다 D. 이 규칙은 우리가 다른 줄을 인쇄해야하기 때문에 일을 조금 더 흥미롭게 만듭니다.

제어 흐름은 D남쪽으로가는 단일 원자로 시작합니다 . 그것이 맞기 때문에 "감싸고 인쇄합니다

'!0;D

일반 quine에서와 비슷하게 STDOUT에 '!그런 다음 원자의 질량을 문자 코드로 설정 !합니다. 는 0여전히 남쪽 움직이고 번째 열, 행 원자를 수송하는 순간 이동한다.

함께 +우리의 값으로 원자의 질량을 증가 ". !N!따옴표, 줄 바꿈, 따옴표를 인쇄합니다. STDOUT은 이제 다음과 같습니다.

'!0;D"
"

감싸고 나면 원자가 다른 원자를 때리고 "두 번째 줄을 그대로 인쇄합니다.

'!0;D"
"0+!N!

이제 끝났습니다. 원자는 텔레 포터를 다시 한 번 사용하고, 그 안에 착륙 ;하여 프로그램을 종료시킵니다.

여기에서 가장 작은 비트가 "맨 아래에 있고 다른 비트가 맨 위에 놓이고 !한 번 더 값을 설정하지 않고도 한 번에 인쇄 할 수 있다고 가정합니다 (문자열 모드로 다시 입력하여 덮어 쓰기 때문에).


3

자바 스크립트 ES6, 90 바이트

$=_=>[...(_=`$=${$};$()`.split`
`)[0]].map((x,y)=>_.map(v=>[...
v][y]).join``).join`
`;$()

나쁘지 않아요

설명

표준 quine 프레임 워크는 다음과 같습니다.

$=_=>`$=${$};$()`;$()

수정하기 위해 줄 바꿈과 문자를 따라 quine 문자열을 분할하여 2 개의 맵 함수를 사용하여 바꾼 문자 행렬을 만들고 결합하여 출력을 만듭니다.



2

Befunge-93 , 57 바이트

^
_^
,@
+,
5*
52
,+
*9
28
+|
9
8#
|!
 ,
##
!:
,^
#
:
^
""

이것은 각 문자를 스택의 첫 번째 열에 넣고 (따옴표 자체 제외) 각 항목을 스택에서 인쇄하여 작동합니다. 그런 다음 따옴표를 인쇄하고 줄 바꿈을 인쇄 한 다음 두 번째 열로 이동합니다. 새 줄을 인쇄하는 것과 같은 일을합니다.

제목의 링크에서 테스트 할 수 있지만 코드를 직접 창에 복사하여 붙여 넣어야합니다. '느린'버튼을 누르면 포인터가 걸리는 경로와 당시 스택이 표시됩니다.


Fission 답변에서와 같이 두 번째 열의 따옴표를 맨 위로 옮기는 것이 더 짧을 수 있습니까?
Martin Ender

따옴표를 맨 위로 이동하고 두 번째 열을 다시 정렬하고 여전히 작동하도록 할 수 있지만 첫 번째 열은 여전히 ​​같은 높이 여야하기 때문에 여전히 57 바이트입니다.
Kevin W.

흠, 나는 당신이 "한 번만 생성 할 수 있다고 생각 하여 첫 번째 열에서 두 번째 열로 일부 코드를 옮길 수 있다고 생각했습니다 .
Martin Ender

1

파이썬 2, 91 75 69 바이트

s='#%r;print"s#\\n="+"\\n".join(s%%s)';print"s#\n="+"\n".join(s%s)
##

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

설명:

표준 quine의 수정을 사용합니다.

s='s=%r;print s%%s';print s%s

수정 후 :

s='s=%r;print"\\n".join(s%%s)';print"\n".join(s%s)

한 줄만 허용하면 충분합니다. 그런 다음 해당 요구 사항을 충족시키기 위해 두 번째 줄에 두 문자를 추가했습니다. 그만큼#두 번째 행 문자는 첫 번째 행에서 문자를 변경하는 한 무엇이든 대체 할 수 있으며 프로그램을 구문 적으로 유효하게 만듭니다.

지금 올바르게 인쇄하려면 #처음 두 줄의 끝에 인쇄해야합니다 . 따라서 문자열에서 처음 두 문자를 제거 s하고 인쇄 #하기 전에 문자를 인쇄 s%s합니다. 줄 바꿈 문자를 제거하여 바이트 중 하나 를 저장하기 위해 #시작 중 하나를 넣었습니다 s.

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