-
Notifications
You must be signed in to change notification settings - Fork 0
/
solution.js
61 lines (55 loc) · 1.11 KB
/
solution.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
const readline = require('readline');
/**
* Create generator from readline.
* @return {AsyncGenerator<string, string, []>}
*/
async function* rlGenerator() {
const inputBuffer = [];
let resolve;
let promise = new Promise((r) => {
resolve = r;
});
let close = false;
readline
.createInterface({ input: process.stdin })
.on('line', (line) => {
inputBuffer.push(line);
resolve();
})
.on('close', () => {
close = true;
resolve();
});
while (true) {
await promise;
if (close) {
return '\0';
}
yield inputBuffer.shift();
if (inputBuffer.length === 0) {
promise = new Promise((r) => {
resolve = r;
});
}
}
}
const c = {
input: rlGenerator(),
outputBuffer: '',
print(msg, { end = '\n' } = {}) {
c.outputBuffer += msg + end;
},
exit() {
process.stdout.write(c.outputBuffer);
process.exit(0);
},
};
(async () => {
const pikachu = /^(pi|ka|chu)*$/;
const { value: text } = await c.input.next();
if (pikachu.test(text)) {
c.print('YES');
} else {
c.print('NO');
}
})().then(c.exit);