時間のちょうど 50%を停止するプログラムを作成します。オリジナルで。最も投票数の多い質問が勝ちます。することにより、正確に私が上であることを意味し、それぞれの実行停止、それの50%のチャンスがあります。
時間のちょうど 50%を停止するプログラムを作成します。オリジナルで。最も投票数の多い質問が勝ちます。することにより、正確に私が上であることを意味し、それぞれの実行停止、それの50%のチャンスがあります。
回答:
代替案は停止し、停止しません。(最初の実行で停止し、2回目で停止しません...)
var h = localStorage.halt;
while (h) localStorage.halt = false;
localStorage.halt = true;
import random
p=.3078458
while random.random()>=p:p/=2
ループを回るたびに、指数関数的に減少する確率で中断します。決して壊れない可能性は、積(1-p)(1-p / 2)(1-p / 4)...〜1/2です。(正確ではない浮動小数点に関する義務的なコメント。)
p=0.307845850.00002%を取得することから始めます:)
2rand{.}do
これはコードゴルフのチャレンジではないことは知っていますが、とにかくゴルフをしました。:)
または、キースランドールのソリューションの GolfScript実装を次に示します。
2{2*.rand}do
理論的には、これには正確に1/4 + 1/8 + 1/16 + ... = 1/2の停止確率があります。しかし実際には、分母がどんどん長くなり続けるため、常にメモリが不足して停止します。
n = 2*rand(1...49)+1; divisors = (1...100).select{|x|n % x == 0}.count until divisors == 2
print n
0..100の間にちょうど24の奇数の素数があり、最大値は97です。このアルゴリズムは、範囲内のランダムな奇数を選択し、素数が見つかるまで繰り返します。
この特定の実装には2つのバグがあります。
n、そのうちの24は素数です。n各反復で再描画であることを意味し、唯一の素数判定は、ループ内で実行されます。最初は成功しなかった場合、再試行しますが、同じ番号です。C
#include <unistd.h>
main() { while (getpid()&2); }
やや難読化されたソリューション:
import Control.Monad
import Control.Monad.Random -- package MonadRandom
import Control.Monad.Trans.Maybe
import Data.Numbers.Primes -- package primes
-- | Continue the computation with a given probability.
contWithProb :: (MonadRandom m, MonadPlus m) => Double -> m ()
contWithProb x = getRandomR (0, 1) >>= guard . (<= x)
loop :: MonadRandom m => MaybeT m ()
loop = contWithProb (pi^2/12) >> mapM_ (contWithProb . f) primes
where
f p = 1 - (fromIntegral p)^^(-2)
main = evalRandIO . runMaybeT $ loop
Pythonで表現された同じソリューション:
import itertools as it
import random as rnd
from math import pi
# An infinite prime number generator
# Copied from http://stackoverflow.com/a/3796442/1333025
def primes():
D = { }
yield 2
for q in it.islice(it.count(3), 0, None, 2):
p = D.pop(q, None)
if p is None:
D[q*q] = q
yield q
else:
# old code here:
# x = p + q
# while x in D or not (x&1):
# x += p
# changed into:
x = q + 2*p
while x in D:
x += 2*p
D[x] = p
def contWithProb(p):
if rnd.random() >= p:
raise Exception()
if __name__ == "__main__":
rnd.seed()
contWithProb(pi**2 / 12)
for p in primes():
contWithProb(1 - p**(-2))
このソリューションは、無限生成d (1-p ^(-2))が6 /π^ 2に収束するという事実を利用しています。これは、ζ(2)=Π(1 /(1-p ^(-2))) が π^ 2/6に収束するためです。
DO %50 (1) NEXT
DO COME FROM COMING FROM
(1) PLEASE GIVE UP
COME FROM COMING FROM 無限ループになりますが、プログラムの最後までスキップする可能性は50%あります。
:Lbl 1:If round(rand):Pause:Goto 1
round(IS round(value,# of decimal places)9に、第二引数のデフォルトは
C
int main() {
char i;
while(i&1);
}
mainセキュリティ上の理由から、レジスタが0に初期化されているため、それでも機能しません)。
import random
a=random.randrange(2)
while a:pass
BEGIN {
# Do the following block 50% of time.
if (int rand 2) {
# Create a function that doubles values.
*double = sub {
2 * shift;
};
}
}
double / 3 while 1; # Calculates double divided using /
ゴルフをコーディングしないので、解読できないコードを回避できました(何をするかがより重要であるため)。コンパイル段階でランダムに関数を宣言します。宣言されている場合doubleは、引数として正規表現を取得します。宣言されない場合、それはdouble裸語であり、Perlはそれを3際限なく分割します。これは、パーサーに同じコードを2つの異なる方法で解析させるために、Perlのベアワード解析を悪用します。
import java.io.*;
public class HaltNoHalt {
public static void main(String[] args) throws Exception {
RandomAccessFile f = new RandomAccessFile("HaltNoHalt.java", "rw");
f.seek(372);
int b = f.read();
f.seek(372);
f.write(b ^ 1);
Runtime.getRuntime().exec("javac HaltNoHalt.java");
while ((args.length & 1) == 1);
}
}
この自己修正切り替えるためのコード== 1へ== 0と戻って、それはのたびに実行を。改行のみでコードを保存してください。そうしないと、オフセットが正しくなくなります。
これargs.lengthは、コンパイラの最適化を防ぐためのものです。
時間のちょうど 50%ですか?
- (void)applicationDidFinishLaunching:(NSNotification*)aNotification {
BOOL haltedLastRun = [(NSNumber*)[[NSUserDefaults standardUserDefaults] objectForKey:@"halted"] boolValue];
if (!haltedLastRun) {
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:@"halted"];
[[NSApplication sharedApplication] terminate:nil];
}
}
2つの間隔で実行され、それぞれ1秒の長さです(1秒は時間のSI単位であるため選択されました)。間隔の50%内で停止します。したがって、実行中の秒の50%は停止せず、残りの50%は停止します。GHCでのみ機能します。
import Control.Concurrent (threadDelay)
main = threadDelay 1990000
_($rand*2)+2>$
2>$
1