メディア
連載
» 2019年04月08日 09時00分 公開

組み込みエンジニアの現場力養成ドリル(15):世界で最も難しい2進数パズル 〜2進数の世界に住むことの不思議〜 (1/3)

今回は、プログラマーであればおなじみの「2進数」をテーマに、レベルチェック問題を幾つか出題します。中には“世界で最も難しい問題”も含まれます。この機会に、2進数の意外な性質や使い方に関する理解を深めてみてはいかがでしょうか?

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),TechFactory]

はじめに

 ここ数回は「ユーザーインタフェース」の在り方をテーマに、主に“不親切な駅の案内表示”について取り上げてきました。身近な話題とあって反響も大きく、読者の方から「大阪梅田の地下街はこんなもんじゃない!」といったコメントも寄せていただきました(機会があればぜひ体験してみたいと思います)。本連載で取り上げた京急蒲田駅やJR渋谷駅に負けず劣らずの不親切な案内表示は、日本中にあふれているようです。

 2020年の東京オリンピック・パラリンピック開催に向けて、さまざまな駅で案内表示の見直しや増設が進められているようですが、そもそもの“分かりやすい案内表示”の基本思想が、適切な案内表示板がないと即死してしまう先天性方向音痴の筆者と駅担当者とでは全く異なるため、今後、手間とお金をかけて複雑な案内表示が量産される可能性も十分に考えられます。

 そうなったらもう、「異国の地で迷うことも旅の喜びである」と感じてくれる寛大な外国人観光客が1人でも多くいることを祈るしかありません……。

12進数、31進数、24進数、60進数、10進数が混在する世界

 今回も身近にある“良くないユーザーインタフェース”の続編をお届けしようと思いましたが、さすがに4回連続は重複感、マンネリ感が満載になってしまいます。

 そこで、何か面白いネタはないかとWeb検索してみたところ……、本稿を執筆している日(3月14日)がちょうど「円周率の日」であることが分かりました。

 確かにその通りですね。試しに米国Yahoo!(ヤフー)にアクセスしてみると、「3月14日15時9分26.53秒に円周率を祝う」というマニアックな人を発見! どうやってお祝いするのか不思議に思っていたら、ケーキの中央に「Happy Birthday π」と大書し、周囲に円周率を20桁ほどチョコレートで書き、15時9分26秒にロウソクの火を吹き消すのだそうです。

 この「3月14日15時9分26.53秒」を見て、筆者は不思議なことに気が付きました。「3月」は12進数、「14日」は31進数、「15時」は24進数、「9分」は60進数、「26秒」も60進数、「0.53」は10進数とバラバラなのです。

 厳密には、どれも10進数なのですが、桁上がりのタイミングが異なるので、かなり複雑な形式といえます。特に「日」は、月によっては28進数、29進数、30進数、31進数になり、皆さんもプログラミングの際に「面倒だなぁ」と思っていることでしょう。そう、「面倒だなぁ」はバグの素です。

2進数の世界に住むということ

 一方、皆さんが日頃プログラミングで使っている2進数は単純明快ですね。「0」と「1」だけで全ての数、文字、情報を表すのですから。プログラマーは、2進数を避けては通れません。ある意味、プログラマーは「2進数ワールドの住人」といえます。

 今回は、どの程度、皆さんが2進数に馴染んでいるかのレベルチェックとして、幾つか問題を出します。中には「世界で最も難しい問題」もあります。解きながら、2進数の意外な性質や使い方をご理解いただければ幸いです。

 2進数の特徴をきちんと把握できれば、データの設計(例えば、サイズを2ビットにするか1バイトにするか、形式を文字列にするかビット列にするか、浮動小数点にするかなど)や、処理のアルゴリズムを考える上で選択肢が大きく広がります。意外な処理方式や画期的なアルゴリズムを思い付くこともあるでしょう。では、始めます!

チェックリストと問題

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

Loading