C'est bon, grùce à nos calculs les lutins responsables de la forge géothermale ont pu trouver un geyser assez puissant pour nous propulser vers l'ßle du magma qui les alimente normalement en lave chaude.
Si vous ĂȘtes comme moi un peu perdu, voici un rĂ©capitulatif de la situation :
- il n'y a pas de neige pour Noël ;
- parce que l'Ăźle de la neige n'en fabrique plus ;
- parce qu'ils ne reçoivent plus d'eau ;
- parce que sur l'Ăźle de l'Ăźle, ils ne peuvent plus filtrer l'eau ;
- parce qu'ils ne reçoivent plus de sable ;
- parce que sur l'ßle du désert, ils n'ont plus de piÚces de rechange pour leurs machines ;
- parce que sur l'ßle du métal, ils n'ont plus de lave pour faire fonctionner leur forge.
Et nous voici donc sur l'Ăźle du magma, oĂč Ă©videmment, il n'y a pas du tout de lave, seulement des roches volcaniques et des cendres.
PremiĂšre partie
Il y a aussi des montagnes, qui entourent une vallĂ©e pleine de miroirs bien alignĂ©s. Allons voir vers oĂč il pointe. Le problĂšme, c'est que pas mal de ces miroirs sont tombĂ©s, ce qui transforme le terrain en un palais des glaces.
Pour ne pas se cogner dans les miroirs, on a un relevĂ© de zones de terrain et il faut trouver les lignes oĂč colonnes de rĂ©flexion, par exemple :
#.##..##.
..#.##.#.
##......#
##......#
..#.##.#.
..##..##.
#.#.##.#.
#...##..#
#....#..#
..##..###
#####.##.
#####.##.
..##..###
#....#..#
Dans ce cas, on peut déceler les lignes de réflexion suivantes :
#.##.|.##.
..#.#|#.#.
##...|...#
##...|...#
..#.#|#.#.
..##.|.##.
#.#.#|#.#.
#...##..#
#....#..#
..##..###
#####.##.
---------
#####.##.
..##..###
#....#..#
On nous demande la somme du nombre de lignes à gauche des colonnes de réflexion et du produit par 100 du nombre de lignes au-dessus des lignes de réflexion.
DeuxiĂšme partie
En fait les miroirs ont un dĂ©faut. Un unique dĂ©faut sur chaque miroir, qui change un # en . ou vice-versa. Il faut toujours trouver les lignes de rĂ©flexion, mais il faut dĂ©sormais considĂ©rer qu'il y a un point, qu'on ne connaĂźt pas Ă l'avance, qui doit ĂȘtre changĂ© pour trouver ces lignes.
# Pas bien compliqué... en reformulant
PostĂ© par đČ Tanguy Ortolo (site web personnel) . ĂvaluĂ© Ă 3.
La premiÚre partie ne pose aucune difficulté particuliÚre. Pour la seconde, l'énoncé suggÚre presque une implémentation directe : essayer de changer les points, un par un, et chercher à chaque fois si on trouve une réflexion. Inutile de dire que ça risque de prendre un peu trop de temps.
En reformulant le problÚme, on peut trouver une solution plus intelligente : on ne cherche plus une réflexion parfaite mais une réflexion avec exactement une erreur. Voilà , vous avez l'algorithme, je vous laisse. :-)
[^] # Re: Pas bien compliqué... en reformulant
PostĂ© par Yth (Mastodon) . ĂvaluĂ© Ă 2.
Je me suis pris la tĂȘte Ă cause d'une erreur de raisonnement et du fait que je n'ai rien modĂ©lisĂ©.
J'avais un algo qui détectait de trÚs bons candidats à la presque-symétrie, en fait j'avais 103 candidats sur 100.
Et pour ces 3 là je dois fouiller un peu plus loin pour valider la presque symétrie, et là , si j'avais fait une classe Pattern avec les données dedans, je serais allé bien plus vite.
En fait, sur le principe (mais pas tellement sur la résolution dans mon cas, j'ai été lent), on voit tout de suite un truc dans les données, et ça suggÚre des idées.
Bref, si j'avais pris le temps de faire quelque chose de propre, je serais allé plus vite :)
[^] # Re: Pas bien compliqué... en reformulant
PostĂ© par mac . ĂvaluĂ© Ă 1.
La solution en flippant les points un par un ne prend pas tellement de temps que ça, les tableaux à manipuler sont de taille assez modeste...
Je m'en sors Ă moins de 2 secondes en Python chez moi.
[^] # Re: Pas bien compliqué... en reformulant
PostĂ© par đČ Tanguy Ortolo (site web personnel) . ĂvaluĂ© Ă 3.
Allez, voici le code :
[^] # Re: Pas bien compliqué... en reformulant
PostĂ© par vicnet . ĂvaluĂ© Ă 1.
Salut,
Oui, il suffit de s'arrĂȘter Ă la premiĂšre solution qui donne une valeur diffĂ©rente!
J'avoue que cet advent m'a demander du temps car j'ai eu du mal à comprendre l'énoncé de la 1re partie et encore plus de la 2e...
Est-ce qu'on fait une symétrie en supprimant les colonnes que à gauche ou les 2. Bref, en relisant j'ai compris qu'on souhaitait une symétrie avec des lignes/colonnes imaginaires !
Et pour le 2e, mon algo ne voyait pas toutes les symĂ©tries d'un mĂȘme pb, il ne prenait que la 1er qui Ă©tait gĂ©nĂ©ralement celle calculĂ©e au 1er coup !
J'ai eu du mal Ă trouver pourquoi je n'avais pas bonne valeur au final.
# Solution en Haskell
PostĂ© par Guillaume.B . ĂvaluĂ© Ă 2.
Voici ma solution en Haskell.
Pas vraiment de difficultĂ©, j'ai factorisĂ© le code pour rĂ©soudre les deux parties de la mĂȘme maniĂšre.
Pour les connaisseurs d'Haskell, le test
isSymetryest lazy et s'arrĂȘte dĂšs qu'il a dĂ©tectĂ© au moins une diffĂ©rence pour la partie 1 et deux diffĂ©rences pour la partie 2.700 microsecondes pour chacune des parties.
# En binaire et en puissances de 2
PostĂ© par Yth (Mastodon) . ĂvaluĂ© Ă 2.
Je vois deux types de caractĂšres, je pense binaire.
Transformer les lignes en nombre, ça permet des comparaisons d'entiers plutÎt que de chaßnes : ça me plaßt.
Alors voilĂ une partie 1 assez rapide, faut surtout (surtout) bien mesurer ses indices de listes, ses ranges, etc.
D'abord les donnĂ©es, on va retourner une liste de nombres horizontaux et la mĂȘme chose en vertical, les
.sont des 0 et les#des 1.Ensuite j'ai deux fonctions de calcul de symétries, différentes pour les deux exercices, ça se factorisait assez mal chez moi.
L'exercice 2 est un peu plus complexe, puisque je n'ai plus vraiment accÚs aux données d'origine, je n'ai plus que mes nombres :
La réflexion est simple : si deux lignes diffÚrent d'un seul élément, alors leur représentation binaire diffÚre d'un seul bit, donc leur différence est une puissance de 2. Les puzzles ne dépassent pas 17x17, donc avec mon ensemble qui va jusque 220 je suis suffisamment large.
Par contre c'est une condition nécessaire, mais pas suffisante. Presque, en tout cas avec les données de test on ne trouve pas l'erreur.
Ben oui, si deux lignes diffÚrent sur deux cases cÎte à cÎte, une à 1 d'un cÎté et l'autre de l'autre, la différence fait 2n+1 - 2n = 2n, qui est puissance de 2.
En regardant bien, pour une diffĂ©rence de 2n on a forcĂ©ment le bit n diffĂ©rent, mais si le bit n+1 est identique alors les deux nombres sont identiques (sinon on peut mĂȘme en avoir plein : 32-16-8=8 !).
Bref, encore une fois je veux faire vite, je teste une idĂ©e sans mĂȘme la valider dans ma tĂȘte, c'est faux et je me demande pourquoi.
Mais voilà , finalement on a un truc assez simple, trivialement rapide (0,3s on tombe jamais vraiment en dessous de ça en démarrant un interpréteur python), donc pas trop chercher à optimiser, on ne saurait pas vraiment si on y gagne ou pas.
Par contre cÎté lisibilité c'est mort, il faut réfléchir à tout ce que ces indices, ces parcours à l'envers ou pas, etc, signifient vraiment, pour comprendre quoi que ce soit.
[^] # Re: En binaire et en puissances de 2
PostĂ© par barmic 𩩠. ĂvaluĂ© Ă 2.
Tu t'es pris la tĂȘte je trouve pour la comparaison en binaire.
J'ai fais un xor et j'ai vérifié s'il donnait une puissance de 2
Il y a 2 subtilités :
Du coup j'ai une condition
La spĂ©cifictitĂ© de ce code fais que ma partie 1 et ma partie 2 sont assez distinct, mais je suis Ă ~500ÎŒs.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: En binaire et en puissances de 2
PostĂ© par Yth (Mastodon) . ĂvaluĂ© Ă 2.
Pertinent, je n'ai pas révisé mon opération logiques depuis un moment, je n'ai plus les réflexes...
Je vais me rafraßchir ça.
Suivre le flux des commentaires
Note : les commentaires appartiennent Ă celles et ceux qui les ont postĂ©s. Nous nâen sommes pas responsables.