みなさま、こんにちは!
ぷぷぷのプログラミングゲーム日記へようこそ!
いやー、今回ご紹介するこのゲームはご時世的にまずいかなと思ったんですよ。
でも、本家側のサイトが止まっているわけでもないですし、
なんと言ってもこのゲーム、世界平和を目指すゲームですからね!
ではご紹介しましょう!
シルバーバレット戦場のエンジニアです!
今回攻略する場所はこちら!
敵拠点への潜入戦
です。
こんな問題がでます。
そして解答はこちらです!
(使用言語は"JavaScript"を使っています)
この解答は私個人が作成したもので公式のものではありません
process.stdin.resume();
process.stdin.setEncoding('utf8');
// 自分の得意な言語で
// Let's チャレンジ!!
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
//console.log(lines[0]);
let a = lines[0];
let b = lines[1];
for (let i = b - 1; i >= 0; i--)
{
let c = lines[i + 2].split(" ");
let d = "";
for (let j = 0; j < a.length; j++)
{
if (j + 1 >= c[0] && j + 1 <= c[1])
{
if (a[j] == 0)
{
d += "1";
} else
{
if (a[j] == 1)
d += "0";
}
} else
d += a[j];
}
a = "";
for (let j = 0; j < d.length; j++)
a += d[j];
}
console.log(a);
});
問題を確認しましょう。
与えられている0・1で構成される文字列は、最後にやってきた文字列です。
そして最後の中継所からどんどん戻っていって最初の文字列を調べるのが私達の今回の任務です。
なので、最後から順番に戻っていくプログラミングを作ります。
for (let i = b - 1; i >= 0; i--)
{
・・・
}
この部分で最後→最初の流れを作っています。
for (let j = 0; j < a.length; j++)
{
if (j + 1 >= c[0] && j + 1 <= c[1])
{
if (a[j] == 0)
{
d += "1";
} else
{
if (a[j] == 1)
d += "0";
}
} else
d += a[j];
}
{
if (j + 1 >= c[0] && j + 1 <= c[1])
{
if (a[j] == 0)
{
d += "1";
} else
{
if (a[j] == 1)
d += "0";
}
} else
d += a[j];
}
この部分で、指定された範囲の0→1・1→0を行っています。
こういうの、ビット演算とかでやれるのかもしれないですが私、あんまりビット演算わからないので単純に0→1・1→0を行っています。
そして、変化した文字列を次の中継所へ渡すための変数(ここではlet a)に渡しています。
最後の中継所を通過したらその文字列を出力しています。
問題に正解すると、新しい装備が手に入ります!
今回の装備はこちら!
ベレー帽です。
なんとなく軍人感が増しましたね。
次回からもどんどんと装備が増えていくようで楽しみですね!
ではまた〜。