はじめに
少し前から自己研鑽のためにLeetCodeという競技プログラミングの問題を解いています。
paiza×Qiita記事投稿キャンペーンを機にpaizaの問題を解いていこうと思い、コードを公開します。
前回はDランクの問題だったので、今回はCランクの問題です。
言語はJavaScript(TypeScriptがなかった...)を選択しています。
Dランクはこちら
宝くじ
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
const isAdjacent = (winNumber, num) => {
if ((winNumber !== 100000) && (num === winNumber-1)) {
return true;
} else if ((winNumber !== 199999) && (num === winNumber+1)) {
return true;
} else {
return false;
}
};
const isSecond = (winNumber, num) => {
return (winNumber % 10000) === (num % 10000);
};
const isThird = (winNumber, num) => {
return (winNumber % 1000) === (num % 1000);
};
const winNumber = Number(lines[0]);
for(let i=2; i<Number(lines[1])+2; i++){
const num = Number(lines[i]);
if (num === winNumber) {
console.log('first');
} else if (isAdjacent(winNumber, num)) {
console.log('adjacent');
} else if (isSecond(winNumber, num)) {
console.log('second');
} else if (isThird(winNumber, num)) {
console.log('third');
} else {
console.log('blank');
}
}
});
野球の審判
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
let strkes = 0;
let balls = 0;
for (let i=1; i<Number(lines[0])+1; i++) {
const judge = lines[i];
if (judge === 'strike') {
if (strkes === 2) {
console.log('out!');
} else {
console.log('strike!');
strkes++;
}
} else {
if (balls === 3) {
console.log('fourball!');
} else {
console.log('ball!');
balls++;
}
}
}
});
みかんの仕分け
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
const NM = lines[0].split(' ');
const N = Number(NM[0]);
const M = Number(NM[1]);
for (let m=1; m<M+1; m++) {
const w = lines[m];
const addIndex = ((N / 2) <= (w % N)) ? 1 : 0;
const index = Math.floor(w / N);
let box;
if (index === 0) {
box = N;
} else {
box = (index + addIndex) * N;
}
console.log(box);
}
});
Fizz Buzz
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
for (let i=1; i<=Number(lines[0]); i++) {
if ((i % 15) === 0) {
console.log('Fizz Buzz');
} else if ((i % 3) === 0) {
console.log('Fizz');
} else if ((i % 5) === 0) {
console.log('Buzz');
} else {
console.log(i);
}
}
});
残り物の量
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
const mpq = lines[0].split(' ');
const m = Number(mpq[0]);
const p = Number(mpq[1]);
const q = Number(mpq[2]);
const freshed = m * p / 100;
const dished = (m - freshed) * q / 100;
console.log(m - freshed - dished);
});
さいごに
Cランクもそこまで複雑な問題はない印象です。
Dランクの次ステップとしていい感じの難易度かなと感じました。