銀河間通信

銀河間通信

中級

はじめに

地球と近隣の銀河の間では、毎ミリ秒ごとに何兆ものメッセージが飛び交っています。しかし、これほど長い距離を伝えるのは一筋縄ではいきません。厄介な太陽フレア、時間のゆがみ、迷走する力、そして宇宙のチョウが羽ばたくだけでも、伝送中にあるビットが勝手に変わってしまうことがあります。

さて、何が起きるか想像してみましょう。

  • "buy low"が"sell now"に変わって、Intergalactic Share Marketが大暴落する。
  • "save new worm hole"が"cave new worm hole"に変わって、Kepler Whirlシステムとの通信が途絶する。
  • あるいは、カウボーイの絵文字🤠がピエロの絵文字🤡に置き換わって、宇宙が実存的な恐怖に陥る。

破損したメッセージを検出することは、ただ重要というだけではありません。不可欠です。受信側は、惨事が起きる前に、どこかで何かがおかしくなったことを_必ず_知る必要があります。

でも、どうやって?

宇宙中の科学者やエンジニアたちは、はるか昔からこの問題と格闘してきました。宇宙規模のAIスーパークラスターが総出でデータを処理し続けています。そしてある日、一つの伝説がよみがえります。古くから伝わる強力な方法。デバッグフォーラムでささやかれ、見すぎてしまったエンジニアたちがつぶやいていた、あの方法です……

パリティビット!

とてもシンプルで、それでいてとても強力な方法。これなら、星間通信を救えるかもしれません。

説明

ここでの仕事は、次の2つを実装することです。

  • 伝送シーケンスを計算する送信機
  • それを復号する受信機

パリティビットは、伝送エラーを検出する簡単な方法です。 送信機と受信機は、一度に_ちょうど_8ビット(パリティビットを含む)しか送受信できません。 パリティビットは、各伝送で1のビットが_偶数_個になるように設定され、常に右から1番目のビットです。 したがって、受信機が11000001、01110101、01000000(つまり、1のビットが奇数個の伝送)を受け取ると、エラーがあることがわかります。

ただし、メッセージがこれほど短いことはほとんどなく、長い場合はシーケンスとして伝送する必要があります。

たとえば、メッセージ11000000 00000001 11000000 11011110(16進数ではC0 01 C0 DE)を考えてみましょう。

各伝送にはちょうど8ビットしか含められないため、データは7ビットとパリティビットだけを含めることができます。 そこで、データの7ビットごとにパリティビットを挿入する必要があります。

11000000 00000001 11000000 11011110
      ↑       ↑       ↑       ↑          (7th bits)

このメッセージの伝送シーケンスは、次のようになります。

1100000_ 0000000_ 0111000_ 0001101_ 1110
       ↑        ↑        ↑        ↑      (parity bits)

シーケンスの最初の伝送のデータ(1100000)には1のビットが2つ(偶数個)あるので、パリティビットは0です。 最初の伝送は11000000(16進数ではC0)になります。

次の伝送のデータ(0000000)には1のビットが0個(これも偶数個)あるので、パリティビットは再び0です。 したがって、2番目の伝送は00000000(16進数では00)になります。

次の2つの伝送のデータ(0111000と0001101)には、1のビットが3つあります。 伝送内の1のビットが偶数個になるように、これらのパリティビットは1に設定されます。 これらは01110001と00011011(16進数では71と1B)として伝送されます。

最後の伝送(1110)には、データが4ビットしかありません。 一度にちょうど8ビットが伝送され、パリティビットが一番右のビットなので、8ビットになるように0のビットを3つ追加し、そのあとにパリティビットを付けます。 これは次のようになります(_がパリティビットです)。

1110 000_
     ↑↑↑   (added 0 bits)

ここでも1のビットが奇数個なので、パリティビットは1です。 シーケンスの最後の伝送は11100001(16進数ではE1)になります。

このメッセージの伝送シーケンス全体は11000000 00000000 01110001 00011011 11100001(16進数ではC0 00 71 1B E1)です。


出典

Kah Gohリンクは新しいウィンドウまたはタブで開きます
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
ARM64 Assembly Exercism

銀河間通信を始める準備はできましたか?

Exercismに登録すれば、78個の演習、そして本物の人間によるメンタリングとともに、ARM64 Assemblyを学んでマスターできます。すべて無料です。