-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.exo9.js
121 lines (103 loc) · 3.07 KB
/
test.exo9.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
const readline = require( 'readline' );
const lines = [];
const terminal = readline.createInterface( process.stdin, process.stdout );
function separateData( line ) {
return new Uint8Array(
line.split( '' ).map( i => parseInt( i ) )
);
}
function createTuple( arr = [] ) {
const
tuple = [ [], [] ];
for( let i = 0; i < arr.length; i++ ) {
if ( i % 2 === 0 ) {
tuple[ 0 ].push( arr[ i ] );
} else {
tuple[ 1 ].push( arr[ i ] );
}
}
return tuple;
}
function makAll( list = [ ] ) {
let temp, data;
const
result = [];
if ( list.length <= 1 ) {
result.push( list );
} else if ( list.length === 2 ) {
result.push( [ list[ 0 ], list[ 1 ] ] );
result.push( [ list[ 1 ], list[ 0 ] ] );
} else {
for( let i = 0; i < list.length; i++ ) {
data = makAll( list.slice( 1 ) );
data.forEach( item => {
item.unshift( list[ 0 ] )
result.push( item )
} )
for ( let j = 1; j < list.length; j++ ) {
temp = list[ j - 1 ];
list[ j - 1 ] = list[ j ];
list[ j ] = temp;
}
}
}
return result;
}
function init( line ) {
let needed, final = [];
const list = [];
const
part = separateData( line ).sort( ( a, b ) => {
return a < b ? 1 : -1;
} );
final = makAll( part );
final.filter( item => {
if ( item[ 0 ] === 0 || item[ 1 ] === 0 )
return false;
list.push( createTuple( item ) );
return true;
} );
if ( !list.length ) {
return 0;
}
needed = list.map( item => {
const
result = [ '', '', -1 ];
item[ 0 ].forEach( item => {
result[ 0 ] += item
} )
item[ 1 ].forEach( item => {
result[ 1 ] += item
} )
result[ 0 ] = parseInt( result[ 0 ] );
result[ 1 ] = parseInt( result[ 1 ] );
result[ 2 ] = Math.abs( result[ 0 ] - result[ 1 ] );
return result;
} );
needed.sort( function ( a, b ) {
if ( a[ 2 ] < b[ 2 ] ) {
return -1;
}
return 1;
} );
return needed[ 0 ][ 2 ] || 0;
}
terminal.on( 'line', ( data ) => {
let n = 0;
if ( lines.length ) {
n = parseInt( lines[ 0 ] );
}
lines.push( data );
const
needed = lines.length - 1;
if ( needed > 0 ) {
console.log( `Case #${ needed }: ${ init( data ) }` );
if ( needed === n ) {
terminal.close();
return;
}
}
} );
terminal.on( 'close', () => {
process.exit( 0 );
} );