La version unidimensionnelle de ce problème était assez facile, alors voici une version 2D plus difficile.
Vous disposez d'un tableau 2D de hauteurs de terrain sur une entrée standard, et vous devez déterminer où les lacs se formeront quand il pleuvra. La carte des hauteurs n'est qu'un tableau rectangulaire des nombres 0-9 inclus.
8888888888
5664303498
6485322898
5675373666
7875555787
Vous devez sortir la même baie, en remplaçant tous les emplacements qui seraient sous l'eau avec *
.
8888888888
566*****98
6*85***898
5675*7*666
7875555787
L'eau peut s'échapper en diagonale, il n'y aurait donc pas de lac dans cette configuration:
888
838
388
le code le plus court gagne. Votre code doit gérer des tailles allant jusqu'à 80 de large et 24 de haut.
Trois autres exemples:
77777 77777
75657 7*6*7
75757 => 7*7*7
77677 77677
77477 77477
599999 599999
933339 9****9
936639 => 9*66*9
935539 9*55*9
932109 9****9
999999 999999
88888888 88888888
84482288 8**8**88
84452233 => 8**5**33
84482288 8**8**88
88888888 88888888
Réponses:
Haskell, 258 caractères
Exemple d'exécution:
Réussit tous les tests unitaires. Pas de limites arbitraires sur la taille.
m
la source
Python,
483491 caractèresJe suis presque sûr qu'il y a une meilleure (et plus courte) manière de procéder
la source
input()
avecsys.stdin.read()
et retirer la fuite\n
de mes entrées échantillons.sys.stdin.read()
lit à partir d'un fichier non? Je suis encore assez nouveau chez Python.sys.stdin.read()
lit STanDard INput jusqu'à EOF.input()
lit et évalue une ligne d'entrée standard.Python,
478471 caractères(Non compris les commentaires.
452450 caractères non compris les importations.)L'idée ici est que je construise un graphe orienté où chaque cellule de la grille a son propre sommet (plus un sommet "drain" supplémentaire). Il y a un bord dans le graphique de chaque cellule de valeur supérieure à ses cellules voisines de valeur inférieure, plus il y a un bord de toutes les cellules extérieures au sommet "drain". J'utilise ensuite Floyd-Warshall pour calculer quels sommets sont connectés au sommet "drain"; tous les sommets qui ne sont pas connectés seront inondés et seront dessinés avec un astérisque.
Je n'ai pas beaucoup d'expérience avec la condensation de code Python, donc il y a probablement une manière plus succincte que j'aurais pu implémenter cette méthode.
la source
Lisp commun, 833
Aucune tentative n'a été faite pour jouer au golf, je viens de trouver le problème intéressant. L'entrée est le tableau 2D de la carte. La solution vérifie chaque carré pour voir s'il "draine" - un carré draine s'il est sur le bord extérieur ou s'il est adjacent à un carré de hauteur égale ou inférieure qui draine. Pour éviter de se reproduire indéfiniment, le code conserve une "carte de drainage" (dm) où il stocke l'état de drainage des carrés qui ont déjà été déterminés.
la source
Python, 246 caractères
La solution fonctionne en faisant un DFS à partir de chaque position pour déterminer s'il faut ou non remplir.
Si un espace de fin sur chaque ligne est autorisé, il peut être raccourci en utilisant w = 80 et en remplissant les lignes d'entrée avec un espace à 80 caractères.
la source