裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

コイン投げ賭博

2014年12月02日 | ブログラミング

コイン投げに一度勝つと所持金が 2 倍になる。
コイン投げに一度負けると所持金が 1/16 になる。
ギャンブルの終了条件は、以下の通り。
・コイン投げに勝った回数が整数の 2 乗になっている
・コイン投げに負けた回数が整数の 2 乗になっている
・所持金が 0.5 円のような小数混じりの額ではなく、きちんと整数の額になっている
1円を元手として挑戦したハフィスは,儲けた金が 1000 万円以上であるが 1000 億円以下であることしか分からない。

【問】
このとき,ハフィスがコイン投げに勝った回数と負けた回数の考え得る組み合わせのパターン数を答えよ。

R コンソールを電卓代わりに手計算で解く

# 勝ち数と負け数を,Win と Lose で表す
# 1e7 < 2^(Win-4*Lose) < 1e11
# log10(1e7) < log10(2^(Win-4*Lose)) < log10(1e11)
# 7 < (Win-4*Lose)*log10(2) < 11
# 7/log10(2) < Win - 4*Lose < 11/log10(2)
# 23.2535 < Win - 4*Lose < 36.54121
# Win - 4*Lose = 24:36
# Win = 24:36+4*Lose かつ Win, Lose が平方数
# Lose = 1 なら Win  =  24:36+4*1 = 28:40 平方数は 36
# 1e7 < 2^(36-4*1) < 1e11
# Lose = 4 なら Win  =  24:36+4*4 = 40:52 平方数は 49
# 1e7 < 2^(49-4*4) < 1e11
# Lose = 9 なら Win  =  24:36+4*9 = 60:72 平方数は 64
# 1e7 < 2^(64-4*9) < 1e11
# Lose = 16 なら Win  =  24:36+4*16 = 88:100 平方数は 100
# 1e7 < 2^(100-4*16) < 1e11
# Lose = 25 なら Win  =  24:36+4*25 = 124:136 平方数は ない!
# Lose = 36 なら Win  =  24:36+4*36 = 168:180 平方数は 169
# 1e7 < 2^(169-4*36) < 1e11
# Lose = 49 なら Win  =  24:36+4*49 = 220:232 平方数は 225
# 1e7 < 2^(225-4*49) < 1e11
# Lose = 64 なら Win  =  24:36+4*64 = 280:292 平方数は 289
# 1e7 < 2^(289-4*64) < 1e11
# Lose = 81 なら Win  =  24:36+4*81 = 280:292 平方数は ない!
# Lose = 100 なら Win  =  24:36+4*100 = 424:436 平方数は ない!
# Lose = 121 なら Win  =  24:36+4*121 = 508:520 平方数は ない!
# 以下のプログラムで,上記以外で条件を満たす Lose, Win はない
#for (i in 1:120) {
#    Win = sqrt(24:36+4*i^2)
#    j = which(Win == floor(Win))
#    print(Win[j]^2)
#}
# まとめると,以下の 7 パターン
# 勝ち数, 負け数
# 36, 1
# 49, 4
# 64, 9
# 100, 16
# 169, 36
# 225, 49
# 289, 64

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

n 進表記

2014年12月02日 | ブログラミング

文字を convert すると,数値になる。
ヒントは「み・こ」。

“123” |> convert |> 1298
“abc” |> convert |> 12647
“ff7” |> convert |> 18907
“dq2” |> convert |> 16837
“y2k” |> convert |> 41740

10 以降を a, b, c, ... で表す n 進法で,最も大きい数値が "y" である。つまり 35 進法(なんというヒント!)と当たりをつけて,一つやってみるとビンゴ。

func = function(s) {
  dig = c(0:9, letters[1:25])
  s = unlist(strsplit(s, ""))
  d = sapply(s, function(c) which(dig == c))-1
  sum(d*(35^((length(s)-1): 0)))
}

func("123") # 1298
func("abc") # 12647
func("ff7") # 18907
func("dq2") # 16837
func("y2k") # 41740
func("codeiq") # 666852681

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村