皇室の夜
問題の定義
幸福王国の王室庭園はチェス盤のような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のように列と行からなる.
最初の行にナイトが移動可能な場合は、個数を出力します.
I/O例
入力:a 1、出力:2
私が作ったコード文字列を受け取ったとき、ord()でASKIIコードに変換し、数値に変換する方法!
幸福王国の王室庭園はチェス盤のような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のように列と行からなる.
最初の行にナイトが移動可能な場合は、個数を出力します.
I/O例
入力:a 1、出力:2
私が作ったコード
curpos = input()
curpos = 'a1'
dict = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6, 'g':7, 'h':8}
curx = int(dict[curpos[0]])
cury = int(curpos[1])
cnt = 0
# 8가지 경우의수
if (curx - 2) >= 0: # left
if (cury-1) >= 1:
cnt += 1 # up
if (cury+1) <= 8:
cnt += 1 # down
if (curx + 2) <= 8: # right
if (cury-1) >= 1:
cnt += 1 # up
if (cury+1) <= 8:
cnt += 1 # down
if (cury - 2) >= 1: # up
if (curx-1) >= 1:
cnt += 1 # left
if (curx+1) <= 8:
cnt += 1 # right
if (cury + 2) <= 8: # down
if (curx-1) >= 1:
cnt += 1 # left
if (curx+1) <= 8:
cnt += 1 # right
print(cnt)
コードの改良# 현재 나이트 위치 입력
input_data = input()
curx = int(ord(input_data[0])) - int(ord('a')) + 1 *
cury = int(input_data[1])
# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(-2,-1), (-1,-2), (1,-2), (2,-1), (2,1), (1,2), (-1,2), (-2,1)]
cnt = 0
for step in steps:
nx = curx + step[0]
ny = cury + step[1]
if nx >= 1 and nx < 8 and ny > 1 and ny <= 8:
cnt += 1
print(cnt)
Reference
この問題について(皇室の夜), 我々は、より多くの情報をここで見つけました https://velog.io/@yozzum/implementation-왕실의-나이트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol