Nous continuons à suivre les panneaux qui indiquent les sources thermales, où avec un peu de chance nous finirons par trouver quelqu'un.
Nous arrivons à un observatoire où on lutin est en train d'étudier l'univers. Il veut bien vous aider mais il doit finir ses recherches, et vu l'efficacité de nos lutins, il serait utile de l'aider un peu.
Première partie
Il a une image du ciel avec des galaxies dedans et il doit déterminer la somme des distances de Manhattan qui séparent toutes les paires de galaxies :
...#......
.......#..
#.........
..........
......#...
.#........
.........#
..........
.......#..
#...#.....
Rien de bien compliqué, sauf que ces galaxies sont loin, donc anciennes. Depuis, l'espace s'est dilaté. En physique des lutins, l'espace se dilate de la façon suivante : les lignes et les colonnes qui ne contiennent aucune galaxie ont en fait une hauteur ou une largeur double. C'est simple n'est-ce pas ?
Je vous mets la deuxième partie en commentaire pour ne pas trop divulgâcher.
# Deuxième partie
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 3.
Attention, spoiler, ne lisez pas si vous en êtes à la première partie et que vous ne voulez pas vous gâcher le plaisir de devoir peut-être réfléchir à nouveau pour implémenter la deuxième.
Deuxième partie
En fait l'espace s'étend plus vite que vous ne l'imaginiez. Les lignes et colonnes qui ne contiennent aucune galaxie ne prennent pas deux fois plus de place, mais un million. Bonne chance et attention à l'OOM killer.
# Strike
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 3. Dernière modification le 11 décembre 2023 à 16:37.
Bon, aujourd'hui nous sommes dans le cas d'un problème avec une solution naïve qui ne passe pas à l'échelle. Mais personnellement, comme l'optimisation de la première partie était quand même assez simple, j'ai fait un strike, la deuxième partie était résolue en changeant simplement une constante.
# Solution en Haskell
Posté par Guillaume.B . Évalué à 2.
Hello tout le monde, c'est mon premier post sur linuxfr (même si je fréquente le site depuis longtemps).
Voici une solution en Haskell (pour ne pas faire comme tout le monde et accessoirement c'est mon langage préféré).
Pas de commentaire à faire la dessus. C'était un problème assez simple.
# Simple et qui rappelle des souvenirs.
Posté par Yth (Mastodon) . Évalué à 2. Dernière modification le 11 décembre 2023 à 18:00.
Aujourd'hui, j'ai fait assez simple, et c'est passé immédiatement pour la seconde partie.
Il me semble qu'on a déjà fait un bidule similaire l'an passé, avec des expansions de galaxies, et peut-être même des distances de Manhattan aussi, mais c'était peut-être dans deux problèmes différents…
Bref, je n'ai jamais cherché à doubler les lignes vides, mais à doubler les espaces vides.
En fait j'ai considéré la liste des galaxies, avec leurs positions.
Ensuite je travaille sur les abscisses, puis les ordonnées, l'un après l'autre, donc j'ai une liste de nombres, croissants, d'abord en Y puis en X.
Et pour chaque espace non nul entre deux de ces nombres, j'ajoute la taille de cet espace à tout ce qui est après : galaxies (en X ou en Y selon l'étape) et aux nombres restants. Bref, j'étends vers le bas, puis vers la droite.
Ajouter la taille à la taille ça double.
Pour l'exercice 2, on n'ajoute pas la taille mais (1 million moins 1) de fois cette taille. Exercice terminé.
[^] # Re: Simple et qui rappelle des souvenirs.
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 3.
C'est… bizarre comme façon de penser je trouve. Non ?
[^] # Re: Simple et qui rappelle des souvenirs.
Posté par Yth (Mastodon) . Évalué à 2.
Ouais.
En écrivant le commentaire, j'ai pensé à mieux, et voilà :
On calcule directement les coordonnées en parcourant les lignes/colonnes vides ou pleines.
Parfois on a beau essayer de simplifier notre vision du problème, on reste bloqué sur un truc, et on voit pas qu'il y a plus simple.
# Python
Posté par alberic89 🐧 . Évalué à 1.
Aujourd'hui, je considère ma carte comme une grille avec 0,0 en haut à gauche, puis je cherche les lignes/colonnes vides, puis l'emplacement des galaxies que j'associe par paires.
Je cherche ensuite la distance entre les paires de galaxies, et ajoute à ces distances le nombre de lignes/colonnes vides comprises entre les deux galaxies multiplié par un facteur (1 pour la 1er partie, 1000000-1 pour la 2e ).
Le code :
L'informatique n'est pas une science exacte, on n'est jamais à l'abri d'un succès
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.