解説動画
間違っているコード
player.onChat("20-10", function () {
player.say("読み取ったブロックを、番号の小さい順に外周へ並べ直します");
// 渦巻の中心からはじめて、左回りに読み取ります
let values: number[] = [];
const spiralLengths: number[] = [1, 1, 2, 2, 3, 3, 4, 4, 4];
for (let s: number = 0; s < spiralLengths.length; s++) {
if (s > 0) {
agent.turn(LEFT);
}
for (let i: number = 0; i < spiralLengths[s]; i++) {
agent.move(FORWARD, 1);
values.push(agent.inspect(AgentInspection.Block, DOWN));
}
}
// 読み取った配列を、小さい順に並べ替えます
let sorted: number[] = [];
for (let i: number = 0; i < values.length; i++) {
let insertIndex: number = 0;
for (let j: number = 0; j < sorted.length; j++) {
if (sorted[j] > values[i]) {
insertIndex = insertIndex + 1;
}
}
sorted.insertAt(insertIndex, values[i]);
}
// 並べ替えた配列を、外周に右回りに置いていきます
agent.move(FORWARD, 2);
agent.turn(RIGHT);
agent.move(FORWARD, 1);
agent.turn(RIGHT);
agent.setSlot(1);
const ringLengths: number[] = [7, 6, 6, 5];
for (let s: number = 0; s < ringLengths.length; s++) {
if (s > 0) {
agent.turn(RIGHT);
}
for (let i: number = 0; i < ringLengths[s]; i++) {
agent.move(FORWARD, 1);
let id: number = sorted.shift();
agent.setItem(id, 1, 1);
agent.place(DOWN);
}
}
player.say("外周を並べ直しました");
});
解答コード
player.onChat("20-10", function () {
player.say("読み取ったブロックを、番号の小さい順に外周へ並べ直します");
// 渦巻の中心からはじめて、左回りに読み取ります
let values: number[] = [];
const spiralLengths: number[] = [1, 1, 2, 2, 3, 3, 4, 4, 4];
for (let s: number = 0; s < spiralLengths.length; s++) {
if (s > 0) {
agent.turn(LEFT);
}
for (let i: number = 0; i < spiralLengths[s]; i++) {
agent.move(FORWARD, 1);
values.push(agent.inspect(AgentInspection.Block, DOWN));
}
}
// 読み取った配列を、小さい順に並べ替えます
let sorted: number[] = [];
for (let i: number = 0; i < values.length; i++) {
let insertIndex: number = 0;
for (let j: number = 0; j < sorted.length; j++) {
if (sorted[j] < values[i]) {
insertIndex = insertIndex + 1;
}
}
sorted.insertAt(insertIndex, values[i]);
}
// 並べ替えた配列を、外周に右回りに置いていきます
agent.move(FORWARD, 2);
agent.turn(RIGHT);
agent.move(FORWARD, 1);
agent.turn(RIGHT);
agent.setSlot(1);
const ringLengths: number[] = [7, 6, 6, 5];
for (let s: number = 0; s < ringLengths.length; s++) {
if (s > 0) {
agent.turn(RIGHT);
}
for (let i: number = 0; i < ringLengths[s]; i++) {
agent.move(FORWARD, 1);
let id: number = sorted.shift();
agent.setItem(id, 1, 1);
agent.place(DOWN);
}
}
player.say("外周を並べ直しました");
});