본문으로 바로가기

C131:ユニークな部屋番号

category TIL/Algorithm 2024. 4. 30. 00:12

PAIZA ホテルにチェックインしたあなたは、フロントで部屋の鍵を渡されました。 鍵には部屋番号が書かれたキーホルダーが付いています。

部屋番号に使われているフォントは少し珍しいもので、
・0, 1, 8 は 180 度回転しても形が変わらない
・6 を 180 度回転すると 9 になる
・9 を 180 度回転すると 6 になる

という特徴を持っています。 この特徴によって、特定の部屋番号が書かれたキーホルダーは、180 度回転しても部屋番号をある整数として読み取ることができます。

たとえば、次の図のように 1068 を 180 度回転したものは 8901 と読めます。

このような「180 度回転しても整数として読める番号」の中には、180 度回転する前と後で同じ番号に読めるものが存在します。 86098 などはその一例です。
あなたはこの性質を持つ部屋番号がいくつあるのかが気になりました。 PAIZA ホテルは A 番から始まり B 番で終わる連続した部屋番号の部屋を持っています。
これらの部屋番号の中で、180 度回転する前と後で同じ番号に読めるものがいくつあるかを求めるプログラムを書いてください。 なお、どの部屋の番号も 0 から始まることはないものとします。

評価ポイント10回のテストケースで、正答率、実行速度、メモリ消費量をはかり得点が決まります。
より早い解答時間で提出したほうが得点が高くなります。
  1. 複数のテストケースで正しい出力がされるか評価(+50点)
  2. 解答までの速さ評価(+50点)
入力される値

入力は以下のフォーマットで与えられます。

A B
  • ・PAIZA ホテルにある部屋番号の始めと終わりを表す整数 A, B がこの順に半角スペース区切りで与えられます。
  • ・入力は 1 行となり、末尾に改行が 1 つ入ります。

それぞれの値は文字列で標準入力から渡されます。標準入力からの値取得方法はこちらをご確認ください
期待する出力A 番から B 番までの間にある「180 度回転する前と後で同じ番号に読める」ような部屋番号の個数を整数で出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件

すべてのテストケースにおいて、以下の条件をみたします。

  • ・1 ≦ A ≦ B ≦ 100,000
入力例1
1 9
出力例1
2
入力例2
100 10000
出力例2
32

0

0 から始まることはない

A 番から始まり B 番で終わる連続した部屋番号

前と後で同じ

このような

特定の部屋番号が書かれたキーホルダーは

特徴を持っています

書かれたキーホルダーが付いています

鍵を渡されました

読み取る

# 1 9
def is_same(num):
    turn=''
    for i in str(num):
        if i in '018':
            turn += i
        elif i == '6':
            turn += '9'
        elif i == '9':
            turn += '6'
        else:
            return False
    if int(turn[::-1]) == num:
        # print(turn, num)
        return True
        
a, b = map(int, input().split())
# print(a,b)
count = 0
for i in range(a, b+1):
    if is_same(i) == True:
        count += 1
print(count)

'TIL > Algorithm' 카테고리의 다른 글

C071:直角三角形  (0) 2024.05.01
C137:取締役選任  (0) 2024.05.01
C133:雷危険地域  (0) 2024.04.28
C092:工場のベルトコンベア  (0) 2024.04.27
C032:お得な買い物 ???  (0) 2024.04.26