Hatena::ブログ(Diary)

わさっき RSSフィード

2019年01月01日

[] 36通り,61通り

2019年になりました.今年もよろしくお願いします.

いきなりですが問題です.

九九で,「3×5」と「5×3」のように,かけられる数とかける数を反対にしてできる,異なる式の組み合わせをすべて,答えましょう.

「組み合わせ」ですので,「3×5と5×3」を1つの組としたら,「5×3と3×5」を別の組としてはいけません.「異なる式」というのは,「2×2」のような,かけられる数とかける数が同じになる式は,対象外(「2×2と2×2」は不可)となることを意味します.

といったところで解答です.Rubyワンライナーで求められます.

$ ruby -e 'puts (1..8).map{|x|((x+1)..9).map{|y|"%dx%d=%dx%d"%[x,y,y,x]}}.inject(:+)'

1x2=2x1

1x3=3x1

1x4=4x1

1x5=5x1

1x6=6x1

1x7=7x1

1x8=8x1

1x9=9x1

2x3=3x2

2x4=4x2

2x5=5x2

2x6=6x2

2x7=7x2

2x8=8x2

2x9=9x2

3x4=4x3

3x5=5x3

3x6=6x3

3x7=7x3

3x8=8x3

3x9=9x3

4x5=5x4

4x6=6x4

4x7=7x4

4x8=8x4

4x9=9x4

5x6=6x5

5x7=7x5

5x8=8x5

5x9=9x5

6x7=7x6

6x8=8x6

6x9=9x6

7x8=8x7

7x9=9x7

8x9=9x8

コマンドの後ろに「|wc -l」を付けると「36」と出ます.36通りとなります*1Rubyのコードについて,2つのmapに替えてeachを使い,入れ子の中でputsを用いれば,injectの呼び出しをする必要もなくなり,もっと字数は減ります.上の書き方にしたのは,求めた値(putsの引数)を配列としたかったからです.

さらにですが問題です.

九九で,「2×4」と「8×1」のように,かけ算の答えが等しくなる,異なる式の組み合わせをすべて,答えましょう.

この問題では「2×2」も考慮しないといけません.例えば「2×2と4×1」も,条件に合います.

こちらも,Rubyワンライナーにしてみます.

$ ruby -e 'puts (1..81).map{|z|(1..9).map{|x|z%x==0&&z/x<=9?"%dx%d"%[x,z/x]:nil}.compact.combination(2).map{|p|p.join("=")}}.inject(:+)'

1x2=2x1

1x3=3x1

1x4=2x2

1x4=4x1

2x2=4x1

1x5=5x1

1x6=2x3

1x6=3x2

1x6=6x1

2x3=3x2

2x3=6x1

3x2=6x1

1x7=7x1

1x8=2x4

1x8=4x2

1x8=8x1

2x4=4x2

2x4=8x1

4x2=8x1

1x9=3x3

1x9=9x1

3x3=9x1

2x5=5x2

2x6=3x4

2x6=4x3

2x6=6x2

3x4=4x3

3x4=6x2

4x3=6x2

2x7=7x2

3x5=5x3

2x8=4x4

2x8=8x2

4x4=8x2

2x9=3x6

2x9=6x3

2x9=9x2

3x6=6x3

3x6=9x2

6x3=9x2

4x5=5x4

3x7=7x3

3x8=4x6

3x8=6x4

3x8=8x3

4x6=6x4

4x6=8x3

6x4=8x3

3x9=9x3

4x7=7x4

5x6=6x5

4x8=8x4

5x7=7x5

4x9=6x6

4x9=9x4

6x6=9x4

5x8=8x5

6x7=7x6

5x9=9x5

6x8=8x6

6x9=9x6

7x8=8x7

7x9=9x7

8x9=9x8

組み合わせは61通りです.奇数になるのは,九九の範囲で「積が平方数になるとき,組み合わせは奇数通り(そうでない場合は偶数通り)」なのと「積が平方数になるのは9(奇数)通り」であるためです.

こちらでは,1から81までを積の候補とし,「積が等しくなる,かけられる数×かける数の式」を求めて配列に格納し,そこから,Array#combinationで組み合わせを獲得するという方法をとりました.

*1:「何通りか」だけであれば,すべて書き出す必要はなく,8+7+6+5+4+3+2+1や(9・9−9)/2といった式で,求めることができます.

トラックバック - http://d.hatena.ne.jp/takehikom/20190101/1546351451
リンク元