Tự động cứu thế giới


63

Bạn là Desmond Hume. Trong 3 năm qua, bạn và đối tác của mình, Kelvin, đã trở thành nô lệ cho một máy tính đòi hỏi một trình tự rất cụ thể để được nhập vào đó cứ sau 108 phút để cứu thế giới.

4 8 15 16 23 42

Đối tác của bạn đã chết 40 ngày trước (do một tai nạn đáng tiếc liên quan đến đầu của Kelvin và một tảng đá lớn), và bạn không có ai để nói chuyện. Không ai nhập số cho bạn. Không ai phá vỡ sự đơn điệu. Lúc đầu, nó không tệ lắm, nhưng bạn không thể xử lý sự im lặng nữa. Và nếu bạn phải nghe "Make Your Kind Of Music" một lần nữa, bạn sẽ hét lên.

Bạn quyết định rằng bạn cần phải thoát ra. Trốn thoát. Bạn quyết định rằng bạn sẽ xây dựng một chiếc bè và đi thuyền ra khỏi đảo. Nhưng sau đó bạn nhận ra một tin xấu: bạn bị mắc kẹt ở đây. Bạn cần tiếp tục cứu thế giới.

Nhưng sau đó bạn nhận ra một tin tốt: Bạn là một lập trình viên! Bạn có thể tự động hóa việc cứu thế giới! Vui mừng, bạn chạy đến máy tính, và, bằng cách sử dụng các kỹ năng trăn đáng tin cậy của bạn, bạn lấy ra một kịch bản nhanh để nhập số cho bạn.

import time

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

Nhanh chóng, đơn giản, đáng tin cậy, ngắn và dễ dàng. Tất cả mọi thứ mà một kịch bản python tốt nên được. Nhưng sau đó, khi bạn thử kiểm tra nó, bạn sẽ gặp lỗi.

Bad command or file name.

Hừ, lạ. Oh tốt, hãy thử c ++.

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

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

Không! C ++ cũng không được tìm thấy. Bạn thử mọi ngôn ngữ bạn có thể nghĩ ra. Javascript, Ruby, Perl, PHP, C #. Không có gì. Máy tính này được tạo ra trước tất cả các ngôn ngữ phổ biến trong ngày.

Các thách thức

Bạn phải viết một chương trình sẽ:

1) In chính xác điều này: "4 8 15 16 23 42" (không có dấu ngoặc kép)

2) Đợi một chút thời gian từ 104 đến 108 phút. (Theo The Lost Wiki )

3) Lặp lại mãi mãi. .

Tuy nhiên, có một nhược điểm: Bạn PHẢI sử dụng ngôn ngữ mà máy tính trong trạm thiên nga thực sự có khả năng chạy. Giả sử rằng

A) Máy tính được cập nhật tại thời điểm xây dựng,

B) Không có bản cập nhật cho phần mềm máy tính và

C) Không có kết nối internet khả dụng (Có nghĩa là bạn không thể tải xuống Golfscript ...),

và đưa ra dự đoán tốt nhất của chúng tôi về ngày xây dựng The Swan Station, (Một lần nữa, Wiki bị mất. )

Điều này có nghĩa là bạn phải sử dụng ngôn ngữ được phát hành lần đầu tiên vào hoặc trước ngày 31/12/2017.


Một vài quy tắc làm rõ:

  • Bao gồm các thư viện là OK, nhưng áp dụng quy tắc tương tự (các thư viện phải trước năm 1977).

  • Bạn không phải lo lắng về khả năng tương thích hệ điều hành.

  • Nếu bạn sử dụng system, hoặc ngôn ngữ của bạn tương đương, bạn phải chứng minh rằng bất kỳ lệnh hệ thống nào bạn sử dụng sẽ có sẵn trước năm 1978. Một bài viết trên wikipedia có lẽ là cách tốt nhất để chứng minh điều này.

  • Không thành vấn đề khi bạn bắt đầu chương trình, chỉ cần nó kết thúc bằng một mô hình in và ngủ xen kẽ. (in-ngủ-in-ngủ ... và ngủ-in-ngủ-in ... đều được chấp nhận.)

Đây là Code-Golf, vì vậy câu trả lời ngắn nhất bằng byte thắng.


Là một dòng mới được yêu cầu ở cuối mỗi đầu ra?
Mego

3
@Mego Có, nếu không, các số sẽ không thực sự được nhập .
DJMcMayhem

Câu trả lời:


11

APL , 28 24 25 24 byte

Điều này hoạt động trong APL * PLUS của STSC và trong SharpAPL của IPSA năm 1977, và trong khi các APL hiện đại có rất nhiều tính năng mới, thì điều này vẫn xảy ra với tất cả các APL chính hiện nay:

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

Dòng đầu tiên in tổng tích lũy của các số được hiển thị, là các số bắt buộc. Dòng thứ hai d e l ays 6360 giây (106 phút), sau đó lấy ký hiệu của số đó (1, rõ ràng) và đi đến dòng đó (tức là dòng trước, in số).

Tuy nhiên, APL \ 360 (APL cho IBM System / 360 ) từ năm 1966 thực sự đánh bại nó bằng một byte (được thử nghiệm trên trình giả lập IBM / 370 miễn phí ):

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

Giấc ngủ dầm chữ I ( " IBM " - nhận được nó) mất chờ đợi thời gian trong jiffies của 1 / 300 ngày của một giây, vì vậy chúng tôi chờ đợi 19 × 10 5 jiffies = 105 phút và 33 1 / 3 giây.


Kể từ bây giờ, tôi sẽ đưa ra tất cả các phép đo thời gian của mình tính bằng kilôgam và megajiffies.
Pavel

+\⎕A⍳'EEHBHT'(nếu ⎕IO=0)
ngn

@ngn APL * PLUS không có ⎕A.
Adám

@ Adám +\4 4 7 1 7 19thì sao?
ngn

@ Adám ping ^
ngn

26

MUMPS - 30 ký tự, khoảng năm 1966 (tiêu chuẩn ANSI đầu tiên vào năm 1977)

Nỗ lực đầu tiên của tôi tại mã golf, chúng ta đi đây!

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

MUMPS vẫn là ngôn ngữ phổ biến cho phần mềm EHR, được tạo bởi Bệnh viện Đa khoa Massachusetts ở Boston. Triển khai được biết đến nhiều nhất là Epic Systems ở Verona, WI.


6
Bạn đã làm rất tốt! MUMPS thực sự lý tưởng cho việc chơi gôn mã nếu bạn muốn vào vòng địa ngục cụ thể đó ...

2
Nếu thế giới bị đe dọa, tôi có thể đặt "U 0" khi bắt đầu ...
psr

5
@psr, điều gì quan trọng hơn: cứu thế giới hay chơi golf?!
Andrew Robinson

2
@psr Bạn có thể giải thích trò đùa cho ai đó chưa bao giờ nghe nói về MUMPS trước đây không? Không phải tôi, chỉ là uh-- theo giả thuyết. Trong trường hợp ai đó chưa từng nghe về MUMPS vấp phải điều này. ;)
DJMcMayhem

3
@DJMcMayhem - Câu lệnh ghi ("W") ghi vào thiết bị đầu ra hiện tại (thiết bị nào hiện tại được giữ giá trị toàn cầu cho dù bạn có thích ý tưởng đó hay không). Thiết bị hiện tại có thể sẽ là đầu ra tiêu chuẩn. Nhưng U 0 sẽ đặt nó thành đầu ra tiêu chuẩn (thông thường, nhưng đi sâu vào đó sẽ không còn buồn cười với bất cứ ai).
psr

20

TECO, 53 byte

TECO (Văn bản [Băng trước đây] Trình chỉnh sửa và Chỉnh sửa) là trình chỉnh sửa văn bản có nguồn gốc từ năm 1962. Nó cũng có thể được sử dụng để chạy các chương trình độc lập. Đó là trình chỉnh sửa hiện đại cho PDP, VAXen, v.v.

Theo hướng dẫn của TECO, ^Hlệnh đưa ra thời gian trong ngày. Đảm bảo kiểm tra hệ điều hành và nguồn điện của bạn, vì đơn vị thời gian có thể thay đổi tùy theo máy của bạn:

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)

Chương trình sau hoạt động trên các hệ thống trong đó thời gian trong ngày được tính bằng giây / 2:

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

Lưu ý rằng ^H$nên được nhập bằng cách nhấn tương ứng, KIỂM SOÁT-H và ESCAPE.

Các số trong chương trình có thể được điều chỉnh cho các máy sau:

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

20

Vỏ Bourne, 47 45 byte

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

2
Đánh tôi với nó Tôi đã cố gắng tìm bằng chứng sleepthực tế có sẵn từ đó - bạn có thấy điều đó không? vi.wikipedia.org/wiki/ từ
Chấn thương kỹ thuật số

Bạn có thể sử dụng sleepnhư whileđiều kiện. Lưu 2 byte
ThinkChaos

@plg Điều đó sẽ ngủ trước khi xuất chuỗi số, điều này dường như không được phép (nó phải in chuỗi ngay sau khi chạy chương trình, sau đó ngủ).
Doorknob

5
Vì vậy, bạn bắt đầu chương trình ngay sau lần cuối cùng bạn nhập số. ;)
Roger

1
Phiên bản Unix 6 đã bao gồm lệnh ngủ (xem man.cat-v.org/unix-6th/1/s ngủ ).
Matteo Italia


13

FORTRAN 66 ( 108 98 byte)

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

Một điều chắc chắn là máy tính được đề cập có trình biên dịch FORTRAN, vì nó thống trị các lĩnh vực khoa học và kỹ thuật trong thời đại. Tôi sinh ra 18 năm sau năm cùng tên, nhưng trong chương trình toán của tôi ở trường đại học, chúng tôi đã học FORTRAN. Một bài giảng thú vị, chúng tôi đã học cách lập trình trên thẻ đục lỗ. Không dễ để định dạng chính xác ở đây, cần có 6 khoảng trống trước mỗi lệnh và tôi chỉ có thể tìm thấy một tham chiếu đến chức năng Ngủ cho Fortran 77 nhưng nó đã tồn tại trong Fortran IV và 66.

PS: Chúng tôi có thể loại bỏ một Byte bằng cách sử dụng nhãn 1 thay vì nhãn 42.

PPS: Nếu máy tính được đề cập sử dụng thẻ đục lỗ để nhập chương trình, bạn sẽ hết may mắn và các byte không còn quan trọng nữa: D.


@proudhaskeller Không, 7 cột bên trái được dành riêng để bạn chỉ lưu một byte ở cuối dòng 4.
frodoskywalker

1
Chính xác, tôi chỉ an toàn một byte đó là lý do tại sao tôi không thay đổi nó;)
Bersaelor

3
À, khoảng trắng bắt buộc đặt một giọt nước mắt hoài cổ trong mắt tôi: D
Yves Klett

Bạn cũng có thể tắt một byte bằng cách thay thế 60*107bằng 80**2.
Đánh dấu

Ok, nhưng sau đó người ta cũng có thể chỉ cần sử dụng 6420.
Bersaelor 16/1/2015


10

Cơ bản Altair

Chắc chắn, Desmond và Kelvin sẽ có một Altair 8800 (hoặc một trình giả lập) chỉ để giải trí. Altair Basic (từ một số người tên là Bill Gates, của một số ít người khởi nghiệp hai tên là Micro-Soft) rít lên với một bản phát hành năm 1975.

Desmond sẽ cần tinh chỉnh một chút để đảm bảo FORvòng lặp bên trong kéo dài một phút. Trước đó, mọi người đều biết các vòng lặp bận rộn là sai, nhưng mọi người đều sử dụng chúng!

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

Để thay thế, Desmond có thể cài đặt bảng 88-RTC (được lắp ráp từ các thành phần!: Http : // www. Classiccmp.org/altair32/pdf/88-virtc.pdf ) và truy cập thông qua các ngắt đến đồng hồ thời gian thực đang tắt đường dây điện hoặc tinh thể bên trong.

Anh ta sẽ cần phải viết một thói quen ngắt để xử lý đầu vào đồng hồ, từ đó có thể cập nhật một cổng, cứ sau 59 giây lại chạm đất trong một giây, sau đó nâng lên cao.

Altair Basic có một WAITchức năng, vì vậy mã sẽ được đơn giản hóa thành một cái gì đó như sau (Tôi không thể tìm thấy danh sách cổng, vì vậy tôi chỉ chọn 125 với hy vọng nó sẽ không được sử dụng.):

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

Đây thực sự là một câu hỏi nhỏ thú vị, quay trở lại vào một số máy tính thực sự thô sơ. Sự kiên nhẫn mà những người theo thời gian cũ (bao gồm cả tôi) phải có!


2
À, vòng lặp bận rộn ... +1
Geobits

4
Hmm, Desmond, Altair ... Có ngôn ngữ nào gọi là "Ezio" không?
Kroltan

10

Trình biên dịch PDP-11 cho Hệ thống Unix 6 - 73 68 74 ký tự

Nói về thập niên 70, bắt buộc phải tôn vinh Unix và phần cứng nơi tất cả bắt đầu!

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

Bạn có thể dễ dàng chạy nó ở đây (nhưng trước tiên bạn phải tìm lại niềm vui của việc sử dụng edđể chèn văn bản - trong trường hợp cụ thể của tôi, tôi thậm chí phải khám phá cách thực sự chỉnh sửa văn bản trong đó :)).

Lắp ráp nó trở thành 108 byte.

# 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
Xóa \ n cho 2 ký tự ít hơn, anh ta không nói nó phải nằm trong các dòng riêng biệt. :)
Andrew Robinson

@AndrewRobinson: có vẻ hơi không công bằng, tất cả đầu ra sau sẽ có 4 bash cùng với 42 ... Thay vào đó tôi có thể thay đổi \ n (hai ký tự) bằng dấu chấm phẩy. Ngoài ra, msglà lãng phí, tôi có thể đi với m(cạo 4 byte khác).
Matteo Italia

1
Bạn sẽ lưu một chữ cái và một từ chỉ dẫn bằng cách sử dụng brthay vì jmp, phải không? Ngoài ra, viết yêu cầu bộ mô tả tệp trong r0 - bạn dường như có 1 (hoặc 2) trong vòng lặp đầu tiên của mình, nhưng bạn đang đập nó với thời gian ngủ.
Random832

@ Random832: wops, nó có thể hoạt động khi tôi thử nghiệm vì tôi đã sử dụng 1 hoặc 2 làm thời gian ngủ để nhanh chóng thử nếu nó hoạt động. Chính xác về điều đó br, nhờ vào điều đó và một số thủ thuật khác (chủ yếu là cắt khoảng trắng và sử dụng bát phân bất cứ khi nào có thể), chúng tôi đã có tới 74 ký tự thậm chí thêm ký tự đầu tiên mov.
Matteo Italia

8

LOGO, 61 byte (có thể) hoặc 48 byte (có thể không)

Thật không may, tôi đã không thể tìm thấy một bản sao trực tuyến của Hệ thống LOGO: Hướng dẫn sơ bộ (1967) của BBN hoặc bất kỳ tài liệu tham khảo nào của Nhóm Logo MIT (1960s +). Logo Apple của LCSI là một chút quá gần đây (~ 1980). Tuy nhiên, dựa trên sách trực tuyến, một số biến thể sau đây có thể đã hoạt động vào thời điểm đó. Lưu ý rằng WAIT 60 đợi trong 1 giây chứ không phải 60.

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

Chúng tôi có thể làm tốt hơn một chút với tối ưu hóa cuộc gọi đuôi, mặc dù điều này có thể không có sẵn tại thời điểm đó.

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

3
TCO hoàn toàn có sẵn tại thời điểm đó. (Vâng, tôi biết từ kinh nghiệm.) TCO là tiêu chuẩn cho Lisp (và sau đó là Scheme); chỉ gần đây nó mới được coi là kỳ lạ.
0 giờ 42 phút

7

CBM BASIC 1.0, 52 38 ký tự, được mã hóa thành 45 31 byte

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

CBM BASIC 1.0 đã được giới thiệu với Commodore PET vào tháng 10 năm 1977. Các lệnh thường sẽ được hiển thị bằng chữ in hoa và ký tự đồ họa CBM, nhưng tôi đã liệt kê chúng ở đây bằng chữ thường + chữ hoa để dễ sử dụng (cả của tôi và của bạn! :-) ). Cũng lưu ý rằng ^ thực sự sẽ được hiển thị là. Phát ngôn, sau khi liệt kê điều này với LISTđiều này sẽ dẫn đến:

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

Chiếc 6502 của PET chạy ở tốc độ 1 MHz, do đó, sẽ mất khoảng 105 phút hoặc lâu hơn để hoàn thành.

Chỉnh sửa : Nhận ra rằng các vòng lặp lồng nhau không thực sự cần thiết và tôi đã tính toán sai mã thông báo của mình. Vẫn không đủ để giành chiến thắng (và quá muộn để khởi động), nhưng ít nhất nó tốt hơn.


7

Pascal - 107 95 byte

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

Phiên bản bị đánh cắp:

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

Forth , 50 byte

Mặc dù FORTH-79 là phiên bản được chuẩn hóa sớm nhất, ngôn ngữ này đã được phát triển bắt đầu từ năm 1968 và có thể sử dụng được trên IBM 1130. Nó được sử dụng trên các hệ thống khác trước cả năm 1977. Tôi có thể nghiên cứu thêm một chút để đảm bảo tất cả các từ này đều có sẵn, nhưng tôi khá chắc chắn rằng điều này đủ cơ bản để tồn tại trước đó. Những thứ này đều có sẵn cho FORTH-79, chắc chắn.

Vòng lặp mãi mãi, chờ 6420000 mili giây giữa in chuỗi. Không có dòng mới được in.

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

4

Smalltalk, 95 (hoặc 68 nếu kẽ hở được cho phép)

Có mặt từ năm 1972

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

Chưa có kinh nghiệm với cái này, đã thấy nó trên wikipedia: P Đã
xem trực tuyến cách lặp và trì hoãn, cú pháp phải chính xác nhưng không thể tìm ra cách để chạy nó.

Lỗ hổng có thể

Nó sẽ in chuỗi sau mỗi 108 phút, nhưng nó không nói rằng nó phải là 108 phút.
Điều này có thể làm cho mã ngắn hơn

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

Mã sẽ in chuỗi không có khoảng thời gian, do đó, mã được đảm bảo rằng nó cũng sẽ in sau 108 phút.


9
Nhưng vấn đề là nói Wait some time between 104 and 108 minutes, vì vậy tôi không nghĩ rằng lỗ hổng là có thể.
matjoyce

@matsjoyce Đó là lý do tại sao tôi đăng một cái có hẹn giờ và không có :)
Teun Pronk

3
Mặc dù kẽ hở của bạn không hoạt động cho thử thách, tôi tự hỏi liệu Desmond có thể thoát khỏi nó không. Tôi khá chắc chắn rằng máy tính không làm gì cả trừ khi nó ở giữa cửa sổ 104-108 phút, vì vậy nó sẽ bỏ qua phần "4 8 15 16 23 42" đang được nhập. Tuy nhiên, tôi chắc chắn rằng Walt sẽ rất bối rối bởi tất cả những con số mà ai đó đang gửi cho anh ta. = D
DJMcMayhem

3

SÀI GÒN, 82 75 69

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

Không phải là một ngôn ngữ chơi golf điển hình, nhưng tôi nghĩ rằng nó đủ điều kiện cho thử thách này, cho rằng điều đó file stdoutcó giá trị trong thời kỳ SAS năm 1977.

Cải tiến:

  • data _null_;-> data;lưu 7 ký tự (và hiện tạo một tập dữ liệu trống cũng như in ra thiết bị xuất chuẩn).
  • Thay thế vòng lặp do-while bằng goto - lưu 6 ký tự

3

Vỏ sò, năm 1971 (năm 1973 cho lệnh ngủ)

43 byte

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

Kể từ khi vỏ Bourne, mặc dù nó tồn tại vào năm 1977, không phải là phiên bản phát hành của Unix cho đến phiên bản 7 năm 1979. Vỏ Unix ban đầu không có bất kỳ lệnh điều khiển vòng lặp ưa thích nào. (Nếu bạn muốn kết thúc một vòng lặp, bạn có thể sử dụng iflệnh để bỏ qua goto.)


Nó sẽ có exec $0một khoản tiết kiệm nhỏ goto?
Neil

2

C, 50 byte

Ngắn hơn các giải pháp C khác, và do đó không phải là một bản sao. Tôi thực sự đã viết điều này trước khi tôi nhận thấy nhận xét giống hệt (gần như) của Digital Trauma về giải pháp C khác.

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

Tôi cho rằng đây là một sửa đổi / cải tiến tầm thường đối với giải pháp khác, và do đó là một bản sao. Cho dù bạn có thấy bình luận trước khi viết điều này hay không đều không liên quan.
Mego

1

COBOL, 240 byte

Vâng, khoảng trắng hàng đầu là đáng kể. Biên dịch và chạy như thế nào cobc -x save.cob; ./save. ( -xTùy chọn tạo ra một tệp thực thi trái ngược với lib được chia sẻ và do đó tôi không nghĩ rằng nó cần phải được tính.)

       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.

Nếu chúng ta muốn nhàm chán, chúng ta có thể thêm --freetùy chọn biên dịch cho mã định dạng miễn phí, sau đó 158 + 6 = 164 byte nhưng điều này sẽ khó có thể hoạt động trở lại trong '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 byte

Chạy chương trình đầy đủ này với a68g save.a68, sử dụng algol68g.

ALGOL không có cách tích hợp để ngủ nhưng về cơ bản chúng ta có thể chạy /bin/sleep:

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

Câu trả lời cũ:

ALGOL không có nội dung tích hợp cho giấc ngủ, vì vậy chúng ta có thể lạm dụng một pingthứ chắc chắn trên Unix thời đó (ý tưởng từ đây ) cho 74 69 byte .

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

1
Thật khéo léo! Bạn có thể nói chương trình là "ngủ-ping". : P
DJMcMayhem

@DrGreenEggsandIronMan Hà!
con mèo

@DrGreenEggsandIronMan Đâu là dòng dành cho nơi nào systemổn và không ổn? Bạn vẫn ổn system("ping ...")nhưng thử thách nói rằng tôi không thể sử dụng systemtừ C cho các lệnh bash. ALGOL đang làm việc in ấn, nhưng tôi không có một cách khác hơn ping(8)hoặc sleep(1)ngủ.
con mèo

Chà, khi tôi viết thử thách, tôi đã googled và thấy rằng bash xuất hiện vào năm 89, vì vậy tôi nghĩ rằng "Sử dụng bash là gian lận!". Tôi cho rằng vấn đề lớn hơn là liệu system("sleep")có hoạt động trên HĐH hay không . Tôi sẽ chỉnh sửa bài viết.
DJMcMayhem

1
Tôi không nghĩ đã có ping cho NCP. Internet đã không chuyển sang TCP / IP cho đến đầu thập niên 80 và lần đầu tiên đề cập đến Yêu cầu Echo của ICMP xuất hiện trong RFC777, ngày 4 tháng 4 năm 1981.
ninjalj
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.