第65回【Python】ボウリング

現在取り組んでいるのは、paiza ラーニング問題集「配列活用メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 65 回目です。

「配列活用メニュー」も残すところ、今回と次回のあと 2 回となりました。我ながら地道によく頑張ってきたなぁと自画自賛。すでに、次は何をやろうか、先を見据えています。まだまだ勉強は終わらない。

それでは、今日も頑張ってみようと思います。

ボウリング

あなたはボウリングをしています。フレームの 1 投目を投げ終わったあなたは、次に狙うピンの番号と残っているピンの本数を知りたくなりました。ピンの情報が与えられるので、狙うべきピンの番号と残っているピンの本数を求めてください。

狙うピンの決め方は次の通りとします。
– 残っているピンのうち、先頭 (P_1側) のピンを狙います。ただし、同じ列に複数ピンがある場合は、それらのうちピン番号が最も小さいピンを狙います。

P_10 P_9 P_8 P_7
P_6 P_5 P_4
P_3 P_2
P_1

・4 行でピンの情報が与えられます。ピン番号は以上の通りです。
・P_1 が先頭のピンです。
・P_i (1 ≦ i ≦ 10) が 0 のとき、その位置にはピンがないことを、1 のときその位置にピンが残っていることを表します。


すべてのテストケースにおいて、以下の条件をみたします。

・P_i は 0 または 1 (1 ≦ i ≦ 10)
・少なくとも 1 本のピンが残っていることが保証されています。


1 0 0 1
0 0 0
0 0
0

ボウリングなんて、もう何年も行っていないなぁ。例えば、7 9 10 番ピンが残っていた場合、この問題に合わせると、7 番ピンを狙うことになるんだろうけれど、9 10番ピンの間を狙う方が良い気がしなくもない。狙ったところに投げられるかどうかは別問題。

Python
P = []
pNo = 0
pLeft = 0
for i in range(4):
    P += input().split()
for i in range(10):
    if P[i] == '1':
        pNo = 10 - i
        pLeft += 1
print(pNo)
print(pLeft)
VBA
Dim A(9) As Integer
k = 0
pNo = 0
pLeft = 0
For i = 1 To 4
    temp = Split(Cells(i, 1), " ")
    For j = LBound(temp) To UBound(temp)
        A(k) = temp(j)
        k = k + 1
    Next
Next
For i = LBound(A) To UBound(A)
    If A(i) = "1" Then
        pNo = 10 - i
        pLeft = pLeft + 1
    End If
Next
Debug.Print pNo
Debug.Print pLeft

最後に

二次元配列を作らないといけないのかと思いきや、一次元配列で事足りる。こういうのに気づくことができるかどうかは、凡人の LeoSaki(旦那)は、経験からの学習しかない。ピン番号の取得を 10 – i で行うとかも、昔何かでやったことがあったからぱっと思いついた。

1 問 1 問を理解しながら解いていけば、どこかで活用できるはず、と思って、面倒でもじっくり解くようにしています。

引き続き、よろしくお願いいたします!

Pythonpaiza,学習,Python

Posted by LeoSaki