🔙
🔝

【paiza問題集 解説】
戦セット

【競技1】合格判定

合格判定

  • 例1

  • n = int(input())
    if n >= 80:
        print('pass')
    else:
        print('fail')
    
  • 例2

  • n = int(input())
    print('pass' if n >= 80 else 'fail')
    

    以上 >= と以下 <= を間違えないように!

【競技2】間違い探し

間違い探し

  • 例1

  • s1 = input()
    s2 = input()
    if s1 == s2:
        print('YES')
    else:
        print('NO')
    
  • 例2

  • s1 = input()
    s2 = input()
    print('YES' if s1 == s2 else 'NO')
    

    比較 == と代入 = を間違えないように!

【競技3】深夜時間の表記

深夜時間の表記

  • 例1

  • n = int(input())
    
    time = n % 12
    if time == 0:
        time = 12
    
    print(time)
    
  • 例2

  • n = int(input())
    print(n - 24)
    
  • 例3

  • n = int(input())
    print(n % 24)
    

    条件に「25 ≤ n ≤ 36」とあります。例1だと何時間であっても 12時間表記にできますが、遅くとも 36時までですので、単純に 24 を引くか、24 で割った余りで求めることもできます。

【競技4】明日天気にな〜れ!

明日天気にな〜れ!

    n = int(input())
    weathers = {'forward': 'Sunny', 'sideways': 'Cloudy', 'reverse': 'Rainy'}
    
    for _ in range(n):
        d = input()
        print(weathers[d])
    

    リストでも組めますが、辞書を使うと簡単です。

【競技5】ゆで卵

ゆで卵

    m = int(input())
    
    if m <= 5:
        print('raw')
    elif m <= 7:
        print('soft boiled')
    else:
        print('hard boiled')
    

    評価順に注意です。
    ≤ は <= と書きます。

【競技6】匿名希望さん

匿名希望さん

  • 例1

  • s1, s2 = input().split()
    print(s1[0] + '.' + s2[0] + '.')
    
  • 例2

  • s1, s2 = input().split()
    print(f'{s1[0]}.{s2[0]}.')
    

    入力を空白区切りで分割し、それぞれの要素番号 0 である頭文字を使って加工します。

【競技7】奇数大好き山田さん

奇数大好き山田さん

  • 例1

  • n = int(input())
    
    nums = []
    for _ in range(n):
        a = int(input())
        
        if a % 2 == 1:
            nums.append(a)
    
    print(*sorted(nums), sep='\n')
    
  • 例2

  • n = int(input())
    nums = [a for _ in range(n) if (a:=int(input())) % 2 == 1]
    print(*sorted(nums), sep='\n')
    

    ソートをしなければいけませんので、一度リストに奇数を格納してから、最後にソートして出力します。

    print()文の書き方については「2章 見える化ちゃん」で学習できます。

    := については「3章 補足」で学習できます。

【競技8】お一人様一点限り

お一人様一点限り

  • 例1

  • n = int(input())
    
    memo = []
    for _ in range(n):
        c = input()
        
        if c not in memo:
            print('YES')
            memo.append(c)
        else:
            print('NO')
    
  • 例2

  • n = int(input())
    
    memo = set()
    for _ in range(n):
        c = input()
        print('YES' if c not in memo else 'NO')
        memo.add(c)
    

    一度来店した客をメモして、初回の客かどうかをチェックします。その際、リストでも構わないのですが、重複なし、順不同でよければセットを使うほうが高速処理できておススメです。

    空のセットは set() で作ります。{} にすると辞書型になってしまいますので注意です。

【挑戦9】線対称と点対称

線対称と点対称

    def line_symmetry(plane):
        return ([row[::-1] for row in plane] == plane) or (plane[::-1] == plane)
    
    def point_symmetry(plane):
        return [row[::-1] for row in plane[::-1]] == plane
    
    def get_result(ls, ps):
        results = {
            ( True,  True) : 'line point symmetry',
            ( True, False) : 'line symmetry',
            (False,  True) : 'point symmetry',
            (False, False) : 'none'
        }
        return results[ls, ps]
    
    
    n, _ = map(int, input().split())
    d = [input() for _ in range(n)]
    ls = line_symmetry(d)
    ps = point_symmetry(d)
    print(get_result(ls, ps))
    

    線対称のやり方は「2章 二次元リスト」の 線対称 をご覧ください。
    点対称のやり方は「2章 二次元リスト」の 点対称 をご覧ください。

    文の代わりに辞書で判定しています。
    キーの TrueFalse は、それぞれ 1 と 0 にしても等しく機能します。

    関数の書き方は「3章 関数」で学習できます。難しくないよ!