อัตโนมัติช่วยโลก


63

คุณคือเดสมอนด์ฮูม ในช่วง 3 ปีที่ผ่านมาคุณและคู่หูของคุณเคลวินเป็นทาสของคอมพิวเตอร์ที่ต้องใช้ลำดับที่เฉพาะเจาะจงมากในการเข้าสู่ทุก ๆ 108 นาทีเพื่อช่วยโลก

4 8 15 16 23 42

คู่ของคุณเสียชีวิต 40 วันที่ผ่านมา (เนื่องจากอุบัติเหตุที่โชคร้ายที่เกี่ยวข้องกับหัวของเคลวินและก้อนหินขนาดใหญ่) และคุณไม่มีใครคุยด้วย ไม่มีใครให้ใส่หมายเลขให้คุณ ไม่มีใครทำลายความน่าเบื่อ ตอนแรกมันก็ไม่ได้แย่เกินไป แต่คุณไม่สามารถจัดการกับความเงียบได้อีกต่อไป และถ้าคุณต้องฟัง "สร้างเพลงของคุณเอง" อีกครั้งคุณจะกรีดร้อง

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

แต่แล้วคุณก็ตระหนักถึงข่าวดี: คุณเป็นโปรแกรมเมอร์! คุณสามารถช่วยโลกได้โดยอัตโนมัติ! ตื่นเต้นคุณวิ่งไปที่คอมพิวเตอร์และใช้ทักษะหลามที่เชื่อถือได้ของคุณคุณจะแส้สคริปต์สั้น ๆ เพื่อป้อนตัวเลขให้คุณ

import time

while True:
    print "4 8 15 16 23 42"
    time.sleep(60 * 107)

รวดเร็วง่ายเชื่อถือได้สั้นและง่าย ทุกอย่างที่เป็นสคริปต์ไพ ธ อนที่ดีควรจะเป็น แต่เมื่อคุณลองทดสอบคุณจะได้รับข้อผิดพลาด

Bad command or file name.

แปลกมาก โอ้ลองดู c ++ กัน

#include <iostream>
#include <unistd.h> 

int main()
{
    while (true)
    {
        std::cout << "4 8 15 16 23 42" << std::endl;
        sleep(60 * 107);
    }
}

No! ไม่พบ C ++ คุณลองทุกภาษาที่คุณนึกถึง Javascript, Ruby, Perl, PHP, C # ไม่มีอะไร คอมพิวเตอร์นี้สร้างขึ้นก่อนภาษายอดนิยมทุกวัน

ความท้าทาย

คุณต้องเขียนโปรแกรมที่จะ:

1) พิมพ์ตรงนี้: "4 8 15 16 23 42" (ไม่มีเครื่องหมายคำพูด)

2) รอสักครู่ระหว่าง 104 ถึง 108 นาที (อ้างอิงจากThe Lost Wiki )

3) ทำซ้ำตลอดไป (หรือจนกว่าคุณจะรู้ว่านี่คือการหลอกลวงที่ซับซ้อนทั้งหมดและคุณติดอยู่ในบริเวณขอบรกแปลก ๆ เนื่องจากการเขียนที่ขี้เกียจและถามคำถามที่คุณไม่มีคำตอบขอบคุณ JJ Abrams!)

อย่างไรก็ตามมีการจับ: คุณต้องใช้ภาษาที่คอมพิวเตอร์ในสถานีหงส์จะสามารถทำงานได้จริง สมมติว่า

A) คอมพิวเตอร์มีความทันสมัยในช่วงเวลาของการก่อสร้าง

B) ไม่มีการปรับปรุงซอฟต์แวร์คอมพิวเตอร์และ

C) ไม่มีการเชื่อมต่ออินเทอร์เน็ต (หมายความว่าคุณไม่สามารถดาวน์โหลด Golfscript ... ),

และทำให้เราคาดเดาได้ดีที่สุดสำหรับวันที่สร้างสถานี The Swan (อีกครั้งThe Lost Wiki )

หมายความว่าคุณต้องใช้ภาษาที่เปิดตัวเป็นครั้งแรกในวันที่หรือก่อนวันที่ 31 ธันวาคม 2520


การอธิบายกฎบางประการ:

  • การรวมไลบรารี่เป็นปกติ แต่กฎเดียวกันนั้นมีผลบังคับใช้ (ไลบรารี่ต้องอยู่ก่อนปีพ. ศ. 2520)

  • คุณไม่ต้องกังวลกับความเข้ากันได้กับระบบปฏิบัติการ

  • หากคุณใช้systemหรือเทียบเท่าภาษาของคุณคุณต้องพิสูจน์ว่าคำสั่งระบบใด ๆ ที่คุณใช้จะใช้ได้ก่อนปี 1978 บทความวิกิพีเดียน่าจะเป็นวิธีที่ดีที่สุดในการพิสูจน์เรื่องนี้

  • ไม่สำคัญว่าเมื่อคุณเริ่มโปรแกรมตราบใดที่มันจบลงในรูปแบบของการพิมพ์สลับกันและการนอนหลับ (ทั้งพิมพ์ - สลีป - สลีป - ...

นี่คือ Code-Golf ดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ


จำเป็นต้องขึ้นบรรทัดใหม่ในตอนท้ายของแต่ละเอาต์พุตหรือไม่
Mego

3
@Mego ใช่มิฉะนั้นตัวเลขจะไม่จริงได้ป้อน
DJMcMayhem

คำตอบ:


11

APL , 28 24 25 24 ไบต์

สิ่งนี้ทำงานใน APL * PLUS ของ STSC และใน SharpAPL ของ IPSA ในปี 1977 และในขณะที่ APL ที่ทันสมัยมีฟีเจอร์ใหม่มากมายสิ่งนี้เกิดขึ้นกับการใช้งาน APL หลัก ๆ ในปัจจุบัน:

+\4 4 7 1 7 19
→×⎕DL 6360

บรรทัดแรกพิมพ์ผลรวมสะสมของตัวเลขที่แสดงซึ่งเป็นตัวเลขที่ต้องการ บรรทัดที่สองd e l AYS 6360 วินาที (106 นาที) แล้วจะใช้เวลา Signum ของการที่ (1, ชัด) และไปที่สาย (เช่นก่อนหน้านี้จำนวนการพิมพ์หนึ่ง)

อย่างไรก็ตาม APL \ 360 (APL สำหรับIBM System / 360 ) จากปี 1966 เต้นจริงโดยหนึ่งไบต์ (ทดสอบบนอีมูเลเตอร์ IBM / 370 ฟรี ):

+\4 4 7 1 7 19
5⌶19E5
→1

การหลับแบบคาน ( " ไอบีเอ็ม " - ได้รับมัน) ใช้เวลารอเวลาในjiffiesของ1 / 300 วันที่สองเพื่อให้เรารอ 19 × 10 5 jiffies = 105 นาทีและ 33 1 / 3ที่สอง


ฉันให้เวลาทั้งหมดของฉันในการวัดเป็นกิโลจูปีและ megajiffies นับจากนี้เป็นต้นไป
Pavel

+\⎕A⍳'EEHBHT'(ถ้ามี⎕IO=0)
NGN

@ngn APL * PLUS ⎕Aไม่มี
อดัม

@ Adám +\4 4 7 1 7 19แล้ว?
ngn

@ Adám ping ^
ngn

26

MUMPS - 30 ตัวอักษรประมาณ 1966 (มาตรฐาน ANSI มาตรฐานแรกในปี 1977)

ความพยายามครั้งแรกของฉันที่การตีกอล์ฟที่นี่เราไปกันเลย!

f  w "4 8 15 16 23 42" h 6420

MUMPS ยังเป็นภาษาที่ได้รับความนิยมสำหรับซอฟต์แวร์ EHR ซึ่งสร้างโดย Massachusetts General Hospital ในบอสตัน การนำไปใช้ที่รู้จักกันดีที่สุดคือ Epic Systems ใน Verona, WI


6
เยี่ยมมาก! MUMPS เหมาะอย่างยิ่งสำหรับการเล่นกอล์ฟรหัสหากคุณต้องการที่จะเข้าสู่วงเฉพาะของนรก ...

2
ถ้าโลกมีความเสี่ยงฉันอาจใส่ "U 0" ตอนเริ่ม ...
psr

5
@psr มีความสำคัญมากกว่านี้: ช่วยโลกหรือเล่นกอล์ฟรหัส!
แอนดรูโรบินสัน

2
@psr คุณช่วยอธิบายเรื่องตลกให้คนที่ไม่เคยได้ยินเรื่อง MUMPS มาก่อนได้ไหม? ไม่ใช่ฉันแค่เอ่อ - สมมุติฐาน ในกรณีที่มีผู้ที่ไม่เคยได้ยินเรื่อง MUMPS มาทำเรื่องนี้ ;)
DJMcMayhem

3
@DJMcMayhem - คำสั่งการเขียน ("W") เขียนไปยังอุปกรณ์เอาต์พุตปัจจุบัน (อุปกรณ์ใดที่เป็นปัจจุบันจะถือเป็นค่าส่วนกลางไม่ว่าคุณจะชอบแนวคิดนั้นหรือไม่ก็ตาม) อุปกรณ์ปัจจุบันน่าจะเป็นเอาต์พุตมาตรฐาน แต่ U 0 จะตั้งเป็นเอาท์พุทมาตรฐาน (เอ่อปกติ แต่ไปที่จะไม่เป็นเรื่องตลกสำหรับทุกคน)
psr

20

TECO 53 ไบต์

TECO (ข้อความ [เทปก่อนหน้านี้] แก้ไขและแก้ไข) เป็นโปรแกรมแก้ไขข้อความที่มีต้นกำเนิดในปี 1962 นอกจากนี้ยังสามารถใช้ในการเรียกใช้โปรแกรมแบบสแตนด์อโลน มันเป็นโปรแกรมแก้ไขที่ทันสมัยสำหรับ PDPs, VAXen และอื่น ๆ

ตามคู่มือ TECO ^Hคำสั่งจะให้เวลาของวัน ตรวจสอบให้แน่ใจว่าได้ตรวจสอบระบบปฏิบัติการและแหล่งจ่ายไฟเนื่องจากหน่วยเวลาอาจแตกต่างกันไปตามเครื่องของคุณ:

OS/8:      ^H = 0
RT-11:     ^H = (seconds since midnight)/2
RSTS/E:    ^H = minutes until midnight
RSX-11:    ^H = (seconds since midnight)/2
VAX/VMS:   ^H = (seconds since midnight)/2
TOPS-10:   ^H = 60ths of a second since midnight
(or 50ths of a second where 50 Hz power is used)

โปรแกรมต่อไปนี้ทำงานบนระบบที่วัดเวลาของวันในหน่วยวินาที / 2:

I4 8 15 16 23 42
$<HT^HUA<^H-QAUDQD"L43200%D'QD-3180;>>

โปรดทราบว่า^Hและ$ควรป้อนโดยการโจมตีตามลำดับ, CONTROL-H และ ESCAPE

สามารถปรับตัวเลขในโปรแกรมสำหรับเครื่องต่อไปนี้:

   (number)        43200     3180
RSTS/E              1440      106
TOPS-10 60 Hz    5184000   381600
TOPS-10 50 Hz    4320000   318000
OS/8             goodbye, world...

20

เชลล์เป้าหมาย, 47 45 ไบต์

while echo 4 8 15 16 23 42;do sleep 6420;done

2
เอาชนะฉันให้ได้ ฉันพยายามหาหลักฐานที่sleepมีอยู่ในความเป็นจริงในเวลานั้น - คุณพบหรือไม่ en.wikipedia.org/wiki/…
Digital Trauma

คุณสามารถใช้sleepเป็นwhileเงื่อนไข บันทึก 2 ไบต์
ThinkChaos

@plg นั่นจะเข้าสู่โหมดสลีก่อนที่จะแสดงผลหมายเลขลำดับซึ่งดูเหมือนจะไม่ได้รับอนุญาต (จะต้องพิมพ์ลำดับทันทีหลังจากรันโปรแกรมแล้วนอน)
Doorknob

5
ดังนั้นคุณเริ่มโปรแกรมทันทีหลังจากครั้งสุดท้ายที่คุณป้อนตัวเลขด้วยตนเอง ;)
Roger

1
Unix เวอร์ชัน 6 มีคำสั่ง sleep (ดูman.cat-v.org/unix-6th/1/sleep )
Matteo Italia


13

FORTRAN 66 ( 108 98 ไบต์)

      PROGRAM D 
2     WRITE (*,*) '4 8 15 16 23 42'
      CALL SLEEP(6420)
      GOTO 2
      END

เป็นที่แน่นอนว่าคอมพิวเตอร์ที่มีปัญหานั้นมีคอมไพเลอร์ของ FORTRAN เนื่องจากมันครองวงการวิทยาศาสตร์และวิศวกรรมในยุคนั้น ฉันเกิด 18 ปีหลังจากปีบาร์นี้ แต่ในระหว่างโปรแกรมคณิตศาสตร์ของฉันในมหาวิทยาลัยเราได้เรียนรู้ FORTRAN การบรรยายที่สนุกครั้งหนึ่งเราเรียนรู้วิธีการเขียนโปรแกรมลงบัตร มันไม่ง่ายเลยที่จะทำการฟอร์แมทอย่างถูกต้องที่นี่ควรมี 6 blankspaces ก่อนคำสั่งแต่ละคำสั่งและฉันสามารถค้นหาการอ้างอิงถึงฟังก์ชั่น Sleep สำหรับ Fortran 77 ได้ แต่ควรมีอยู่ใน Fortran IV และ 66

PS: เราสามารถคัดแยกหนึ่งไบต์โดยใช้ป้ายกำกับ 1 แทนป้าย 42

PPS: หากคอมพิวเตอร์ที่มีปัญหาใช้ punching-card สำหรับโปรแกรมที่ป้อนเข้าคุณจะโชคไม่ดีและไบต์ก็ไม่สำคัญอีกต่อไป: D


@proudhaskeller ไม่คอลัมน์ 7 ด้านซ้ายถูกสงวนไว้ดังนั้นคุณจะบันทึกเพียงหนึ่งไบต์ที่ส่วนท้ายของบรรทัดที่ 4
frodoskywalker

1
ว่าฉันจะเป็นเพียงความปลอดภัย thats หนึ่งไบต์เหตุผลที่ผมไม่ได้เปลี่ยนมัน;)
Bersaelor

3
อา, ช่องว่างที่บังคับทำให้น้ำตาในความคิดถึงในสายตาของฉัน: D
Yves Klett

คุณสามารถโกนไบต์โดยการแทนที่60*107ด้วย80**2เช่นกัน
ทำเครื่องหมาย

ตกลง แต่อย่างใดอย่างหนึ่งก็สามารถใช้ 6420
Bersaelor


10

Altair ขั้นพื้นฐาน

แน่นอนว่า Desmond และ Kelvin น่าจะมี Altair 8800 (หรืออีมูเลเตอร์) เพื่อความสนุกสนาน Altair Basic (จากผู้ชายบางคนชื่อ Bill Gates จากชายร่างเล็กสองคนเริ่มต้นเรียกว่า Micro-Soft) ส่งเสียงแหลมด้วยการเปิดตัว 1975

เดสมอนด์จะต้องปรับแต่งเล็กน้อยเพื่อให้แน่ใจว่าFORวงด้านในใช้เวลาหนึ่งนาที เมื่อก่อนทุกคนรู้ว่าลูปที่วุ่นวายนั้นผิด แต่ทุกคนก็ใช้มัน!

1 REM ADJUST "D" AS REQUIRED
2 LET D = 1000
3 PRINT "4 8 15 16 23 42"
4 FOR A = 0 TO 105 * 60
5 REM THIS LOOP SHOULD LAST ONE MINUTE +/- 0.05 SECONDS
6 FOR B = 0 TO D
7 LET C = ATN(0.25)
8 NEXT
9 NEXT
10 GOTO 3

อีกทางเลือกหนึ่งเดสมอนด์สามารถติดตั้งบอร์ด 88-RTC (ประกอบจากส่วนประกอบ!: http://www.classiccmp.org/altair32/pdf/88-virtc.pdf ) และเข้าถึงการขัดจังหวะนาฬิกาเวลาทำงานแบบเรียลไทม์ สายไฟหรือคริสตัลภายใน

เขาจะต้องเขียนรูทีนอินเทอร์รัปต์เพื่อจัดการอินพุตนาฬิกาซึ่งในทางกลับกันจะสามารถอัปเดตพอร์ตกล่าวว่าทุก ๆ 59 วินาทีจะนำขึ้นสู่พื้นเป็นเวลาหนึ่งวินาทีจากนั้นยกสูงขึ้น

Altair Basic มีWAITฟังก์ชั่นดังนั้นโค้ดจะถูกทำให้เป็นเรื่องง่ายดังต่อไปนี้ (ฉันไม่พบรายชื่อพอร์ตดังนั้นฉันเลือก 125 เพราะหวังว่ามันจะไม่ได้ใช้)

1 PRINT "4 8 15 16 23 42"
2 FOR A = 0 TO 105 * 60
3 WAIT 125,0
4 WAIT 125,255
5 NEXT
6 GOTO 1

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


2
อ๊ะลูปไม่ว่าง ... +1
Geobits

4
อืมเดสมอนด์ Altair ... มีภาษาที่เรียกว่า "Ezio" โดยบังเอิญไหม?
Kroltan

10

PDP-11 แอสเซมเบลอร์สำหรับระบบ Unix 6 - 73 68 74 ตัวอักษร

เมื่อพูดถึงยุค 70 มันจำเป็นต้องให้เกียรติแก่ยูนิกซ์และฮาร์ดแวร์ที่ทุกอย่างเริ่มต้น!

s:mov $1,r0
sys write;m;18
mov $6240.,r0
sys 43
br s
m:<4 8 15 16 23 42;>

คุณสามารถเรียกใช้ที่นี่ได้อย่างง่ายดาย(แต่ก่อนอื่นคุณต้องค้นหาความสุขของการใช้edเพื่อแทรกข้อความใหม่ - ในกรณีเฉพาะของฉันฉันต้องค้นพบวิธีแก้ไขข้อความจริงด้วย:))

เมื่อประกอบแล้วจะกลายเป็น 108 ไบต์

# cat mini.as
s:mov $1,r0
sys write;m;18
mov $6240.,r0
sys 43
br s
m:<4 8 15 16 23 42;>
# as mini.as
# ls -l a.out mini.as
-rwxrwxrwx  1 root      108 Oct 10 12:36 a.out
-rw-rw-rw-  1 root       74 Oct 10 12:36 mini.as
# od -h a.out
0000000 0107 0022 0000 0000 0018 0000 0000 0000
0000020 15c0 0001 8904 0012 0010 15c0 0004 8923
0000040 01f7 2034 2038 3531 3120 2036 3332 3420
0000060 3b32 0000 0000 0000 0002 0000 0000 0000
0000100 0000
0000120 0000 0000 0073 0000 0000 0000 0002 0000
0000140 006d 0000 0000 0000 0002 0012
0000154 
# ./a.out
4 8 15 16 23 42;

1
ลบ \ n สำหรับตัวละครน้อยลง 2 ตัวเขาไม่ได้บอกว่ามันต้องอยู่ในบรรทัดแยกต่างหาก :)
แอนดรูโรบินสัน

@AndrewRobinson: ดูเหมือนว่าไม่ยุติธรรมเลยเอาท์พุททั้งหมดที่ตามมาจะมี 4 bashed พร้อมกับ 42 ... ฉันสามารถเปลี่ยน \ n (ตัวละครสองตัว) ด้วยอัฒภาค นอกจากนี้ยังmsgสิ้นเปลืองฉันสามารถไปด้วยm(โกนอีก 4 ไบต์)
Matteo Italia

1
คุณต้องการบันทึกจดหมายและคำศัพท์ด้วยการใช้brแทนjmpใช่มั้ย นอกจากนี้การเขียนต้องใช้ file descriptor ใน r0 ซึ่งเห็นได้ชัดว่าคุณมี 1 (หรือ 2) สำหรับลูปแรกของคุณ แต่คุณยอดเยี่ยมด้วยเวลาพักเครื่อง
Random832

@ Random832: wops มันอาจจะทำงานได้เมื่อฉันทดสอบเพราะฉันใช้ 1 หรือ 2 เป็นเวลาพักเพื่อลองอย่างรวดเร็วถ้ามันทำงาน ที่ถูกต้องเกี่ยวกับbrขอบคุณที่หนึ่งและเทคนิคอื่น ๆ บางคน (ส่วนใหญ่ตัดช่องว่างและการใช้ฐานแปดเมื่อใดก็ตามที่เป็นไปได้) ที่เราได้ 74 movตัวอักษรแม้กระทั่งการเพิ่มครั้งแรก
Matteo Italia

8

โลโก้, 61 ไบต์ (อาจเป็นไปได้) หรือ 48 ไบต์ (อาจไม่ใช่)

น่าเสียดายที่ฉันยังไม่สามารถหาสำเนาของระบบโลโก้ออนไลน์: คู่มือเบื้องต้น (1967) โดย BBN หรือการอ้างอิงใด ๆ โดยกลุ่มโลโก้ MIT (1960s +) โลโก้ Apple โดย LCSI เป็นบิตล่าสุด (~ 1980) อย่างไรก็ตามจากหนังสือออนไลน์ความหลากหลายของสิ่งต่อไปนี้อาจใช้ได้ในเวลานั้น โปรดทราบว่า WAIT 60 จะรอ 1 วินาทีไม่ใช่ 60

TO a
LABEL "l
PRINT [4 8 15 16 23 42]
WAIT 381600
GO "l
END
a

เราสามารถทำได้ดีขึ้นเล็กน้อยด้วยการเพิ่มประสิทธิภาพการโทรหางแม้ว่านี่อาจไม่สามารถใช้ได้ในเวลานั้น

TO a
PRINT [4 8 15 16 23 42]
WAIT 381600
a
END
a

3
TCO พร้อมใช้งานในเวลานั้นอย่างแน่นอน (ใช่ฉันรู้จากประสบการณ์) TCO เป็นบรรทัดฐานสำหรับ Lisp (และจากนั้น Scheme); มันเป็นเพียงเมื่อเร็ว ๆ นี้ว่ามันได้ถูกมองว่าแปลกใหม่
rici

7

CBM BASIC 1.0, 52 38 ตัวอักษรโทเค็นถึง45 31 ไบต์

1?"4 8 15 16 23 42":fOa=1to185^3:nE:rU

CBM BASIC 1.0 ได้รับการแนะนำให้รู้จักกับ Commodore PET ในเดือนตุลาคม 2520 โดยปกติคำสั่งจะแสดงเป็นตัวอักษรตัวพิมพ์ใหญ่และตัวอักษร CBM แต่ฉันได้แสดงไว้ที่นี่ด้วยตัวพิมพ์เล็ก + ตัวพิมพ์ใหญ่เพื่อความสะดวก (ทั้งของฉันและของคุณ! :-) ) โปรดทราบว่า ^ จะแสดงเป็นจริง↑ Detokenized หลังจากรายการสิ่งLISTนี้จะทำให้:

1 PRINT "4 8 15 16 23 42":FOR A=1 TO 185^3:NEXT:RUN

สัตว์เลี้ยงของ 6502 วิ่งที่ 1MHz ดังนั้นควรใช้เวลาประมาณ 105 นาทีหรือมากกว่านั้นจึงจะเสร็จสมบูรณ์

แก้ไข : รับรู้ว่าลูปซ้อนกันไม่จำเป็นจริงๆและฉันทำการคำนวณโทเค็นของฉันผิด ยังไม่เพียงพอที่จะชนะ (และสายเกินไปที่จะบู๊ต) แต่อย่างน้อยก็ดีกว่า


7

Pascal - 107 95 ไบต์

PROGRAM S;USES CRT;BEGIN WHILE TRUE DO BEGIN WRITELN('4 8 15 16 23 42');DELAY(6300000);END;END.

เวอร์ชันที่ไม่ถูกปรับแต่ง:

PROGRAM S;
USES CRT;
BEGIN
    WHILE TRUE DO
    BEGIN
        WRITELN('4 8 15 16 23 42');
        DELAY(6300000); { 105 minutes * 60 seconds * 1000 milisseconds }
    END;
END.

4

ออกมา 50 ไบต์

แม้ว่า FORTH-79 เป็นรุ่นมาตรฐานที่เก่าที่สุด แต่ภาษานั้นกำลังพัฒนาขึ้นในปีพ. ศ. 2511 และใช้งานได้กับ IBM 1130 มันถูกใช้กับระบบอื่นเช่นกันก่อนปี 1977 ฉันอาจทำการวิจัยเพิ่มเติมอีกเล็กน้อยเพื่อให้แน่ใจว่าคำเหล่านี้พร้อมใช้งานทั้งหมด แต่ฉันค่อนข้างแน่ใจว่านี่เป็นพื้นฐานพอที่จะมีอยู่ในตอนนั้น สิ่งเหล่านี้มีให้โดย FORTH-79 แน่นอน

วนซ้ำตลอดรอ 6420000 มิลลิวินาทีระหว่างการพิมพ์สตริง ไม่มีการพิมพ์บรรทัดใหม่

: F 0 1 DO 6420000 MS ." 4 8 15 16 23 42" LOOP ; F

4

สมอลล์ทอล์ค, 95 (หรือ 68 หากได้รับอนุญาต)

เปิดมาตั้งแต่ปี 1972

|i|[i:=0.[i<5] whileTrue: [(Delay forSeconds: 6480) wait.Transcript show: '4 8 15 16 23 42'.]]fork

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

ช่องโหว่ที่เป็นไปได้

ควรพิมพ์ลำดับทุก 108 นาที แต่ไม่ได้ระบุว่าต้องใช้เวลา 108 นาที
นี่อาจทำให้รหัสสั้นลง

|i|[i:=0.[i<5] whileTrue: [Transcript show: '4 8 15 16 23 42'.]]fork

รหัสจะพิมพ์ลำดับโดยไม่มีช่วงเวลาดังนั้นจึงรับประกันได้ว่าจะพิมพ์หลังจาก 108 นาทีเช่นกัน


9
แต่ปัญหาจะพูดWait some time between 104 and 108 minutesดังนั้นฉันจึงไม่คิดว่าช่องโหว่เป็นไปได้
matsjoyce

@matsjoyce ซึ่งเป็นเหตุผลที่ผมโพสต์หนึ่งที่มีการจับเวลาและเป็นหนึ่งโดยไม่ต้อง :)
Teun Pronk

3
ในขณะที่ช่องโหว่ของคุณไม่ได้ผลสำหรับการท้าทายฉันสงสัยว่าเดสมอนด์จะสามารถหลบหนีได้หรือไม่ ฉันค่อนข้างแน่ใจว่าคอมพิวเตอร์ไม่ทำอะไรเลยเว้นแต่ว่ามันอยู่ระหว่างหน้าต่าง 104-108 นาทีดังนั้นมันก็จะไม่สนใจ "4 8 15 16 23 42 42" ที่กำลังเข้ามา อย่างไรก็ตามฉันแน่ใจว่าวอลท์จะสับสนมากโดยตัวเลขทั้งหมดที่มีคนส่งเขา = D
DJMcMayhem

3

SAS, 82 75 69

data;
file stdout;
a:;
put "4 8 15 16 23 42";
a=sleep(6300,1);
goto a;
run;

ไม่ใช่ภาษากอล์ฟทั่วไป แต่ฉันคิดว่ามันมีคุณสมบัติสำหรับความท้าทายนี้โดยสันนิษฐานว่าfile stdoutใช้ได้ใน SAS ยุคพ. ศ. 2520

การปรับปรุง:

  • data _null_;-> data;บันทึก 7 ตัวอักษร (และตอนนี้จะสร้างชุดข้อมูลที่ว่างเปล่าเช่นเดียวกับการพิมพ์ไปยัง stdout)
  • แทนที่ do-while loop ด้วย goto - บันทึกอักขระได้ 6 ตัว

3

เปลือกหอย ธ อมป์สัน 2514 (2516 เพื่อสั่งการหลับ)

43 ไบต์

: x
echo 4 8 15 16 23 42
sleep 6480
goto x

ตั้งแต่ Bourne shell ถึงแม้ว่ามันจะมีอยู่ในปี 1977 ไม่ได้อยู่ใน Unix เวอร์ชันที่วางจำหน่ายจนกระทั่ง v7 ในปี 1979 เชลล์ Unix ดั้งเดิมไม่มีคำสั่งควบคุมแบบวนซ้ำที่แปลกใหม่ (ถ้าคุณต้องการจบการวนซ้ำคุณสามารถใช้ifคำสั่งเพื่อข้ามการข้ามไป)


มันจะมีexec $0การบันทึกเล็ก ๆgoto?
Neil

2

C, 50 ไบต์

สั้นกว่าโซลูชัน C อื่นและไม่ซ้ำกัน ฉันเขียนสิ่งนี้จริง ๆ ก่อนที่ฉันจะสังเกตเห็นความเห็นที่เหมือนกันของ Digital Trauma ในโซลูชัน C อื่น ๆ

main(){for(;;sleep(6240))puts("4 8 15 16 23 42");}

ฉันขอยืนยันว่านี่เป็นการแก้ไข / ปรับปรุงเล็กน้อยในโซลูชันอื่นและนั่นก็คือการล่อลวง ไม่ว่าคุณจะเห็นความคิดเห็นก่อนเขียนหรือไม่ก็ตาม
Mego

1

COBOL, 240 ไบต์

ใช่ช่องว่างชั้นนำมีความสำคัญ cobc -x save.cob; ./saveรวบรวมและทำงานเหมือน ( -xตัวเลือกจะสร้างไฟล์ปฏิบัติการได้ซึ่งต่างจาก lib ที่ใช้ร่วมกันดังนั้นฉันไม่คิดว่าจะต้องนับรวม)

       IDENTIFICATION DIVISION.
       PROGRAM-ID.S.
       PROCEDURE DIVISION.
           PERFORM UNTIL 1<>1
              DISPLAY"4 8 15 16 23 42"
              CALL"C$SLEEP"USING BY CONTENT 6402
           END-PERFORM.
           GOBACK.

หากเราต้องการน่าเบื่อเราสามารถเพิ่ม--freeตัวเลือกการคอมไพล์สำหรับโค้ดรูปแบบอิสระจากนั้น158 + 6 = 164 ไบต์แต่สิ่งนี้ไม่น่าจะกลับมาทำงานได้ในปี '77

IDENTIFICATION DIVISION.
PROGRAM-ID.S.
PROCEDURE DIVISION.
PERFORM UNTIL 1<>1
DISPLAY"4 8 15 16 23 42"
CALL"C$SLEEP"USING BY CONTENT 6402
END-PERFORM.
GOBACK.

1

ALGOL 60/68 / W, 74 47 50 ไบต์

เรียกใช้โปรแกรมเต็มรูปแบบนี้กับการใช้a68g save.a68algol68g

ALGOL ไม่มีวิธีนอนหลับในตัว แต่เราสามารถเรียกใช้ /bin/sleep:

DO print("4 8 15 16 23 42");system("sleep 6380")OD

คำตอบเก่า:

ALGOL ไม่ได้ในตัวการนอนหลับเพื่อให้เราสามารถละเมิดpingซึ่งเป็นแน่นอนบน Unix เวลา (ความคิดจากที่นี่ ) สำหรับ74 69 ไบต์

DO print("4 8 15 16 23 42");system("ping 1.0 -c1 -w6240>/dev/null")OD

1
นั่นฉลาด! คุณสามารถพูดได้ว่าโปรแกรมคือ "sleep-ping" : P
DJMcMayhem

@DrGreenEggsandIronMan ฮา!
แมว

@DrGreenEggsandIronMan บรรทัดสำหรับที่systemโอเคและไม่โอเคอยู่ที่ไหน คุณทำได้ดีsystem("ping ...")แต่ความท้าทายบอกว่าฉันไม่สามารถใช้systemจาก C สำหรับคำสั่ง bash ได้ ALGOL จะทำพิมพ์ แต่ผมไม่ได้มีวิธีอื่นมากกว่าping(8)หรือsleep(1)จะนอนหลับ
แมว

เมื่อฉันเขียนการท้าทายฉัน googled และเห็นว่าทุบตีออกมาในปี 89 ดังนั้นฉันจึงคิดว่า "การใช้ bash is cheating!" ฉันคิดว่าปัญหาที่ใหญ่กว่าคือการsystem("sleep")ทำงานบนระบบปฏิบัติการในเวลานั้นหรือไม่ ฉันจะแก้ไขโพสต์
DJMcMayhem

1
ฉันไม่คิดว่าจะมีการ ping สำหรับ NCP อินเทอร์เน็ตไม่ได้เปลี่ยนเป็น TCP / IP จนกระทั่งต้นยุค 80 และการกล่าวถึงครั้งแรกของคำขอ ICMP Echo ดูเหมือนจะอยู่ใน RFC777 ลงวันที่เมษายน 2524
ninjalj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.