Pythonで7セグメントディスプレイ表示時の数値の鏡像が同じかどうかを判定する方法
ある数値 n が与えられたとき、それを7セグメントディスプレイに表示した状態で左右反転(鏡像)しても、元の表示と同じ見た目になるかどうかを判定する問題を解説します。
例えば、n = 818 の場合、出力は True になります。「818」を7セグメントディスプレイ上で左右に反転しても、まったく同じ表示になるためです。
判定の考え方
7セグメントディスプレイにおいて、左右反転しても形が変わらない数字は「0」「1」「8」の3つだけです。この性質を利用すると、次の手順で判定できます。
- まず、数値 n を文字列に変換します。
- すべての桁が「0」「1」「8」のいずれかであるかを確認します。それ以外の数字が1つでも含まれていれば、その時点で False を返します。
- 次に、文字列の左端と右端から順に中央へ向かって文字を比較し、回文(前から読んでも後ろから読んでも同じ並び)になっているかを確認します。一致しない箇所があれば False を返します。
- すべてのチェックを通過すれば、鏡像は元の数値と同じなので True を返します。
このアルゴリズムの時間計算量は桁数を d とすると O(d)、文字列への変換が必要なため空間計算量も O(d) となります。
Pythonでの実装例
以下のコードで実際の動作を確認できます。
def solve(n): num_str = str(n) for i in range(len(num_str)): if num_str[i] not in ['0', '1', '8']: return False left = 0 right = len(num_str) - 1 while left < right: if num_str[left] != num_str[right]: return False left += 1 right -= 1 return True n = 818 print(solve(n))
入力
818
出力
True
このように、「使用できる数字の制限チェック」と「回文判定」の2段階の処理を組み合わせることで、7セグメントディスプレイ上で鏡像対称となる数値を簡単に判定できます。
-
Pythonで素数を判定するプログラムの書き方を徹底解説
はじめに この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。 問題の概要 問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。 まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。 プログラムの考え方 今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。 1以下の数値は素数ではない
-
Pythonでアームストロング数を判定するプログラムの書き方
この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す