Die Antwort auf das Leben, das Universum und alles [geschlossen]


43

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 42muss 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 sleepoder gleichwertige Funktionen verwenden. Seien Sie erfinderisch.


6
Dies könnte besser als Beliebtheitswettbewerb dienen, um herauszufinden, wie die Leute kreativ eine Antwort finden können, anstatt Variationen vonsleep(75);print("%d\n",41+1);
Josh

30
Die Berechnung dauert ca. 75 Sekunden? Aber Computerchips sind so unterschiedlich ... Wie kann das möglich sein - es könnte 75 Sekunden auf meinem Computer dauern, aber der nächste Computer könnte es in 7,5 Sekunden
monstern

7
Ohne die sleepverfü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: P
Josh

3
timeapi.org/utc/now . Dies scheint die beste Alternative zu schlafähnlichen Bibliotheken in Ihrer Sprache zu sein. Dies erfordert lediglich ein paar http-Anforderungen.
Cruncher

3
Ich habe aus Versehen meine 10 Minuten dauern lassen! : O
Türknauf

Antworten:


53

Dies dauert ungefähr 75s auf einem Himbeer-Pi, der auf 1 GHz übertaktet ist

#!/usr/bin/env python
from itertools import product, count

for n in count(1):
    i = 0
    for a, b, c, d in product(range(n), repeat=4):
        if a > b > c > d > 0 == (a*b-c*d)%n == (a*c-b*d)%n == (a*d-b*c)%n:
            i += 1
    if i == n:
        break
print i

Es funktioniert, weil:

42 ist der einzige bekannte Wert, der die Anzahl der Sätze von vier verschiedenen positiven ganzen Zahlen a, b, c, d ist, die jeweils kleiner sind als der Wert selbst, so dass ab-cd, ac-bd und ad-bc jeweils ein Vielfaches von sind der Wert. Ob es andere Werte gibt, bleibt offen

http://www.mathpages.com/home/kmath255.htm


12
Sie finden also entweder eine neue Zahl, die diese Gleichung erfüllt, oder Sie drucken 42 :)
Assaf G.

1
@FezVrasta, weil die letzte Zeile fehlte. doh!
Gnibbler

2
Beeindruckend! Perfekter Mathe-Rebus und das Übertakten ... ha ha ha +1!
Tomas

1
Es ist lustig, dass diese Antwort einen Hard-Cap-Score von 42 hat (kein Upvoting)
pwned

1
Ich möchte das wirklich wegen des überladenen Himbeer-Pi unterstützen, aber ich kann es einfach nicht mit der aktuellen Punktzahl versehen. Ich habe ein schlechtes Gefühl , dass wir eine Krawatte haben werden
agweber

43

Python 2.7

Um die Frage zu beantworten, muss man wissen , die Frage - und die Frage ist:

Was bekommst du, wenn du sechs mal neun multiplizierst? Danke an TRiG für die Korrektur

So Deep Thought stützt sich auf die handliche Verwendung von Basis 13 :

6 13 x 9 13 = 42 13

Wir importieren unsere Konstanten:

from random import randrange as scrabbleBag, randint
from datetime import datetime,timedelta
life,universe,everything,nothing=6,9,1,-3
endOfTheUniverse = 80

Wir definieren auch unsere Erden-Dinge als eine Tüte Scrabble-Kacheln , Arthur (ein vorhersehbarer, wenn auch etwas seltsamer Computer), Trillian (unsere rationale Heldin),

tile = lambda i: scrabbleBag(26)
arthur = lambda i: int(`i`,life+universe+everything+nothing)
trillian = lambda i: ''.join(map(str,divmod(i,life+universe+everything+nothing)))

Wir stellen Zaphod vor - eine zufällige Sorte, der irgendwann der Dampf ausgeht, als wir uns dem nähern endOfTheUniverse.

zaphod = lambda : not(randint(0,(endOfTheUniverse-(datetime.now() - start).seconds)**3))

Und Marvin the Paranoid Android , dessen positive Einstellung jede Party aufhalten könnte:

marvin = lambda : endOfTheUniverse<(datetime.now() - start).seconds

Und wir weiterhin diese 4 Zeichen durch den Mix laufen , bis sie berechnen sie :

while answer is not life * universe * everything:
  rack = sum(tile(i) for i in range(7))
  answer = (zaphod or marvin) and arthur(rack)
print trillian(answer)

Das komplette deepthought.py:

from random import randrange as scrabbleBag, randint
from datetime import datetime,timedelta
life,universe,everything,nothing=6,9,1,-3
endOfTheUniverse = 80

tile = lambda i: scrabbleBag(26)
arthur = lambda i: int(`i`,life+universe+everything+nothing)
trillian = lambda i: ''.join(map(str,divmod(i,life+universe+everything+nothing)))

start = datetime.now()

zaphod = lambda: not(randint(0,(endOfTheUniverse-(datetime.now() - start).seconds)**3))
marvin = lambda: endOfTheUniverse<(datetime.now() - start).seconds

answer = None
while answer is not life * universe * everything:
  rack = sum(tile(i) for i in range(7))
  answer = (zaphod() or marvin()) and arthur(rack)
print trillian(answer)

Dies sollte irgendwo um die 75 Sekunden-Marke enden und definitiv um 80 Sekunden enden. Manchmal früher zu Zaphods Infinite Improbability Drive .


1
Die Antwort ist großartig, aber wenn ich es auf 2.7.2 laufen lasse, wirft es einen Fehler File "main.py", line 13, in zaphod = not(randint(i,(80-(datetime.now() - start).seconds)**3)) NameError: name 'i' is not defined:(
Fez Vrasta

1
@FezVrasta Entschuldigung, ich habe versehentlich einen falschen Code hinzugefügt. Behoben, sollte jetzt funktionieren.

4
Super, es funktioniert :) Jetzt brauchen wir einen größeren Computer, um die Frage zu berechnen!
Fez Vrasta

8
"Es mag mir leid tun, aber ich schreibe in Basis 13 keine Witze." - DNA
MikeTheLiar

3
Dies sitzt jetzt bei 42 Stimmen. Möchte ich mehr Stimmen oder möchte ich die bestmögliche Punktzahl für diese Frage?

13

DOS Batch - die Antwort auf das Leben, das Universum und alles

Vielen Dank an mynameiscoffey für seine Vereinfachung!

Speichern als answer.bat:

@ ping 127.0.0.1 -n 76 >nul && @ echo %~z0

Dann starte es und warte 75 Sekunden:

> answer
42

Sieht so aus, als hätte dein tiefer Gedanke eine andere Idee, er bringt mich zurück 40 : P
Fez Vrasta

Ich habe Notepad ++ verwendet, ich habe ein Windows 8
x 64

Kein Glück, auch mit NotePad, die Version mit dem Ausrufezeichen funktioniert stattdessen
Fez Vrasta

Cool, kannst du erraten, wie es funktioniert?

2
Warum nicht einfach eine Zeile machen, um das unordentliche CRLF-Problem zu vermeiden @ ping 127.0.0.1 -n 76 >nul && @ echo %~z0, indem Sie "&" verwenden, anstatt sich auf ein CRLF-Paar zu verlassen
mynameiscoffey

10

Bash (OS X)

Dies könnte wahrscheinlich problemlos auf andere Systeme portiert werden. Ersetzen Sie sie saydurch das, was Sie als Text-zu-Sprache-Befehlszeilenprogramm verwenden. Die -fOption 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.

#!/bin/bash
grep -E '^life|universe|and.everything|[ultimate]question$' /usr/share/dict/words | sed 's/$/,/' | nl > "$TMPDIR/deepthought"
say -v Alex -f "$TMPDIR/deepthought"
nw=`cat $TMPDIR/deepthought | wc -l`
say -v Alex "The answer, to the ultimate question, is: $nw"
echo $nw
rm "$TMPDIR/deepthought"

10

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?

tic;

the_answer=round(simulannealbnd(@(life)abs(3.7376696-log(life)),140489, ...
           -inf,inf,saoptimset('MaxFunEvals',10^16)))
toc;

Ausgabe:

the_answer =

    42

Elapsed time is 74.892428 seconds.

5

C - 1089 Bytes

#include <time.h>
#include <stdio.h>

int answer(int the)
{
   int to = 0;

   while (the != 0) {
      to *= 10;
      to += the%10;
      the /= 10;
   }
   return to;
}

int optimism(int the)
{
    return abs(the);
}

int getRandomNumber()
{
    return 4; // chosen by fair dice roll.
              // guaranteed to be random.
}

int main()
{
    // initialize
    int life = getRandomNumber(), universe, everything;

    // get inverse answer
    int question = clock();
    while (clock()-question < CLOCKS_PER_SEC*75) {
        life += getRandomNumber();
    }
    life = optimism(life); // optimism is the best way to see life
    life %= 1000;

    // avoids unwanted race conditions with the answer by "Lego Stormtroopr"
    if (life<100 || life>997) {life -= getRandomNumber()*100;}
    if (optimism(life/100%10 - life%10) < 2) {life += getRandomNumber();}
    universe = answer(life);
    everything = optimism(life<universe?life-universe:universe-life);

    printf("%d\n", (answer(everything)+everything+3)/26);

    return 0;
}

Komprimiert:

#include <time.h>

int f(int d) {
   int e = 0;
   while (d != 0) e = e*10+d%10, d /= 10;
   return e;
}

int main() {
    int a = 4, b, c, d = clock();
    while (clock()-d < CLOCKS_PER_SEC*75) a += 4;
    a = abs(a)%1000;
    a -= a<100||a>997?400:0;
    a += abs(a/100%10-a%10)<2?4:0;
    b = f(a);
    c = abs(a<b?a-b:b-a);
    return (f(c)+c+3)/26;
}

4

Rubin

t = Time.new.to_i
n = 0
loop{
  break if Random.new(n).rand(2000000) == Random.new(374076).rand(1000000)
  n += 1
}
puts Random.new(n).rand(2000000)
puts "Took #{Time.new.to_i - t} seconds; seed was #{n}"

Ausgabe auf meinem Computer:

42
Took 123 seconds; seed was 3771996

Dies missbraucht das RNG. ;)


1
Wie stellen Sie sicher, dass es 75 Sekunden dauert?
Pierre Arlaud

1
@Arlaud Durchläuft 3,7 Millionen Iterationen einer Schleife, die 2 Zufallszahlen pro Iteration generiert! Technisch gesehen, wenn Sie einen Supercomputer hätten, könnte dieser schneller sein, aber für jede vernünftige Hardware würde es mindestens 75 Sekunden dauern, und ich möchte nicht langweilig sein und Schlaf- oder Zeitmethoden anwenden.
Türklinke

Update: ... nun, jetzt druckt es Took 25 seconds; seed was 3771996auf meinem Laptop mit durchschnittlicher Leistung. Also, ähm ... ich habe gelogen. : P
Türklinke

4

C

#include <stdio.h>
#include <time.h>

int i, j;

int main() {
    i = clock();
    while(clock() - i < 75 * CLOCKS_PER_SEC);
    for(i = j = 0 ; i < 48 ; i++)
        j += "The answer to Life, the Universe, and everything"[i];
    printf("%i", j % 157);
}

2
while-Schleife , bis clock()scheint einen gewissen Wert übersteigt die zu verletzen no sleep()Regel, da diese im Grunde eine CPU-intensive Schlaf ist
mniip

Beliebtheitswettbewerb.
Pierre Arlaud

@ArlaudPierre Es war Code-Golf , wenn ich die Antwort geschrieben. Wie auch immer, es ist jetzt behoben.
Oberon

4

JavaScript - Finden der "Antwort auf das Leben und alles" durch Lösen einer Gleichung

Werfen wir einen Blick auf diese Gleichung:

1 / p  +  1 / q  +  1 / r  =  1 / 2

Es gibt viele Lösungen, aber wenn Sie wollen , rso groß wie möglich sein , und p, qund rNaturals zu sein gibt es nur zwei Lösungen:

1/3 + 1/7 + 1/42 = 1/2 und 1/7 + 1/3 + 1/42 = 1/2

mit p <= q <= rgibt es nur eine lösung und rimmer gleich42

Was ist der effizienteste Weg, eine Gleichung zu lösen?

Indem Sie alle möglichen Werte ausprobieren!

Hier ist der Code:

var n = Math.pow(2, 32); 
for (var i = 1; i <= n; i++)  
{ 
    for (var j = 1; j <= n;  j++)
    {
        for (var k = 1; k <= n; k++)
        {
            if ((1 / i + 1 / j + 1 / k) == 1 / 2)                
               throw k;                
        }
    }
}

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 nWerten versuchen (es muss größer oder gleich sein 42), und Sie erhalten das richtige Ergebnis. Für kleine Werte wie n = 2000dauert 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:

var now = new Date().getTime();
var iterations = 0; 
var n = Math.pow(2, 32); 
for (var i = 1; i <= n; i++)
{
    for (var j = 1; j <= n; j++)
    {
        for (var k = 1; k <= n; k++)
        {
            if ((1 / i + 1 / j + 1 / k) == 1 / 2)               
                throw k;

            if (new Date().getTime() - now > 1000) //one second has elapsed
            {
                now *= 2; //never wanna see you again
                n = 42;   //this is the minimum               
                while(3 * n * n + 7 * n + 42 < iterations * 74) n++;
                i = j = k = 0; //reset
            }
            iterations++;
        }
    }
}

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 nan 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


2

C # - 151 Zeichen

class P
{
   static void Main()
   {
      var w = new System.Diagnostics.Stopwatch();
      w.Start();
      while (w.ElapsedMilliseconds < 75000);
      System.Console.Write((int)'*');
   }
}

Wie ist das nicht gleichbedeutend mit Thread-Schlaf?
Valdetero

Natürlich ist es nicht gleichbedeutend mit Thread-Schlaf. Thread-Ruhezustand deaktiviert den Haupt-Thread für einen bestimmten Zeitraum. Dieses Programm deaktiviert den Haupt-Thread nicht. Es handelt sich um einen Haupt-Thread, um die verstrichene Zeit zu vergleichen. Und wenn diese festgelegte Zeitspanne (75s) verstrichen ist, wird die Ausgabe gedruckt.
Merin Nakarmi

Ich weiß, <i> funktional </ i> ist es nicht dasselbe, aber folgt der gleichen Prämisse. Das OP wollte, dass es kreativ ist und die Sprache nicht 75 Sekunden wartet - und genau das tut es.
Valdetero

1
Für mich ist diese Lösung so gut / schlecht wie die Lösung für DOS. Die DOS-Lösung hält das Programm durch Pingen auf Trab, und diese hält sich durch Vergleichen der verstrichenen Zeit selbst auf Trab. Ich sehe keinen Unterschied. Wenn das viele positive Stimmen bekommen kann, sollte dies auch so sein. Übrigens macht der Ping-Befehl einen "Schlaf" intern.
Mikroben

2

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 ...

#include <algorithm>
#include <iostream>
#include <numeric>
#include <set>
#include <vector>

using namespace std;

bool NextPermutationWithRepetition(vector<int>& perm, int n) {
    int carry = 1;
    auto it = begin(perm);
    while (it != end(perm) && carry) {
        ++*it;
        carry = (*it - 1) / n;
        *it = ((*it - 1) % n) + 1;
        ++it;
    }
    if (carry) {
        if (perm.size() == n) return false;
        perm.push_back(carry);
    }
    return true;
}

int main() {
    vector<int> perm;
    set<vector<int>> uniquePartitions;
    const int n = 10;
    while (NextPermutationWithRepetition(perm, n)) {
        if (accumulate(begin(perm), end(perm), 0) == n)  {
            auto sortedPerm = perm;
            sort(begin(sortedPerm), end(sortedPerm));
            uniquePartitions.insert(sortedPerm);
        }
    }
    cout << uniquePartitions.size() << endl;
}

2

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!

var x = 0, b = document.body.children[0];
var theAnswer = function(){
  b.textContent = ++x;
  if(x == 125774) alert(Math.pow(x, 1/Math.PI)).toFixed(0);  
  else setTimeout(theAnswer);
};
theAnswer();

Demo


1
Viel mehr als 75 Sekunden ...
Fabinout

aber es lohnt sich!
Rafaelcastrocouto

2

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:

from datetime import datetime
n = datetime.now
o = n().second

def bs(x,n,t,f):
    return ([t]+bs(x-2**(n-1),n-1,t,f) if x>=2**(n-1) else [f]+bs(x,n-1,t,f)) if n>0 else []

u = [271,329,322,488,79,15,60,1,9,'#',' ','',]
for i, g in enumerate(u[:5]):
    while n().second!=(o+(i+u[7])*u[5])%u[6]:
        pass # the dice
    print u[11].join(bs(g,*u[8:11]))

Et voila - die Antwort wird nach 75 Sekunden bereitgestellt.


2

Versammlung (verbunden durch gcc)

Auf einem ausreichend langsamen Computer (CPU-Geschwindigkeit ~ 2 Hz) sollte dies ungefähr 75 Sekunden dauern:

  .globl        main
main:
  movl  $52, %edx
  movl  $0, %edi
l4:
  addl $1, %edi
  cmp %edx, %edi
  jl l4
  call  putchar
  movl  $50, %edx
  movl  $0, %edi
l2:
  addl $1, %edi
  cmp %edx, %edi
  jl l2
  call  putchar
  movl  $10, %edx
  movl  $0, %edi
ln:
  addl $1, %edi
  cmp %edx, %edi
  jl ln
  call  putchar
  ret

1

Bash- und Linux-Utils:

#!/bin/bash

if [ $(uname) == "Linux" ]; then
    : $(arecord -q | head -c 600000)
    man -s4 random | head -n1 | tr -d ' ' | wc -c
else
    echo "Deep Thought didn't run $(uname)"
fi

Deep Thought hört während der gesamten Berechnung aufmerksam zu.


1

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.

public class T{public static void main(String[]b){long d=(1<<16^1<<13^1<<10^31<<3);long t=System.currentTimeMillis();long e=t+d;for(;e>System.currentTimeMillis();){}d=d%((((d&~(1<<16))>>7)^(1<<4))^1<<2);System.out.println(d);}}

Ungolfed

public class T
{
    public static void main(String[] b)
    {
        long d = (1 << 16 ^ 1 << 13 ^ 1 << 10 ^ 31 << 3);
        long t = System.currentTimeMillis();
        long e = t + d;
        for (; e > System.currentTimeMillis();){}
        d = d % ((((d & ~(1 << 16)) >> 7) ^ (1 << 4)) ^ 1 << 2);
        System.out.println(d);
    }
}

0

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 :-)

OpenConsole()

sw = ElapsedMilliseconds()
FoundFigure1 = 0
FoundFigure2 = 0

PreviousPrime = 1

For i = 3 To 10000000000 Step 2
  PrimeFound = #True
  For j = 2 To i-1
    If i % j = 0
      PrimeFound = #False
      Break
    EndIf
  Next
  If PrimeFound = #True
    If i - PreviousPrime = 41+1
      FoundFigure1 = PreviousPrime
      FoundFigure2 = i
    EndIf

    PreviousPrime = i
  EndIf

  If ElapsedMilliseconds() - sw > 75000
    Break
  EndIf
Next

Print("Answer: ")
Print(Str(FoundFigure2 - FoundFigure1))
Input()

0

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 Zahl 4und eine große Zahl 2. Platzieren Sie Ihre computerzum 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.


0

Ein weiteres C # -Beispiel

using System;
using System.Threading;

namespace FourtyTwo
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime then = DateTime.Now;
            Thread.Sleep(42000);
            DateTime now = DateTime.Now;
            TimeSpan t = now - then;
            Console.WriteLine(t.Seconds);
        }
    }
}

1
Sie verwenden "Schlaf"
Fez Vrasta

Hoppla, lies es, da kannst du sleep -10 für mich benutzen!
Landers

0

Rubin

Ein Programm zum 75-fachen Hinzufügen von (0,56) Potenz n. Wert vonn is 1

Wo n=1sollte von irgendeiner Form von erhalten werdenTime diffrence

def solve
  a=0.56
  i=0
  t1=Time.now
  while(i < 75)
        t1 = Time.now
        while((b=Time.now-t1) < 1.0)
        end
        a += 0.56 ** b.to_i
        i += 1
  end
  a.to_i
end

puts solve

Unter Verwendung der Ruby-Zeitdifferenz habe ich die Ausführungszeit überprüft 75.014267762


0

PHP

<?php
set_time_limit(80);
ini_set('max_execution_time', 80);
//$start=time();
$count=0;
do{
$rand=rand(0,(75000000/40+2));  
$rand=rand(0,$rand);
    if(($rand==42 || $rand==75-42 || $rand== floor(75/42)) && (!rand(0,(4*2)))
      ){
      $count++;
    }
}while($count!=42);
echo $count;
//echo '<br>elapsed time is '.(time()-$start);
?>

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.


0

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($=((_=_=>(_<<-~-~[])|-~[])(_(-~[])))<<-~[])",($=$=>$<<-~-~-~[]|-~[])((_=_=>_<<-~[]|-~[])(_(_(_($($($(-~[]))))))))^-~[])


Ich Unexpected token >
erhalte

Ich habe diese Arbeit an Firefox 26.0, die die x = x => f (x) -Notation akzeptiert ... Auf welcher Version führen Sie diese aus?
WallyWest

Ich
starte

1
@rafaelcastrocouto Ah, leider funktioniert die fette Pfeilnotation, die zum Definieren der beiden Funktionen in den einzelnen Anweisungen verwendet wird, nur für Firefox 22 und höher ...
WallyWest,

Ich weine fast ... Ihre Lösung ist in der Tat schön!
Rafaelcastrocouto

0

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:

#import "ViewController.h"
#import "MBProgressHUD.h"

@interface ViewController ()

@property (nonatomic, retain) MBProgressHUD * hud;

-(IBAction)answer:(id)sender;

@end

int number;
int initialCounter;

@implementation ViewController
@synthesize hud;

-(IBAction)answer:(id)sender
{
    hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    hud.mode = MBProgressHUDModeIndeterminate;
    hud.labelText = @"Calculating";

    [self calculate];

    number = arc4random();
}

-(void)calculate
{

    int random = arc4random();

    if (number == 42){
        hud.hidden = YES;
        UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Complete!"
                                                          message:@"The answer is 42."
                                                         delegate:nil
                                                cancelButtonTitle:@"OK"
                                                otherButtonTitles:nil];

        [message show];
    }

    else if(number<42){
        number = number + random;
        dispatch_async(dispatch_get_main_queue(), ^{
             [self calculate];
        });
    }

    else if(number>42){
        number = number - random;
        dispatch_async(dispatch_get_main_queue(), ^{
             [self calculate];
        });
    }
}

@end
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.