スタック・キューメニュー応用編 【3 つのキュー・品出し・キューじゃんけん・満員エスカレーター・カードゲーム 】
【3 つのキュー】コード
reader.on('close', () => {
const N = Number(lines[0]);
const cue = [[], [], []];
for (let i = 1; i <= N; i++) {
const Q = lines[i].split(' ');
switch (Q[0]) {
case 'push':
cue[Q[1] - 1].push(Q[2]);
break;
case 'pop':
cue[Q[1] - 1].shift();
break;
}
}
for (let i = 0; i < cue.length; i++) {
for (let j = 0; j < cue[i].length; j++) {
console.log(cue[i][j]);
}
}
});
末尾に追加。
先頭から取り出し。
【品出し】コード
reader.on('close', () => {
const N = Number(lines[0]);
const cue = [];
for (let i = 1; i <= N; i++) {
const Q = lines[i].split(' ');
switch (Q[0]) {
case 'add':
cue.push(Q[1]);
break;
case 'buy':
for (let i = 0; i < Q[1]; i++) {
cue.shift();
}
break;
}
}
for (let i = 0; i < cue.length; i++) {
console.log(cue[i]);
}
});
末尾に追加。
先頭から取り出し。
【キューじゃんけん】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const paiza = [];
const kyoko = [];
let [p_win, k_win] = [0, 0];
for (let i = 1; i <= N; i++) {
const Q = lines[i].split(' ');
paiza.push(Q[0]);
kyoko.push(Q[1]);
}
for (let i = N + 1; i <= K + N; i++) {
const p = paiza.shift();
const k = kyoko.shift();
switch (p) {
case 'R':
if (k === 'S') {
p_win++;
} else if (k === 'P') {
k_win++;
}
break;
case 'S':
if (k === 'P') {
p_win++;
} else if (k === 'R') {
k_win++;
}
break;
case 'P':
if (k === 'R') {
p_win++;
} else if (k === 'S') {
k_win++;
}
break;
}
const [C_1, C_2] = lines[i].split(' ');
switch (C_1) {
case 'push':
paiza.push(p);
break;
}
switch (C_2) {
case 'push':
kyoko.push(k);
break;
}
}
if (p_win > k_win) {
console.log('paiza');
} else if (p_win < k_win) {
console.log('kyoko');
} else {
console.log('draw');
}
});
キューの 先頭の要素同士でじゃんけん勝負。
【満員エスカレーター】コード 1/2
reader.on('close', () => {
const [N, X] = lines[0].split(' ').map(Number);
const ESC = [];
let sum = 0;
let num = 0;
for (let i = 1; i <= N; i++) {
const Q = lines[i].split(' ');
switch (Q[0]) {
case 'ride':
for (let j = 2; j < Number(Q[1]) + 2; j++) {
if (sum + Number(Q[j]) <= X) {
sum += Number(Q[j]);
ESC.unshift(Number(Q[j]));
num++;
}
}
break;
case 'get_off':
for (let j = 0; j < Q[1]; j++) {
sum -= ESC.pop();
num--;
if(num===0){
break;
}
}
break;
}
}
console.log(num);
console.log(sum);
});
降りる時は pop()
。
乗る時は unshift()
。
【満員エスカレーター】コード 2/2
reader.on('close', () => {
const [N, X] = lines.splice(0, 1)[0].split(' ').map(Number);
const EV = [];
let num = 0;
let sum = 0;
for (let i = 0; i < N; i++) {
const Q = lines.splice(0, 1)[0].split(' ');
const n = Number(Q[1]);
switch (Q[0]) {
case 'ride':
for (let i = 2; i < n + 2; i++) {
const w = Number(Q[i]);
sum += w;
num++;
if (sum <= X) {
EV.push(w);
} else {
sum -= w;
num--;
}
}
break;
case 'get_off':
for (let i = 0; i < n; i++) {
if (!num) {
break;
} else {
sum -= EV.shift();
num--;
}
}
break;
}
}
console.log(num);
console.log(sum);
});
降りる時は shift()
。
乗る時は push()
。
【カードゲーム】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const deck = []; // 山札
const my_card = []; // 持ち札
const graveyard = []; // 墓地
const exclude = []; // 除外
let lose = true;
for (let i = 1; i <= 40; i++) { // 40 枚のデッキ
deck.unshift(i);
}
for (let i = 1; i <= 5; i++) { // 山札の上から 5 枚引く
my_card.push(deck.pop());
}
for (let i = 2; i <= K; i++) {
if (my_card.includes(N)) {
console.log(i - 1);
lose = false;
break;
} else {
const event = lines[i].split(' ')[0];
const X = Number(lines[i].split(' ')[1]);
switch (event) {
case 'draw': // 山札の上からX 枚引く
for (let i = 1; i <= X; i++) {
my_card.push(deck.pop());
}
break;
case 'discard': // 山札の上から X 枚を上から順番に墓地へ送る
for (let i = 1; i <= X; i++) {
graveyard.push(deck.pop());
}
break;
case 'return_from_the_graveyard': // 墓地の上から X 枚を上のから順番に山札の一番下に加える
for (let i = 1; i <= X; i++) {
deck.unshift(graveyard.pop());
}
break;
case 'exclude':
for (let i = 1; i <= X; i++) { // 山札から X 枚を上から順番に除外
exclude.push(deck.pop());
}
break;
case 'return_from_the_exclusion': // 除外カードから X 枚を上から順に山札の一番下に加える
for (let i = 1; i <= X; i++) {
deck.unshift(exclude.pop());
}
break;
}
}
if (my_card.includes(N)) {
console.log(i);
lose = false;
break;
}
}
if (lose) {
console.log('Lose');
}
});
墓地と除外って 分かり難いって思うのはマリンだけ??。
コメント