ZIVAエンジン(チャージ済み)の答え

今回は構造力学とは全く何の関係もありませんが,ZIVAエンジン(チャージ済み)の答えを計算するコードのお話です
これはDestinyというゲーム中に出てくる計算パズル問題の一つです(英語表記では"SIVA ENGINE")


計算方法

  • 最初の数字から足したり引いたり倍にしたりして最終的に0になるように計算していきます
  • "基礎蓄電器"は足す
  • "基礎抵抗器"は引く
  • "二重チャージ"はその数字を倍にし蓄電器なら足し,抵抗器なら引く
  • "半チャージ"はその数字を半分にし蓄電器なら足し,抵抗器なら引く

siva engine solver.wxm

svに初期値を,evに終値をそれぞれ代入します(%o1, 2)
A列からE列までの数列を代入します(%o3〜7)
ここで抵抗器の値は−(負値)とし,各配列の最後で二重チャージの場合は"*2",半チャージの場合は"/2"とします



各列の要素の組み合わせを総当たりで計算し,合計が終値と一致する解を表示します(%t9〜18)


maximaを実行する環境無いけどコードを動かしてみたい方向け】
CESGA - Maxima on linemaximaを実行できるので下記コードをコピペして"Clic"を押してください('A`)

"Start value" = sv : 340;
"End value" = ev : 0;
A : [580, 520, -640, -440]/2;
B : [105, 90, -75, -85]*2;
C : [120, 90, -130, -100];
D : [50, 70, -60, -80];
E : [30, 10, -20, -40];
N : length(A)$
for i : 1 thru N do
    for j : 1 thru N do
        for k : 1 thru N do
            for l : 1 thru N do
                for m : 1 thru N do
                    if sv+A[i]+B[j]+C[k]+D[l]+E[m] = ev then ldisp([i, j, k, l, m])$