モジュール詳細:偽赤色矢印

ポインター。例外を投げないように、コードを正しい方向に向けてくれ。

モジュールには4つの方向ボタンと中央に小さなディスプレーがある。

ボタンが赤ではない場合、またはディスプレーに2桁の数字が表示されていない場合、異なるモジュールを参照している。

ディスプレーには初期値が表示される。上と下ボタンは数値を1ずつ変更し、左と右は数値を10ずつ変更する。モジュールを解除するには以下のアセンブリ言語コードに従ってディスプレーを取得した数値に設定し、ディスプレーを押して入力を送信する。間違った数値を送信するとミスが記録され、モジュールが新しい初期値を生成する。


INNI:
int startNumber = [初期値];
int key = startNumber;
int lastDigit = [シリアルナンバーの最後の数字];
int tick = 0;
int totalCount = 0;
int correctNumber = 11;
int dunceCounter = 0;
bool trigger = true;

START:
if (startNumber % 2 == 0) {
   JMP S_E;
} else {
   JMP S_O;
}

S_E:
if (key % 10 == lastDigit) {
   trigger = false;
   key = key - lastDigit;
} else if (key % 10 > lastDigit) {
   key = (lastDigit + 2) * 7;
} else {
   key = key + lastDigit;
}
JMP CNT_OB;

S_O:
if (key % 10 == lastDigit) {
   key = (key * 2) % 100;
} else if (key % 10 > lastDigit) {
   key = (lastDigit - 2) * 5;
   trigger = false;
} else {
   key = 50 - key;
}
JMP CNT_OB;

CNT_OB:
int n = Math.abs(key), cycleCount = 0, count = 0;
while (n > 0) {
   int a = n % 2;
   if (a == 1)
     count++;
   n = n / 2;
   cycleCount++;
}
totalCount = totalCount + count;
if (tick > 2)
   JMP FORK_A;
if (cycleCount % 2 == 0)
   JMP O_V;
else
   JMP O_D;
JMP FAILSAFE;

O_V:
if (trigger == true) {
   trigger = false;
   key = key * (cycleCount + 1);
} else {
   key = key + cycleCount;
}
tick++;
JMP CNT_OB;

O_D:
if (trigger == true) {
   key = key + (cycleCount * lastDigit);
} else {
   trigger = false;
   key++;
}
tick++;
JMP CNT_OB;

FORK_A:
int x = 32 - totalCount;
if (trigger == true) {
   key++;
   JMP A_TR;
} else {
   key = key - 10;
   JMP A_FL;
}
JMP CNT_OB;

A_TR:
int atr = (cycleCount * lastDigit) + 3;
for (int i = 0; i < x; i++) {
   if (startNumber % atr == 0) {
     key = key + atr;
     continue;
   }
   atr++;
   key = key + (atr - i);
}
JMP PR_CH;

A_FL:
int afl = (totalCount - lastDigit) + 4;
for (int i = 0; i < x; i++) {
   if (startNumber % afl == 0) {
     key = key + afl;
     continue;
   }
   afl++;
   key = key + (afl - i);
}
JMP PR_CH;

PR_CH:
int r = 0;
bool flag = false;
r = Math.abs(key) / 2;
if (Math.abs(key) == 0 || Math.abs(key) == 1){
   JMP KEY_CMP;
} else {
   for (int q = 2; q <= r; q++) {
     if (key % q == 0) {
       flag = true;
       JMP KEY_CMP;
       break;
       }
     }
   if (flag == false) JMP KEY_PR;
   }
JMP FAILSAFE;

KEY_CMP:
int b = 1;
int v = x % (lastDigit + 1);
v = v + 5;
for (int i = 0; i < v; i++) {
   b = b + i;
   key = key + (totalCount % b);
}
JMP FORK_B;

KEY_PR:
int b = 2;
int v = totalCount % (lastDigit + 1);
v = v + 2;
for (int i = 0; i < v; i++) {
   b = b + i;
   key = key + (x % b);
}
JMP FORK_B;

FORK_B:
if (trigger == true && flag == true) {
   JMP ANS_A;
} else if (trigger == true) {
   JMP ANS_B;
} else if (flag == true) {
   JMP ANS_C;
} else {
   JMP ANS_D;
}

ANS_A:
if (key % 10 == lastDigit) {
   correctNumber = correctNumber * (key - totalCount);
} else if (key % 10 > lastDigit) {
   correctNumber = (2 * key) - cycleCount;
} else {
   correctNumber = key;
}
JMP LAS;

ANS_B:
if (key % 10 == lastDigit) {
   correctNumber = key + 11 - totalCount;
} else if (key % 10 > lastDigit) {
   correctNumber = key + 2;
} else {
   correctNumber = correctNumber + key;
}
JMP LAS;

ANS_C:
if (key % 10 == lastDigit) {
   correctNumber = key - correctNumber;
} else if (key % 10 > lastDigit) {
   correctNumber = x + lastDigit;
} else {
   correctNumber = correctNumber + totalCount;
}
JMP LAS;

ANS_D:
if (key % 10 == lastDigit) {
   correctNumber = correctNumber + totalCount;
} else if (key % 10 > lastDigit) {
   correctNumber = key - 21;
} else {
   correctNumber = correctNumber * lastDigit;
}
JMP LAS;

LAS:
correctNumber = Math.abs(correctNumber) % 100;
return;

FAILSAFE:
/* ここに到達した場合、君は根本的に間違ったことを行っている。
* どこで間違ったのか思い出せないのであれば、もう一度一番上からやり直そう。
*/
dunceCounter++;
JMP INNI;

付録:
int nx = 15; // 変数「nx」に15を代入する
nx = nx % 4; // 「nx」は3になる
nx = -10; // 「nx」は10になる
nx = nx % 3; // 「nx」は2ではなく、-1になる
nx++; // 「nx」が1増える
nx = 500;
nx = nx / 3; // 「nx」は166.6666ではなく、166になる
nx = nx / 4; // 「nx」は41.5ではなく、41になる
for (int i = 0; i < 5; i++) {
   if (i == 0)
      continue; // 残りの処理をスキップして、for文ループを継続する
   if (i == 3)
      break; // 残りの処理をスキップして、for文ループから抜ける
   i++;
}
JMP FAILSAFE; // コード内の「FAILSAFE」セクションまでジャンプする