王室の夜


  • 問題
    幸福王国の王室庭園はチェス盤のような8×8座標平面です.ナイトは王室の庭の特定の部屋に立っている.ナイトは忠実な臣下で、毎日武術を練習しています.
    ナイトは乗馬中なので、移動時はL字形でしか移動できず、庭の外から出られません.特定の場所から次の2つの状況に移動できます.
  • は2つの格子を水平に移動し、その後、1つの格子
  • を垂直に移動する.
  • 垂直に2つのグリッドを移動し、次に水平に1つのグリッド
  • を移動する
    8 X 8座標平面上でノードの位置を指定した場合、そのノードが移動可能であれば個数を出力するプログラムを作成します.
    王室の庭で行動位置を表現する場合、写真のように1から8まで、aからhまでです.

    例えば、ナイトがa 1で移動可能である場合、2つの場合がある.a 1の位置は座標平面上で角点に相当する位置にあるため、ナイトは庭を離れることができない.
    右側に2つのグリッドを移動し、次に1つのグリッド(c 2)を下に移動します.
  • は2つのグリッドを下に移動し、右に1つのグリッド(b 3)
  • を移動する.
    もう1つの例は、ナイトがc 2に位置する場合、ナイトが移動できる場合が6つある.

    -入力条件


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

    -出力条件


    最初の行に夜移動可能な場合、出力の数

    -入力例


    a1

    -出力例


    2

    -問題を解く


    この問題は前に解いた「上下左右」の問題に似ている.移動可能なパスのみが追加され、残りの要素は同じと考えられます.ナイトは次の2つの方法で移動できると言った.
  • は2つの格子を水平に移動し、その後、1つの格子
  • を垂直に移動する.
  • 垂直に2つのグリッドを移動し、次に水平に1つのグリッド
  • を移動する
    従って、ナイトが移動できる経路は、(-2,-1)、(-1,-2)、(1,2)、(2,-1)、(1,2)、(-1,2)、(-2,1)、(-2,1)、(-2,1)の計8種類である.現在のナイト位置に移動経路を加え、8 X 8座標平面にあることを確認します.
    プロセスを順番にリストします.
    1.指定された夜を入力としてリストに保存
    2.listの0番索引は列として保存し、1番索引は行として保存する
    3.現在位置に移動経路を加えた後、8 X 8座標平面上にあることを確認する
    4.可能な数字を出力
    input_data = input()
    row = int(input_data[1])
    col = int(ord(input_data[0])) - int(ord('a')) + 1
    
    steps = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]
    count = 0
    
    for step in steps:
        next_row = row + step[0]
        next_col = col + step[1]
        
        if next_row >= 1 and next_row <= 8 and next_col >= 1 and next_col <= 8:
            count += 1
            
    print(count)
    ここでは、chr()とは異なり、与えられた文字をaskiコードに変換する関数であるord()という関数を使用します.問題では、座標平面列の位置を表す文字が使用されているため、文字列入力のみが受信できます.strタイプとintタイプは互いにタイプが異なるため、演算はできません.したがって、ord()関数を使用して、与えられた文字をaskiコード値に変換し、「a」のaskiコード値を減算して、列を1から8の整数で表す.その後,ナイトが移動可能な場合をそれぞれ加算し,8×8座標平面上にある場合の数を出力した.
    この問題の鍵は「アスキーコードを利用して文字を数字に変換できるかどうか」だと思います.以前に解いた上下左右の問題に似ているため,コードの作成はそれほど難しくない.
    出典:これは就職のためのコードテストで、Python、羅東彬知音で