#author("2017-11-15T23:49:47+09:00","default:nobuoki","nobuoki")
* 問題(和訳) [#r7601705]
Problem 205 - PukiWiki
https://goo.gl/r6CkVi

* 回答例 [#r07f35df]
(echo -e {1..6}'+'{1..6}'+'{1..6}'+'{1..6}'+'{1..6}'+'{1..6}"\\n" | bc | awk '{a[$1]++}END{for(v in a)print "6",v,a[v]}'; echo -e {1..4}'+'{1..4}'+'{1..4}'+'{1..4}'+'{1..4}'+'{1..4}'+'{1..4}'+'{1..4}'+'{1..4}"\\n" | bc | awk '{a[$1]++}END{for(v in a)print "4",v,a[v]}') | awk '$1==4{d4[$2]=$3}$1==6{d6[$2]=$3}END{for(x in d4)for(y in d6)if(x*1>y*1)print x,y,d4[x],d6[y]}' | awk '{a+=$3*$4}END{printf "%0.7f\n",a/(6^6*4^9)}'

* 実行結果 [#i9d44ffd]
#pre{{
0.5731441

real    0m4.413s
user    0m3.250s
sys     0m1.530s
}}

* 解説 [#mac3e4b2]
問題文の通り、そのまま素直に、
ピーターとコリンそれぞれのサイコロの出目と組み合わせ数を計算し、

(ピーターがコリンに勝つ組み合わせ数)/ (全体の組み合わせ数)

を計算する

#prism(bash){{{{
#!/bin/bash

(
# 6 のサイコロの出目の組み合わせを全て出力(bash依存)
# 1+1+1+1+1+1
# 1+1+1+1+1+2
#  ...
# 6+6+6+6+6+6
echo -e {1..6}'+'{1..6}'+'{1..6}'+'{1..6}'+'{1..6}'+'{1..6}"\\n" |
# 出目の合計値を計算
bc |
# それぞれの出目が何通りあるかを集計
awk '
{
  a[$1]++
}END{
  for(v in a)
    # 6 のサイコロの出目であることを識別するために、
    # 先頭フィールドに "6" を付与する
    print "6",v,a[v]
}';
# 同様に 4 のサイコロの出目の組み合わせを集計
echo -e {1..4}'+'{1..4}'+'{1..4}'+'{1..4}'+'{1..4}'+'{1..4}'+'{1..4}'+'{1..4}'+'{1..4}"\\n" |
bc |
awk '
{
  a[$1]++
}END{
  for(v in a)
    print "4",v,a[v]
}'
) |
# ピーターがコリンに勝つ組み合わせを探す
awk '
# 4 のサイコロの出目の組み合わせを、配列 d4 に格納
$1==4{
  d4[$2]=$3
}
# 6 のサイコロの出目の組み合わせを、配列 d6 に格納
$1==6{
  d6[$2]=$3
}
END{
  for(x in d4)
    for(y in d6)
      # ピーター (x) がコリン (y) に勝つ場合は出力
      if(x*1>y*1)
        print x,y,d4[x],d6[y]
}' |
# 結果の出力
awk '
{
  # ピーターがコリンに勝つ組み合わせの合計を集計
  a+=$3*$4
}END{
  # 勝つ組み合わせを、全ての組み合わせで割る
  # 10進7桁にroundし、 0.abcdefgという形で回答
  printf "%0.7f\n",a/(6^6*4^9)
}'

}}}}

* 別解 [#bb36abaf]
最後の集計部分を awk ではなく dc で求めてみたところ、
dc でも k コマンドで小数点 7 桁の精度で出せるが、
残念なことに round はしてくれないようだ

#prism(bash){{{{
ry) | awk '{a+=$3*$4}END{printf "%0.7f\n",a/(6^6*4^9)}'

ry) | awk '{print $3*$4}END{for(i=1;i<=NR;i++)printf "+";print "";print 6^6;print 4^9;print "*\n7\nk/p"}' | dc
}}}}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS