Q05 いまだに現金払い?

from プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問

回答

echo 1000 |awk 'BEGIN{m=500}{print;s=$1;for(i=2;i<=NF-1;i++)s-=$i;for(a=$0;s>=m;s-=m){a=a" "m;print a}}' |awk 'BEGIN{m=100}{print;s=$1;for(i=2;i<=NF-1;i++)s-=$i;for(a=$0;s>=m;s-=m){a=a" "m;print a}}' |awk 'BEGIN{m=50 }{print;s=$1;for(i=2;i<=NF-1;i++)s-=$i;for(a=$0;s>=m;s-=m){a=a" "m;print a}}' |awk 'BEGIN{m=10 }{print;s=$1;for(i=2;i<=NF-1;i++)s-=$i;for(a=$0;s>=m;s-=m){a=a" "m;print a}}' |awk 'NF<=(15+1){split("",a);b=0;for(i=2;i<=NF;i++){a[$i]++;b+=$i}if($1==b){printf $1": ";for(v in a)printf v"*"a[v]" ";print ""}}'

1000: 100*5 50*10
1000: 100*6 50*8
1000: 100*7 50*6
1000: 100*8 50*4
1000: 100*9 10*5 50*1
1000: 100*9 50*2
1000: 100*10
1000: 10*5 50*9 500*1
1000: 50*10 500*1
1000: 100*1 10*5 50*7 500*1
1000: 100*1 50*8 500*1
1000: 100*2 10*5 50*5 500*1
1000: 100*2 50*6 500*1
1000: 100*3 10*5 50*3 500*1
1000: 100*3 50*4 500*1
1000: 100*4 10*10 500*1
1000: 100*4 10*5 50*1 500*1
1000: 100*4 50*2 500*1
1000: 100*5 500*1
1000: 500*2

real    0m0.015s
user    0m0.000s
sys     0m0.000s

解説

echo 1000 |
awk 'BEGIN{m=500}{print;s=$1;for(i=2;i<=NF-1;i++)s-=$i;for(a=$0;s>=m;s-=m){a=a" "m;print a}}' |
awk 'BEGIN{m=100}{print;s=$1;for(i=2;i<=NF-1;i++)s-=$i;for(a=$0;s>=m;s-=m){a=a" "m;print a}}' |
awk 'BEGIN{m=50 }{print;s=$1;for(i=2;i<=NF-1;i++)s-=$i;for(a=$0;s>=m;s-=m){a=a" "m;print a}}' |
awk 'BEGIN{m=10 }{print;s=$1;for(i=2;i<=NF-1;i++)s-=$i;for(a=$0;s>=m;s-=m){a=a" "m;print a}}' |
awk 'NF<=(15+1){split("",a);b=0;for(i=2;i<=NF;i++){a[$i]++;b+=$i}if($1==b){printf $1": ";for(v in a)printf v"*"a[v]" ";print ""}}'

参考

rubyに負けてない

bubka@e1fc2093f609:~/math-puzzle$ time ruby 05_01.rb
20

real    0m0.049s
user    0m0.040s
sys     0m0.000s

bubka@e1fc2093f609:~/math-puzzle$ time ruby 05_02.rb
20

real    0m0.059s
user    0m0.050s
sys     0m0.000s

bubka@e1fc2093f609:~/math-puzzle$ time ruby 05_03.rb
20

real    0m0.048s
user    0m0.040s
sys     0m0.000s

05_0[123].rb は、プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問 の q05_0[123].rb を手打ちしたものです。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-16 (水) 13:30:27