-
Notifications
You must be signed in to change notification settings - Fork 2
/
1110.js
91 lines (73 loc) · 1.64 KB
/
1110.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
var input = require("fs").readFileSync("/dev/stdin", "utf8");
var lines = input.trim().split("\n");
class DequeNo {
constructor(valor) {
this.valor = valor;
this.anterior = null;
this.proximo = null;
}
}
class Deque {
constructor() {
this.tamanho = 0;
this.frente = null;
this.tras = null;
}
push_front(valor) {
this.tamanho += 1;
let novaFrente = new DequeNo(valor);
novaFrente.proximo = this.frente;
if (this.frente) this.frente.anterior = novaFrente;
this.frente = novaFrente;
this.tras = this.tras || novaFrente;
}
push_back(valor) {
this.tamanho += 1;
let novoTras = new DequeNo(valor);
novoTras.anterior = this.tras;
if (this.tras) this.tras.proximo = novoTras;
this.tras = novoTras;
this.frente = this.frente || novoTras;
}
pop_front() {
if (this.frente) {
this.tamanho -= 1;
this.frente = this.frente.proximo;
}
}
pop_back() {
if (this.tras) {
this.tras -= 1;
this.tras = this.tras.anterior;
}
}
front() {
return this.frente.valor;
}
back() {
return this.tras.valor;
}
size() {
return this.tamanho;
}
empty() {
return this.tamanho === 0;
}
}
lines.pop();
while (lines.length) {
let n = parseInt(lines.shift());
let deque = new Deque();
for (let i = 1; i <= n; ++i) {
deque.push_back(i);
}
let discarded = [];
while (deque.size() > 1) {
discarded.push(deque.front());
deque.pop_front();
deque.push_back(deque.front());
deque.pop_front();
}
console.log(`Discarded cards: ${discarded.join(", ")}`);
console.log(`Remaining card: ${deque.front()}`);
}