[アルゴリズム](イコール)王室の夜-パイソン


教材:これはPythonでコードテストを行います
CHAPTER 4の実装
実戦問題4-3王室の夜114 p

王室の夜


質問する


幸福王国の王室庭園はチェス盤のような8× 八座標平面ナイトは王室の庭の特定の部屋に立っている.
ナイトはとても忠実な臣下で、毎日武術を練習しています.
ナイトは乗馬中なので移動時はL字でしか移動できず退院できません
ナイトは特定の位置から以下の2つの状況に移動することができる.
  • は2つの格子を水平に移動し、その後、1つの格子
  • を垂直に移動する.
  • 垂直に2つのグリッドを移動し、次に水平に1つのグリッド
  • を移動する

    そうですか.× 8座標平面上に一晩の位置が与えられ、その夜に移動できる場合、
    プログラムを作成する.王室の庭で行為を表現するときは1から8、列位を表現するときは
    aからhへの表現
  • c 2で移動可能なのは6種類:
  • a 1で移動可能なのは2種類:
  • 入力


    最初の行には、現在のナイトが位置する座標(8 x 8座標平面)を表す2つの文字からなる文字列が入力されます.入力文字はa 1のように列と行からなる.

    しゅつりょく


    最初の行にナイトが移動できる場合は、数値を出力します.
    入力例
    a1
    出力例
    2

    に答える


    に近づく。

  • dxとdyに対応する点の移動量
  • さらに
  • を加え、座標で表す場合は、碁盤に馬がいるかどうかをチェックし、馬があれば
  • と数えます.
  • の前では,上下左右に問題を解く際に用いられる解決策の解答を反映しようと努力した.
  • Note


    Python Askyコード用法ord(),chr()

    コミット1-正しい

    dot = list(input())
    
    x = ord(dot[0])-96
    y = int(dot[1])
    cnt = 0
    
    dx = [-1,1,2,2,1,-1,-2,-2]
    dy = [2,2,1,-1,-2,-2,-1,1]
    for i in range(len(dx)):
        nx = x+dx[i]
        ny = y+dy[i]
        if nx<=8 and nx>=1 and ny>=1 and ny<=8:
            cnt+=1
    
    print(cnt)

    ノートをまちがえる


    本の中の解答は1つの配列の中で方向を設定してSetと定義します.そしてスタッフ全員がfor Moonからお会計を呼んでくれました.同じ方法ですが、ListとSetを重ねて使えることが分かったので、また新しい解法がわかって嬉しかったです.また、上下左右の問題で改善したい部分を直接問題から代入して、問題の解き方がよく合っていて嬉しいです.
  • 本のソリューション
  • 
    # 현재 나이트의 위치 입력받기
    input_data = input()
    row = int(input_data[1])
    column = int(ord(input_data[0])) - int(ord('a')) + 1
    
    # 나이트가 이동할 수 있는 8가지 방향 정의
    steps = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]
    
    # 8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
    result = 0
    for step in steps:
        # 이동하고자 하는 위치 확인
        next_row = row + step[0]
        next_column = column + step[1]
        # 해당 위치로 이동이 가능하다면 카운트 증가
        if next_row >= 1 and next_row <= 8 and next_column >= 1 and next_column <= 8:
            result += 1
    
    print(result)

    結果

  • 解答時間:20分
  • References


    これはPython-ナドンビンゼとのコードテストです