aboard !! v1.1.0

Pouet !

Petit article rapide juste pour dire que j’ai démarré la création de aboard , une lib en python permettant de gérer des quadrillages 2D.

Ça peut servir comme helper pour des petits jeux genre démineur, soko-ban, etc. Et surtout c’est très utile dans le site codingame, pour des challenges, des clashes of code, des bots à programmer, …

J’y ai ajouté une version stand-alone, sous forme d’un gros fichier unique à copier-coller directement dans l’IDE de codingame.

Petit exemple très rapide :

from aboard import Board
board = Board(9, 6)
board[3, 2].data = 'Z'
for tile in board[2, :]: tile.data = '|'
for tile in board[3:, 1]: tile.data = '='
for tile in board[3:, 4:6]: tile.data = '#'
for tile in board.get_by_propagation((6, 3)):
    tile.data = '/'
print(board.render())

..|......
..|======
..|Z/////
..|//////
..|######
..|######

Voilà. Et vous avez la doc détaillée sur readthedocs.io.

Ça s’appelle aboard, car ça fait : « a board », ce qui signifie « un plateau » (de jeu de plateau). Et « aboard » signifie également « à l’abordage ». Lolilol, n’est-il pas ? La version actuelle est 1.1.0, car je voulais me donner un air classe. Il n’y a pas eu de précédentes versions, en vrai.

C’est une lib que je vais essayer de faire connaître, en résolvant des challenges et en codant des bots dans codingame. Et je compte également m’en servir pour mon prochain gros projet.

J’ai toujours un « prochain gros projet », qui change de temps en temps. Je ne sais pas jusqu’où j’irais dans sa réalisation. Déjà, si j’arrive à le démarrer, ce sera une jolie victoire. J’ai même pas encore fini de racler mes fonds de tiroir de vieux code, alors que ça fait plusieurs années que je suis sur ce pré-projet, de manière intermittente.

Ce « prochain gros projet » hypothétique sera fortement inspiré de PuzzleScript. Je vous en parlerai quand je l’aurais commencé. C’est à dire peut-être jamais. On verra.

Voici un quadrillage 2D, accompagné d’une surface 3D.

Oh, et dans une petite semaine, je reparticipe à la battle dev. J’espère pouvoir me placer à nouveau suffisamment haut dans le classement pour que mon nom apparaisse.

! teuoP

 

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.

Vieille soirée du nouvel an chez Gloubiboulga

Les fonds de tiroir de mes anciens écrits continuent d’être raclé à en faire des copeaux, avec cet article provenant d’un résumé de soirée datant de plus de 10 ans. Pas de raison précise pour laquelle j’irais sortir ça maintenant plutôt que pas-maintenant.

Ça s’est passé dans la société Gloubiboulga, dont j’ai déjà pondu un article relatant un week-end à Barcelone.

Dans le but de rester cohérent avec mes récents récits corporate, quitte à être pas-cohérent avec le sus-mentionné récit corporate gloubiboulguien, les personnages seront précédés de leur titre de noblesse : « Collègue X », « Chef Y », etc. Alors qu’avant j’utilisais les titres neutres « Monsieur », « Madame ».

On n’est plus à ça près. Go !

Je téléphone à Chef Ion car je ne parviens pas à trouver le restaurant de rendez-vous. Celui-ci est dans la rue du Bourg L’Abbé. J’étais dans le passage du Bourg L’Abbé. J’ai jamais pu supporter ces connards qui donnent le même nom à plusieurs trucs d’une même ville.

Bourre l’abbé.

Pour rappel : à Gloubiloulga, j’officie en tant qu’ouvrier-codeur-prestataire missionné ad vitam eternam « en régie ». Par conséquent, je ne connais pratiquement pas mes collègues de boîte. Disons que le peu qu’ils connaissent de moi provient du fameux week-end sus-mentionné.

Tout le monde attend devant l’entrée du restau comme des gentils petits macarons. MégaChef Poulet est là. Un collègue quelconque que je ne connais pas m’aborde et me demande si je suis bien un gloubiboulguien. Je réponds par l’affirmative. Il s’excuse et m’explique que s’il a posé la question, c’est parce que juste avant, un autre collègue a fait une blague et lui a fait croire qu’une nana random qui passait par là faisait partie de la boîte. Ha ha ha. Ambiance complètement fofolle, dites donc.

Nous entrons et investissons la salle spécialement privatisée pour nous (j’adore ce novlanguisme).

Collègue Scofield, membre du CE et principal organisateur de la soirée, nous propose de nous asseoir.

« Asseyez-vous et buvaillons », nous suggère notre collègue.

Certes, il a le pouvoir (voire le devoir) de nous ordonner cela, dans le but de faire progresser la soirée le long de sa timeline. Mais quand même je trouve qu’il aurait pu y mettre un peu plus de tact, préparer le terrain psychologiquement, etc.

Vous l’avez deviné : gros stress général, plus personne n’ose bouger. Qui va s’asseoir où ? Comment être sûr de se retrouver à côté de personnes socialement compatibles et hiérarchiquement équivalentes ? Par quoi commencer ? La banquette ou les chaises ? La table rectangulaire ou la ronde ? En plus, il reste encore des gens dans le vestiaire, ce qui provoque un surcroît d’incertitude dans les variables du système.

Et là, est-ce que tu sais ce qu’il fait, lecteurtrice ? Nan mais est-ce que tu sais ce qu’il fait ? Il amorce le mouvement, et va se poser pil poil au milieu de la banquette ! L’air de rien, comme s’il avait fait ça toute sa vie !

L’heure n’est plus à la réflexion : mouvements désordonnés et anarchiques de tous les Gloubiboulguiens. Je me cacafouille complet et échoue sur une chaise, avec Chef Ion à ma droite et MégaChef Poulet à ma gauche. NOM TE TIEU TE PUTAIN TE PORTEL TE MERTE !!!

Gloubiboulguiens rush

Les entrées arrivent. Tartare de saumon. Après un temps supposé raisonnable, le serveur reprend lesdites entrées. Je manque de me faire piquer ma part que j’avais pas finie, mais je réagis au quart de tour et obtiens le droit de consommer ma dernière bouchée. Un jour, j’organiserai des concours de mangeage lentement.

Soirée sans thème spécifique, ou en tout cas, pas un qui aurait nécessité des danseuses de flamenco. Y’a juste le serveur qui se donne l’air d’être homosexuel jusqu’à l’œsophage, mais en vrai il fait semblant pour attirer les nanas. L’ambiance est chaude et cosy, avec des lumières tamisées et des petites bougies flammotant sur les tables. Colléguette Souricette râle parce qu’elle y voit que d’alle pour dépiauter ses gambas avec son p’tit couteau et sa p’tite fourchette.

Faut vraiment être un kamikaze social pour prendre des gambas dans un restau. Le truc impossible à bouffer. Même si par miracle tu y arrives, tu as les doigts qui puent. Et c’est pas un rince-doigts de 10 centimètres carré qui va régler le problème.

Ces gambas me semblent plus intéressantes.

J’ai deux règles personnelles dans les restau, et je suis admiratif (voir totalement effrayé) par les gens qui parviennent à passer outre.

Règle 1 : simplicité d’ingestion. Pas de machins à dépiauter, décortiquer, découper, éplucher, égoutter, râcler, déconstruire, désencoquiller, entortiller, désentortiller, casser, flamber, tremper, mâchonner indéfiniment, extraire, trier, analyser, dégraisser, rétro-ingéniériser. Quand je tombe sur ce genre de problème, je me tâche systématiquement partout. Je vis cela comme une agression provenant de l’humain ayant fait cette putain de bouffe : il a bâclé son boulot et se marre en s’imaginant comment je vais galérer. Ça fait plusieurs années que je milite pour soit mis en place un système de notation avec des petites icônes sur les menus, indiquant pour chaque plat si c’est simple ou compliqué à manger, et le type de complexité.

Règle 2 : simplicité de prononciation. Parce qu’il faut spécifier oralement ce qu’on souhaite manger, et que je ne veux pas me rendre ridicule en prononçant mal un truc. Les restaurants de bouffe étrangère doivent donc être rigoureusement pré-étudiés. Au fait, saviez-vous qu’une grande partie des noms de pizzas inscrits sur les cartes des restaurants italiens ne sont là que pour contribuer au thème et à la décoration du lieu ? Ils ne correspondent en réalité à aucune recette : Capricciosa, Quattro fromaggi, Prosciutto, Sfincione, … Oui oui, vous avez bien lu, un « S » suivi d’un « F ».

Je choisis une escalope avec du riz.

Colléguette Sarkozette n’est pas parmi nous ce soir, mais j’ai quand même droit à quelques conversations de droite :

« La France c’est un pays où plus personne veut bosser. Tiens, par exemple, quand j’étais en congé maternité, j’essayais de faire les courses à des horaires inhabituels, 10h ou 3h de l’après-midi. Eh bien y’a autant de monde que les soirs et les week-ends. On se demande ce qu’ils foutent tous ces gens. »

« Quand je suis en déplacement, quelle que soit l’heure à laquelle je prends ma voiture, y’a toujours plein de monde sur les routes. Mais ils font quoi, tous ? Ou alors c’est que des commerciaux, comme moi. »

Nous étions en 2008, et la loi interdisant de fumer dans les bars et restaurants sortait à peine de son œuf. Bien que non-fumeur, j’ai eu du mal à m’y faire. Laissez-moi vous narrer cela.

Tel une moule sur une coque de bateau, je m’accroche à une discussion, afin de m’en faire une bouée de sauvetage de contenance sociale. Je regarde intensément les gens, avec mon air « ça m’intéresse trop ce que vous vous racontez, c’est pour ça que je vous écoute sans rien dire ». Ils se trouve que les gens en question sont des fumeurs. Et qu’est-ce qu’ils font ces enculés de leur race, au lieu de s’en griller une tout en continuant de parler ? Ils se carapatent dehors !

Ça aurait fait super bizarre que je les suive, car j’étais pas vraiment intégré dans leur conversation. Tel une moule errante, j’essaye alors de m’incruster ailleurs. Mais toutes leurs variables conversationnelles des discussions voisines sont déjà allouées et initialisées. Les interlocuteurs n’utilisent plus que les références : « il », « elle », « eux », « nous », etc. À ce stade, quand tu fais semblant d’écouter et de tout comprendre, c’est pas crédible.

Je me vois donc finalement affublé du statut de « SDF social ».

Quelques minutes auparavant, Chef Ion s’était amusé à cramer des piques-olives en bois dans la petite bougie tablaire. Je me suis dit que je pourrais effectuer une action du même type. Sans faire exactement pareil, bien sûr, sinon ça se voit trop que tu tentes de combler un leak de contenance sociale par un simple copier-coller d’action.

Parmi les déchets de mon assiette se trouvent des petites feufeuilles séchées de tomate-cerise (pourquoi y’avait-il ça avec mon dessert ? Mystère). C’est certainement brûlable. Je teste, effectivement, ça l’est. Mais trop, en fait. Surpris par une énorme flamme, je fais tout tomber dans la bougie. Rigolo, on se croit dans une mini-banlieue, avec une mini-poubelle illuminant la nuit. Mais maintenant ça sent le cramé, la bougie s’est éteinte, et des cendres de feuilles séchées et de feu ma contenance sociale s’éparpillent un peu partout.

À l’aide d’un dernier bout de pique-olive, Chef Ion transmet la flamme d’une autre bougie vers la mienne, la rallume, et m’achève ainsi d’un grand coup de condescendance.

Putain de loi anti-tabac de merde.

Collègue Poulet-Fils fait des aller-retours aux toilettes, car en plat principal, il a pris un début de gastro.

Voici ma blague de la soirée, qui a fait un bide alors que franchement j’en attendais un peu plus :

« Une gastro c’est un peu comme un buffer overflow. »

Mangeage du dessert. Puis les gens commencent à partir. On se retrouve à une demi-dizaine dans la salle de dancing du sous-sol, sans personne qui y dancing. Chef VisagePâle se prend une bière. Je m’apprête à faire de même, mais réalise qu’elle est à 9 euros. Voilà un dancing accompagné d’un fort sodomising.

On se regarde dans le blanc des vieux, sans se parler puisque la musique hurle du Mylène Farmer. Colléguette EncoreUnPeuVerte_2, fan de cette étrange chanteuse, va dancinguer toute seule.

On sort. Après quelques phrases de convenance, je dit au revoir et pars, dans une direction au hasard, car je ne voulais pas prendre le risque de montrer qu’il m’était nécessaire de réfléchir pour déterminer le chemin me permettant de rentrer chez moi.

Une rue plus tard, je m’aperçois que ce n’est pas la bonne direction. Je ne fais, bien entendu, pas demi-tour, pour ne pas me taper la honte nucléaire ultime en repassant devant les autres. Du coup je me tape une station de métro en plus. Pas grave.

C’était globalement une chouette soirée gloubiboulguienne.

À l’époque, j’avais envoyé ce résumé à des potes. Je me permet de retranscrire la réaction de l’un d’entre eux :

« C’est clair que tu as des raisons de quitter ta boite ! Une soirée d’entreprise où tu payes tes coups, ca existe ?? merte ! »

Le prochain article de blog sera à propos d’un mini-projet de code (ou pas). En espérant que vous apprécierez. Mais sinon osef.

Demake de Atomix fait avec PuzzleScript

Fans de mini-jeux de réflexion, bonjour.

atomix_water

Vous avez peut-être déjà découvert PuzzleScript (dans ce blog ou ailleurs). Voici ma première œuvre réalisée avec ce langage. Plus précisément, c’est la deuxième, mais la toute première était un cadeau pour une amie, et reste donc du domaine privé.

Concernant l’idée originale, je ne me suis pas foulé et j’ai repris le principe d’Atomix, un jeu où vous devez déplacer des atomes afin de reconstituer une molécule. La particularité, c’est que lorsqu’un atome est en mouvement, il continue jusqu’à être stoppé par un mur ou un autre atome. (Je suis sûr qu’en mécanique quantique, tout se passe exactement comme ça).

atomix-2

Concernant les niveaux du jeu, je ne me suis pas foulé non plus, et j’ai pompé ceux d’un certain draknek (http:// blog.draknek.org/post/93360531842/if-i-wanted-to-clone-atomix-this-is-where-id).

Ils sont intéressants et épurés de toute casse-couillerie inutile. Merci à lui.

Hyponitrous acid (mais vous le saviez sûrement déjà).

Hyponitrous acid (mais vous le saviez sûrement déjà).

Là où j’ai été obligé de me fouler, c’est pour implémenter le fonctionnement d’Atomix dans PuzzleScript. Le langage est assez souple et bien fichu, mais ne permet pas vraiment de décrire des comportements « globaux » prenant en considération une zone étendue de l’aire de jeu. J’ai donc eu recours à quelques bidouilles hasardeuses pour le processus vérifiant l’égalité entre la molécule-modèle et la disposition des atomes.

D’autres part, il n’y a pas de notion de variables. Pour tester « est-ce que l’atome dans le modèle est égal à l’atome dans l’aire de jeu ? », je n’ai pas trouvé de meilleure solution que de tout décrire verbeusement : « est-ce que l’atome du modèle est un hydrogène et celui de l’aire de jeu un hydrogène ? ou bien est-ce que l’atome du modèle est un carbone et celui de l’aire de jeu un carbone ? etc. ».

Il y a une petite documentation au début du script indiquant les contraintes à respecter pour créer les niveaux, ainsi que quelques commentaires ici et là. Ça mériterait d’être documenté plus en détail, ou pas.

puzlescript_code

Le sus-mentionné draknek a employé kp-atomix (https:// github.com/figlief/kp-atomix) pour publier les niveaux qu’il a créés, ce qui est une aubaine, car ils y sont décrits via un fichier json au format assez facile à comprendre.

Et quitte à me fouler pour coder, je me suis fendu d’un petit programme (en python, évidemment) convertissant les niveaux json de kp-atomix en niveaux de PuzzleScript. Ça aurait certainement pris moins de temps de les convertir à la main, mais ça aurait été tellement moins rigolo.

Ce programme a été honorablement documenté, car il est possible que certains de ses morceaux me resservent par la suite. Tout cela est évidemment dans un repository github, comme le veulent les conventions asociales à la mode en ce moment.

J’aime beaucoup PuzzleScript. Ça regroupe un grand nombre d’idées de mes rêves : des jeux de réflexion à foison, un moyen inhabituel de raconter des histoires, la création d’un langage dédié relativement souple et générique. Je vais voir si je peux faire quelque chose avec tout ça.

Comme vous le savez, les atomes sont liés ensemble par des liaisons de covalence. Voici donc une image de liaison, presque tout aussi idiosyncratique (même si je sais pas ce que ça veut dire).

double_dildo