生命,宇宙和一切的答案[关闭]


43

简介:深入的思想计算在750万年的时间里,解决宇宙和万物生命的答案42

用任何编程语言编写一个程序75,从您想要的任何内容开始,大约要花费几秒钟的时间进行计算,然后输出number 42

注意:该数字42必须以某种方式计算(随机数,无论您喜欢什么),而不仅仅是在脚本中进行硬编码。

如建议的那样,您不能使用sleep或等效功能。有创造力。


6
这可能会更好地作为一场人气竞赛,以了解人们如何创造性地提出答案,而不是采用各种方式sleep(75);print("%d\n",41+1);
乔什(Josh)

30
计算大约需要75秒?但是计算机芯片是如此多样化...这怎么可能-我的机器可能需要75秒,但是下一台计算机可能会在7.5秒内变怪……
Fozzedout 2014年

7
没有sleep可用的答案,将取决于硬件,我想...在您的计算机上花费75s可能会在我的计算机上花费750s:P
Josh

3
timeapi.org/utc/now。这似乎是使用类似您的语言的睡眠库的最佳选择。这仅需几个http请求。
Cruncher

3
我不小心把我的花了10分钟!:O
门把手

Answers:


53

将树莓派超频至1GHz大约需要75秒

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

之所以有效,是因为:

42是唯一的已知值,它是四个不同的正整数a,b,c,d的集合数,每个整数均小于该值本身,因此ab-cd,ac-bd和ad-bc分别是a的倍数价值。是否还有其他价值仍然是一个悬而未决的问题

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


12
因此,您将找到一个满足该方程式的新数字,或者打印42 :)
Assaf G. 2014年

1
@FezVrasta,因为最后一行不见了。h!
gnibbler 2014年

2
哇!完美的数学公式和超频功能...哈哈哈+1!
Tomas

1
有趣的是,此答​​案的硬顶得分为42(不赞成)
2014年

1
由于覆盆子pi过多,我真的想对此表示赞同,但我不能给出当前的分数。我很难过我们要打成平手
agweber 2014年

43

Python 2.7

要回答这个问题,必须知道这个问题-问题是:

六乘九会得到什么?感谢TRiG的更正

因此,Deep Thought依靠基数13便捷用法

6 13 x 9 13 = 42 13

我们导入常量:

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

我们介绍了Zaphod-一种随机的种类,当我们靠近时,他最终会精疲力尽endOfTheUniverse

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

还有偏执狂机器人Marvin,他的积极态度可能会阻止任何聚会:

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

我们继续在混合中运行这四个字符,直到他们计算出为止

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)

完整的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)

这应该在75秒标记处完成,绝对要在80秒内完成。有时更早地到Zaphods 无限可能性驱动


1
答案很好,但是如果我在2.7.2上运行,则会抛出错误File "main.py", line 13, in zaphod = not(randint(i,(80-(datetime.now() - start).seconds)**3)) NameError: name 'i' is not defined:(
Fez Vrasta 2014年

1
@FezVrasta对不起,我不小心添加了一些错误的代码。现在修复它,应该可以工作。

4
太棒了,它很有效:)现在我们需要一台更大的计算机来计算问题!
菲斯·弗拉斯塔

8
“我可能会感到遗憾,但我不会在基础13中开玩笑。” -DNA
MikeTheLiar 2014年

3
现在是42票。我是否需要更多选票,还是该问题的最低分?

13

DOS Batch –生活,宇宙和一切的答案

感谢mynameiscoffey的简化!

另存为answer.bat

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

然后运行它,并等待75秒:

> answer
42

看来您的“ 深层思想”有不同的想法,它使我回到40:P
Fez Vrasta 2014年

我使用过Notepad ++,我使用的是Windows 8 x64
Fez Vrasta,2014年

即使使用NotePad也没有运气,而是带有感叹号的版本有效
Fez Vrasta 2014年

很酷,您能猜出它是如何工作的吗?

2
为什么不排成一行以避免出现混乱的CRLF问题,@ ping 127.0.0.1 -n 76 >nul && @ echo %~z0而是使用`&&`而不是依赖一对CRLF
mynameiscoffey 2014年

10

重击(OS X)

这可能会移植到其他系统而不会带来太多麻烦。替换say为您用作文本到语音命令行实用程序的任何内容。该-f选项从命名文件获取输入。

幸运的是,它甚至可能输出正确的数字:-)

在我的系统(OS X 10.5)上运行,这几乎需要1分15秒。

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

这是困难的一个。由于我们并不真正知道这个问题,因此唯一可行的方法是借助全局优化方法。在这种情况下,我选择了模拟退火方法,因为这种方法以前已经为我解决了棘手的问题提供了很好的答案。

这些代码所做的所有事情都是在寻找功能的最优值,而输入就是生命本身。令人惊讶的是它可以工作。所以,我只是验证了Deep Thought?

tic;

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

输出:

the_answer =

    42

Elapsed time is 74.892428 seconds.

5

C-1089字节

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

压缩后:

#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

红宝石

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

我的机器上的输出:

42
Took 123 seconds; seed was 3771996

这滥用了RNG。;)


1
您如何确保持续75秒?
皮埃尔·阿洛德

1
@Arlaud它运行了370万次循环迭代,每次循环生成2个随机数!从技术上讲,如果您有一些超级计算机,它可能会更快,但是对于任何合理的硬件,它至少需要75秒钟,而且我不想感到无聊并使用睡眠或时间方法。
门把手

更新:...现在,它可以Took 25 seconds; seed was 3771996在性能中等的笔记本电脑上打印。所以,呃...我撒了谎。:P
门把手

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
而循环直到clock()超过某个值似乎违反了no sleep()规则,因为这基本上是CPU密集的睡眠
mniip 2014年

人气竞赛。
皮埃尔·阿洛德

@ArlaudPierre 我提交答案时是代码高尔夫。无论如何,现在已修复。
Oberon 2014年

4

JavaScript-通过求解方程式找到“生命和一切的答案”

让我们看一下这个方程:

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

有很多解决方案,但是如果您想r变得尽可能大pq并且r要自然,只有两个解决方案:

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

使用p <= q <= r,只有一个解决方案,且r始终等于42

什么是最有效的求解方程的方法?

通过尝试所有可能的值!

这是代码:

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

需要多少时间?老实说,我不知道,因为我一直无法运行到最后。

但是,您可以尝试使用较小的 n值(该值必须大于或等于42),您将获得正确的结果。对于诸如的较小值n = 2000,我的笔记本电脑将花费近一分钟的时间。因此,我猜想示例中给出的高价值将需要几天,几周甚至几年!

在大约75秒内找到解决方案:

最初问题的一个要求是执行大约需要75秒。实现此目的的一种方法是随时间自动调整算法的复杂度:

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

它是如何工作的(出于好奇):它检查一秒钟内执行了多少次迭代,然后将其乘以74,然后进行调整n以匹配该值。例如:如果花费一秒钟执行500次迭代,那么将花费10秒执行5000次迭代。请注意,它乘以74而不是75,因为我们已经花了一秒钟的时间进行“基准测试”。

数学的来源和学分


2

C#-151个字符

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

这怎么不等于线程睡眠?
valdetero 2014年

当然,这不等同于线程睡眠。线程睡眠使主线程在指定的时间内处于非活动状态。该程序不会使主线程处于非活动状态。它涉及主线程来比较经过的时间。并且经过指定的时间量(75s)后,将输出输出。
Merin Nakarmi 2014年

我知道<i>功能上</ i>并不相同,但是遵循相同的前提。OP希望它具有创造力,并且不让语言等待75秒-这就是这样做的原因。
valdetero 2014年

1
对我来说,此解决方案与DOS解决方案一样好/坏。DOS解决方案通过ping使程序保持繁忙,而该解决方案通过比较经过的时间使程序保持繁忙。我没什么区别。如果那可以得到很多支持,那么这一点也应该得到支持。顺便说一句,ping命令在内部执行“睡眠”操作。
microbian

2

C ++

计算分区10经由一个相当低效的方法。花了130秒钟在我的系统上的Release版本中运行,但是拥有足够快的PC的人应该可以在约75秒钟内运行它。

#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

Java脚本

这将花一些时间来提醒某些事物……但是值得,因为它将向您显示生命对宇宙和一切的答案!

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

演示版


1
远远超过75秒...
Fabinout 2014年

但这是值得的!
rafaelcastrocouto 2014年

2

蟒蛇

有时,答案只有在计算的最后才明确,但在终止之前就可以看到答案的各个方面。

很少有人知道Deep Thought的输入顺序:

271、329、322、488、79、15、60、1、9

因此:

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

等等-75秒后会提供答案。


2

汇编(由gcc链接)

在足够慢的计算机(CPU速度〜2Hz)上,这大约需要75秒才能运行:

  .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和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在计算过程中一直在认真听取。


1

Java(227个字符)

谁说按位操作不好玩?还是那个Java不能混淆?
我们循环75秒,然后扩大答案。

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

不打高尔夫球

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

考虑到不同的硬件将产生不同的结果,对此没有固定的答案。我正在使用经过时间函数,所以我知道何时停止计算。

基本上,它将减去后的最大素数为42

您的机器速度越快,素数将越大:-)

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

肉空间

步行一段距离(大约servant^H^H^H^Hcomputer是人,狗或任何能拾取数字小块的东西),大约需要70/4秒才能走动。在此处放置一个大数字4和一个大数字2。将您放置computer到输出点。启动计时器,让它走到数字仓库,一次带回一个数字。

我花了5秒钟的时间将它们捡起并放下。


0

另一个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);
        }
    }
}

1
您正在使用“睡眠”
Fez Vrasta 2014年

糟糕,请阅读为我可以使用-10的睡眠!
登陆器,2014年

0

红宝石

一个将(0.56)幂n增加75次的程序。的价值n is 1

n=1应不受任何形式的获得Time 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

使用红宝石时差,我已经验证了执行时间约为 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);
?>

这和我今晚接近。在tecbrat.com上运行它,运行Ubuntu 10.04的旧IBM NetVista P4在最近的两次运行中分别显示了69秒和78秒。


0

JavaScript(按位混淆)(136个字节还不错!)

可能看起来有些骗人,但是仔细考虑了函数,要记住,要在用于计算42的函数之前先计算75000ms的值。 )

setTimeout("alert($=((_=_=>(_<<-~-~[])|-~[])(_(-~[])))<<-~[])",($=$=>$<<-~-~-~[]|-~[])((_=_=>_<<-~[]|-~[])(_(_(_($($($(-~[]))))))))^-~[])


我收到语法错误...Unexpected token >
rafaelcastrocouto 2014年

我在Firefox 26.0上使用了x = x => f(x)表示法。正在运行什么版本?
WallyWest

我在Windows 7上运行Chrome 31 ...
rafaelcastrocouto 2014年

1
@rafaelcastrocouto啊,可悲的是,用于定义每个语句中的两个功能的粗箭头符号仅适用于Firefox 22及更高版本...
WallyWest

我差点哭了...您的解决方案确实很漂亮!
rafaelcastrocouto 2014年

0

我对这种东西不太好。我是一名应用程序开发人员,但我从未接受过C语言方面的培训,我主要制作使应用程序从服务器中获取内容并使信息看起来更漂亮的应用程序...

我不知道这是否行得通,并且那里还有一些额外的代码,因为它在iphone应用程序中,当达到42时,我会显示进度hud和警报视图:

#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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.