Wprowadzenie : Obliczenie głębokiej myśli Odpowiedź na życie wszechświata i wszystko w ciągu 7,5 miliona lat było rozwiązaniem 42
.
Napisz program w dowolnym języku programowania, którego 75
obliczenie zajmuje około sekund, zaczynając od tego, co chcesz, i wypisz liczbę 42
.
Uwaga: Liczbę 42
należy jakoś obliczyć (liczby losowe, cokolwiek wolisz), a nie tylko na stałe w skrypcie.
Jak sugerowano, nie można używać sleep
ani równoważnych funkcji. Bądź pomysłowy.
popularity-contest
Fez Vrasta
źródło
źródło
sleep(75);print("%d\n",41+1);
sleep
dostępnych odpowiedzi będą w dużej mierze zależne od sprzętu. Wyobrażam sobie ... to, co zajmuje 75s na twoim komputerze, prawdopodobnie zajmie 750s na moim komputerze: POdpowiedzi:
To zajmuje około 75s na Raspberry Pi podkręconym do 1GHz
Działa, ponieważ:
http://www.mathpages.com/home/kmath255.htm
źródło
Python 2.7
Aby odpowiedzieć na pytanie, trzeba znać pytanie - a pytanie brzmi:
Tak więc Głęboka Myśl opiera się na poręcznym użyciu bazy 13 :
Importujemy nasze stałe:
Definiujemy również nasze ziemskie rzeczy, będące woreczkiem płytek do scrabble , Arthur (przewidywalny, choć nieco dziwny, rodzaj komputera), Trillian (nasza racjonalna bohaterka),
Przedstawiamy Zaphod - losowy rodzaj, który w końcu zaczyna brakować pary, gdy zbliżamy się do
endOfTheUniverse
.I Marvin, Paranoidalny Android , którego pozytywne nastawienie może powstrzymać każdą imprezę:
A my nadal prowadzony przez te 4 znaki mieszanki aż obliczyć go :
Kompletny
deepthought.py
:Powinno to zakończyć się gdzieś w okolicach 75 sekund, zdecydowanie kończąc o 80 sekund. Czasami wcześniej do Zaphods Infinite Improbability Drive .
źródło
File "main.py", line 13, in zaphod = not(randint(i,(80-(datetime.now() - start).seconds)**3)) NameError: name 'i' is not defined
:(DOS Batch - odpowiedź na życie, wszechświat i wszystko
Dzięki mynameiscoffey za jego uproszczenie!
Zapisz jako
answer.bat
:Następnie uruchom go i poczekaj 75 sekund:
źródło
@ ping 127.0.0.1 -n 76 >nul && @ echo %~z0
, używając `&&` zamiast polegać na parze CRLFBash (OS X)
Prawdopodobnie można go przenieść do innych systemów bez większych problemów. Zamień na
say
wszystko, czego używasz jako narzędzie wiersza polecenia zamiany tekstu na mowę.-f
Opcja zajmuje wejście z nazwanego pliku.Przy odrobinie szczęścia może nawet podać prawidłową liczbę :-)
Uruchomienie tego systemu zajmuje prawie dokładnie 1 minutę i 15 sekund (OS X 10.5).
źródło
MATLAB
To jest trudne. Ponieważ tak naprawdę nie znamy pytania, jedyną realną metodą uzyskania odpowiedzi jest globalna metoda optymalizacji. W tym przypadku wybrałem metodę symulowanego wyżarzania , ponieważ ta dała mi wcześniej dobre odpowiedzi na trudne pytania.
Cały ten kod polega na szukaniu optymalnej wartości funkcji, której wejściem jest samo życie. Niesamowite jest to, że działa. Czy więc właśnie zweryfikowałem Głęboką Myśl?
Wynik:
źródło
C - 1089 bajtów
Sprężony:
źródło
Rubin
Dane wyjściowe na moim komputerze:
To narusza RNG. ;)
źródło
Took 25 seconds; seed was 3771996
na moim laptopie o średniej wydajności. Więc ... skłamałem. : Pdo
źródło
clock()
przekroczy wartość niektórych wydaje się naruszaćno sleep()
zasadę, gdyż w zasadzie cpu-intensywny senJavaScript - znalezienie „odpowiedzi na życie i wszystko” poprzez rozwiązanie równania
Spójrzmy na to równanie:
Istnieje wiele rozwiązań, ale jeśli chcesz
r
być tak duży, jak to możliwep
,q
ir
być naturalsami, są tylko dwa rozwiązania:1/3 + 1/7 + 1/42 = 1/2
i1/7 + 1/3 + 1/42 = 1/2
z
p <= q <= r
, istnieje tylko jedno rozwiązanie ir
zawsze równe42
Jaki jest najbardziej (nie) skuteczny sposób rozwiązania równania?
Próbując wszystkich możliwych wartości!
Oto kod:
Ile czasu to zajmie ? Szczerze mówiąc, nie wiem, ponieważ nie byłem w stanie doprowadzić go do końca.
Możesz jednak spróbować z małymi
n
wartościami (musi być większa lub równa42
) i uzyskasz poprawny wynik. W przypadku niewielkich wartości, takich jakn = 2000
, trwa prawie minuta na moim laptopie. Myślę, że przy dużych wartościach podanych w przykładzie zajmie to dni, tygodnie, a nawet lata !!!Znalezienie rozwiązania w około 75 sekund:
Jednym z wymagań wstępnego pytania jest wykonanie około 75 sekund. Jednym ze sposobów osiągnięcia tego jest automatyczne dostosowanie złożoności algorytmu w czasie:
Jak to działa (dla ciekawskich): sprawdza, ile iteracji wykonano w ciągu jednej sekundy, a następnie pomnóż to przez 74 i dostosuj,
n
aby dopasować tę wartość. np .: jeśli wykonanie jednej 500 iteracji zajmie jedną sekundę, wykonanie 5000 iteracji zajmie 10 sekund. Zauważ, że mnoży się przez 74, a nie 75, ponieważ spędziliśmy już jedną sekundę na „testowaniu”.źródło i kredyty matematyczne
źródło
C # - 151 znaków
źródło
C ++
Oblicza partycje o 10 za pomocą metody raczej nieefektywne. Trwało 130 sekund, aby uruchomić wersję Release w moim systemie, ale ktoś z wystarczająco szybkim komputerem powinien być w stanie uruchomić go w ~ 75 sekund ...
źródło
JavaScript
To zajmie trochę czasu, aby coś zaalarmować ... ale warto, ponieważ pokaże Ci Odpowiedź na życie wszechświata i wszystko!
Próbny
źródło
Pyton
Czasami odpowiedź jest jasna tylko na samym końcu obliczeń, ale jej aspekty są widoczne przed zakończeniem.
I mało znana jest sekwencja danych wejściowych Głębokiej Myśli zaszczepiono:
271, 329, 322, 488, 79, 15, 60, 1, 9
W związku z tym:
Et voila - odpowiedź zostanie udzielona po 75 sekundach.
źródło
Zestaw (połączony przez gcc)
Na wystarczająco wolnym komputerze (szybkość procesora ~ 2 Hz) uruchomienie powinno zająć około 75 sekund:
źródło
Narzędzia Bash i Linux:
Deep Thought słucha uważnie przez cały czas obliczeń.
źródło
Java (227 znaków)
Kto powiedział, że manipulacje bitowe nie są zabawne? Czy ta Java nie może być myląca?
Wykonujemy pętlę przez 75 sekund, a następnie wyświetlamy odpowiedź.
Nie golfił
źródło
PureBasic
Biorąc pod uwagę fakt, że inny sprzęt będzie dawał różne wyniki, nie ma na to stałej odpowiedzi. Używam funkcji upływającego czasu, więc wiem, kiedy przestać obliczać.
Zasadniczo obliczy dwie największe liczby pierwsze, po odjęciu 42
Im szybciej maszyna, tym większe liczby pierwsze :-)
źródło
MeatSpace
Odsuń się na odległość, która zajmuje około 70/4 sekund
servant^H^H^H^Hcomputer
(może to być człowiek, pies lub cokolwiek, co może zbierać płytki numeryczne). Umieść tam dużą cyfrę4
i dużą cyfrę2
. Umieść swójcomputer
punkt wyjściowy. Uruchom licznik, poprowadź go do składu liczb i przynieś jedną liczbę na raz.Poświęciłem 5 sekund na ich podniesienie i odłożenie.
źródło
Kolejny przykład C #
źródło
Rubin
Korzystając z różnicy czasu ruby, zweryfikowałem czas wykonania, który wynosi około
75.014267762
źródło
PHP
To jest tak blisko, jak dziś wieczorem. Uruchomienie go na stronie tecbrat.com , stary IBM NetVista P4 z Ubuntu 10.04, pokazał 69 sekund i 78 sekund w moich ostatnich 2 uruchomieniach.
źródło
JavaScript (bitowe zaciemnianie) (nieźle jak na 136 bajtów!)
Może to być trochę oszukane, ale funkcje zostały starannie przemyślane, biorąc pod uwagę, że wartość 75000 ms zostanie obliczona przed funkcjami użytymi do obliczenia 42. Jest to dość poetyckie, jeśli spojrzysz na to, naprawdę: )
setTimeout("alert($=((_=_=>(_<<-~-~[])|-~[])(_(-~[])))<<-~[])",($=$=>$<<-~-~-~[]|-~[])((_=_=>_<<-~[]|-~[])(_(_(_($($($(-~[]))))))))^-~[])
źródło
Unexpected token >
Nie jestem zbyt dobry w tego typu sprawach. Jestem programistą aplikacji, ale nigdy nie miałem żadnego szkolenia w języku C i głównie tworzę aplikacje, które pobierają rzeczy z serwerów i sprawiają, że informacje wyglądają ładnie ...
Nie mam pojęcia, czy to zadziała, i jest tam trochę dodatkowego kodu, ponieważ jest w aplikacji na iPhone'a, a po osiągnięciu 42 wyświetlam ekran postępu i widok alertu:
źródło