王室の夜
6616 ワード
幸福王国の王室庭園はチェス盤のような8×8座標平面です.ナイトは王室の庭の特定の部屋に立っている.ナイトは忠実な臣下で、毎日武術を練習しています.
ナイトは乗馬中なので、移動時はL字形でしか移動できず、庭の外から出られません.特定の場所から次の2つの状況に移動できます.
8 X 8座標平面上でノードの位置を指定した場合、そのノードが移動可能であれば個数を出力するプログラムを作成します.
王室の庭で行動位置を表現する場合、写真のように1から8まで、aからhまでです.
例えば、ナイトがa 1で移動可能である場合、2つの場合がある.a 1の位置は座標平面上で角点に相当する位置にあるため、ナイトは庭を離れることができない.
右側に2つのグリッドを移動し、次に1つのグリッド(c 2)を下に移動します.
もう1つの例は、ナイトがc 2に位置する場合、ナイトが移動できる場合が6つある.
-入力条件
最初の行には、現在のナイトが位置する座標(8×8座標平面)を表す2つの文字からなる文字列が入力されます.入力文字は、a 1などの列と行で構成されます.
-出力条件
最初の行に夜移動可能な場合、出力の数
-入力例
a1
-出力例
2
-問題を解く
この問題は前に解いた「上下左右」の問題に似ている.移動可能なパスのみが追加され、残りの要素は同じと考えられます.ナイトは次の2つの方法で移動できると言った.
従って、ナイトが移動できる経路は、(-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、羅東彬知音で
Reference
この問題について(王室の夜), 我々は、より多くの情報をここで見つけました https://velog.io/@lilpark/왕실의-나이트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol