Einleitung : Tiefes Denken berechnet Die Antwort auf das Leben des Universums und alles in einem Zeitraum von 7,5 Millionen Jahren war die Lösung 42
.
Schreiben Sie ein Programm in einer beliebigen Programmiersprache 75
, dessen Berechnung ca. Sekunden in Anspruch nimmt , und geben Sie die Zahl aus 42
.
NB Die Zahl 42
muss auf irgendeine Weise berechnet werden (Zufallszahlen, was auch immer Sie bevorzugen) und nicht nur in Ihrem Skript fest codiert sein.
Wie vorgeschlagen, können Sie keine sleep
oder gleichwertige Funktionen verwenden. Seien Sie erfinderisch.
popularity-contest
Fez Vrasta
quelle
quelle
sleep(75);print("%d\n",41+1);
sleep
verfügbaren Antworten werden die Antworten sehr hardwareabhängig sein, wie ich mir vorstellen kann. Was 75 Sekunden auf Ihrem Computer benötigt, benötigt wahrscheinlich 750 Sekunden auf meinem Computer: PAntworten:
Dies dauert ungefähr 75s auf einem Himbeer-Pi, der auf 1 GHz übertaktet ist
Es funktioniert, weil:
http://www.mathpages.com/home/kmath255.htm
quelle
Python 2.7
Um die Frage zu beantworten, muss man wissen , die Frage - und die Frage ist:
So Deep Thought stützt sich auf die handliche Verwendung von Basis 13 :
Wir importieren unsere Konstanten:
Wir definieren auch unsere Erden-Dinge als eine Tüte Scrabble-Kacheln , Arthur (ein vorhersehbarer, wenn auch etwas seltsamer Computer), Trillian (unsere rationale Heldin),
Wir stellen Zaphod vor - eine zufällige Sorte, der irgendwann der Dampf ausgeht, als wir uns dem nähern
endOfTheUniverse
.Und Marvin the Paranoid Android , dessen positive Einstellung jede Party aufhalten könnte:
Und wir weiterhin diese 4 Zeichen durch den Mix laufen , bis sie berechnen sie :
Das komplette
deepthought.py
:Dies sollte irgendwo um die 75 Sekunden-Marke enden und definitiv um 80 Sekunden enden. Manchmal früher zu Zaphods Infinite Improbability Drive .
quelle
File "main.py", line 13, in zaphod = not(randint(i,(80-(datetime.now() - start).seconds)**3)) NameError: name 'i' is not defined
:(DOS Batch - die Antwort auf das Leben, das Universum und alles
Vielen Dank an mynameiscoffey für seine Vereinfachung!
Speichern als
answer.bat
:Dann starte es und warte 75 Sekunden:
quelle
@ ping 127.0.0.1 -n 76 >nul && @ echo %~z0
, indem Sie "&" verwenden, anstatt sich auf ein CRLF-Paar zu verlassenBash (OS X)
Dies könnte wahrscheinlich problemlos auf andere Systeme portiert werden. Ersetzen Sie sie
say
durch das, was Sie als Text-zu-Sprache-Befehlszeilenprogramm verwenden. Die-f
Option nimmt Eingaben von einer benannten Datei entgegen.Mit etwas Glück könnte es sogar die richtige Zahl ausgeben :-)
Auf meinem System (OS X 10.5) dauert die Ausführung fast genau 1 Minute und 15 Sekunden.
quelle
MATLAB
Dies ist eine schwierige Frage. Da wir die Frage nicht wirklich kennen, ist die einzig praktikable Methode, die Antwort zu erhalten, eine globale Optimierungsmethode. In diesem Fall habe ich mich für die simulierte Glühmethode entschieden , da diese mir zuvor gute Antworten auf schwierige Fragen gegeben hat.
All dieser Code sucht nach dem optimalen Wert einer Funktion, deren Eingabe das Leben selbst ist. Und das Erstaunliche ist, dass es funktioniert. Habe ich gerade Deep Thought validiert?
Ausgabe:
quelle
C - 1089 Bytes
Komprimiert:
quelle
Rubin
Ausgabe auf meinem Computer:
Dies missbraucht das RNG. ;)
quelle
Took 25 seconds; seed was 3771996
auf meinem Laptop mit durchschnittlicher Leistung. Also, ähm ... ich habe gelogen. : PC
quelle
clock()
scheint einen gewissen Wert übersteigt die zu verletzenno sleep()
Regel, da diese im Grunde eine CPU-intensive Schlaf istJavaScript - Finden der "Antwort auf das Leben und alles" durch Lösen einer Gleichung
Werfen wir einen Blick auf diese Gleichung:
Es gibt viele Lösungen, aber wenn Sie wollen ,
r
so groß wie möglich sein , undp
,q
undr
Naturals zu sein gibt es nur zwei Lösungen:1/3 + 1/7 + 1/42 = 1/2
und1/7 + 1/3 + 1/42 = 1/2
mit
p <= q <= r
gibt es nur eine lösung undr
immer gleich42
Was ist der effizienteste Weg, eine Gleichung zu lösen?
Indem Sie alle möglichen Werte ausprobieren!
Hier ist der Code:
Wie lange wird es dauern ? Um ehrlich zu sein, ich weiß es nicht, weil ich es nicht bis zum Ende durchspielen konnte.
Sie können es jedoch mit kleinen
n
Werten versuchen (es muss größer oder gleich sein42
), und Sie erhalten das richtige Ergebnis. Für kleine Werte wien = 2000
dauert es auf meinem Laptop fast eine Minute. Ich schätze also, dass es mit den im Beispiel angegebenen großen Werten Tage, Wochen oder sogar Jahre dauern wird !!!Finden der Lösung in ungefähr 75 Sekunden:
Eine Anforderung aus der ersten Frage ist, dass die Ausführung ca. 75 Sekunden dauern sollte. Eine Möglichkeit, dies zu erreichen, besteht darin, die Komplexität des Algorithmus über die Zeit automatisch anzupassen:
So funktioniert es (für Neugierige): Es überprüft, wie viele Iterationen in einer Sekunde durchgeführt wurden, multipliziert diese dann mit 74 und passt sie
n
an diesen Wert an. Beispiel: Wenn eine Sekunde für 500 Iterationen benötigt wird, dauert die Ausführung von 5000 Iterationen 10 Sekunden. Beachten Sie, dass es mit 74 und nicht mit 75 multipliziert wird, da wir bereits eine Sekunde für das "Benchmarking" aufgewendet haben.Quelle und Credits für Mathe
quelle
C # - 151 Zeichen
quelle
C ++
Berechnet die Partitionen von 10 mit einer ziemlich ineffizienten Methode. Es hat 130s gedauert, um in einem Release-Build auf meinem System ausgeführt zu werden, aber jemand mit einem ausreichend schnellen PC sollte in der Lage sein, es in ~ 75s auszuführen ...
quelle
Javascript
Es wird eine Weile dauern, bis etwas alarmiert wird ... aber es lohnt sich, da es Ihnen die Antwort auf das Leben des Universums und alles zeigt!
Demo
quelle
Python
Manchmal ist eine Antwort erst ganz am Ende einer Berechnung klar, aber Aspekte davon sind vor der Beendigung sichtbar.
Und wenig bekannt ist die Reihenfolge der Eingaben, mit denen Deep Thought geimpft wurde:
271, 329, 322, 488, 79, 15, 60, 1, 9
Daher:
Et voila - die Antwort wird nach 75 Sekunden bereitgestellt.
quelle
Versammlung (verbunden durch gcc)
Auf einem ausreichend langsamen Computer (CPU-Geschwindigkeit ~ 2 Hz) sollte dies ungefähr 75 Sekunden dauern:
quelle
Bash- und Linux-Utils:
Deep Thought hört während der gesamten Berechnung aufmerksam zu.
quelle
Java (227 Zeichen)
Wer sagt, dass bitweise Manipulationen keinen Spaß machen? Oder dass Java nicht verwirrend sein kann?
Wir schleifen 75 Sekunden und geben dann die Antwort.
Ungolfed
quelle
PureBasic
Entsprechend der Tatsache, dass unterschiedliche Hardware unterschiedliche Ergebnisse liefert, gibt es keine feste Antwort darauf. Ich verwende eine Funktion für die abgelaufene Zeit, damit ich weiß, wann ich die Berechnung beenden muss.
Grundsätzlich werden die zwei größten Primzahlen berechnet, wenn 42 subtrahiert werden
Je schneller Ihre Maschine ist, desto größer werden die Primzahlen :-)
quelle
MeatSpace
Gehen Sie eine Strecke zurück, die ungefähr 70/4 Sekunden dauert
servant^H^H^H^Hcomputer
(es kann sich um einen Menschen, einen Hund oder irgendetwas handeln, das Zahlenkacheln aufnehmen kann). Platzieren Sie dort eine große Zahl4
und eine große Zahl2
. Platzieren Sie Ihrecomputer
zum Ausgabepunkt. Starten Sie den Timer, lassen Sie ihn zum Nummerndepot laufen und bringen Sie jeweils eine Nummer zurück.Ich gab 5 Sekunden Zeit, um sie aufzunehmen und abzulegen.
quelle
Ein weiteres C # -Beispiel
quelle
Rubin
Unter Verwendung der Ruby-Zeitdifferenz habe ich die Ausführungszeit überprüft
75.014267762
quelle
PHP
Das ist so nah, wie ich heute Nacht komme. Bei tecbrat.com , einem alten IBM NetVista P4 mit Ubuntu 10.04, wurden bei meinen letzten zwei Läufen 69 Sekunden und 78 Sekunden angezeigt.
quelle
JavaScript (bitweise Verschleierung) (nicht schlecht für 136 Bytes!)
Es mag als etwas betrügerisch angesehen werden, aber die Funktionen wurden akribisch durchdacht, wobei zu berücksichtigen ist, dass der 75000ms-Wert vor den Funktionen berechnet wird, die zur Berechnung von 42 verwendet werden. )
setTimeout("alert($=((_=_=>(_<<-~-~[])|-~[])(_(-~[])))<<-~[])",($=$=>$<<-~-~-~[]|-~[])((_=_=>_<<-~[]|-~[])(_(_(_($($($(-~[]))))))))^-~[])
quelle
Unexpected token >
Ich bin nicht so gut mit solchen Sachen. Ich bin ein App-Entwickler, aber ich habe noch nie in C trainiert und mache hauptsächlich Apps, die Dinge von Servern holen und die Informationen hübsch aussehen lassen ...
Ich habe keine Ahnung, ob dies funktionieren wird, und es ist ein bisschen zusätzlicher Code enthalten, da er in einer iPhone-App enthalten ist und ich einen Fortschrittsbalken und eine Warnmeldung anzeige, wenn 42 erreicht wurde:
quelle