Odpowiedź na życie, wszechświat i wszystko [zamknięte]

43

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 75obliczenie zajmuje około sekund, zaczynając od tego, co chcesz, i wypisz liczbę 42.

Uwaga: Liczbę 42należy jakoś obliczyć (liczby losowe, cokolwiek wolisz), a nie tylko na stałe w skrypcie.

Jak sugerowano, nie można używać sleepani równoważnych funkcji. Bądź pomysłowy.

Fez Vrasta
źródło
6
Może to lepiej służyć jako konkurs popularności, aby zobaczyć, w jaki sposób ludzie mogą twórczo wymyślić odpowiedź, a nie odmianysleep(75);print("%d\n",41+1);
Josh
30
Obliczenie zajmuje około 75 sekund? Ale układy komputerowe są tak różnorodne ... Jak to możliwe - może potrwać 75 sekund na moim komputerze, ale następny komputer może potwornie go za 7,5 sekundy ...
Fozzedout
7
Bez sleepdostę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: P
Josh
3
timeapi.org/utc/now . To wydaje się być najlepszą alternatywą dla korzystania z bibliotek przypominających sen w twoim języku. Wystarczy kilka żądań HTTP.
Cruncher
3
Przypadkowo sprawiłem, że moje zajęło 10 minut! : O
Klamka

Odpowiedzi:

53

To zajmuje około 75s na Raspberry Pi podkręconym do 1GHz

#!/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

Działa, ponieważ:

42 jest jedyną znaną wartością, która jest liczbą zestawów czterech różnych dodatnich liczb całkowitych a, b, c, d, z których każda jest mniejsza niż sama wartość, tak że ab-cd, ac-bd i ad-bc są wielokrotnościami wartość. Czy istnieją inne wartości, pozostaje otwartym pytaniem

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

gnibbler
źródło
12
Więc albo znajdziesz nowy numer, który spełnia to równanie, albo wydrukujesz 42 :)
Assaf G.,
1
@FezVrasta, ponieważ zaginęła ostatnia linia. doh!
gnibbler
2
Łał! Idealny rebus matematyki i podkręcanie ... ha ha ha +1!
Tomas
1
To zabawne, że ta odpowiedź ma twardą ocenę Czapka 42 (nie upvoting)
Pwned
1
Naprawdę chcę to zagłosować z powodu overlocked malinowego pi, ale po prostu nie mogę podać jego aktualnego wyniku. Mam złe przeczucie, że będziemy mieli remis
agweber
43

Python 2.7

Aby odpowiedzieć na pytanie, trzeba znać pytanie - a pytanie brzmi:

Co otrzymujesz, gdy pomnożysz sześć przez dziewięć? Dzięki TRiG za korektę

Tak więc Głęboka Myśl opiera się na poręcznym użyciu bazy 13 :

6 13 x 9 13 = 42 13

Importujemy nasze stałe:

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

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

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

Przedstawiamy Zaphod - losowy rodzaj, który w końcu zaczyna brakować pary, gdy zbliżamy się do endOfTheUniverse.

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

I Marvin, Paranoidalny Android , którego pozytywne nastawienie może powstrzymać każdą imprezę:

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

A my nadal prowadzony przez te 4 znaki mieszanki aż obliczyć go :

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)

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

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
1
odpowiedź jest świetna, ale jeśli uruchomię ją na 2.7.2, zgłasza błąd 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 Przepraszamy, przypadkowo dodałem niewłaściwy kod. Naprawiono to teraz, powinno działać.
4
super, działa :) teraz potrzebujemy większego komputera, aby obliczyć pytanie!
Fez Vrasta
8
„Mogę być przykro, ale nie piszę żartów w bazie 13.” - DNA
MikeTheLiar
3
Obecnie jest to 42 głosy. Czy chcę więcej głosów, czy też chcę uzyskać jak najlepszy wynik w przypadku tego pytania?
13

DOS Batch - odpowiedź na życie, wszechświat i wszystko

Dzięki mynameiscoffey za jego uproszczenie!

Zapisz jako answer.bat:

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

Następnie uruchom go i poczekaj 75 sekund:

> answer
42

źródło
Wygląda na to, że Twoja Głęboka Myśl ma inny pomysł, zwraca mi 40 : P
Fez Vrasta
Użyłem Notepad ++, mam Windows 8 x64
Fez Vrasta
Bez powodzenia nawet z
NotePadem,
Fajnie, możesz zgadnąć, jak to działa?
2
dlaczego nie zrobić tej jednej linii, aby uniknąć bałaganu CRLF @ ping 127.0.0.1 -n 76 >nul && @ echo %~z0, używając `&&` zamiast polegać na parze CRLF
mynameiscoffey
10

Bash (OS X)

Prawdopodobnie można go przenieść do innych systemów bez większych problemów. Zamień na saywszystko, czego używasz jako narzędzie wiersza polecenia zamiany tekstu na mowę. -fOpcja 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).

#!/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"
piskliwy kostuch
źródło
10

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?

tic;

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

Wynik:

the_answer =

    42

Elapsed time is 74.892428 seconds.
mmumboss
źródło
5

C - 1089 bajtów

#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;
}

Sprężony:

#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;
}
użytkownik2464424
źródło
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}"

Dane wyjściowe na moim komputerze:

42
Took 123 seconds; seed was 3771996

To narusza RNG. ;)

Klamka
źródło
1
W jaki sposób zapewniasz, że trwa 75 sekund?
Pierre Arlaud,
1
@Arlaud Przebiega przez 3,7 miliona iteracji pętli, która generuje 2 losowe liczby na iterację! Technicznie rzecz biorąc, jeśli masz jakiś superkomputer, może być szybszy, ale dla każdego rozsądnego sprzętu zajmie to co najmniej 75 sekund, a ja nie chcę się nudzić i używać metod snu lub czasu.
Klamka
Aktualizacja: ... teraz drukuje Took 25 seconds; seed was 3771996na moim laptopie o średniej wydajności. Więc ... skłamałem. : P
Klamka
4

do

#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);
}
Oberon
źródło
2
while-pętle aż clock()przekroczy wartość niektórych wydaje się naruszać no sleep()zasadę, gdyż w zasadzie cpu-intensywny sen
mniip
konkurs popularności.
Pierre Arlaud,
@ArlaudPierre To było golfa kodu, kiedy przesłałem odpowiedź. W każdym razie jest już naprawione.
Oberon
4

JavaScript - znalezienie „odpowiedzi na życie i wszystko” poprzez rozwiązanie równania

Spójrzmy na to równanie:

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

Istnieje wiele rozwiązań, ale jeśli chcesz rbyć tak duży, jak to możliwe p, qi rbyć naturalsami, są tylko dwa rozwiązania:

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

z p <= q <= r, istnieje tylko jedno rozwiązanie i rzawsze równe42

Jaki jest najbardziej (nie) skuteczny sposób rozwiązania równania?

Próbując wszystkich możliwych wartości!

Oto kod:

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;                
        }
    }
}

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 nwartościami (musi być większa lub równa 42) i uzyskasz poprawny wynik. W przypadku niewielkich wartości, takich jak n = 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:

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++;
        }
    }
}

Jak to działa (dla ciekawskich): sprawdza, ile iteracji wykonano w ciągu jednej sekundy, a następnie pomnóż to przez 74 i dostosuj, naby 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

tigrou
źródło
2

C # - 151 znaków

class P
{
   static void Main()
   {
      var w = new System.Diagnostics.Stopwatch();
      w.Start();
      while (w.ElapsedMilliseconds < 75000);
      System.Console.Write((int)'*');
   }
}
Merin Nakarmi
źródło
Jak to nie jest równoważne z uśpieniem wątku?
valdetero
Oczywiście nie jest to odpowiednik uśpienia wątku. Uśpienie wątku powoduje, że główny wątek jest nieaktywny przez określony czas. Ten program nie wyłącza głównego wątku. Obejmuje główny wątek, aby porównać upływający czas. A kiedy upłynie określony czas (75 s), drukowane są dane wyjściowe.
Merin Nakarmi
Wiem, że <i> funkcjonalnie </i> nie jest taki sam, ale opiera się na tej samej przesłance. OP chciał, aby był kreatywny i nie pozwalał, aby język czekał 75 sekund - i to właśnie robi.
valdetero
1
Dla mnie to rozwiązanie jest tak dobre / złe, jak rozwiązanie dla DOS. Rozwiązanie DOS utrzymuje program zajęty przez pingowanie, a ten zajmuje się, porównując upływ czasu. Nie widzę żadnej różnicy. Jeśli to może uzyskać wiele pozytywnych opinii, ten też powinien otrzymać. Nawiasem mówiąc, polecenie ping wykonuje „uśpienie” wewnętrznie.
drobnoustrój
2

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

#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;
}
mattnewport
źródło
2

JavaScript

To zajmie trochę czasu, aby coś zaalarmować ... ale warto, ponieważ pokaże Ci Odpowiedź na życie wszechświata i wszystko!

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();

Próbny

rafaelcastrocouto
źródło
1
Znacznie więcej niż 75 sekund ...
Fabinout
ale warto!
rafaelcastrocouto
2

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:

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 - odpowiedź zostanie udzielona po 75 sekundach.

psion5mx
źródło
2

Zestaw (połączony przez gcc)

Na wystarczająco wolnym komputerze (szybkość procesora ~ 2 Hz) uruchomienie powinno zająć około 75 sekund:

  .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
Josh
źródło
1

Narzędzia Bash i Linux:

#!/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 słucha uważnie przez cały czas obliczeń.

Cyfrowa trauma
źródło
1

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

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);}}

Nie golfił

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);
    }
}
Quillion
źródło
0

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

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()
Fozzedout
źródło
0

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ę 4i dużą cyfrę 2. Umieść swój computerpunkt 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.

Carl Witthoft
źródło
0

Kolejny przykład C #

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);
        }
    }
}
lądowniki
źródło
1
używasz „snu”
Fez Vrasta
Ups, przeczytaj to, bo mogę użyć snu -10 dla mnie!
lądowniki
0

Rubin

Program do dodania (0,56) mocy n 75 razy. Wartośćn is 1

Gdzie n=1należy uzyskać z dowolnej formyTime 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

Korzystając z różnicy czasu ruby, zweryfikowałem czas wykonania, który wynosi około 75.014267762

Siva
źródło
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);
?>

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.

TecBrat
źródło
0

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

WallyWest
źródło
Otrzymuję błąd składniowy ...Unexpected token >
rafaelcastrocouto
Mam tę działającą w przeglądarce Firefox 26.0, która akceptuje notację x = x => f (x) ... Na jakiej wersji ją uruchamiasz?
WallyWest
korzystam z Chrome 31 na Windows 7 ...
rafaelcastrocouto
1
@rafaelcastrocouto Ach, niestety gruba notacja ze strzałką używana do zdefiniowania dwóch funkcji w każdej z instrukcji działa tylko w przeglądarce Firefox 22 i nowszych ...
WallyWest
prawie płaczę ... twoje rozwiązanie jest naprawdę piękne!
rafaelcastrocouto
0

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:

#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
evan.stoddard
źródło