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
system
oder 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.
quelle
Antworten:
APL ,
28242524 BytesDies 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:
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 ):
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.
quelle
+\⎕A⍳'EEHBHT'
(if⎕IO=0
)⎕A
.+\4 4 7 1 7 19
dann?MUMPS - 30 Zeichen, um 1966 (ANSI-Standard erstmals 1977)
Mein erster Versuch, Code Golf zu spielen, los geht's!
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.
quelle
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
^H
Befehl die Uhrzeit an. Überprüfen Sie unbedingt Ihr Betriebssystem und die Stromversorgung, da die Zeiteinheit je nach Gerät variieren kann:Das folgende Programm funktioniert auf Systemen, bei denen die Uhrzeit in Sekunden / 2 gemessen wird:
Beachten Sie, dass
^H
und$
durch Drücken von CONTROL-H bzw. ESCAPE eingegeben werden sollten.Die Nummern im Programm können für folgende Maschinen angepasst werden:
quelle
Borowski-Shell,
4745 Bytesquelle
sleep
die tatsächlich verfügbar waren - haben Sie das gefunden? en.wikipedia.org/wiki/…sleep
alswhile
Bedingung verwenden. Speichert 2 BytesC
5452 Bytesquelle
main(){for(;;sleep(6360))puts("4 8 15 16 23 42");}
FORTRAN 66 (
10898 Bytes)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.
quelle
60*107
mit80**2
, auch.MacLisp,
4746 BytesAlle Konstruktionen aus dem Referenzhandbuch von 1974 (PDF) . Nicht getestet, da ich keinen MacLisp-Interpreter habe.
quelle
nil
kann geschrieben werden()
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
FOR
Schleife eine Minute dauert. Damals wusste jeder, dass Busy Loops falsch sind, aber jeder hat sie benutzt!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
WAIT
Funktion, 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.):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
PDP-11 Assembler für Unix System 6 -
736874 ZeichenApropos 70er Jahre: Unix und die Hardware, auf der alles begann, müssen unbedingt gewürdigt werden!
Sie können es hier problemlos ausführen (aber zuerst müssen Sie die Freude am
ed
Einfügen des Texts neu entdecken - in meinem speziellen Fall musste ich sogar herausfinden, wie man Text darin tatsächlich bearbeitet:)
).Zusammengesetzt werden 108 Bytes.
quelle
msg
ist verschwenderisch, ich kann mitgehenm
(andere 4 Bytes rasieren).br
anstelle von verwendenjmp
, 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.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ügtmov
.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.
Mit der Tail-Call-Optimierung können wir ein bisschen mehr anfangen, obwohl dies zu diesem Zeitpunkt wahrscheinlich nicht möglich war.
quelle
CBM BASIC 1.0,
5238 Zeichen, tokenisiert auf4531 BytesCBM 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
: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.
quelle
Pascal -
10795 BytesUngolfed-Version:
quelle
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.
quelle
Smalltalk, 95 (oder 68, wenn Lücke erlaubt ist)
Gibt es schon seit 1972
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
Der Code druckt die Sequenz ohne Intervall, so dass garantiert wird, dass sie auch nach 108 Minuten gedruckt wird.
quelle
Wait some time between 104 and 108 minutes
, also denke ich nicht, dass die Lücke möglich ist.SAS,
827569Keine 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).quelle
Thompson Shell, 1971 (1973 für Schlafbefehl)
43 Bytes
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
if
Befehl verwenden, um den Sprung zu überspringen.)quelle
exec $0
für eine kleine Ersparnis vorbei gewesengoto
?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.
quelle
COBOL, 240 Bytes
Ja, das führende Leerzeichen ist signifikant. Kompilieren und ausführen wie
cobc -x save.cob; ./save
. (Die-x
Option erzeugt eine ausführbare Datei im Gegensatz zu einer gemeinsam genutzten Bibliothek, und daher glaube ich nicht, dass sie gezählt werden muss.)Wenn wir langweilig sein wollen, können wir die
--free
Kompilierungsoption für Freiformat-Code hinzufügen , 158 + 6 = 164 Bytes, aber dies würde wahrscheinlich nicht mehr in '77 funktionieren.quelle
ALGOL 60/68 / W,
744750 BytesFühren Sie dieses vollständige Programm mit
a68g save.a68
, mitalgol68g
.ALGOL hat keine eingebaute Art zu schlafen, aber wir können im Wesentlichen laufen
/bin/sleep
:Alte Antwort:
quelle
system
ist in Ordnung und nicht in Ordnung? Sie sind in Ordnung,system("ping ...")
aber die Herausforderung besagt, dass ichsystem
C nicht für z. B. Bash-Befehle verwenden kann. ALGOL druckt, aber ich kann nicht anders alsping(8)
odersleep(1)
schlafen.system("sleep")
ab diesem Zeitpunkt auf einem Betriebssystem funktioniert oder nicht . Ich werde den Beitrag bearbeiten.