Autoriser le JavaScript

Plop.

Je souhaiterais participer au concours en JavaScript et, meme si l'an dernier je l'avais fait pour le questionnaire et etais ensuite passe au Python pour la demi-finale, j'aimerais bien ne pas avoir a utiliser le Python cette annee.

D'un point de vue technique, c'est violemment simple a mettre en place : Installer Node.js, lui enlever les modules pour le fs, les sockets etc. et c'est bon. Pour ce qui est de generer le code, je peux le faire.
Si vous me donnez le code que vous utilisez pour faire ca :

if __name__ == '__main__':
D = int(raw_input())
M = int(raw_input())
Y = int(raw_input())

print estEligible(D, M, Y)

Je vous en fait un qui fait la meme chose en JS.

Et pour ce qui est de comparer les perfs avec les autres, ca doit pas etre bien loin du Python... Limite plus rapide vu qu'il n'y a pas de surcharge des operateurs etc. et qu'il commence a y avoir des typed arrays et des structures.

Voila.

Ça peut se faire en effet, peux tu me montrer un bout de code qui récupère l'entrée standard avec du JS sous Node.js ?
Par exemple pour l'exercice 1 du questionnaire de cette année.

function estEligible(D, M, Y) {
// Inserez votre code ici
return;
}

;( function ( ) {
// si on fait :
// > node script.js arg1 arg2
// process.argv == [ 'node', 'script.js', 'arg1', 'arg2' ]
// donc on ne prnd que ceux a partir de l'index 2 compris
var argv = process.argv.slice( 2 );
// ensuite, c'est un simple array
var D = parseInt( argv[ 0 ], 10 );
var M = parseInt( argv[ 1 ], 10 );
var Y = parseInt( argv[ 2 ], 10 );
// on revoit le resultat apres l'avoir transforme en string
process.stdout.write( estEligible(D, M, Y) + '' );
} )( );

function estEligible(D, M, Y) {
// Inserez votre code ici
return [D,M,Y];
}

;( function ( ) {
var transformInputs = [
parseInt,
parseInt,
parseInt
];
var inputs = [ ];
var inputsLeft = transformInputs.length;
var stdin = process.stdin;
stdin.resume( );
process.stdin.on( 'data', function ( chunk ) {
inputs.push( transformInputs.shift( )( chunk ) );
--inputsLeft;
if ( inputsLeft === 0 ) {
stdin.destroy( );
process.stdout.write( estEligible.apply( void 0, inputs ) + '' );
}
} );
} )( );

Pour passer d'un exo a l'autre, il vous suffit de changer le nom de la fonction estElligible et le contenu de transformInput.
Chaque element de transformInput doit etre une fonction. Elle recevra une ligne de l'entree comme premier argument et devra retourner l'entree transformee.

http://pastebin.com/C5hf9MwC

function aiJePerdu(N, capacites) {
// Inserez votre code ici
return;
}

;( function ( ) {
var callback = aiJePerdu;
var transformInputs = [
parseInt,
function ( capacites ) {
return capacites.split( ' ' ).map( function ( number ) {
return parseInt( number );
} );
}
];
// le code qui suuit n'a pas besoin d'etre modifie
var inputs = [ ];// les inputs une fois modifies
var inputsLeft = transformInputs.length;// le nombre de lignes restant a traiter
var stdin = process.stdin;// on va l'utiliser plusieurs fois dont on le stocke dans une variables
stdin.resume( );// on demande la premiere entree
process.stdin.on( 'data', function ( chunk ) {// a chaque ligne
chunck = chunk + '';// on transforme le buffer en string
chunck = chunck.trim( );// on enleve les espaces au debut et a la fin (de base, il y a un \n a la fin)
inputs.push( transformInputs.shift( )( chunck ) );// on rajotue dans input le resultat de la fonction au debut de la file en lui donnaint la chaine comme premier argument
--inputsLeft;// on decrement le nombre d'inputs restants
if ( inputsLeft === 0 ) {// s'il ne rest plus d'inputs
stdin.destroy( );// on ferme l'input
process.stdout.write( callback.apply( void 0, inputs ) + '' );// on ecrit en sortie le resultat du callback auquel on a donne comme arguments les inputs ( callback.apply( void 0, [ 1, 2, 3 ] ) === callback( 1, 2, 3 ) )
}
} );
} )( );

J'ai corrige quelques bugs.

Maintenant, il suffit de definir transformInputs et callback tout au debut pour que le reste d'adapte.

EXO 1

var transformInputs = [
parseInt,
parseInt,
parseInt
];

EXO 2

var transformInputs = [
parseInt
];

EXO 3

var transformInputs = [
parseInt,
parseInt
];

EXO 4

var transformInputs = [
parseInt,
function ( capacites ) {
return capacites.split( ' ' ).map( function ( number ) {
return parseInt( number );
} );
}
];

@xavierm02
Je viens de tester NodeJS sur mon PC effectivement ça marche très bien, je vais intégrer cela au serveur de correction, et après on s'attaquera au générateur de "code pour candidats".

@Equinoxe
Heureusement qu'on a un programme qui génère tout ça !
Crois-tu vraiment qu'on code en Pascal régulièrement :) ?

Après pour la correction, lire du code en Pascal se fait facilement même sans connaître parfaitement le langage.

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.