【就活】ウェブテストの計算問題をプログラミングで解く

手作業で解くよりプログラムすぐに書いたほうが簡単なことも。制限時間ある中でもiPython使って対話的に動かす方が、紙とペンと電卓よりも早いことがある。

例題:80, 50, 10円切手が5枚ずつある。それぞれ0~5枚使って200円を作るには何通りか

 
for i in range(6):
     for j in range(6):
         for k in range(6):
             if 80*i+50*j+10*k==200:
                 print(i,j,k)

0 3 5
0 4 0
1 2 2
2 0 4
と返ってくる。
切手を使って作れる金額を片っ端から調べあげて200になるものを抜き出すと、
80, 50, 10円切手がそれぞれ0枚、3枚、5枚の場合から2枚、0枚、4枚の場合まで4通り。

例題: 5円玉と10円玉がある。枚数は合わせて40枚で、金額の合計は275円になる。5円玉は何枚か。


from sympy import *
x, y, z = symbols('x y z')
solve([x+y-40,5*x+10*y-275],[x,y])

{x: 25, y: 15}
と返ってくる。 x, yを5円玉、10円玉の枚数にした。solveの第一変数にある数式は、それぞれ0になるように書く。
sympyでは変数として使う文字をsymbolizeしておく必要がある。zは使わなかったが、後々使うかもしれないことを考慮して一緒にsymbolizeした。
この程度だと、頭で解くのも、紙に書くのも同じぐらいのスピードかもしれない。

あと、ウェブテストには変数の数が式の数より多い最適化問題もあるので、simplex methodもすぐ使えると便利なのかもしれない。そこまでいくと、頭で計算するかタイピングがどちらが早いかわからないけど。

コメント