Eleet Codeurz !!

Dans mon article précédent, je me la suis pété parce que je suis un super blogueur.

Maintenant, je me la pète en tant que super-codeur.

CodinGame

J’ai récemment découvert le site Coding Game, qui me plait beaucoup. Le concept de coder un bot de jeu qui va s’opposer à d’autres bots est très amusant. Et j’avoue être devenu un petit peu dépendant aux Clash of Code. Ce sont des challenges d’un quart d’heure contre d’autres gens, dans lesquels il faut écrire un petit algo assez simple. Il y a trois modes de compétition : être le plus rapide, écrire le code le plus court possible, ou être le plus rapide mais en déduisant ce qu’il faut faire uniquement à partir des tests d’exemples.

On peut également proposer ses challenges et ses puzzles. Pour l’instant, j’ai contribué à la hauteur de deux Clashs, qui ont été acceptés. Et j’ai encore d’autres idées. Youwouwou.

Je suis à une position respectable dans le classement global. Quant au classement spécifique du Clash of Code, je me promène glorieusement parmi les 100 (voire les 50) premiers. Sur un total mondial de 100 000 personnes. Brag ! Brag !

47ème

Galvanisé par ces honneurs, et alors que je me prenais une dose de CommitStrip, je tombe sur un concours de code organisé par un machin quelconque. Je m’inscrit, participe, et après 2 heures de chauffage de neurones, j’obtiens la classieuse place de 47ème.

Vous pouvez voir les résultats ici (https:// www. blogdumoderateur.com/resultats-battledev-novembre-2018/).

Je trouve un peu étrange qu’il y ait plusieurs participants nommés « mon_pseudo_xxx ». Ça ressemble à quelqu’un qui a triché et qui s’est inscrit plusieurs fois pour avoir plusieurs cadeaux. Mais d’un autre côté, tricher de cette manière en utilisant des pseudos semblables serait particulièrement stupide. Bon, osef.

Il y avait des cadeaux pour les 45 premiers. Pas de bol pour moi. Mais je n’aurais pas su quoi en faire. Je veux pas aller à Las Vegas, et si je gagne une console de jeux, je vais encore me faire chronophager. 47ème, ça me va très bien.

Pas tout à fait un contest de code, mais un contest quand même.

Par contre, je me demande si y’aurait pas moyen de tricher un peu à leurs compétitions.

Lorsqu’on envoie son code, celui-ci est testé sur des données d’entrées, que l’on peut récupérer en écrivant dans la sortie (stderr).

Bien entendu, on n’a pas accès aux résultats attendus, afin d’éviter des solutions stupides codées en dur, du style :

data_in = input()
solutions = {
    "data_in_1": "solution_1",
    "data_in_2": "solution_2",
    "data_in_3": "solution_3",
    ...
}
print(solutions[data_in])

Les deux derniers exercices du concours peuvent être résolus avec une solution bourrine, codée rapidement mais nécessitant beaucoup de temps d’exécution. Le système ne l’accepte pas, car il y a une limite. Si le code proposé tourne pendant plus de quelques secondes sans renvoyer de solution, il est arrêté automatiquement.

Or donc, il doit être possible de coder à la porcasse la solution bourrine, de la faire tourner avec les données d’entrées sur son ordinateur à soi (ou sur un super-calculateur dopé à la testostérone), et de récupérer les solutions attendues. Il ne resterait plus qu’à soumettre une solution moche en dur contenant ces solutions, hop ni vu ni connu j’t’embrouille.

Je ne sais pas si ça marche, je n’ai pas eu l’occasion de tester. Pour l’avant-dernier exercice, j’avais trouvé la solution élégante. Pour le dernier, j’ai eu du mal, et le concours était déjà clôturé depuis une demi-heure lorsque j’ai trouvé la solution bourrine. Pas assez bon pour tricher !

Sur CodinGame, ce genre d’astuce idiote ne marche pas, car les Clash of Code ont deux types de tests :

1) Ceux montrés à l’utilisateur. On connait les données d’entrée et les données de sortie. Ils sont joués lorsqu’on envoie son code pour test, avant l’envoi final. Le résultat est clairement affiché.

2) Les valideurs. On ne connait ni les entrées ni les sorties. Ils sont joués uniquement lors de l’envoi final du code. Ce sont eux qui comptent. Ça permet d’éviter complètement les solutions codées en dur ou précalculées bourrinement.

Quand le Clash est bien construit, chaque valideur correspond à un test. C’est à dire qu’un code « honnête » qui échoue à un test devrait échouer au valideur correspondant. Un code « malhonnête » réussit tous les tests, mais échoue à tous les valideurs.

Dans la réalité, ce n’est pas toujours le cas. Pour certains Clash mal fichus, on peut se retrouver avec des codes honnêtes passant tous les tests mais échouant à un ou deux valideurs. En général ça énerve. C’est le jeu ma pauvre Lucette.

Il faut trouver l’algorithme permettant de trouver la solution pour pouvoir tricher et proposer un code fournissant directement la solution.

Prout !!

Après me l’être pété avec mon blog et mes talents de codeur, je vais maintenant me la péter avec mes prouts (ha ha ha !) (en fait non, j’ai pas l’intention de me la péter avec ça).

Depuis plusieurs années, dans toutes les entreprises dans lesquelles je travaille, je tente de faire des vœux de non-flatulence. Je ne les tiens jamais. Ni les vœux, ni les prouts.

Je suis heureux et fier de vous annoncer que j’affiche actuellement un uptime de non-flatulence boîtale de plusieurs semaines ! Ça a l’air stupide et puéril, dit comme ça, mais le caca, le pipi et les prouts sont pour moi des notions fondamentales constituant une base de mon existence. C’est important pour moi et je ne me pensais pas forcément capable de réussir cet exploit d’abstinence gazeuse. Je le dois à mes voisines d’open-space, qui sont (il faut bien le dire), des personnes un peu tatillonnes concernant les conventions de bienséance.

Malheureusement, cet exploit m’a fait découvrir une caractéristique inconnue de mon corps, qui me plonge dans d’incommensurables tourments.

Lorsque je me retiens, les gaz de prouts se répartissent dans mes tuyaux internes, dérèglant mon fonctionnement biologique et provoquant des bruits incongrus. Si c’était juste des gargouillis de ventre, ce ne serait pas gênant, voire plutôt rigolo. Mais c’est pas le cas. Mon corps saturé en pétogaz émet des sortes de « ♪♫ ppûûûûûûûû », qui semblent provenir du bas (c’est à dire des intestins proche de l’anus). Je fais des bruits de prouts sifflants alors que je ne proutte pas ! Et vu que ce ne sont pas des prouts, je ne peux pas les retenir !

J’ignore si les collègues autour de moi entendent ces bruits. J’ignore s’ils comprennent ce que c’est ou s’ils croient que ce sont des vrais prouts. Je n’ose rien dire. Je plonge dans la folie des conventions sociales. J’ai peur.

La solution toute simple aurait été d’aller aux toilettes à la moindre petite envie, afin d’éradiquer toute particule de gaz proutal qui aurait tenté de squatter mon corps. Sauf que ça ne fonctionne pas. Pour une raison que je ne m’explique pas, l’envie de prout s’évapore (ha ha) pendant que j’effectue le trajet depuis mon burlingue-open-space jusqu’aux toilettes.

C’est peut-être le fait de se lever et de marcher, qui fait bouger mes organes de sorte que les gazoprouts se réorganisent et se replient stratégiquement pour ne pas être éjecté au moment où je serais sur le trône. Je pousse je pousse et rien ne sort. Ou alors c’est peut-être le changement de température, qui modifie le taux de concentration des proutogazs et déclenche une reconfiguration de l’entropie. Mystère. Et dès que je reviens à mon burlingue, l’envie se ressent à nouveau.

Si quelqu’un a une solution pour ça, j’achète. Je suis prêt à tester n’importe quoi : des mouvements de yoga prouto-déclencheurs, des massages d’anus, une machine sonique temporelle qui annule rétroactivement tous les sons d’une zone donnée dans une période donnée, … Je prends tout.

Merci d’avance.