秘密の握手

秘密の握手

中級

はじめに

友達と、その友達の友達と一緒に、秘密のプログラミングクラブを始めることにしました。みんながお互いのことを知っているわけではないので、相手がメンバーだとわかるための秘密の握手を考えることにしました。事情を知らない人には、このコードを解読されたくありません。

コードは、一人が1から31までの数字を言い、もう一人がそれを一連の動作に変える、という仕組みにしました。

説明

課題は、1から31までの数を秘密の握手の一連の動作に変換することです。

動作の並びは、数を2進数に変換したときの右端から5桁を見て決めます。右端の桁から始めて、左へ進みます。

それぞれの位に対応する動作は次のとおりです。

00001 = wink
00010 = double blink
00100 = close your eyes
01000 = jump
10000 = Reverse the order of the operations in the secret handshake.

例として、数9を使ってみましょう。

  • 9を2進数にすると1001です。
  • 一番右端の桁は1なので、最初の動作はwinkです。
  • 左に進むと、次の桁は0なので、double blinkはありません。
  • さらに左に進むと、次の桁は0なので、目は開けたままです。
  • さらに左に進むと、次の桁は1なので、jumpを実行します。

これで最後の桁なので、最終的なコードは次のとおりです。

wink, jump

26という数は2進数で11010なので、次の動作になります。

  • double blink
  • jump
  • 動作を逆順にする

したがって、26の秘密の握手は次のとおりです。

jump, double blink
Note

2進数とは何か、どのように動くのかがよくわからない場合は、この2進数チュートリアルを見てみてください。

出力形式

一連の動作を、null終端された文字列として出力します。区切りにはカンマとスペースを使います。

レジスタ

レジスタ 用途 型 説明
$a0 入力 整数 1から31までの数値
$a1 入力・出力 アドレス null終端された出力文字列
$t0-9 一時的 任意 一時的な保存に使う
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
MIPS Assembly Exercism

秘密の握手を始める準備はできましたか?

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