8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

特殊な三進数、「廃マンションの一室」をpython3で攻略

Posted at

こんにちは。nasuoです。

皆さんはPaizaの新作ゲーム、電脳少女プログラミング2088で遊んでますでしょうか。

僕はといえば、レイミとストーリーを進めていく最中に、
「廃マンションの一室」という問題に出会いました。

スクリーンショット 2025-01-25 17.27.23.png
https://ppg.paiza.jp/denno2088/challenges/denno2088_c_c_02

今までの常識を見つめ直させる良問だなと思いながら、

スクリーンショット 2025-01-25 17.04.24.png

攻略できた!よっしゃー!

十進数や三進数の仕組みを見直す、良い機会になりました。
(レイミが褒めてくれる親切な設計、すごくいいですね。)

では、早速コード解説に参りましょう。

廃マンションの一室  解答:python3

def san(n):
    q = (n + 1) // 3 
    r = (n + 1) % 3
    if q == 0:
        return ""
    else:
        return san(q) + "201"[r]

n = int(input())
if n == 0:
    print(0)
    exit()
hugou = "1"
if n < 0:
    hugou = "2"
    
print(hugou + san(n))

コードの概要としては、
1,定義
2,符号決定
3,出力
の3つからなります。

1,定義
入力された値から1を足した数字に、三で割った商と余りをqとrとしておきます。このアルゴリズムについては、下記の動画の説明がわかりやすかったです。ぜひ参考にしてみてください。

入力された値から1を足しているのは、[2,0,1]の並びを-1,0,1と対応させたかったからです。2をどのように-1として実装するのかが、この問題を解く上で重要だったと思います。

2,符号決定
まず、0を除外します。都合の悪い数字を早めに退場させたい時に、exit()は本当に便利。
入力された値が自然数なら1を、そうでないなら2を一番左におきます。

3,出力
符号と定義に通した入力値を、結合させて完成です。

やっぱりプログラミングって、すごく楽しいし面白いですね!

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?