「ループを使わずに1から10
無題 名無し 11/30 113257

「ループを使わずに1から100を順に出力するコードは書けますか」
という質問に、凄腕たちがプログラム的な技巧を
凝らした答えをする中、MSのデータサイエンティストが
「1000/(999^2)を300桁まで計算すると答えが0.01002003…099100になるよ」
とサラッと答えてて、どんな脳の使い方したら思い付くのそれ
https://twitter.com/i_kaseki/status/12...

無題 名無し 11/30 113258
凡人だと再帰しか思いつかないですよね…
無題 名無し 11/30 113260
>ループを使わずに1から100を順に出力するコード
ぶっちゃけ、
60499999499/490050000000 ≈ 0.123456789101112131415…
もいい感じと思われるのですよ。
無題 名無し 12/01 113261
100行書けば?
無題 名無し 12/01 113262
>どんな脳の使い方したら思い付くのそれ
その場で思いついたわけでなく
一部で有名な式なのでは
無題 名無し 12/01 113263
Σってプログラム的にはループにあたるんじゃない?
高卒だから詳しくないけど。
無題 名無し 12/01 113264
Σは答えが0.01002003…099100…になることの証明で使ってるだけで元の計算式は1000/999/999で完結する
無題 名無し 12/01 113266
除算にはループが含まれるのでは……
ていうか
print "1\n";
print "2\n";
print "3\n";
...
print "100\n";
としてループを含まないprint実装を与えればおk
無題 名無し 12/05 113283
1や2じゃのうて001や002やないか(無粋
無題 名無し 12/05 113285
ショートコーディングガチ勢だったらひらめく人それなりにいそう
fizzbuzzという有名な問題もフェルマーの小定理とか使ってくる

無題 名無し 12/05 113286
これ実際は計算精度の問題で上手く行かないのでは
それに頭に0.が付いちゃう
無題 名無し 12/08 113296
”001002003…099100”を出力するのならソース1行でいけるかも
文字数制限あるやつだと2行ぐらい?
無題 名無し 12/08 113300
1から100が(順番とは限らずに)1回以上出現する文字列で最も短いものは何だろうか
例えば"1234567890"には12や23や34も出現すると見なしたとして
無題 名無し 12/09 113306
>1から100が(順番とは限らずに)1回以上出現する文字列で最も短いものは何だろうか
>例えば"1234567890"には12や23や34も出現すると見なしたとして
n文字並んでいたとして得られる1桁の数はn個同じく2桁の数は(n-1)個
おおざっぱに見積もって最大2n個の数しか得られないから1から100までの数を得るには最短でも50文字必要
普通に書き並べると190文字必要だから
正解は50から190文字の間
無題 名無し 12/10 113312
print "1\n 2\n 3\n ・・ 100\n";
じゃアカンのか・
無題 名無し 12/10 113313
>1から100が(順番とは限らずに)1回以上出現する文字列で最も短いものは何だろうか
>例えば"1234567890"には12や23や34も出現すると見なしたとして
答えは100桁

11〜99までの0を含まない数を表現するのに必要な文字数は9*9*2=162文字。
一列に並べると最初と最後の数字以外は二重で使えるので、82桁に圧縮できる。
0を含む数字について、20〜90は「0X」が不要なので2桁ずつ使用することになる。(上記の82桁の最後の数字を利用して-1)
100は3桁使用し、10も兼ねる。
以上を足し合わせて82+(2*8-1)+3=100桁
1桁は考える必要なし(2桁の数字に含まれるので)

n進数で1〜100を表した例(結果的にn^2桁が最短)
n=2:1100
n=3:221120100
n=4:3322112313020100
無題 名無し 12/12 113316
>n進数で1〜100を表した例(結果的にn^2桁が最短)
>n=2:1100
>n=3:221120100
>n=4:3322112313020100
なるほど
9988776655443322112313414245152535616263646717273747578182838485868919293949596979080706050403020100
が具体的な答えかな
ちなみにソースコードはこれ
https://ideone.com/XDXjzL
無題 名無し 12/13 113318
1並びの2乗が数字が並ぶので、それを使って100までループを使わずに表せ
の方が面白そう

1111111111^2=1234567890987654321みたいな
(合っているかわかりませんw)
無題 名無し 12/14 113319
IQが高すぎるスレ
del
無題 名無し 12/17 113325
>1並びの2乗が数字が並ぶので、それを使って100までループを使わずに表せ
>の方が面白そう
100個の1の間に0を2つずつ挟んだ
Σ[k=0..99](10^(3k))
は2乗することで
1002003..099100099098..001
になる

無題 名無し 12/17 113326
>100個の1の間に0を2つずつ挟んだ
>Σ[k=0..99](10^(3k))
>は2乗することで
>1002003..099100099098..001
>になる
これが一番シンプルで確実じゃない?多倍長整数で
((10^300 - 1) / (999))^2
を計算するだけ
無題 名無し 12/28 113350
ループの定義とはなんじゃらほい
構造化プログラミングで言うところのループを
プログラマが明示的に書かなければおkなの?
しかし構造化プログラミング自体が厳密には数学的に定義されておらず以下無限ループ、

ていうか有限状態機械が元の状態に戻るのもループだと言われた時点で
チューリングマシン的解決は絶望的となる
セルオートマトンぐらいしか手段が残らん
無題 名無し 12/29 113358
実際問題
「可逆計算」と関わり合いがありそうな予感がするな
無題 名無し 12/29 113359
001002003004・・・098099100を
何倍すれば数字が揃うか考えれば

続きを見る31日06:39頃消えます
戻る

レス

おなまえメールコメント