รหัสที่สั้นที่สุดในการผลิตการส่งออกที่ไม่ได้กำหนด


83

คุณต้องสร้างผลผลิตที่ไม่ได้กำหนดไว้ล่วงหน้า

ในกรณีนี้สิ่งนี้จะถูกกำหนดให้หมายความว่าผลลัพธ์จะไม่เหมือนกันเสมอไป

กฎ:

  • ตัวสร้างตัวเลขสุ่มหลอกที่มีเมล็ดเดียวกันเสมอจะไม่ถูกนับ

  • คุณสามารถพึ่งพาโปรแกรมที่กำลังรันในเวลาที่ต่างกัน

  • รหัสกระบวนการของรหัสของคุณ (หากผู้แปลไม่ได้รับการแก้ไข) สามารถสันนิษฐานได้ว่าไม่สามารถกำหนดได้

  • คุณอาจพึ่งพาแบบแผนบนเว็บ

  • รหัสของคุณอาจไม่ป้อนข้อมูลที่ไม่ว่างเปล่า โพสต์เมตาที่เกี่ยวข้อง

  • ไม่จำเป็นต้องหยุดโปรแกรม แต่ต้องแสดงผลลัพธ์

ลีดเดอร์บอร์ด


33
@ mbomb007 ใน C มีหลายสิ่งที่เป็นพฤติกรรมแบบ "ไม่ได้กำหนด" ล่ามที่ได้รับอนุญาตให้ทำสิ่งที่ต้องการในทุกสถานการณ์ สำหรับสิ่งที่เรารู้ gcc อาจสั่งพิซซ่าให้คุณถ้าคุณพยายามล้นจำนวนเต็มในวันอังคารที่ฝนตก แต่จะทำให้ปลาเทราท์กระโดดออกจากหน้าจอของคุณในวันอื่น ๆ ดังนั้นคุณจะไม่เคยรู้เลยว่าจริง ๆ แล้วเป็นการกำหนดหรือไม่ในการนำไปปฏิบัติใด ๆ
Martin Ender

12
@ มาร์ตินฉันไม่แน่ใจว่ามันสำคัญหรือเปล่า เรากำหนดภาษาที่นี่โดยการใช้งานไม่ใช่ข้อกำหนด (เนื่องจากภาษาที่ไม่มีการดำเนินการไม่ได้รับอนุญาต)
Nathan Merrill

2
@ มาร์ตินอีกใช่ฉันเห็นด้วยกับนาธาน
mbomb007

7
โปรดทราบว่าพฤติกรรมที่ไม่ได้กำหนดใน C มักจะนำไปสู่การล่มและการล่มใน UNIX และ Linux จะนำไปสู่ไฟล์หลักที่มี ID กระบวนการภายใน ที่ดูเหมือนว่าจะสอดคล้องกับคำถามตามคำพูดในปัจจุบัน

5
ถ้าฉันเข้าใจผิดคำถามจะไม่ขอรหัสที่ใช้ประโยชน์จากพฤติกรรมที่ไม่ได้กำหนด มันขอรหัสที่ใช้ประโยชน์จากพฤติกรรมที่กำหนดไว้เพื่อรับประกันว่าไม่ใช่ระดับ
WGroleau

คำตอบ:


110

WinDbg ขนาด 1 ไบต์

#

ว้าว! ไม่เคยคาดคิดเลยว่าโซลูชัน 1 ไบต์จาก WinDbg

#ค้นหารูปแบบการถอดแยกชิ้นส่วน แต่เนื่องจากไม่มีพารามิเตอร์ดูเหมือนว่าจะส่งคืนคำสั่งแอสเซมบลีถัดไปในสิ่งที่คุณแนบ / กระบวนการ ไม่แน่ใจว่าตรรกะสำหรับการตั้งค่าที่อยู่เริ่มต้น แต่ทำเช่นนั้น

ตัวอย่างผลลัพธ์:

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
หนึ่งในคำตอบที่ยอดเยี่ยมที่นี่ควรเอาชนะโซลูชัน "วันที่ปัจจุบัน" ในความคิดของฉัน
Magic Octopus Urn

ที่ดังกล่าวข้างต้นดูเหมือน disassebly ขั้นตอนโดยขั้นตอนของการเริ่มต้นของการทำงานบางอย่างในการชุมนุมซีพียู Intel 386
RosLuP

60

Java 7, 33 30 27 ไบต์

int a(){return hashCode();}

เพราะจาวา


49
เพราะจาวา อาจเป็นคำอธิบายที่ดีที่สุดของ Java เลยทีเดียว
จอร์จเอฟ

5
@carusocomputing ผมมีtoStringในรุ่นก่อนหน้า แต่แล้วชนิดกลับเป็นที่มีความยาวมากกว่าString intบันทึกไบต์! :]
Poke

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 มี builtin สำหรับสิ่งนี้หรือไม่? ทำไม?
ETHproductions

59
@ETHproductions โปรแกรมเมอร์แนะนำ
Eddie Curtis

40

R, 1 ไบต์

t

ส่งออกซอร์สโค้ดของฟังก์ชั่นและที่อยู่ของตัวชี้หน่วยความจำซึ่งเปลี่ยนแปลงด้วยทุก ๆ (re-) start of R


36

ฮะ? , 0 ไบต์


โปรแกรมเปล่ายังคงสร้างเอาต์พุต บรรทัดสุดท้ายของ Python interpreter ที่ถูกดำเนินการ:

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")

ในตอนท้ายของโปรแกรมล่าม Python จะพิมพ์...จากนั้นจะสร้าง / เปิดไฟล์ข้อความที่เรียกว่าNotes.txtและเขียนสตริงซึ่งมีเวลาปัจจุบันอยู่ข้างหน้า


5
ในทุกสิ่งที่ฉันคิดว่าผู้คนจะใช้กับ GitHub ของฉันฉันไม่คิดว่าล่ามภาษาตลกจะเป็นหนึ่ง: P
Kade

@Kade ฉันจะใช้มันเพื่อตอบคำถามอื่นด้วย (รหัสสั้นที่สุดในการเล่นเสียงโดยมีเพียงไบต์เดียว) - แต่ตอนนี้คำถามถูกปิดแล้ว
mbomb007

แม้ว่ามันจะไม่ใช่การแข่งขันเว้นแต่ว่าฉันจะดูล่าม. NET ดั้งเดิม แต่ฉันเดา
mbomb007

30

เขาวงกต 5 ไบต์

v
!
@

พิมพ์0หรือไม่มีอะไรเลย (มีโอกาส 50% ต่อคน)

ลองออนไลน์!

มีกรณีเฉพาะที่เขาวงกตจัดแสดงพฤติกรรมแบบสุ่ม:

  • จะต้องมีกำแพงด้านหน้าตัวชี้คำแนะนำและด้านหลัง
  • จะต้องไม่มีผนังด้านซ้ายและขวาของตัวชี้คำสั่ง
  • ด้านบนปัจจุบันของสแต็กต้องเป็นศูนย์

หากตรงตามเงื่อนไขเหล่านี้ทั้งหมดทิศทางที่ IP เคลื่อนที่จะถูกเลือก (เหมือนกัน) อย่างสุ่ม Cherry ด้านบนคือเงื่อนไขทั้งสามนั้นเป็นไปไม่ได้ที่จะพบในโฟลว์การควบคุมปกติซึ่งหมายความว่าถ้าคุณไม่แก้ไขซอร์สโค้ดตอนรันไทม์

(นี่อาจดูเป็นเรื่องที่ค่อนข้างไร้เหตุผล แต่จริงๆแล้วมันเป็นพฤติกรรมที่สอดคล้องกันมากที่สุดที่ฉันสามารถหาได้จากเงื่อนไขเหล่านี้เนื่องจากโดยปกติทิศทางของ IP จะขึ้นอยู่กับทิศทางก่อนหน้าเพื่อนบ้านและสัญลักษณ์ของกองซ้อนและ นี่ดูเหมือนเป็นวิธีที่ยอดเยี่ยมในการรวมแหล่งที่มาของการสุ่มในภาษา)

ด้วยความช่วยเหลือของคำแนะนำการหมุนซอร์สโค้ด ( <^>v) เป็นไปได้ที่จะนำ IP เข้าสู่สถานการณ์นี้ ตัวอย่างหนึ่งดังกล่าวจะเห็นที่ด้านบน IP เริ่มต้นจากจุดตะวันออกและเริ่มที่ด้านบน vหมุนคอลัมน์ปัจจุบันเพื่อที่เราจะได้รับ:

@
v
!

IP เคลื่อนที่ไปพร้อมกับการหมุนนี้เพื่อให้ยังคงอยู่vโดยชี้ไปทางทิศตะวันออก เงื่อนไขทั้งหมดเป็นจริงในขณะนี้ดังนั้น IP จะขึ้นหรือลงแบบสุ่ม หากขึ้นไปโปรแกรมจะหยุดทำงานทันที ถ้ามันลงไปมันจะพิมพ์ศูนย์หมุนคอลัมน์อีกครั้งแล้วยุติ

มีโปรแกรมอื่นอีกสามโปรแกรมที่ใช้สิ่งนี้ (อันที่พิมพ์0เช่นกันอันที่พิมพ์00และที่ปริ้น000)

v
@
!

"
>@!

"
>!@

(อันที่จริงมีมากกว่าสามโปรแกรมอื่น ๆ เพราะคุณสามารถใช้.แทน!การพิมพ์ null ไบต์หรือแทนที่"ด้วยคำสั่งที่หลากหลาย แต่ฉันเชื่อว่าพวกเขาทำงานเหมือนกันทั้งหมด)


30

Befunge (-93 และ -98), 3 ไบต์

?.@

การ?ส่งการดำเนินการในทิศทางที่สุ่ม ถ้ามันขึ้นหรือลงมันจะวนกลับไปที่?และ rerolls หากไปทางซ้ายโปรแกรมจะวนไปทางซ้าย@และออกโดยไม่พิมพ์อะไรเลย ถ้าจะไปทางขวาจะพิมพ์0(output ที่ผลิตโดย.เมื่อสแต็คเป็นที่ว่างเปล่า) @แล้วออกบน


นี่ไม่รับประกันว่าจะยุติ แต่ฉันจะโพสต์สิ่งนี้อย่างแน่นอนดังนั้น +1
Daniel

คุณอาจต้องการเปลี่ยนเครื่องหมายจุลภาคเป็นช่วงเวลาเพื่อส่งออก 0 เป็นตัวเลขแทนอักขระ null (ค่า ASCII 0) +1
MildlyMilquetoast

มันอยู่.ในโปรแกรมที่ฉันใช้สำหรับการทดสอบ แต่อย่างใดกลายเป็น,เมื่อฉันคัดลอกไปยัง PPCG แก้ไขแล้ว.

7
@Dopapp มันยุติลงเกือบจะแน่นอน แต่ด้วยความน่าจะเป็น 1 ฉันขอรับรองเรื่องนี้เป็นอย่างดี)
## Oliphaunt

@ JamesHolderness ฉันคิดว่าคุณสามารถทำได้ใน 1 ไม่แน่ใจว่านับแม้ว่า ...
MildlyMilquetoast

29

Minecraft, 5 4 ไบต์

op 8

ใช้โดยการพิมพ์ลงในคอนโซลของเซิร์ฟเวอร์หรือบล็อกคำสั่งและให้พลังงาน สามารถทำงานได้จากอินเตอร์เฟซแชทโดย prepending/

โดยปกติแล้วสิ่งนี้จะไม่ทำอะไรเลย แต่ถ้ามีผู้เล่นที่มีชื่อผู้ใช้ "8" บนเซิร์ฟเวอร์พวกเขาจะได้รับอนุญาตจากผู้ให้บริการ โปรดทราบว่าในขณะที่ Minecraft ต้องการชื่อผู้ใช้ที่มีความยาว 3 ตัวอักษรบางบัญชีที่มีความยาวชื่อสั้นกว่านั้นถูกสร้างขึ้นก่อนข้อ จำกัด นี้

รุ่นที่สามารถแสดงให้เห็นว่าไม่สามารถกำหนดค่าได้โดยไม่มีชื่อผู้ใช้เหล่านี้หรือความเสี่ยงในการให้สิทธิ์ผู้ใช้งานผู้ใช้อยู่ที่นี่:

me @r

แสดงข้อความถึงทุกคนข้อความที่เป็นชื่อผู้ใช้ของผู้เล่นแบบสุ่ม opคำสั่งใช้เวลาเพียงสตริงตัวอักษรไม่สคริปต์ใด ๆ ที่ส่งกลับสตริง

คำสั่งจะไม่ทำงานจริงๆสำหรับตัวอย่างแรกก็จะแสดงme "<your-username> 8"เมื่อเรียกใช้จากบล็อกคำสั่งจะไม่สามารถกำหนดได้เนื่องจากบล็อกคำสั่งทั้งหมดมี "ชื่อผู้ใช้" เหมือนกัน แต่การเรียกใช้จากส่วนต่อประสานการแชทจะต้องใช้/หนึ่งไบต์พิเศษ


ดังนั้น/ไม่รวมอยู่ในจำนวนไบต์?
ผลไม้แยกแยะ

11
@ Challenger5 สแลชเป็นทางเลือกในบล็อกคำสั่งไม่ได้รับอนุญาตในคอนโซลเซิร์ฟเวอร์และจำเป็นต้องมีในส่วนต่อประสานการแชท
Pavel

2
ที่จริงแล้วควรเป็น 4 ไบต์ + 2 บล็อก (Command block และ Redstone source) หรือ 6 blytes
RudolfJelin

2
@RudolphJelinek คุณสามารถเรียกใช้จากคอนโซลโดยไม่มีบล็อกคำสั่ง
พาเวล

1
ตัวเลือกอื่นที่ไม่ได้กำหนดไว้helpในบล็อกคำสั่งซึ่งมีขนาด 4 ไบต์ (และไม่ต้องการเกมที่ละเมิดลิขสิทธิ์)
Pokechu22

21

sh + procps 1 ไบต์

w

นี่เป็นทางออกที่สั้นที่สุดที่ฉันทราบว่าใช้งานได้ผ่านการเรียกใช้งานโปรแกรมภายนอก procpsเป็นแพ็คเกจที่รับผิดชอบสำหรับการรายงานข้อมูลเกี่ยวกับสถานะระบบปัจจุบัน ( psและเพื่อน) และติดตั้งในการกระจาย Linux ส่วนใหญ่เป็นค่าเริ่มต้น wเป็นคำสั่งที่สั้นที่สุดในนั้นและส่งคืนข้อมูลเกี่ยวกับผู้ใช้ที่เข้าสู่ระบบ แต่ยังมีข้อมูล nondeterministic เช่นสถานะการออนไลน์


21

แจ้ง 7, 6 ไบต์

x is y

นี่ไม่ใช่โปรแกรมแจ้ง 7 ที่ถูกต้องเนื่องจากไม่มีการกำหนด "x" หรือ "y" ดังนั้นนี่จะพ่นข้อผิดพลาด

อย่างไรก็ตามข้อความแสดงข้อผิดพลาดของ Inform 7 รวมถึงข้อความนี้จะถูกสุ่ม ดังนั้นข้อความที่พิมพ์จึงไม่สามารถกำหนดได้ในทางเทคนิค

ผลลัพธ์ที่เป็นไปได้บางประการ ได้แก่ :

ปัญหา. ประโยค 'x is y' ดูเหมือนจะบอกว่ามีสองสิ่งเหมือนกัน - ฉันกำลังอ่าน 'x' และ 'y' เป็นสองสิ่งที่แตกต่างกันดังนั้นจึงไม่มีเหตุผลที่จะบอกว่าอีกสิ่งหนึ่งคือ: มันจะเหมือนกับว่า นั่นคือ 'Adams is Jefferson' มันคงจะดีถ้าสิ่งที่สองเป็นชื่อของชนิดบางทีอาจมีคุณสมบัติ: เช่น 'Virginia is a lighted room' บอกว่ามีบางสิ่งที่เรียกว่า Virginia มีอยู่และเป็น 'room' ซึ่งเป็นชนิดที่ฉันรู้ เกี่ยวกับรวมกับคุณสมบัติที่เรียกว่า 'ลง' ซึ่งฉันก็รู้

ปัญหา. ประโยค 'x is y' ดูเหมือนจะบอกว่ามีสองสิ่งเหมือนกัน - ฉันกำลังอ่าน 'x' และ 'y' เป็นสองสิ่งที่แตกต่างกันดังนั้นจึงไม่มีเหตุผลที่จะบอกว่าอีกสิ่งหนึ่งคือ: มันจะเหมือนกับว่า นั่นคืออดัมคืออีฟ มันคงไม่เป็นไรถ้าสิ่งที่สองเป็นชื่อของชนิดอาจมีคุณสมบัติ: ตัวอย่างเช่น 'ดินแดนแห่งพยักหน้าเป็นห้องสว่าง' กล่าวว่ามีบางสิ่งที่เรียกว่าดินแดนพยักหน้าอยู่และเป็น 'ห้อง' ซึ่งเป็น ชนิดที่ฉันรู้รวมกับคุณสมบัติที่เรียกว่า 'สว่าง' ซึ่งฉันรู้ด้วย

ปัญหา. ประโยค 'x is y' ดูเหมือนจะบอกว่ามีสองสิ่งเหมือนกัน - ฉันกำลังอ่าน 'x' และ 'y' เป็นสองสิ่งที่แตกต่างกันดังนั้นจึงไม่มีเหตุผลที่จะบอกว่าอีกสิ่งหนึ่งคือ: มันจะเหมือนกับว่า นั่นคือ 'Clark Kent คือ Lex Luthor' มันคงจะดีถ้าสิ่งที่สองเป็นชื่อของชนิดบางทีอาจมีคุณสมบัติ: ตัวอย่างเช่น 'Metropolis is a lighted room' บอกว่ามีบางสิ่งที่เรียกว่า Metropolis มีอยู่และเป็น 'ห้อง' ซึ่งเป็นแบบที่ฉันรู้ เกี่ยวกับรวมกับคุณสมบัติที่เรียกว่า 'ลง' ซึ่งฉันก็รู้

ปัญหา. ประโยค 'x is y' ดูเหมือนจะบอกว่ามีสองสิ่งเหมือนกัน - ฉันกำลังอ่าน 'x' และ 'y' เป็นสองสิ่งที่แตกต่างกันดังนั้นจึงไม่มีเหตุผลที่จะบอกว่าอีกสิ่งหนึ่งคือ: มันจะเหมือนกับว่า 'Aeschylus คือ Euripides' มันคงจะดีถ้าสิ่งที่สองเป็นชื่อของชนิดอาจมีคุณสมบัติ: ตัวอย่างเช่น 'Underworld is a lighted room' บอกว่ามีบางสิ่งที่เรียกว่า Underworld มีอยู่จริงและเป็น 'ห้อง' ซึ่งเป็นชนิดที่ฉันรู้ เกี่ยวกับรวมกับคุณสมบัติที่เรียกว่า 'ลง' ซึ่งฉันก็รู้


7
แม้แต่ข้อความแสดงข้อผิดพลาดก็ยังสมบูรณ์!
เลมอนที่ทำลายได้

21

JavaScript ขนาด 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
ถ้า "date" ด้านบนนั้นโอเคกว่า "malloc (8)" หรือ "time (0)" ก็โอเคใน C ด้วย
RosLuP

12

Bash (procps-ng), 2 ไบต์

ps

$$ ยังเป็นทางออก


1
ถ้าเป็นเช่นนั้นwจะสั้นกว่าและมาจาก procps
liori

1
คุณแก้ไขนี้ไปซ้ำกับคำตอบของฉัน

@ ais523 โอ๊ะขอโทษด้วย
Rɪᴋᴇʀ

11

Python 2, 11 ไบต์

print id(1)

1
นั่นคือสิ่งที่ฉันได้พบ ฉันมีid(0)แต่ :)
mbomb007

2
ฉันเอาชนะคุณในทางเทคนิคแล้วตั้งแต่ฉันเป็น OP และพบมันก่อนที่ฉันจะโพสต์คำถาม ฉันไม่ต้องการโพสต์คำถามและโพสต์คำตอบสั้น ๆ ของฉันทันที
mbomb007

11

Pyth, 2 ไบต์

O0

คำอธิบาย:

 0 0
O  Random float in [0, 1)

มันคือเมื่อOมี0การโต้แย้งมันก็จะส่งกลับแบบสุ่มลอยตัวระหว่าง0และ1พิเศษ

มาทำเพื่อความสุขของมันกันเถอะ!

นอกจากนี้ดูเหมือนว่าสิ่งนี้สามารถย้อนยุค sorta (ขอบคุณ 34718 / mbomb007):

ดิลเบิร์ต: 8 กันยายน 2535


Pyth, 2 ไบต์

OT

คำอธิบาย:

 T 10
O  Random integer in [0, 10]

ลองใช้boooooooooooooooooringรุ่นนี้แทน>:(



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)
Erik the Outgolfer

มองเห็นได้บน Android เช่นกัน แต่ไม่ชัดเจน: p
tomsmeding

มันดูดีในแอพ iOS
Mateusz Piotrowski

ฉันไม่มีตัวแทนที่จะทำเอง แต่คุณสามารถทำ 04 และหยุดงานได้
Bobson


9

Commodore 64 Basic, 4 bytes

1S|0

การทดแทน PETSCII: |=SHIFT+Y

ศูนย์หน้าของพลเรือจัตวา 64 เป็นพื้นที่ของ 256 ไบต์ของหน่วยความจำที่สามารถเข้าถึงได้เร็วกว่าส่วนที่เหลือของ RAM ที่ ดังนั้นโปรแกรม (เช่นตัวแปลภาษาพื้นฐาน) ใช้สำหรับข้อมูลที่เข้าถึงบ่อยและ CPU เองก็เก็บสถานะภายในบางอย่างไว้ที่นี่ เนื้อหาอาจมีการเปลี่ยนแปลงโดยไม่ต้องแจ้งให้ทราบล่วงหน้า

โปรแกรมพื้นฐานดัง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

ผลลัพธ์โดยรวมคือการส่งออกREADY.พร้อมท์BASIC และส่งคืนการควบคุมไปยังผู้ใช้ อย่างไรก็ตามตำแหน่งหน่วยความจำ 0x00 คือการลงทะเบียนทิศทาง I / O ของ CPU และตำแหน่งหน่วยความจำ 0x01 เป็นการลงทะเบียนที่อยู่ I / O ของ CPU หากคุณทำบางสิ่งบางอย่างที่เปลี่ยนแปลงสิ่งเหล่านี้ก่อนที่จะเรียกใช้โปรแกรมผลลัพธ์อาจไม่สามารถคาดเดาได้ตั้งแต่การเอาขยะออกไปล็อกคอมพิวเตอร์ (0x22 มักจะอยู่ในตำแหน่งหน่วยความจำ 0x07 ถ้าดำเนินการตามคำสั่งเป็นHALTopcode ที่ไม่มีเอกสาร) .

อีกทางหนึ่งโปรแกรมที่คาดเดาไม่ได้อย่างน่าเชื่อถือมากขึ้นคือสี่ไบต์

1?TI

พิมพ์เวลาที่ผ่านไปในระยะเวลาอันสั้น (1/60 ของวินาที) เนื่องจากระบบเปิดเครื่อง


8

05AB1E , 2 ไบต์

žd

ลองออนไลน์!

เอาต์พุต microseconds ปัจจุบันจากนาฬิกาภายในของเครื่องที่ดำเนินการ

หรือคุณสามารถทำอะไรเช่นนี้ ...

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 ไบต์

ขอบคุณ pseudonym117 สำหรับการบันทึก 4 ไบต์

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

คอมไพล์ด้วยgcc -o test lol.c(ใช่ผมค่อนข้างเดิมที่มีชื่อไฟล์ของฉัน ... ), ./testและวิ่งด้วย

มันทำในสิ่งที่มันพูด: พิมพ์ตัวอักษรที่สอดคล้องกับที่อยู่หน่วยความจำของiซึ่งถูกกำหนดไว้ที่รันไทม์ดังนั้นจึงไม่ควรกำหนด


1. คุณสามารถข้าม&ค่าของตัวแปรในสแต็กที่ไม่ได้กำหนดได้หรือไม่? 2. คุณมีจำนวนสิ่งที่คงที่บนสแต็กดังนั้นที่อยู่หน่วยความจำจะiคงที่หรือไม่
Riley

2
iกลายเป็นสิ่งที่เรียกตามปกติargcดังนั้นคุณพูดถูกมันจะเป็น 1 เสมอเว้นแต่จะมีข้อโต้แย้งมากกว่า ฉันไม่อยากจะเชื่อเลยว่าฉันไม่ได้จำได้ ฉันยังไม่แน่ใจว่าทำไมสถานที่ถึงเปลี่ยนแปลง แต่ถ้าใช้งานได้ผล
Riley

1
มันเปลี่ยนแปลงระบบปฏิบัติการที่ทันสมัยเนื่องจากASLRซึ่งเป็นคุณลักษณะด้านความปลอดภัยที่ออกแบบมาเพื่อทำให้การหาที่อยู่เดาได้ยากขึ้น คุณจะได้รับผลลัพธ์ที่สอดคล้องกันในระบบปฏิบัติการรุ่นเก่าบางรุ่น

1
คุณสามารถบันทึกเล็ก ๆ น้อย ๆ โดยการแทนที่putcharด้วยreturn
ceilingcat

1
ในคอมไพเลอร์สมัยใหม่ที่มีคำเตือนไม่ให้ประกาศชนิดของพารามิเตอร์คุณสามารถทำได้:main(){printf("%d");}
Myria

7

Python 2, 29 ไบต์

import os
print os.urandom(9)

น่าเศร้าที่ไม่ได้เขียนรหัสครั้งแรกบนสมาร์ทโฟน


6

Perl, 5 ไบต์

say$$

เอาต์พุต ID กระบวนการและขึ้นบรรทัดใหม่



5

Pyke 1 ไบต์

C

ลองที่นี่!

แสดงเวลาปัจจุบัน


1
ฉันค่อนข้างแน่ใจว่านี่เป็นสิ่งที่กำหนดได้
59

@EasterlyIrk ในความคิดเห็นที่ถูกลบ mbomb กล่าวว่าไม่เป็นไร
Blue

ตกลง. ดูเหมือนจะกำหนดให้ฉัน แต่กฎ OP
59

ในประวัติการแก้ไขของฉันฉันมีรุ่น 3 ไบต์พร้อมการสุ่ม
สีน้ำเงิน

@EasterlyIrk หากเวลาปัจจุบันกำหนดขึ้นดังนั้นจะเป็นตัวเลขสุ่มหลอกเพราะนั่นคือสิ่งที่พวกเขามีเมล็ด เป้าหมายไม่ใช่ "การสุ่ม" เป้าหมายคือไม่ใช่ระดับ
mbomb007

5

C89 กับ GCC / Clang ขนาด 20 ไบต์

การแก้ปัญหา C อื่น ๆ เพียงแค่ segfaults ทุกครั้งเมื่อสร้างด้วย GCC หรือเสียงดังกราว แม้ว่านี้

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) การเพิ่ม 1 ไปยังที่อยู่ของ n ซึ่งควรชี้ไปที่ความกว้าง 4 ไบต์intให้ที่อยู่อีเมลขยะที่มีค่าขยะที่เก็บไว้ที่นั่นด้วยจำนวนไบต์ที่แน่นอนจนกระทั่งไบต์ NUL ถัดไป พฤติกรรมนี้ทำซ้ำได้ระหว่าง GCC กับ Clang และเกินกว่าฉันอย่างสิ้นเชิง ฉันคิดว่าฉันจะไปถาม StackOverflow
แมว

ฉันอ่าน "puts (& n)" ด้วยวิธีนี้: มันให้ที่อยู่ของ n สมมติว่า n = 0x01020304 การวางจะพิมพ์แปลงเป็นตัวอักษร 04 03 02 01 หรือย้อนกลับจากนั้น
RosLuP

1
โปรดจำไว้ว่าคุณnยังคงเริ่มต้นได้ด้วยสิ่งที่เรียกว่าปกติargcซึ่งเป็น0ในกรณีการทดสอบโดยทั่วไปของคุณจึงมี&n, putsได้รับการชี้กำหนดค่อนข้างไบต์ '\ 0' ส่งผลให้สตริงว่าง (สมมติว่าขนาดตัวชี้ == ขนาดจำนวนเต็มและทุกสิ่งที่) . &n+1แต่เป็นที่อยู่ของสิ่งที่ปกติเรียกว่าargv(อย่างน้อยใน ABIs ที่ส่งพารามิเตอร์ในสแต็กในลำดับย้อนกลับแทนการลงทะเบียนและสแต็กที่เติบโตจากที่อยู่สูงไปยังที่อยู่ต่ำ) ซึ่งสมมติ ASLR ควรเป็นตัวชี้ที่แตกต่างกัน เวลา.
Guntram Blohm

@GuntramBlohm คุณพูดถูกและน่าสนใจมาก แต่สำหรับฉันคำแนะนำคือ 8 ไบต์และ ints คือ 4 ไบต์
แมว

5

PHP, 12 ไบต์

<?=uniqid();

ส่งออก ID ที่ไม่ซ้ำกัน583f4da627ee3ตามเวลาปัจจุบันในหน่วยไมโครวินาที


<?=time();<- 10 ไบต์
Ismael Miguel

@IsmaelMiguel uniqid()คือ 1'000'000 เท่าบึกบึนมากกว่าtime();)
Mario

ฉันไม่ได้พูดโอเปร่า แต่เสนอคำตอบอื่น คุณมีอิสระที่จะเลือกอันนั้น
Ismael Miguel

@IsmaelMiguel คนอื่นให้คำตอบเดียวกันแล้ว ...
มาริโอ

5

Groovy ขนาด 9 ไบต์

{print{}}

ขาออก:

Script1$_run_closure1@2c8ec01c

เนื่องจากมันส่งสัญญาณออกที่อยู่หน่วยความจำของการปิดจึงไม่สามารถกำหนดได้


และฉันคิดว่า Kotlin เป็นวิธีการแก้ปัญหา JVM ที่สั้นที่สุด
จอร์จเอฟ

พยายามใส่สิ่งนี้ลงในไฟล์และทำงาน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 ฉันพลาดได้อย่างไร :)
Roman Gräf

5

Borland C บน Windows ขนาด 12 ไบต์

m(){puts();}

ฉันเขียนมันใหม่เพราะพวกเขาบอกว่าเป็นไปได้ที่จะใช้ฟังก์ชั่นเดียว คอมไพเลอร์ไม่ได้ตรวจสอบอาร์กิวเมนต์เพื่อรวบรวมมัน; แต่ทำให้เห็นที่อยู่ 'ไม่มีใครรู้' และเริ่มพิมพ์จุดใดที่อยู่นั้นจนกว่าจะพบไบต์ 0x00 มันอาจจะไม่เป็นไรถ้าที่อยู่นั้นมีหน่วยความจำไม่เพียงพอที่จะจองโปรแกรม แต่ที่นี่พิมพ์บางอย่าง


สิ่งนี้ไม่ได้ให้ผลลัพธ์แบบไม่เป็นมาตรฐานมันเป็นเพียงแค่ segfaults ทุกครั้ง
แมว

อีกทางเลือกหนึ่งถ้าคุณได้รับสิ่งอื่นที่ไม่ใช่ segfault คอมไพเลอร์อะไร ??
แมว

@cat มันเป็นคอมไพเลอร์ Borland C + Windows7 Os ในวิธีที่ฉันเห็น: โค้ดด้านบนจะได้รับที่อยู่ด้านบนสุดของสแต็ก (ซึ่งในกรณีนี้มีที่อยู่ที่จะส่งกลับในฟังก์ชั่น main ()) และอ่านจากที่อยู่นั้นในรหัสพื้นที่หลัก ... แต่ฉันไม่ทราบ 100% ... เป็นไปได้ว่าพื้นที่โค้ดไม่สามารถอ่านได้ในระบบปฏิบัติการของคุณและจาก => seg ข้อผิดพลาด
RosLuP

1
@RosLuP: มันจะพิมพ์สิ่งที่เป็นขยะในหน่วยความจำสแต็ค (หรือในการลงทะเบียน ARG ที่สองสำหรับ x86-64 และ RISC ส่วนใหญ่เรียกประชุมที่ผ่าน args ไม่กี่ครั้งแรกในการลงทะเบียน) มันจะไม่พิมพ์ที่อยู่ของสแต็ค ใน x86-64 มันจะค่อนข้างน่าจะพิมพ์argvเนื่องจากคอมไพเลอร์อาจจะเรียก printf ด้วย arg ที่สองของ main ที่ยังอยู่ใน register นั่นคือสิ่งที่เกิดขึ้นกับการกำหนดเป้าหมาย gcc6.2 ลินุกซ์: ดู asm แหล่ง + บนคอมไพเลอร์สำรวจ Godbolt : หลักไม่ได้สัมผัส RSI call printfก่อน
Peter Cordes

1
@RosLuP: argvอยู่ในสแต็ก แต่ไม่ใช่ที่ด้านบนสุด แม้ว่าที่อยู่ของมันจะได้รับผลกระทบจาก stack ASLR แต่ก็ใช้งานได้ -m32นี้จะทำงานน้อยลงได้ดีกับ คุณอาจจะได้รับศูนย์เสมอเนื่องจากmainจะต้องจัดเรียงสแต็คเพื่อให้สแต็กสล็อตเหนือสตริงรูปแบบอาจเป็นหน่วยความจำสแต็คใหม่ที่ไม่เคยสัมผัส (และอาจเป็นศูนย์เสมอเนื่องจากเคอร์เนลหลีกเลี่ยงการรั่วไหลของข้อมูล ของการให้หน้าพื้นที่ผู้ใช้เต็มไปด้วยข้อมูลเก่า)
Peter Cordes

5

ภาษาของทารก 0 ไบต์



ฉันไม่ได้ส่งสิ่งนี้มาเพราะฉันคิดว่ามันโพสต์คำถามไว้ ฉันผิดไป; ภาษานั้นมีล่ามที่สร้างขึ้นในเวลา นอกจากนี้ยังอาจเป็นวิธีการแก้ปัญหา 0 ไบต์ที่น้อยที่สุดที่ฉันเคยเห็น (ระบุว่าโปรแกรม 0- ไบต์มีการระบุให้ทำตามที่โปรแกรมขอและไม่ใช่เพื่อวัตถุประสงค์ในการโกงการเล่นกอล์ฟที่ท้าทาย)

ภาษาของเด็กถูกระบุให้ไม่สนใจโปรแกรมที่ให้มา (ล่ามที่เชื่อมโยงในหน้า Esolang จะสร้างโปรแกรม BF ทางกฎหมายแบบสุ่มและเรียกใช้งาน) ซึ่งดูเหมือนจะเหมาะสมอย่างยิ่งสำหรับความท้าทายนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.