Automatisieren Sie die Rettung der Welt

63

Sie sind Desmond Hume. In den letzten drei Jahren waren Sie und Ihr Partner Kelvin Sklave eines Computers, für den alle 108 Minuten eine bestimmte Sequenz eingegeben werden muss, um die Welt zu retten.

4 8 15 16 23 42

Ihr Partner ist vor 40 Tagen gestorben (aufgrund eines unglücklichen Unfalls mit Kelvins Kopf und einem großen Stein), und Sie haben niemanden, mit dem Sie sprechen können. Niemand, der die Nummern für Sie eingibt. Niemand, der die Monotonie bricht. Anfangs war es nicht so schlimm, aber man kann mit der Stille nicht mehr umgehen. Und wenn Sie noch einmal "Make Your Own Kind Of Music" hören müssen, werden Sie schreien.

Sie entscheiden, dass Sie raus müssen. Fliehen. Sie beschließen, ein Floß zu bauen und die Insel zu verlassen. Aber dann merkt man die schlechte Nachricht: Sie stecken hier fest. Sie müssen die Welt weiterhin retten.

Aber dann merkt man die gute Nachricht: Sie sind Programmierer! Sie können die Rettung der Welt automatisieren! Aufgeregt rennen Sie zum Computer und erstellen mit Ihren vertrauenswürdigen Python-Fähigkeiten ein schnelles Skript, um die Zahlen für Sie einzugeben.

import time

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

Schnell, einfach, zuverlässig, kurz und einfach. Alles, was ein gutes Python-Skript sein sollte. Aber dann, wenn Sie versuchen, es zu testen, erhalten Sie eine Fehlermeldung.

Bad command or file name.

Seltsam. Na ja, probieren wir mal c ++.

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

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

Nein! C ++ wird auch nicht gefunden. Sie probieren jede Sprache aus, die Ihnen einfällt. Javascript, Ruby, Perl, PHP, C #. Nichts. Dieser Computer wurde vor allen gängigen Sprachen des Tages hergestellt.

Die Herausforderung

Sie müssen ein Programm schreiben, das:

1) genau dies drucken: "4 8 15 16 23 42" (ohne Anführungszeichen)

2) Warten Sie zwischen 104 und 108 Minuten. (Laut The Lost Wiki )

3) Für immer wiederholen. (Oder bis Sie feststellen, dass dies alles ein aufwändiger Betrug ist und dass Sie aufgrund faulen Schreibens in einer seltsamen Schwebe stecken und Fragen stellen, für die Sie keine Antworten haben. Danke JJ Abrams!)

Es gibt jedoch einen Haken: Sie MÜSSEN eine Sprache verwenden, die der Computer in der Schwanstation tatsächlich ausführen kann. Vorausgesetzt, dass

A) Der Computer war zum Zeitpunkt der Erstellung auf dem neuesten Stand.

B) Die Computersoftware wurde nicht aktualisiert

C) Es ist keine Internetverbindung verfügbar (dh Sie können Golfscript nicht herunterladen ...),

und wir raten nach bestem Wissen, wann die Swan Station gebaut wurde (Again, The Lost Wiki ).

Dies bedeutet, dass Sie eine Sprache verwenden müssen, die zum ersten Mal am oder vor dem 31. Dezember 1977 veröffentlicht wurde.


Einige Regelklärungen:

  • Das Einschließen von Bibliotheken ist in Ordnung, es gilt jedoch die gleiche Regel (Bibliotheken müssen vor 1977 erstellt worden sein).

  • Sie müssen sich keine Sorgen um die Betriebssystemkompatibilität machen.

  • Wenn Sie systemoder eine entsprechende Sprachversion verwenden, müssen Sie nachweisen, dass alle von Ihnen verwendeten Systembefehle vor 1978 verfügbar waren. Ein Wikipedia-Artikel ist wahrscheinlich der beste Weg, dies zu beweisen.

  • Es spielt keine Rolle, wann Sie das Programm starten, solange es abwechselnd gedruckt und in den Ruhezustand versetzt wird. (Print-Sleep-Print-Sleep ... und Sleep-Print-Sleep-Print ... sind beide akzeptabel.)

Das ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes.

DJMcMayhem
quelle
Ist am Ende jeder Ausgabe ein Zeilenumbruch erforderlich?
Mego
3
@Mego Ja, sonst würden die Nummern eigentlich nicht eingegeben .
DJMcMayhem

Antworten:

11

APL , 28 24 25 24 Bytes

Dies funktionierte 1977 in APL * PLUS von STSC und in SharpAPL von IPSA, und obwohl moderne APLs eine Menge neuer Funktionen haben, funktioniert dies auch heute noch auf allen wichtigen APLs:

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

Die erste Zeile gibt die kumulative Summe der angezeigten Zahlen aus, die die erforderlichen Zahlen sind. Die zweite Zeile d e l ays 6360 Sekunden (106 Minuten), nimmt dann das signum davon (1, natürlich), und geht zu dieser Linie (dh des vorherigen, zahlenDruck eins).

APL \ 360 (die APL für IBM System / 360 ) von 1966 übertrifft sie jedoch tatsächlich um ein Byte (getestet mit dem kostenlosen IBM / 370-Emulator ):

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

Der Schlaf - T-Träger ( " IBM " - es bekommt) hat die Wartezeit in jiffies von 1 / 300 th einer Sekunde, so dass wir warten 19 × 10 5 jiffies = 105 Minuten und 33 1 / 3 Sekunde.

Adam
quelle
Ich gebe ab sofort alle meine Zeitangaben in Kilo- und Megajiffies.
Pavel
+\⎕A⍳'EEHBHT'(if ⎕IO=0)
ngn
@ngn APL * PLUS hat nicht ⎕A.
Adám
@Adam +\4 4 7 1 7 19dann?
ngn
@ Adám ping ^
ngn
26

MUMPS - 30 Zeichen, um 1966 (ANSI-Standard erstmals 1977)

Mein erster Versuch, Code Golf zu spielen, los geht's!

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

MUMPS ist immer noch eine beliebte Sprache für EHR-Software, die vom Massachusetts General Hospital in Boston entwickelt wurde. Die bekannteste Implementierung ist Epic Systems in Verona, WI.

Andrew Robinson
quelle
6
Gut gemacht! MUMPS ist eigentlich ideal für das Code-Golfen, wenn Sie diesen speziellen Kreis der Hölle betreten möchten ...
2
Wenn die Welt auf dem Spiel
stünde,
5
@psr, was ist wichtiger: die Welt retten oder Code Golf spielen ?!
Andrew Robinson
2
@psr Kannst du jemandem den Witz erklären, der noch nie von MUMPS gehört hat? Nicht ich, nur hypothetisch. Für den Fall, dass jemand, der noch nichts von MUMPS gehört hat, darauf stößt. ;)
DJMcMayhem
3
@DJMcMayhem - Die write-Anweisung (das "W") schreibt in das aktuelle Ausgabegerät (welches Gerät aktuell ist, hat einen globalen Wert, unabhängig davon, ob Sie diese Idee mögen oder nicht). Das aktuelle Gerät wird wahrscheinlich eine Standardausgabe sein. Aber U 0 würde es auf Standardausgabe setzen (ähm, normalerweise, aber es wäre für niemanden mehr lustig, darauf einzugehen).
PSR
20

TECO, 53 Bytes

TECO (Text [vormals Tape] Editor and Corrector) ist ein Texteditor aus dem Jahr 1962. Er kann auch zum Ausführen von eigenständigen Programmen verwendet werden. Es ist der modernste Editor für PDPs, VAXen usw.

Laut TECO-Handbuch gibt der ^HBefehl die Uhrzeit an. Überprüfen Sie unbedingt Ihr Betriebssystem und die Stromversorgung, da die Zeiteinheit je nach Gerät variieren kann:

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)

Das folgende Programm funktioniert auf Systemen, bei denen die Uhrzeit in Sekunden / 2 gemessen wird:

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

Beachten Sie, dass ^Hund $durch Drücken von CONTROL-H bzw. ESCAPE eingegeben werden sollten.

Die Nummern im Programm können für folgende Maschinen angepasst werden:

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

Borowski-Shell, 47 45 Bytes

while echo 4 8 15 16 23 42;do sleep 6420;done
Türknauf
quelle
2
Schlagen Sie mich zu. Ich habe versucht, Beweise zu finden, sleepdie tatsächlich verfügbar waren - haben Sie das gefunden? en.wikipedia.org/wiki/…
Digitales Trauma
Sie können sleepals whileBedingung verwenden. Speichert 2 Bytes
ThinkChaos
@plg Das würde vor der Ausgabe der Zahlenfolge schlafen , was nicht erlaubt zu sein scheint (es muss die Folge sofort nach dem Ausführen des Programms drucken, dann schlafen).
Türklinke
5
Sie starten das Programm also sofort nach der letzten manuellen Eingabe der Zahlen. ;)
Roger
1
Unix Version 6 enthielt den Befehl sleep (siehe man.cat-v.org/unix-6th/1/sleep ).
Matteo Italia
17

C 54 52 Bytes

main(){while(1)puts("4 8 15 16 23 42"),sleep(6360);}
Jeff Stevens
quelle
38
main(){for(;;sleep(6360))puts("4 8 15 16 23 42");}
Digital Trauma
13

FORTRAN 66 ( 108 98 Bytes)

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

Es ist sicher, dass der fragliche Computer über den FORTRAN-Compiler verfügte, da er in der damaligen Zeit die wissenschaftlichen und technischen Bereiche beherrschte. Ich wurde 18 Jahre nach dem gleichnamigen Jahr geboren, aber während meines Mathematikprogramms an der Universität haben wir FORTRAN gelernt. Ein lustiger Vortrag, bei dem wir gelernt haben, wie man auf Lochkarten programmiert. Es ist hier nicht so einfach, es richtig zu formatieren, es sollten 6 Leerzeichen vor jedem Befehl sein und ich konnte nur einen Verweis auf die Sleep-Funktion für Fortran 77 finden, aber es sollte bereits in Fortran IV und 66 existieren.

PS: Wir könnten ein Byte wegschaben, indem wir Label 1 anstelle von Label 42 verwenden.

PPS: Wenn der betreffende Computer Lochkarten für die Programmeingabe verwendet, hat man Pech und die Bytes spielen keine Rolle mehr: D.

Bersaelor
quelle
@proudhaskeller Nein, die linken 7 Spalten sind reserviert, sodass Sie nur das eine Byte am Ende von Zeile 4
speichern.
1
Genau, ich würde nur ein Byte speichern, deshalb habe ich es nicht geändert;)
Bersaelor
3
Ah, das obligatorische Leerzeichen bringt eine nostalgische Träne in mein Auge: D
Yves Klett
Sie könnten ein Byte durch Ersetzen abrasieren 60*107mit 80**2, auch.
Mark
Ok, aber dann kann man auch einfach 6420 verwenden.
Bersaelor
11

MacLisp, 47 46 Bytes

(do()(())(print"4 8 15 16 23 42")(sleep 6360))

Alle Konstruktionen aus dem Referenzhandbuch von 1974 (PDF) . Nicht getestet, da ich keinen MacLisp-Interpreter habe.

Uri Granta
quelle
1
Speichern Sie ein Byte, nilkann geschrieben werden()
Coredump
10

Altair Basic

Natürlich hätten Desmond und Kelvin nur zum Spaß einen Altair 8800 (oder einen Emulator) gehabt. Altair Basic (von einem Typen namens Bill Gates, einem kleinen Zwei-Mann-Start-up namens Micro-Soft) kommt 1975 heraus.

Desmond müsste noch ein bisschen nacharbeiten, um sicherzustellen, dass die innere FORSchleife eine Minute dauert. Damals wusste jeder, dass Busy Loops falsch sind, aber jeder hat sie benutzt!

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

Als Alternative könnte Desmond die 88-RTC-Karte (aus Komponenten zusammengesetzt !: http://www.classiccmp.org/altair32/pdf/88-virtc.pdf ) installieren und über Interrupts auf eine ablaufende Echtzeituhr zugreifen die Stromleitung oder der interne Kristall.

Er müsste eine Interruptroutine schreiben, um die Takteingabe zu verarbeiten, die wiederum einen Port aktualisieren könnte, z. B. alle 59 Sekunden für eine Sekunde auf Masse bringen und dann hoch anheben.

Altair Basic hatte eine WAITFunktion, so dass der Code in etwa wie folgt vereinfacht wurde (ich konnte keine Port-Auflistung finden, daher habe ich nur 125 ausgewählt, in der Hoffnung, dass er nicht verwendet wird.):

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

Dies war eigentlich eine lustige kleine Frage, die sich auf einige wirklich rudimentäre Computer konzentrierte. Die Geduld, die diese Oldtimer (einschließlich ich) gehabt haben müssen!


quelle
2
Ah, Busy Loops ... +1
Geobits
4
Hmm, Desmond, Altair ... Gibt es zufällig eine Sprache namens "Ezio"?
Kroltan
10

PDP-11 Assembler für Unix System 6 - 73 68 74 Zeichen

Apropos 70er Jahre: Unix und die Hardware, auf der alles begann, müssen unbedingt gewürdigt werden!

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

Sie können es hier problemlos ausführen (aber zuerst müssen Sie die Freude am edEinfügen des Texts neu entdecken - in meinem speziellen Fall musste ich sogar herausfinden, wie man Text darin tatsächlich bearbeitet:) ).

Zusammengesetzt werden 108 Bytes.

# 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;
Matteo Italia
quelle
1
\ N für 2 Zeichen weniger entfernen, er hat nicht gesagt, dass es in separaten Zeilen sein muss. :)
Andrew Robinson
@AndrewRobinson: Es scheint ein bisschen unfair zu sein, alle folgenden Ausgaben enthalten die 4 zusammen mit 42 ... Ich könnte stattdessen die \ n (zwei Zeichen) mit einem Semikolon ändern. Auch msgist verschwenderisch, ich kann mitgehen m(andere 4 Bytes rasieren).
Matteo Italia
1
Sie würden einen Buchstaben und ein Anweisungswort speichern, indem Sie branstelle von verwenden jmp, nicht wahr? Außerdem erfordert das Schreiben den Dateideskriptor in r0 - Sie haben anscheinend 1 (oder 2) für Ihre erste Schleife, aber Sie zerschlagen es mit Ihrer Schlafzeit.
Random832
@ Random832: wops, es hat wahrscheinlich funktioniert, als ich es getestet habe, weil ich 1 oder 2 als Schlafzeit verwendet habe, um schnell zu versuchen, ob es funktioniert hat. Richtig br, dank diesem und einigen anderen Tricks (hauptsächlich Leerzeichen einschränken und wenn möglich Oktal verwenden) haben wir 74 Zeichen und sogar den ersten hinzugefügt mov.
Matteo Italia
8

LOGO, 61 Bytes (möglicherweise) oder 48 Bytes (möglicherweise nicht)

Leider habe ich es nicht geschafft, eine Online-Kopie von The LOGO System: Preliminary Manual (1967) von BBN oder Referenzen der MIT Logo Group (1960er +) zu finden. Das Apple Logo von LCSI ist etwas zu neu (~ 1980). Auf der Grundlage von Online-Büchern funktionierten zu dieser Zeit jedoch wahrscheinlich einige Variationen der folgenden. Beachten Sie, dass WAIT 60 nicht 60, sondern 1 Sekunde wartet.

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

Mit der Tail-Call-Optimierung können wir ein bisschen mehr anfangen, obwohl dies zu diesem Zeitpunkt wahrscheinlich nicht möglich war.

TO a
PRINT [4 8 15 16 23 42]
WAIT 381600
a
END
a
Uri Granta
quelle
3
TCO war zu diesem Zeitpunkt absolut verfügbar. (Ja, ich weiß aus Erfahrung.) TCO war die Norm für Lisp (und dann für Scheme); es ist erst vor kurzem, dass es als exotisch angesehen wird.
rici
7

CBM BASIC 1.0, 52 38 Zeichen, tokenisiert auf 45 31 Bytes

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

CBM BASIC 1.0 wurde im Oktober 1977 mit dem Commodore PET eingeführt. Befehle wurden normalerweise in Großbuchstaben und CBM-Grafikzeichen angezeigt, aber ich habe sie hier der Einfachheit halber in Kleinbuchstaben + Großbuchstaben aufgelistet (meine und Ihre) :-) ). Beachten Sie auch, dass das ^ tatsächlich als ↑ angezeigt wird. Wird dies festgestellt, führt dies nach Auflistung zu LIST:

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

Der 6502 des PET lief mit 1 MHz, daher sollte dies ungefähr 105 Minuten dauern.

Edit : Es wurde erkannt, dass verschachtelte Schleifen nicht wirklich notwendig waren und ich meine Token falsch berechnet hatte. Immer noch nicht genug, um zu gewinnen (und zu spät, um zu booten), aber zumindest ist es besser.

Kennzeichen
quelle
7

Pascal - 107 95 Bytes

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

Ungolfed-Version:

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.
Rodolfo Dias
quelle
4

Viertens 50 Bytes

Obwohl FORTH-79 die früheste standardisierte Version ist, befand sich die Sprache ab 1968 in der Entwicklung und war auf dem IBM 1130 verwendbar. Sie wurde auch auf anderen Systemen verwendet, bevor es 1977 dazu kam. Ich werde vielleicht ein bisschen mehr recherchieren, um sicherzustellen, dass alle Wörter verfügbar sind, aber ich bin mir ziemlich sicher, dass dies grundlegend genug ist, um bis dahin existiert zu haben. Diese waren natürlich alle bei FORTH-79 erhältlich.

Schleifen für immer und warten 6420000 Millisekunden zwischen dem Drucken von Zeichenfolgen. Es wird kein Zeilenumbruch gedruckt.

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

Smalltalk, 95 (oder 68, wenn Lücke erlaubt ist)

Gibt es schon seit 1972

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

Keine Erfahrung mit diesem, habe es auf Wikipedia gesehen: P
Online nachgeschlagen, wie man eine Schleife erstellt und verzögert. Die Syntax sollte korrekt sein, konnte aber keinen Weg finden, sie auszuführen.

Mögliche Lücke

Die Sequenz sollte alle 108 Minuten gedruckt werden, es wird jedoch nicht angegeben, dass es 108 Minuten sein müssen.
Dies könnte den Code verkürzen

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

Der Code druckt die Sequenz ohne Intervall, so dass garantiert wird, dass sie auch nach 108 Minuten gedruckt wird.

Teun Pronk
quelle
9
Aber das Problem sagt es aus Wait some time between 104 and 108 minutes, also denke ich nicht, dass die Lücke möglich ist.
Matsjoyce
@matsjoyce Deshalb habe ich einen mit Timer und einen ohne gepostet :)
Teun Pronk
3
Während Ihre Lücke für die Herausforderung nicht funktioniert, frage ich mich, ob Desmond in der Lage wäre, damit durchzukommen. Ich bin mir ziemlich sicher, dass der Computer nichts tut, es sei denn, er befindet sich zwischen 104 und 108 Minuten und ignoriert einfach die zusätzlichen "4 8 15 16 23 42", die eingegeben werden. Ich bin mir jedoch sicher, dass Walt von all den Zahlen, die ihm jemand schickt, sehr verwirrt wäre. = 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;

Keine typische Golfsprache, aber ich denke, dass sie für diese Herausforderung geeignet ist, vorausgesetzt, dass file stdout in der SAS-Ära 1977 gültig war.

Verbesserungen:

  • data _null_; -> data; Speichert 7 Zeichen (und erzeugt jetzt einen leeren Datensatz und druckt nach stdout).
  • Do-While-Schleife durch goto ersetzt - speichert 6 Zeichen
user3490
quelle
3

Thompson Shell, 1971 (1973 für Schlafbefehl)

43 Bytes

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

Da die Bourne-Shell, obwohl sie 1977 existierte, erst 1979 in einer veröffentlichten Version von Unix v7 verfügbar war, verfügte die ursprüngliche Unix-Shell über keine ausgefallenen Schleifensteuerungsbefehle. (Wenn Sie eine Schleife beenden möchten, können Sie den ifBefehl verwenden, um den Sprung zu überspringen.)

Random832
quelle
Wäre es exec $0für eine kleine Ersparnis vorbei gewesen goto?
Neil
2

C 50 Bytes

Kürzer als die andere C-Lösung und daher kein Duplikat. Ich schrieb dies tatsächlich, bevor ich Digital Traumas (fast) identischen Kommentar zur anderen C-Lösung bemerkte.

main(){for(;;sleep(6240))puts("4 8 15 16 23 42");}
Katze
quelle
Ich würde argumentieren, dass dies eine triviale Modifikation / Verbesserung der anderen Lösung ist und somit ein Betrug ist. Es ist unerheblich, ob Sie den Kommentar vor dem Schreiben gesehen haben oder nicht.
Mego
1

COBOL, 240 Bytes

Ja, das führende Leerzeichen ist signifikant. Kompilieren und ausführen wie cobc -x save.cob; ./save. (Die -xOption erzeugt eine ausführbare Datei im Gegensatz zu einer gemeinsam genutzten Bibliothek, und daher glaube ich nicht, dass sie gezählt werden muss.)

       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.

Wenn wir langweilig sein wollen, können wir die --freeKompilierungsoption für Freiformat-Code hinzufügen , 158 + 6 = 164 Bytes, aber dies würde wahrscheinlich nicht mehr in '77 funktionieren.

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.
Katze
quelle
1

ALGOL 60/68 / W, 74 47 50 Bytes

Führen Sie dieses vollständige Programm mit a68g save.a68, mit algol68g.

ALGOL hat keine eingebaute Art zu schlafen, aber wir können im Wesentlichen laufen /bin/sleep:

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

Alte Antwort:

ALGOL hat keinen eingebauten Schlaf, also können wir das, pingwas sich auf einem Unix der Zeit (Idee von hier ) befindet, für 74 bis 69 Bytes missbrauchen .

DO print("4 8 15 16 23 42");system("ping 1.0 -c1 -w6240>/dev/null")OD
Katze
quelle
1
Das ist schlau! Man könnte sagen, das Programm ist "Schlaf-Ping". : P
DJMcMayhem
@ DrGreenEggsandIronMan Ha!
Katze
@DrGreenEggsandIronMan Wo ist die Zeile für wo systemist in Ordnung und nicht in Ordnung? Sie sind in Ordnung, system("ping ...")aber die Herausforderung besagt, dass ich systemC nicht für z. B. Bash-Befehle verwenden kann. ALGOL druckt, aber ich kann nicht anders als ping(8)oder sleep(1)schlafen.
Katze
Nun, als ich die Herausforderung schrieb, googelte ich und sah, dass die Bash im Jahr 89 herauskam, also dachte ich "Bash zu benutzen ist Betrug!". Ich nehme an, das größere Problem ist, ob es system("sleep")ab diesem Zeitpunkt auf einem Betriebssystem funktioniert oder nicht . Ich werde den Beitrag bearbeiten.
DJMcMayhem
1
Ich glaube nicht, dass es Ping für NCP gab. Internet hat den Übergang nicht auf TCP / IP bis in die frühen 80er Jahre, und die erste Erwähnung von ICMP - Echo - Request erscheint in RFC777 zu sein, vom April 1981
ninjalj