Votre tâche consiste, étant donné une grille carrée de chiffres ( 0-9
), à sortir l'une des façons dont les chiffres peuvent être regroupés de telle sorte que:
- Chaque chiffre fait partie d'un groupe exactement
- Tous les groupes ont le même nombre de chiffres
- Tous les groupes sont délimités par une forme semblable à un polygone (cela signifie que chaque chiffre du groupe est à côté de [gauche, droite, haut, bas] au moins un autre chiffre du même groupe, sauf si chaque groupe a 1 élément).
- Tous les groupes ont la même somme
La grille d'entrée sera toujours un carré: vous pouvez choisir n'importe quelle méthode d'entrée que vous souhaitez (y compris fournir des arguments à une fonction ou une méthode). De plus, l'entrée fournira le nombre de groupes dans lesquels votre programme doit regrouper les chiffres.
Exemple d'entrée:
Supposons que votre format d'entrée soit stringOfDigits numberOfGroups
.
Un exemple d'entrée serait:
156790809 3
qui se traduirait par (une grille de sqrt(9) * sqrt(9)
)
1 5 6
7 9 0
8 0 9
que vous auriez à diviser en 3 groupes, dont chacun devrait avoir des 9 / 3 = 3
éléments avec la même somme.
Sortie: La sortie doit être une chaîne de chiffres, avec des espaces optionnels et des retours à la ligne pour le formatage, chaque chiffre suivi d'une lettre a-z
indiquant son groupe. Il devrait y avoir exactement des numberOfTotalDigits / numberOfGroups
éléments dans chaque groupe. Vous n'aurez jamais à diviser quelque chose en plus de 26 groupes.
Exemple de sortie:
1a 5a 6b
7c 9a 0b
8c 0c 9b
Notez que remplacer tous les a
s par b
s et b
s par a
s est également valable. Tant que chaque groupe est désigné par une lettre distincte, la sortie est valide.
De plus, je m'attends à ce que la plupart des programmes produisent quelque chose du genre, car les sauts de ligne / espaces sont facultatifs:
1a5a6b7c9a0b8c0c9b
Dans ce cas, l'ajout de tous les chiffres du groupe a
, b
ou c
fait 15. De plus, tous les groupes sont liés par un polygone.
Sorties non valides:
1a 5a 6b
7c 9a 0c
8c 0b 9b
parce que les groupes ne forment pas de polygones (en particulier, le 6b
est isolé et 0c
est également solitaire).
1a 5a 6b
7c 9a 0b
8c 0b 9b
parce que le groupe b
a 4 éléments alors qu'il c
n'en a que 2.
Etc.
S'il n'y a pas de solution valide, votre programme peut faire n'importe quoi (c'est-à-dire arrêter, planter, s'exécuter indéfiniment) mais si votre programme imprime None
lorsqu'il n'y a pas de solution valide, -15
à votre score.
S'il existe plusieurs solutions, il vous suffit d'en imprimer une, mais -20
si votre programme les imprime toutes séparées par un délimiteur.
C'est le golf de code, donc le code le plus court (avec des bonus) gagne!
6b
est isolé, pas le0b
.156790889 3
semble que cela devrait être156790809 3
Réponses:
Pyth , 122 - 20 - 15 = 87
Changements:
130 -> 120: Passé à une entrée séparée par une nouvelle ligne.
120 -> 134: correction d'un bug impliquant des groupes dont la taille n'était pas égale à la longueur latérale de la matrice.
134 -> 120: imprime toutes les solutions, y compris celles équivalentes sous le renommage de groupe.
120 -> 122: Correction d'un bug où seuls les chemins étaient générés, au lieu de tous les groupes légaux.
Essai:
Explication:
la source
JavaScript (ES6) 361 (376-15)
372(Peut-être peut-on encore jouer un peu plus au golf)
En fonction, le premier paramètre est la chaîne de chiffres et le deuxième paramètre est le nombre de groupes.
C'est une recherche récursive naïve, arrêtant la première solution trouvée (pas de bonus -20).
Besoin de plus de cas de test pour vérifier les performances sur une entrée plus importante.
Non golfé et expliqué
Test dans la console FireFox / FireBug
F("156790809",3)
production1c5c6b7a9c0b8a0a9b
F("156790819",3)
productionNone
la source