무한 출력을 생성 할 수있는 가장 짧은 코드를 작성하십시오.
그게 다야. 어떤 시점에서 출력 생성이 중지 된 경우에만 코드가 실격됩니다. 코드 골프에서 항상 그렇듯이 가장 짧은 코드가 승리합니다.
다음은 정말 영리하다고 생각되는 답변 목록입니다. 크레딧을 얻을 수 있습니다.
무한 출력을 생성 할 수있는 가장 짧은 코드를 작성하십시오.
그게 다야. 어떤 시점에서 출력 생성이 중지 된 경우에만 코드가 실격됩니다. 코드 골프에서 항상 그렇듯이 가장 짧은 코드가 승리합니다.
다음은 정말 영리하다고 생각되는 답변 목록입니다. 크레딧을 얻을 수 있습니다.
답변:
.
0
영원히 출력 합니다. Befunge 줄이 줄 바꿈되어 0
빈 스택 에서 튀어 나오면 작동합니다.
16 진수로 :
b8 21 0e cd 10 eb fc
나머지는 킬로바이트 이상의 시스템 라이브러리 및 런타임이 필요합니다. 기본으로 돌아 가기 :
$ echo -ne '\xb8!\xe\xcd\x10\xeb\xfc' > A.COM
$ dosbox A.COM
두 번째 바이트 ( 0x21
또는 !
)를 변경하여 출력을 변경할 수 있습니다.
출력을 위해 BIOS 인터럽트를 사용합니다. DOS는 필요하지 않지만 QEMU를 설정하지 않았습니다.
기계어 코드는 다음 어셈블리와 일치합니다.
mov ax, 0x0e21
again: int 0x10
jmp again
출력은 모두 int
호출 중입니다. 이 참조 에 따라 AH에 0x0e가있는 int 0x10은 AL의 바이트를 화면에 인쇄합니다.
레지스터 AX가 상위 바이트의 AH와 하위 바이트의 AL로 구성된 16 비트 워드라는 것을 알면 함께로드하여 추가로드 (기계 코드의 바이트)를 절약 할 수 있습니다.
%0
무한히 부름.
%0
이 없기 @
때문에 지속적으로을 출력합니다 ...> %0
. 이것은 재귀 적이므로 언젠가 전체 RAM을 먹어 버릴 수도 있습니다.
,"
영원을 위해 ",,,,,,,,,,"를 출력합니다.
yes
y
지속적으로 출력
yes
외부 바이너리, 그리고 떠들썩한 파티의 일부 (엄밀히 말하면)입니다.
y=yes
이 없으며 시스템이 난해하지 않은 경우 시스템에 있다고 가정 할 수 yes
있습니다 $PATH
( GNU 핵심 유틸리티 참조 ). 논리를 사용하면 모든 솔루션에 대해 별자리를 가정 할 수 있습니다.
bash
기능하십시오 I'ts POSIX 쉘 의 기본 부분 의 핵심 유틸 . (즉, sh : 3 문자로 제목을 변경하십시오 ;-)
오래된 실이지만 재미있는 것은
fix show
하스켈에서는
\\\\\\\\\\\\\....
기본적으로 실행되므로 영원히
let x = show x in x
그것은 x
문자열 이라는 것을 알고 있으므로 첫 번째 문자는 "
이므로 이스케이프 처리 해야 \"
하지만 이스케이프 처리 등 을 수행 \
해야 한다는 것을 알고 있습니다 \\\x
.
fix$show
더 심미적 이었는지 궁금합니다 :-)
import Data.Function
하고 인쇄하지 않고 문자열을 반환하기 때문에 문자 수의 공정성에 의문을 제기합니다. 또한 문자열은 실제로 "\"\\ "\\\\\\\"\\\\\\\\\\\\\\\ "\\\\\\\\\\\\\\입니다.
Windows 배치 파일, 8 자
:a
goto a
:a\r\ngoto a
Windows가 CRLF를 사용하기 때문에
3a 61 0a 67 6f 74 6f 20
내 창 8에서 작동 ... : P
+[.]
또는
-[.]
\x01
아닙니다 \xFF
. 나는 그것이 요구 사항이 아니라고 생각한다 :-/
자바 베스트 시도 :
class A{static{for(int i=0;i<1;)System.out.print(1);}}
for(;;)
패턴을 금지합니까 ? 무엇에 대해 while(true)
?
static
블록을 사용할 수 없습니다 .
$0&$
./forever2.sh: line 1: $: command not found
지속적으로 출력 합니다.
$0
백그라운드 이기 때문에 각 부모는 잘못된 명령 이후에 죽 $
으므로 스택 / 메모리는 소모되지 않으므로 무한정 계속되어야합니다.
이상하게도 시간이 지남에 따라 출력이 느려집니다. top
시스템 CPU 사용량이 100 %에 가깝지만 메모리 또는 CPU- 호그 프로세스가 있다고보고합니다. 아마도 커널의 일부 리소스 할당은 점점 더 효율적이지 않습니다.
$0
실패 하므로 프로세스를 중지 할 수 없습니다 .
HAI IZ 1<2? VISIBLE "0" KTHX KTHXBYE
LOLCODE에 사진을 줄 것이라고 생각했지만 놀랍도록 많은 기능이 있습니다.
HAI
와KTHXBYE
경고 : 당신은 정말로 당신의 브라우저에서 이것을 실행하고 싶지 않습니다
for(;;)alert()
alert()
하면이 오류가 발생합니다Error: Not enough arguments [nsIDOMWindow.alert]
#s->1Rs
여기서 #
빈 기호 (기본적으로 테이프) s
는 기존 (시작) 상태 만 설명하고 1
숫자를 인쇄 R
하고 오른쪽으로 이동하는 것을 의미 s
합니다.
s#1Rs
(현재의 상태, 현재의 심볼, 심볼에 쓰기, 방향 간 이동, 다음 상태)를.
print[1..]
나는 이것이 가장 짧은 코드라고 생각한다.
Show
데이터 구조를 만듭니다 .관심있는 사람들을 위해 다음을 인쇄합니다.
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,...
24MB
Marbelous는 여기서 놀랍습니다. 이것은 무한한 양의 달러 기호를 게시 $
하지만 스택 한계에 빨리 도달합니다.
작동 방식
24는 언어 리터럴로 보드에서 떨어져 해당 ASCII 문자로 STDOUT에 인쇄됩니다. MB는 메인 보드에 내재적으로 부여 된 이름입니다. 메인 보드에는 입력이 없으므로 모든 틱이 발생합니다. 셀은 왼쪽에서 오른쪽으로 평가되므로 리터럴은 다음 재귀 호출 전에 항상 인쇄됩니다.
따라서 이것은이 의사 코드와 거의 동일합니다.
MB() {
print('$');
while(true) MB();
}
24@0
@0/\..
이것은 두 개의 포털 사이에 리터럴을 반복하여 작동하는데 @0
, 24는 더 낮을 때마다 @0
아래의 셀로 전송됩니다 @0
. 그것은 /\
복제 연산자 인에 위치하며 대리석 (리터럴) 사본 하나를 왼쪽 (포탈 뒷면)에 놓고 다른 하나는 오른쪽에 놓습니다. 그런 다음이 coopy는 보드에서 떨어지고 ( ..
빈 셀 이므로 ) STDOUT에 인쇄됩니다. 의사 코드에서는 다음과 같이 변환됩니다.
MB() {
while(true) print '$'
}
24
\\/\..
이것은 복제기와 디플렉터 사이에 대리석을 끊임없이 던져 가장 오른쪽 셀에 하나의 사본을 놓고 보드에서 떨어 뜨립니다. 의사 코드에서는 다음과 같습니다.
MB() {
List charlist = ['$'];
while(true) {
charlist.add(charlist[0];
charlist.add(charlist[0];
charlist.pop();
print(charlist.pop());
// Wait, what?
}
}
노트
..
구슬 그렇지 않으면 보드를 착륙 것 (및 폐기) 이후 세포는 마지막 두 보드에 필요하다. 약간의 추가 재미를 위해 24
구슬을 기준으로 FF
빈 ..
셀 을 대체 하고를 사용하여 빈 셀을 ??
0으로 대체합니다 . STDOUT에서 어떤 모습 일지 추측하십시오.
지금까지 최고의 C / C ++ 답변보다 약간 짧습니다. 빈 줄을 무한정 인쇄합니다 (그러나 최적화하지 않고 컴파일하면 스택이 오버플로됩니다).
main(){main(puts(""));}
putc(0)
(또는 1 또는 2, ... 또는 9). 작동할까요?
putc
에는 2 개의 매개 변수가 필요합니다.
mdeitrick의 답변 은 Python 3에서 더 길며 print
명령문을 함수 호출 (15 문자)로 바꿉니다 .
while 1:print()
이것은 파이썬 3에서 찾은 가장 짧은 것입니다. 그러나 무한 루프로 인쇄하는 몇 가지 더 재미있는 방법이 있습니다.
print()
를 반환합니다 None
.! = 9, 무한 루프가됩니다. 는 (18 자) 8
를 대체하는 no-op입니다 pass
.
while print()!=9:8
iter(print, 9)
print()
같을 때까지 의 결과를 반환하는 iterable을 정의합니다 9
. any
iterable 입력을 소비하여 true 값을 찾고 print()
항상 반환하기 때문에 도착하지 않습니다 None
. ( set
같은 효과를 사용할 수도 있습니다 .)
any(iter(print,9))
또는 8
(17 문자) 가 포함되어 있는지 테스트하여 iterable을 소비자로 사용할 수 있습니다 .
8in iter(print,9)
*_,=iter(print,9)
내가 생각한 가장 이상한 방법은 함수 호출 내부에서 splat destructuring을 사용하는 것 function(*iterable)
입니다. 파이썬은 함수 호출이 가짜 일지라도 함수 호출을 시도하기 전에 전체 iterable을 소비하려고합니다. 이는 타입 오류가 iterable이 모두 소진 된 후에 만 발생하기 때문에 실제 함수가 필요하지 않음을 의미합니다.
8(*iter(print,9))
*iter(print,1),
작동하고 15 자만 있지만 꽤 많은 메모리를 소비합니다.
무한의 1을 출력합니다
16 진수로 :
40 CD 29 FF E6
asm으로 :
inc ax
int 0x29
jmp si
설명:
inc ax
레지스터 AX를 1 씩 증가시킵니다. int 0x29
MSDOS의 "fast put char"루틴으로, AL (AX의 낮은 부분)의 값을 출력하고 커서를 1 씩 전진시킵니다. jmp si
거의 모든 DOS와 같은 운영 체제에서 레지스터 SI가 0x100이므로 .com 프로그램이 시작되는 위치이기 때문에 맨 위로 되돌아가는 이상한 방법입니다. 2 바이트를 사용합니다.
출처 :
이진 표현 :
00
설명서에서 :
각 쌍의 첫 번째 비트는 누산기에서 빼기위한 값을 보유하는 메모리 위치에 대한 포인터입니다. 결과는 피연산자가 가리키는 동일한 메모리 위치에 저장됩니다. 결과가 음수이면 (비트가 2의 보수 표시) 쌍의 두 번째 비트가 현재 PC 인 모듈로 2에 추가됩니다.
프로그램 카운터와 누산기는 0으로 초기화됩니다. 그 후, 메모리 위치 0의 내용이 누산기에서 감산된다. 이것은 0이되어 누산기가 0이됩니다. 캐리가 없으므로 두 번째 비트는 프로그램 카운터에 추가되지 않습니다.
그런 다음 프로그램 카운터는 2 모듈로 2 씩 증가하여 다시 시작으로 보내며 무한 루프가 발생합니다. 각 단계에서 특수 메모리 위치 0이 수정되어 해당 내용 (a 0
)이 출력에 기록됩니다.
파이썬의 공식 인터프리터는 제로 패딩을 필요로하기 때문에이 프로그램은 1 바이트로 점수 매겨 져야한다고 주장 할 수 있습니다. 그러나 제로 패딩이 실제로 코드 라고 생각하지 않습니다 .
내가 알고있는 한 가지 언어와 전에는 사용하지 않은 두 가지 언어 : D
EDIT : Perl을 설치하려고 시도했을 때 Perl이 작동하지 않았습니다.
loop{p 1}
연속적으로 별도의 줄에 1을 인쇄하기 만하면됩니다.
또한 많은 대안이 있습니다.
loop{p''} # prints [ "" ] on separate lines continually
loop{p p} # prints [ nil ] on separate lines continually
10 문자 솔루션 :
p 1while 1
실제로 첫 번째 1
와 사이의 공간을 제거 할 수 있다는 사실에 놀랐지 while
만 분명히 작동합니다.
{1p}do
나의 첫번째 Golfscript 프로그램! :피
1n
lssslssstltlsslslsl
여기서 s
공백을 t
나타내고 탭과 l
줄 바꿈을 나타냅니다 .
{1p}do
은 인쇄 1
및 종료 만합니다. (입력이 없기 때문에 스택은 처음 ""
에이며, exec of exes 후 1p
팝되고 거짓을 테스트합니다.) dup을 추가하는 것만으로도 {1.p}do
(7 바이트) 작동합니다.
C, 25 24
main(){main(puts("1"));}
s/while/main/
return main(puts("1"))
테일 콜이었을 것입니다.
methodName(void)
정확히 0 개의 매개 변수 를 허용합니다.
무한한 물고기 코드 박스를 사용하는 창의적인 방법 :
"o
명령어 포인터는 끝에 도달 한 후 줄의 처음으로 돌아 가기 때문에이 코드는 본질적으로 다음과 같이 읽을 수 있습니다.
"o"o
"문자열"o "를 읽고 출력합니다"를 의미합니다.
여기에 다른 상충 관계가있는 또 다른 10 char perl 솔루션이 있습니다. 특히, -n 플래그 나 사용자 입력이 필요하지 않습니다. 그러나 메모리를 무한정으로 먹습니다.
warn;do$0
파일에 저장하고 해당 파일을 실행하면 다음과 같은 결과가 나타납니다.
Warning: something's wrong at /tmp/foo.pl line 1.
Warning: something's wrong at /tmp/foo.pl line 1.
Warning: something's wrong at /tmp/foo.pl line 1.
99 5
온라인으로 사용해보십시오! 11
무한히 출력
다음과 같은 Befunge-98 프로그램을 생성합니다.
[glzgx"Lz^v*M7TW!4:wi/l-[, s44~s;|Sa3zb|u<B/-&<Y a@=nN>Nc%}"gq!kCW $1{2hyzABRj*glr#z(@Zx@xT=>1'.b
/
관련 부분은 다음과 같습니다.
[>1'.b
/
b
11
스택으로 밀고 .
인쇄합니다. 1
그리고 49
또한 스택에 푸시, 실제로는 인쇄되지 않습니다.
코드 실행 애니메이션 :
main(){for(;;puts(""));}
끝없는 '\n'
문자를 인쇄 합니다. 이것은 가장 짧은 C 응답보다 긴 바이트이지만 스택 오버플로를 피하기 위해 테일 콜 최적화에 의존하지 않습니다.
for(;;)
대신에while(!
!
출력이 계속 되지 않음\n
내 초기 솔루션 :
while(1 -eq 1){1}
입술 덕분에 :
while(1){1}
Danko Durbić가 승자가 있다고 생각합니다. 왜 이것이 효과가 있을지 잘 모르겠지만 지금까지는 더 짧은 것을 생각할 수 없습니다.
for(){1}
while(1){1}
.
while($true){1}
것이지만 당신의 해결책은 확실히 이긴다-나는 PowerShell에서 그것을 잊었다 $true -eq 1
. 답변으로 게시하면 투표하겠습니다.
for(){1}
.