見出し画像

Retro-gaming and so on

RE: プログラミング学習日記 2024/02/13〜

龍虎氏の記事(2024/02/15)に対するコメント。
っつーか別解。

別解その1:


別解その2:


両者ともenumerateがキーポイント。
"10111000"は右から1の位、2の位、4の位、8の位、・・・となってるわけだが(十進法じゃなく二進法な為)、逆順"00011101"にすると先頭から1の位、2の位、4の位、8の位、・・・が成立する。
つまり、この時点でenumerateをかけると、

[(0, '1'), (1, '0'), (2, '1'), (3, '1'), (4, '1'), (5, '0'), (6, '0'), (7, '0')]

となり、「リストのインデックス」が位の「サイン」になり得る。

  • 0: 2^0 = 1 で1の位
  • 1: 2^1 = 2 で2の位
  • 2: 2^2 = 4 で4の位
  • 3: 2^3 = 8 で8の位
てなカンジだ。
と言う事は各位に於いて


を計算してその総和を取ればいい。
方法論的にはリスト内包表記で処理していって、その総和を取る、と言う龍虎氏もやったやり方。
もう一つは、十進法 -> 二進法がunfoldで計算出来たので、その逆はfunctools.reduceで計算出来る、って事だ。結果、二進数⇔十進数の変換も一種の圧縮・解凍だ、って捉える事が出来る。
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「RE: プログラミング学習日記」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事