비 결정적 출력을 생성하는 가장 짧은 코드


83

비 결정적 출력을 생성해야합니다 .

이 경우 출력이 항상 동일한 결과가되는 것은 아닙니다.

규칙 :

  • 항상 같은 시드를 가진 의사 난수 생성기는 계산되지 않습니다.

  • 각 실행마다 다른 (알 수없는) 시간에 실행중인 프로그램에 의존 할 수 있습니다.

  • 코드의 프로세스 ID (통역사가 수정하지 않은 경우)는 비 결정적이라고 가정 할 수 있습니다.

  • 웹 기반 임의성에 의존 할 수 있습니다.

  • 코드가 비어 있지 않은 입력을받지 않을 수 있습니다. 관련 메타 포스트 .

  • 프로그램을 중지 할 필요는 없지만 출력이 표시되어야합니다.

리더 보드


33
@ mbomb007 C에는 단순히 "정의되지 않은"행동이 많은 것들이 있습니다. 모든 통역사는 어떤 상황에서도 원하는 것을 할 수 있습니다. 우리가 아는 한, 비가 오는 화요일에 부호있는 정수를 오버플로하려고하면 gcc가 피자를 주문할 수 있지만 다른 모든 요일에는 화면에서 송어가 튀어 나옵니다. 따라서 실제로 구현에 결정적인지 아닌지 알 수 없습니다.
Martin Ender

12
@MartinEnder 그게 중요한지 잘 모르겠습니다. 여기서는 사양이 아닌 구현에 따라 언어를 정의합니다 (구현이없는 언어는 허용되지 않음)
Nathan Merrill

2
@MartinEnder 네, 나단에 동의합니다.
mbomb007

7
C에서 정의되지 않은 동작으로 인해 충돌이 발생하는 경우가 많으며 UNIX 및 Linux에서 충돌하면 프로세스 ID가 포함 된 코어 파일이 생성됩니다. 그것은 현재 말한 질문을 따르는 것 같습니다.

5
내가 오해하지 않는 한, 질문은 정의되지 않은 행동을 이용하는 코드를 요구하지 않았습니다. 비결 정성을 보장하기 위해 정의 된 동작을 이용하는 코드를 요청합니다.
WGroleau

답변:


110

WinDbg, 1 바이트

#

와! WinDbg에서 1 바이트 솔루션을 기대하지 마십시오!

#디스 어셈블리 패턴을 검색하지만 매개 변수가 없으므로 연결된 덤프 / 프로세스에서 다음 어셈블리 명령어를 반환하는 것으로 보입니다. 초기 주소를 설정하는 논리는 확실하지 않지만 그렇게합니다.

샘플 출력 :

0:000> #
Search address set to 75959556 
user32!NtUserGetMessage+0xc
75959556 c21000          ret     10h

0:000> #
user32!NtUserGetMessage+0xf 
75959559 90              nop

0:000> #
user32!NtUserMessageCall 
7595955a 90              nop

0:000> #
user32!NtUserMessageCall+0x1 
7595955b 90              nop

0:000> #
user32!NtUserMessageCall+0x2 
7595955c 90              nop

0:000> #
user32!NtUserMessageCall+0x3 
7595955d 90              nop

0:000> #
user32!GetMessageW
7595955e 8bff            mov     edi,edi

0:000> #
user32!GetMessageW+0x2 
75959560 55              push    ebp

0:000> #
user32!GetMessageW+0x3 
75959561 8bec            mov     ebp,esp

0:000> #
user32!GetMessageW+0x5 
75959563 8b5510          mov     edx,dword ptr [ebp+10h]

9
더 멋진 답변 중 하나는 여기에 "현재 날짜"솔루션을 이길 것이라고 생각합니다.
매직 문어 Urn

위의 내용은 386 인텔 CPU 어셈블리에서 일부 기능이 시작되는 단계적으로 분해 된 것으로 보인다
RosLuP

60

자바 7, 33 30 27 바이트

int a(){return hashCode();}

자바 때문이다.


49
자바 때문이다. 아마도 Java에 대한 최고의 설명 일 것입니다.
F. George

5
@carusocomputing toString이전 버전에 있었지만 반환 유형 String이보다 깁니다 int. 바이트를 저장하십시오! :]
찌를

12
이것이 함수로 유효합니까? hashCode()의 약자 this.hashCode()이므로 정적 메서드가 아닌 인스턴스 메서드로만 작동합니다. 이 경우 발신자에서 객체를 만들려면 추가 코드가 필요합니다. 비결정론을 담당하는 객체를 만드는 코드이기 때문에 여기에서 관련이 있습니다.

15
Java 8 : ()->hashCode()14 바이트 Just sayin ';)
Olivier Grégoire

4
@ pts 게시물 의 기본 제출 구조를 논의하는 메타 게시물을 기반으로합니다 . 챌린지에서 전체 프로그램이 필요하다고 지정하지 않는 한 기본적으로 기능이 허용됩니다.
Poke

52

MATLAB, 3 바이트

why

why거의 모든 질문에 대한 답변을 제공합니다. 몇 가지 예 :

why
The programmer suggested it.

why
To fool the tall good and smart system manager. 

why
You insisted on it.

why
How should I know?

이것은 rand내가 생각할 수 있는 기능 보다 짧습니다 .


33
MATLAB을위한 내장이 ? 왜?
ETHproductions

59
@ETHproductions 프로그래머는 그것을 제안
에디 커티스에게

40

R, 1 바이트

t

함수의 소스 코드와 R의 모든 (재) 시작과 함께 변경되는 메모리 포인터 주소를 출력합니다.


36

응? , 0 바이트


빈 프로그램은 여전히 ​​출력을 생성합니다. 실행되는 Python 인터프리터의 마지막 줄 :

print "..."
f = open('Notes.txt', 'w')
f.write(time.strftime("%c") + " - The user tried to give me commands again. I still have no idea what they are talking about...\n")

프로그램의 끝에서 파이썬 인터프리터는를 인쇄 ...한 다음 텍스트 파일을 작성 / 열고 Notes.txt현재 시간을 포함하는 문자열을 작성합니다.


5
사람들이 내 GitHub에서 사용할 것이라고 생각한 것 중에서 농담 언어 통역사가 하나가 될 것이라고 생각하지 않았습니다. : P
Kade

@Kade 실제로 다른 질문 (단일 바이트만으로 소리를 재생하는 가장 짧은 코드)에도 대답하는 데 사용하려고했지만 질문은 이제 닫힙니다.
mbomb007

원래 .NET 인터프리터를 보지 않으면 경쟁이 아닌 것 같지만 추측합니다.
mbomb007

30

미로 , 5 바이트

v
!
@

인쇄 0하거나 아무것도 인쇄 하지 않습니다 (각각 50 % 확률).

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

Labyrinth가 임의의 행동을 나타내는 매우 구체적인 사례가 있습니다.

  • 명령 포인터 앞과 뒤에 벽이 있어야합니다.
  • 명령 포인터의 왼쪽과 오른쪽이 아닌 벽이 있어야합니다.
  • 스택의 현재 상단은 0이어야합니다.

이러한 조건이 모두 충족되면 IP가 이동하는 방향이 (균일하게) 임의로 선택됩니다. 가장 중요한 것은 이러한 세 가지 조건을 정기적 인 제어 흐름에서 충족시킬 수 없다는 것입니다. 즉, 런타임에 소스 코드를 수정하지 않으면 의미가 없습니다.

(이것은 약간 임의적 인 것처럼 보이지만 실제로는 IP의 방향이 항상 이전 방향, 이웃 및 스택 상단의 부호에 따라 다르므로 실제로 이러한 조건에서 찾을 수있는 가장 일관된 동작입니다. 이것은 언어에 임의의 근원을 포함시키는 우아한 방법처럼 보였다.)

소스 코드 회전 명령어 ( <^>v)를 사용 하면 IP를 이러한 상황에 놓을 수 있습니다. 그러한 예가 맨 위에 나타납니다. IP는 처음에 동쪽을 가리키고 맨 위에서 시작합니다. v회전은 현재 열 우리가 얻을 수 있도록 :

@
v
!

IP는이 회전과 함께 이동하여 여전히 v동쪽을 가리키고 있습니다. 이제 모든 조건이 충족되었으므로 IP가 임의로 올라가거나 내려갑니다. 올라가면 프로그램이 즉시 종료됩니다. 아래로 내려 가면 0을 인쇄하고 열을 다시 회전시킨 다음 종료합니다.

이것을 사용하는 세 가지 다른 프로그램이 있습니다 (하나는 0인쇄 00하고 다른 하나는 인쇄합니다 000) :

v
@
!

"
>@!

"
>!@

(사실이 당신은 또한 사용할 수 있기 때문에 많은 개 이상의 다른 프로그램입니다 .대신 !널 바이트를 인쇄하거나 대체하는 "명령의 대형 다양한,하지만 그들은 모두 본질적으로 같은 일을 생각합니다.)


30

Befunge (-93 및 -98), 3 바이트

?.@

?임의의 방향으로 실행을 보낸다. 올라가거나 내려 가면로 돌아가서 다시 ?롤백합니다. 왼쪽으로 가면 프로그램이로 바뀝니다 @. 따라서 아무 것도 인쇄하지 않고 종료됩니다. 올바르게 진행되면 인쇄 0( .스택이 비었 을 때 생성 된 출력 ) 한 다음에서 종료됩니다 @.


이것이 종료되는 것을 보장하지는 않지만, 이것을 정확히 +1로 게시하려고했습니다
Daniel

널 문자 (ASCII 값 0) 대신 숫자로 0을 출력하도록 쉼표를 마침표로 변경할 수 있습니다. +1
MildlyMilquetoast

그것은이었다 .내가 테스트에 사용 된 프로그램에서,하지만 어떻게 든되었다 ,내가 PPCG에 그것을 복사 할 때. 결정된.

7
@Dopapp 그것은 확률 1로 거의 확실하게 종료됩니다. 나는 그것을 보증으로 생각합니다;)
Oliphaunt

@JamesHolderness 생각 이 ...하지만 계산 경우 1. 확실하지 않음에 그것을 할 수 있습니다
MildlyMilquetoast

29

마인 크래프트, 5 4 바이트

op 8

서버의 콘솔 또는 명령 블록에 입력하여 전원을 공급하는 데 사용됩니다. 를 앞에 추가하여 채팅 인터페이스에서 실행할 수 있습니다 /.

일반적으로이 작업은 수행되지 않지만 서버에 사용자 이름이 "8"인 플레이어가 있으면 운영자 권한이 부여됩니다. Minecraft에서는 일반적으로 사용자 이름의 길이가 3 자 여야하지만 이름 길이가 짧은 일부 계정은이 제한 이전에 생성되었습니다.

이러한 사용자 이름 중 하나가 없거나 사용자 운영자 권한을 부여 할 위험이없는 비 결정적임을 증명할 수있는 버전은 다음과 같습니다.

me @r

무작위 플레이어의 사용자 이름 인 모든 사람에게 메시지를 표시합니다. 이 op명령은 문자열을 반환하는 스크립트가 아닌 문자열 리터럴 만 사용합니다.

me명령은 첫 번째 예제에서는 실제로 작동하지 않으며 표시됩니다 "<your-username> 8". 모든 명령 블록은 동일한 "사용자 이름"을 가지기 때문에 명령 블록에서 실행할 때 결정적이지 않지만 채팅 인터페이스에서 실행하려면 /1 바이트가 더 필요합니다 .


그래서 /바이트 수에 포함되지 않는 이유는 무엇입니까?
Esolanging Fruit

11
@ Challenger5 슬래시는 명령 블록에서 선택 사항이며 서버 콘솔에서는 허용되지 않으며 채팅 인터페이스에서는 필수입니다.
Pavel

2
실제로, 그것은 4 바이트 + 2 블록 (명령 블록 및 레드 스톤 소스), 또는 6 개의 blytes
RudolfJelin

2
@RudolphJelinek 명령 블록없이 콘솔에서 실행할 수 있습니다.
Pavel

1
결정적이지 않은 또 다른 옵션은 help명령 블록에 있으며 4 바이트이며 해적판 게임이 필요하지 않습니다.
Pokechu22

21

sh + procps, 1 바이트

w

이것은 내가 알고있는 가장 짧은 솔루션입니다. 외부 실행 파일을 호출하여 작동합니다. procps현재 시스템 상태 ( ps및 친구) 에 대한 정보를보고하는 책임 패키지이며 기본적으로 대부분의 Linux 배포에 설치됩니다. w는 가장 짧은 이름의 명령이며 로그인 한 사용자에 대한 정보뿐만 아니라 가동 시간과 같은 비 결정적 정보도 반환합니다.


21

7, 6 바이트를 알립니다

x is y

"x"또는 "y"가 정의되지 않았으므로 유효한 Inform 7 프로그램이 아닙니다. 따라서 오류가 발생합니다.

그러나이 오류를 포함하여 Inform 7의 오류 메시지 중 일부는 무작위입니다. 따라서 인쇄되는 텍스트는 기술적으로 결정적이지 않습니다.

몇 가지 가능한 출력은 다음과 같습니다.

문제. 'x is y'라는 문장은 두 가지가 같다고 말하는 것처럼 보입니다. 저는 'x'와 'y'를 서로 다른 두 가지로 읽습니다. '아담스가 제퍼슨입니다.' 예를 들어 '버지니아는 조명이 방입니다'라고 부르는 것은 버지니아라는 것이 존재하고 그것이 내가 아는 종류 인 '방'이라고 말합니다. 내가 아는 'lighted'라는 속성과 결합되어 있습니다.

문제. 'x is y'라는 문장은 두 가지가 같다고 말하는 것처럼 보입니다. 저는 'x'와 'y'를 서로 다른 두 가지로 읽습니다. 따라서 하나가 다른 것이라고 말하는 것은 의미가 없습니다. '아담은 이브입니다'. 예를 들어 'Land of Nod is a lighted room'은 두 번째 것이 일종의 이름이라면 괜찮을 것입니다. 내가 알고있는 'lighted'라는 속성과 결합 된

문제. 'x is y'라는 문장은 두 가지가 같다고 말하는 것처럼 보입니다. 저는 'x'와 'y'를 서로 다른 두 가지로 읽습니다. 따라서 하나가 다른 것이라고 말하는 것은 의미가 없습니다. 클라크 켄트는 렉스 루더입니다 예를 들어 '메트로폴리스는 조명이 켜진 방'이라고 말하면 메트로폴리스라는 것이 존재하고 그것이 '방'이라고 말합니다. 내가 알고있는 'lighted'라는 속성과 결합 된

문제. 'x is y'라는 문장은 두 가지가 같다고 말하는 것처럼 보입니다. 저는 'x'와 'y'를 서로 다른 두 가지로 읽습니다. 따라서 하나가 다른 것이라고 말하는 것은 의미가 없습니다. 'Aeschylus는 Euripides입니다'. 예를 들어 'Underworld is a light room'은 Underworld라는 것이 존재하고 그것이 '룸'이라고 말합니다. 내가 알고있는 'lighted'라는 속성과 결합 된


7
오류 메시지조차도 장황합니다!
Destructible Lemon

21

자바 스크립트, 4 바이트

Date

현재 날짜 / 시간을 반환하는 함수입니다. 나는 이것이 가장 짧은 것이라고 생각 합니다 ...

설명

이것이 왜 유효한 지에 대해 많은 혼란을 야기하는 것처럼 보이므로 설명하려고합니다.

JavaScript에서 함수 항목은 변수에 지정되고 함수처럼 호출 될 수있는 경우 유효합니다. 예를 들어이 기능은 유효한 항목입니다.

function(){return Date()}

다음과 같이 변수에 할당 할 수있는 함수이기 때문입니다.

f=function(){return Date()}

그런 다음 f()필요한만큼 여러 번 실행 하십시오. 매번 현재 날짜 / 시간 문자열을 반환하며 OP에 의해 결정적이지 않은 것으로 간주됩니다.

이 ES6 화살표 기능도 유효합니다.

_=>Date()

로 할당 f=_=>Date()한 다음 f()다른 것과 같이 실행할 수 있습니다 .

이제 또 다른 유효한 항목이 있습니다.

Date

왜? 다른 두 항목과 마찬가지로이 항목을 지정 f=Date하고 호출 하여 다른 두 항목 과 f()정확히 동일한 항목을 반환 할 수 있습니다 . 시도 해봐:


1
Date()함수를 호출 할 필요가 없습니까?
우유

4
@milk Date는 입력없이 호출 될 때 현재 날짜 / 시간을 생성하는 함수입니다. _=>Date()똑같은 일을하는 분명한 유효한 항목이므로 Date유효한 항목입니다.
ETHproductions

1
말이 되네요
우유

2
Date브라우저의 JavaScript 콘솔에 입력 하면 결정적 출력이 생성되며 항상 다음과 같이 생성 function Date() { [native code] }됩니다. 아마 Date()6 바이트를 의미 할 것입니다 .
pts

2
"날짜"위의 것보다 확인이 "의 malloc (8)"또는 "시간 (0)"도 C에서 확인 될 것이다
RosLuP

12

배쉬 (procps-ng), 2 바이트

ps

$$ 또한 해결책입니다.


1
그렇다면 w더 짧고 procps에서도 나옵니다.
liori

1
당신은 이것을 내 답변 의 복제본으로 편집했습니다 .

@ ais523 죄송합니다.
Rɪᴋᴇʀ

11

파이썬 2, 11 바이트

print id(1)

1
내가 찾은 것입니다. 그래도 나는했다 id(0). :)
mbomb007

2
OP이기 때문에 기술적으로 당신을 이겼으며 질문을 게시하기 전에 그것을 발견했습니다. 질문을 게시하고 싶지 않고 가장 짧은 답변을 즉시 게시하고 싶지 않았습니다.
mbomb007


10

PowerShell, 4 2 바이트

(4를 넘어 서면 여전히 4처럼 보입니다 )

ps

이것은 Get-Process핸들, 개인 메모리, CPU 시간 등을 포함하여 현재 프로세스 목록을 테이블로 출력 하는 별명입니다 .

다음과 같은 방법으로 실행하십시오 :

C:\Tools\Scripts\golfing>powershell.exe "ps"

1
나는 인정해야한다, 나는 그것이 실제로 교차되었는지 확인했다. 당신은 정말 말할 수 없습니다.
Carcigenicate

@Carcigenicate 텍스트를 선택하지 않고 교차하는지 알 수 있습니다 (Ubuntu 16.04.1, Chrome 54.0.2840.100).
아웃 골퍼 에릭

분명하지는 않지만 안드로이드에서도 볼 수 있습니다 : p
tomsmeding

iOS 앱에서 잘 보입니다.
Mateusz Piotrowski

나는 그것을 직접 할 담당자가 없지만 04을하고 파업 할 수 있습니다.
밥슨


9

코모도어 64 기본, 4 바이트

1S|0

PETSCII 치환 : |=SHIFT+Y

Commodore 64 의 제로 페이지 는 나머지 RAM보다 빠르게 액세스 할 수있는 256 바이트의 메모리 영역입니다. 따라서 프로그램 (예 : BASIC 인터프리터)은 자주 액세스하는 데이터에이 프로그램을 사용하며 CPU 자체는 내부 상태의 일부를 여기에 저장합니다. 내용은 예고없이 변경 될 수 있습니다.

위의 기본 프로그램은 ungolfed 1 SYS 0입니다. 메모리 위치 0으로 실행을 전송합니다. 그러면 코드로 제로 페이지 실행이 시작됩니다. 일반적으로 BASIC 인터프리터가 프로그램 실행을 시작하면 처음 16 바이트는

2F 37 00 AA  B1 91 B3 22
22 00 00 4C  00 00 00 00

그래서 SYS 0다음을 실행합니다

00: ROL-AND $37,A  - Undocumented opcode: rotate the value at memory location 0x37 left, and store the result in the accumulator
02: BRK            - Call the interrupt vector

전반적인 결과는 BASIC READY.프롬프트 를 출력 하고 사용자에게 제어를 리턴하는 것입니다. 그러나 메모리 위치 0x00은 CPU의 I / O 방향 레지스터이고 메모리 위치 0x01은 CPU의 I / O 주소 레지스터입니다. 프로그램을 실행하기 전에 이들을 변경하는 작업을 수행 한 경우 가비지 출력에서 ​​컴퓨터 잠금에 이르기까지 결과를 예측할 수 없습니다 (명령으로 실행되는 경우 메모리 위치 0x07에 일반적으로 포함 된 0x22는 문서화되지 않은 HALTopcode 임) .

또는보다 확실하게 예측할 수없는 프로그램은 4 바이트입니다.

1?TI

시스템 전원이 켜진 후 경과 시간을 지프 (1/60 초)로 인쇄합니다.


8

05AB1E , 2 바이트

žd

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

실행중인 컴퓨터의 내부 시계에서 현재 마이크로 초를 출력합니다.

아니면 이런 식으로 할 수 있습니다 ...

05AB1E , 3 바이트

A.r

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

무작위로 섞인 소문자 알파벳을 출력합니다.

또는 이것은 또한 작동합니다 :

A.R

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

알파벳에서 임의의 문자를 출력합니다.

또는 이것은 또한 작동하며 더 시원합니다.

05AB1E , 9 바이트

"ž"A.RJ.V

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

다음 중 하나를 임의로 출력합니다.

ž 23  > ža           push current hours
        žb           push current minutes
        žc           push current seconds
        žd           push current microseconds
        že           push current day
        žf           push current month
        žg           push current year
        žh           push [0-9]
        ži           push [a-zA-Z]
        žj           push [a-zA-Z0-9_]
        žk           push [z-aZ-A]
        žl           push [z-aZ-A9-0_]
        žm           push [9-0]
        žn           push [A-Za-z]
        žo           push [Z-Az-a]
        žp           push [Z-A]
        žq           push pi
        žr           push e
        žs           pop a, push pi to a digits (max. 100000)
        žt           pop a, push e to a digits (max. 10000)
        žu           push ()<>[]{}
        žv           push 16
        žw           push 32
        žx           push 64
        žy           push 128
        žz           push 256


8

C, 25 21 바이트

4 바이트를 절약 해 준 pseudonym117에게 감사합니다.

main(i){putchar(&i);}

로 컴파일하고 gcc -o test lol.c(예, 파일 이름이 매우 독창적입니다 ...),로 실행되었습니다 ./test.

i런타임에 정의 된 의 메모리 주소에 해당하는 문자를 인쇄 하므로 결정적이지 않아야합니다.


1. &스택의 변수 값이 정의되지 않았으므로 를 건너 뛸 수 있습니까 ? 2. 스택에 일정한 수의 항목이 있으므로 메모리 주소도 i일정합니까?
Riley

2
i일반적으로 호출되는 것이 argc되므로, 더 많은 인수가 없으면 항상 1이됩니다. 나는 그것을 기억하지 못했다는 것을 믿을 수 없다. 왜 위치가 변경되는지 확실하지 않지만 작동하면 작동합니다.
Riley

1
공격자가 주소를 추측하기 어렵게 설계된 보안 기능인 ASLR 로 인해 최신 운영 체제에서 변경됩니다 . 일부 구형 OS에서는 일관된 결과를 얻을 수 있습니다.

1
당신은 대체하여 조금을 절약 할 수 있습니다 putchar으로return
ceilingcat

1
매개 변수 유형을 선언하지 않는다는 경고가있는 최신 컴파일러에서는 다음을 수행 할 수 있습니다.main(){printf("%d");}
Myria

7

파이썬 2, 29 바이트

import os
print os.urandom(9)

슬프게도 스마트 폰에서 코드를 작성하는 것은 처음이 아닙니다.


6

펄, 5 바이트

say$$

프로세스 ID와 줄 바꾸기를 출력합니다.



5

파이크, 1 바이트

C

여기 사용해보십시오!

현재 시간을 출력합니다


1
나는 이것이 결정적이라고 확신합니다.
Rɪᴋᴇʀ

삭제 된 댓글의 @EasterlyIrk mbomb이 (가) 정상이라고 말했습니다
Blue

오 알았어 나에게는 결정 론적이지만 OP 규칙입니다.
Rɪᴋᴇʀ

편집 기록에서 나는 적절한 임의성을 가진 3 바이트 버전을 가졌습니다
Blue

@EasterlyIrk 현재 시간이 결정 론적이라면 의사 난수도 마찬가지입니다. 목표는 "무작위"가 아닙니다. 목표는 비결정론입니다.
mbomb007

5

GCC / Clang이있는 C89, 20 바이트

다른 C 솔루션은 GCC 또는 Clang으로 빌드 할 때마다 항상 segfault입니다. 그러나 이것은.

main(n){puts(&n+1);}

다음과 같습니다

$ for _ in `seq 1 50`; do ./test_89; done
���z�U
�VW��U
�F��U
�v�f2V
��FV
���*=V
�6���U
�20wU
��
�+V
�6
   �U
��V�uU
�v��V
���K�U
��7�qU
�6S�jU
�&�WU
��wV
��6l�U
���U
�F�ߨU
�f���U
���s7V
�f��?V
��;B�U
�;��U
��GV
�� ��U
�vKV
�V?]wU
�����U
��.�U
�v"�XU
��uhpU
��LD�U
�����U
�6X�U
��M�.V
�69��U
��ԤV
���U
����U
�vx4.V
�֝+xU
�F��U
�֤BQV
��#�U
���1^U
����sU
��4�U
��AݗU

인쇄 할 수없는 정크가 많이 있지만 결정적이지 않습니다!


왜 "main (n) {puts (& n + 1);}"이 아닌 "main (n) {puts (& n);}"?
RosLuP

@RosLuP 두 번째 옵션은 일반적인 관찰자에게 명백해 보이는 바이트 값을 n 값으로 지정합니다 (n이 1 일 때 puts주소를 1로, n이 2 일 때 puts주소를 2로). 너비가 4 바이트 인 n의 주소에 1을 추가 int하면 다음 NUL 바이트까지 매우 일정한 수의 바이트와 함께 정크 값이 저장된 정크 주소가 제공됩니다. 이 동작은 GCC와 Clang간에 재현 가능하며 저를 넘어서는 것입니다. StackOverflow에 대해 물어볼 것입니다.
cat

나는 이런 식으로 "puts (& n)"을 읽는다 : 그것은 n의 주소를 넣는다. n = 0x01020304 풋은 char 04 03 02 01로 변환되거나 그 역으로 변환한다고 가정하자
RosLuP

1
당신이 기억 n정상적으로라고 무엇으로 초기화 argc되는 0에, 그래서 당신의 일반적인 테스트의 경우 &n, puts(포인터 크기 == 정수 크기와 모든 재료를 가정) 빈 문자열의 결과 '\ 0'바이트에 매우 결정적 포인터를 가져옵니다 . &n+1그러나 일반적으로 호출되는 주소 argv(적어도 레지스터 대신 역순으로 스택의 매개 변수를 역순으로 전달하는 스택과 높은 주소에서 낮은 주소로 증가하는 스택을 가진 ABI)는 ASLR을 가정 할 때마다 다른 포인터 여야합니다. 시각.
Guntram Blohm

@GuntramBlohm 당신이 옳고 그것은 매우 흥미 롭습니다.하지만 포인터는 8 바이트이고 int는 4 바이트입니다.
cat

5

PHP, 12 바이트

<?=uniqid();

583f4da627ee3현재 시간을 기준으로 고유 ID 를 마이크로 초로 출력합니다 .


<?=time();<-10 바이트
이스마엘 미구엘

@IsmaelMiguel uniqid()은 (보다 time()) 1,000'000 배 더 큽니다 .)
Mario

나는 그 반대를 말하고 있지 않다. 그러나 다른 대답을 제안하십시오. 당신은 자유롭게 선택할 수 있습니다.
Ismael Miguel

@IsmaelMiguel 다른 사람이 이미 같은 대답을했는데 ...
Mario

5

그루비, 9 바이트

{print{}}

출력 :

Script1$_run_closure1@2c8ec01c

클로저의 메모리 주소를 출력하기 때문에 결정적이지 않습니다.


그리고 Kotlin이 가장 짧은 JVM 솔루션으로가는 길이라고 생각했습니다.
F. George

이것을 파일에 넣고 실행 groovy Script1.groovy하려고하면 오류가 발생 Ambiguous expression could be either a parameterless closure expression or an isolated open code block;합니다. 이것을 어떻게 사용합니까?
Paŭlo Ebermann

클로저 변수에 할당 한 다음 호출하십시오.
Magic Octopus Urn

5

이모 노미 콘, 15 바이트

😀😅🎲⏬

설명:

😀😅🎲⏬
😀      push 0. Stack: [0]
  😅    push 1. Stack: [1]
    🎲  random[pop;pop]. Stack: [1 or 0]
      ⏬output

언어의 이름은 Emotinomicon
acrolith입니다.

@daHugLenny 내가 어떻게 그리워 :)
로마 Gräf

5

Windows의 Borland C, 12 바이트

m(){puts();}

하나의 기능을 사용할 수 있다고 말했기 때문에 다시 작성했습니다. 컴파일러는 인수를 확인하지 않았으므로 컴파일하십시오. 그러나 하나의 주소 '아무도'를 알지 못하고 바이트 0x00을 찾을 때까지 해당 주소의 포인트를 인쇄하기 시작합니다. 해당 주소가 프로그램 용으로 예약 된 메모리가 부족한 경우에는 문제가되지 않지만 여기에서 무언가를 인쇄하십시오


이것은 비 결정적 출력을 제공하지 않으며 매번 segfaults입니다.
고양이

또한, 경우에 당신은 segfault의 어떤 컴파일러가 아닌 다른 무언가를 얻을?
고양이

@cat 하나의 Borland C 컴파일러 + Windows7 Os입니다. 내가 보는 방법 : 위의 코드는 스택의 주소 상단을 가져옵니다 (이 경우 main () 함수에서 반환 할 주소가 있습니다). 메인 스페이스 코드 내의 해당 주소에서 읽습니다. 그래서 컴파일러 출력에 따라 다릅니다. 하지만 100 %를 모른다 ... 그것은 가능한 코드 공간이 => 독방 감금 오류에서 귀하의 운영 체제에서 읽을 수 없습니다이며
RosLuP

1
@RosLuP : 스택 메모리 (또는 x86-64의 두 번째 arg-passing 레지스터 및 레지스터의 처음 몇 개의 args를 전달하는 대부분의 RISC 호출 규칙)에 가비지가 무엇이든 인쇄합니다. 스택 주소를 인쇄하지 않습니다. x86-64에서는 argv컴파일러가 아마도 해당 레지스터에 main의 두 번째 arg를 사용하여 printf를 호출하기 때문에 다소 인쇄 될 가능성이 있습니다 . Linux를 대상으로하는 gcc6.2에서는 정확히 이런 일이 발생 합니다. Godbolt 컴파일러 탐색기에서 source + asm을 참조하십시오 . main은 RSI를 먼저 다루지 않습니다 call printf.
Peter Cordes

1
@RosLuP : argv는 스택에 있지만 맨 위에는 없습니다. 그러나 주소는 스택 ASLR의 영향을 받으므로 작동합니다. 이것은 덜 잘 작동 -m32합니다. 이후 당신은 아마 항상 제로를 얻을 것 main형식 문자열 위의 스택 슬롯이 건드리지 (그리고 아마도 항상 0입니다 된 적이 신선한 스택 메모리를 할 수 있도록 정렬 스택을 유지하는 커널 대신 페이지를 제로화하여 정보 유출을 방지하기 때문에, 사용자 공간 페이지에 오래된 데이터로 가득 찬 것).
Peter Cordes

5

아기 언어 , 0 바이트



질문이 게시되었다고 생각했기 때문에 원래 제출하지 않았습니다. 내가 틀렸어; 그 언어에는 통역사가 제 시간에 만들어졌습니다. 아마도 내가 본 것 중 가장 시끄러운 0 바이트 솔루션 일 것입니다 (0 바이트 프로그램은 프로그램이 요구하는 것을 정확하게 수행하도록 지정되어 있으며 골프 도전에 대한 부정 행위의 목적은 아닙니다).

베이비 언어는 제공된 프로그램을 무시하고 무작위로 무언가를 수행하도록 지정됩니다. (Esolang 페이지에 링크 된 인터프리터는 임의의 합법적 인 BF 프로그램을 생성하여 실행합니다.)이 과제에 완벽하게 맞는 것 같습니다.

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