Seize piles de fromage sont placées sur un carré de 4x4. Ils sont étiquetés de à . Le plus petit tas est et le plus grand est .
La souris affamée a tellement faim qu’elle passe toujours directement à la pile la plus grosse ( ) et la mange tout de suite.
Après cela, il se dirige vers le plus gros tas voisin et le mange rapidement. (Ouais… C'est vraiment affamé.) Et ainsi de suite jusqu'à ce qu'il n'y ait plus de tas de voisins.
Une pile peut avoir jusqu'à 8 voisins (horizontalement, verticalement et en diagonale). Il n'y a pas de bouclage.
Exemple
Nous commençons avec les piles de fromage suivantes:
La souris affamée mange d’abord , puis sa plus grande pile de voisins, qui est .
Ses prochains mouvements sont , , , , , , , , et dans cet ordre exact.
Il n'y a plus de fromage autour de la souris affamée, alors ça s'arrête là.
Le défi
Compte tenu de la configuration initiale du fromage, votre code doit imprimer ou renvoyer la somme des piles restantes une fois que Hungry Mouse a cessé de les manger.
Pour l'exemple ci-dessus, la réponse attendue est .
Règles
- Étant donné que la taille de la matrice d'entrée est fixe, vous pouvez la prendre comme un tableau 2D ou un tableau unidimensionnel.
- Chaque valeur de à est garantie pour apparaître exactement une fois.
- C'est du code-golf .
Cas de test
[ [ 4, 3, 2, 1], [ 5, 6, 7, 8], [12, 11, 10, 9], [13, 14, 15, 16] ] --> 0
[ [ 8, 1, 9, 14], [11, 6, 5, 16], [13, 15, 2, 7], [10, 3, 12, 4] ] --> 0
[ [ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16] ] --> 1
[ [10, 15, 14, 11], [ 9, 3, 1, 7], [13, 5, 12, 6], [ 2, 8, 4, 16] ] --> 3
[ [ 3, 7, 10, 5], [ 6, 8, 12, 13], [15, 9, 11, 4], [14, 1, 16, 2] ] --> 12
[ [ 8, 9, 3, 6], [13, 11, 7, 15], [12, 10, 16, 2], [ 4, 14, 1, 5] ] --> 34
[ [ 8, 11, 12, 9], [14, 5, 10, 16], [ 7, 3, 1, 6], [13, 4, 2, 15] ] --> 51
[ [13, 14, 1, 2], [16, 15, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12] ] --> 78
[ [ 9, 10, 11, 12], [ 1, 2, 4, 13], [ 7, 8, 5, 14], [ 3, 16, 6, 15] ] --> 102
[ [ 9, 10, 11, 12], [ 1, 2, 7, 13], [ 6, 16, 4, 14], [ 3, 8, 5, 15] ] --> 103
[[9, 10, 11, 12], [1, 2, 7, 13], [6, 16, 4, 14], [3, 8, 5, 15]]
Réponses:
Python 2 ,
133 à130 octetsEssayez-le en ligne!
Prend une liste aplatie de 16 éléments.
Comment ça fonctionne
la source
a[i+x]for x in[-6,-5,-4,-1,1,4,5,6]
peut être raccourcie àa[i+j+j/3*2-6]for j in range(9)
(l'entrée zéro est inoffensive). Python 3 peut certainement faire plus court en codant en dur un bytestring de longueur 8, mais Python 2 pourrait quand même être meilleur dans l'ensemble.a=[0]*5
for r in input():a=r+[0]+a
. Peut-être existe-t-il une solution de tranchage de cordes encore plus courte qui ne nécessite pas d'itération.Python 2 , 111 octets
Essayez-le en ligne!
Méthode et cas de test adaptés de Bubbler . Prend une liste plate sur STDIN.
Le code vérifie si deux index plats
i
etj
représentent les cellules en contact en vérifiant que la différence de lignei/4-j/4
et de colonnei%4-j%4
est strictement comprise entre -2 et 2. Cette vérification réussit automatiquement au premier passage, de sorte que la plus grande entrée soit trouvée sans tenir compte de la contiguïté.la source
MATL ,
504947 octetsL'entrée est une matrice, utilisant
;
comme séparateur de lignes.Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
PHP,
177 174171 octetsCourez avec
-nr
, fournissez des éléments de matrice comme arguments ou essayez-le en ligne .la source
JavaScript, 122 octets
J'ai fait plus que quelques mauvais tours sur celui-ci et maintenant je n'ai plus de temps pour jouer au golf, mais au moins ça marche. Je reviendrai demain (ou, me connaissant, dans le train ce soir!), Si je peux trouver une minute.
Essayez-le en ligne
la source
flatMap()
: pR ,
128124123112110 octetsEssayez-le en ligne!
Il crée une matrice 4x4 (ce qui m'a aidé à visualiser les choses), la remplit de 0, puis commence à 16 et cherche dans les "piles" environnantes la plus grande suivante, et ainsi de suite.
En conclusion, il émet un avertissement, mais cela n’a aucune conséquence et ne change pas le résultat.
EDIT: -4 octets en compressant l'initialisation de la matrice en 1 ligne.
EDIT: -1 merci à Robert Hacken
EDIT: -13 octets combinant les suggestions de Giuseppe et Robin Ryder.
la source
r==16
pourr>15
.which
.m
tant que logique plutôt qu’un entier, et n’avez donc besoin d’appelerwhich
qu’une fois au lieu de deux.X%o%Y
est un alias pourouter(X,Y,'*')
.outer
est l’une des fonctions les plus pratiques car elle peut fonctionner comme la fonction "broadcast" d’Octave / MATLAB / MATL avec des opérateurs aribtrary (vectorisés). Voir ici ; Cekronecker
qui est également lié dans cette page est également pratique .Charbon de bois , 47 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Convertissez les nombres entrés en caractères alphabétiques (A = 0 .. Q = 16) et imprimez-les sous forme de grille 4x4.
Commencez par manger le Q, soit 16.
Répétez pendant qu'il y a quelque chose à manger.
Trouvez où se trouve la pile. Il s’agit d’une vue linéaire par rangée majeure.
Convertir en coordonnées et aller à cet endroit.
Trouvez la plus grande pile adjacente.
Mangez la pile actuelle.
Convertissez les piles en entiers et prenez la somme.
Efface le canevas et affiche le résultat.
la source
Powershell,
143141136130122121 octetsScript de test moins joué:
Sortie:
Explication:
Tout d’abord , ajoutez les bordures supérieure et inférieure de 0 et créez un tableau à une dimension:
Powershell renvoie
$null
si vous essayez d'obtenir la valeur derrière la fin du tableau.Deuxièmement , la boucle a
biggest neighbor pile
démarré de 16 à maximum non nul. Et annulez-le (la souris affamée le mange).Troisièmement , la somme des piles restantes.
la source
SAS,
236219 octetsEntrée sur des cartes perforées, une ligne par grille (séparées par des espaces), sortie imprimée dans le journal.
Ce défi est légèrement compliqué par certaines limitations des tableaux dans SAS:
Mises à jour:
infile cards;
(-13)a:
pour la définition d'un tableau plutôt quea1-a16
(-4)Golfé:
Ungolfed:
la source
Haskell , 163 octets
Essayez-le en ligne!
La
f
fonction prend l'entrée sous forme de liste de 4 listes de 4 nombres entiers.Légèrement non-golfé
la source
JavaScript (ES7), 97 octets
Prend les entrées sous forme de tableau aplati.
Essayez-le en ligne!
Commenté
la source
APL (Dyalog Unicode) , SBCS
4241 octetsEssayez-le en ligne!
la source
Java 10,
272248 octetsLes cellules sont vérifiées de la même manière que dans ma réponse au défi Tous les célibataires .
-24 octets grâce à @ OlivierGrégoire .
Essayez-le en ligne.
Explication:
la source
int r,c,R=4,M=1,x,y,X,Y;for(r=c=X=Y=0;
, alors merci. :)J, 82 octets
Essayez-le en ligne!
Je prévois de jouer au golf encore plus demain et d’écrire peut-être une solution plus semblable à celle- ci , mais j’ai pensé que j’essaierais l’approche aplatie puisque je ne l’avais pas fait auparavant.
la source
]
à gaucheg
?Rouge , 277 octets
Essayez-le en ligne!
C'est une très longue solution et je n'en suis pas content, mais j'ai passé beaucoup de temps à la réparer pour qu'elle fonctionne dans TIO (apparemment, il y a beaucoup de différences entre les versions stables de Win et Linux de Red), alors je la publie quand même ...
Plus lisible:
la source
Jelly ,
31 3029 octetsComme la méthode est beaucoup trop lente pour fonctionner dans les 60s avec la souris,
16
cela la commence à9
et limite ses capacités, de sorte qu'elle ne peut manger que9
s ou moins Essayez-le en ligne! (donc ici elle mange en9, 2, 7, 4, 8, 6, 3
partant97
).Comment?
la source
Pas mon meilleur travail. Il y a certaines améliorations à apporter, certaines probablement fondamentales pour l'algorithme utilisé - je suis sûr qu'il peut être amélioré en utilisant seulement un
int[]
, mais je ne pouvais pas comprendre comment énumérer efficacement les voisins de cette façon. J'aimerais beaucoup voir une solution PowerShell n'utilisant qu'un seul tableau à une dimension!PowerShell Core , 348 octets
Essayez-le en ligne!
Version plus lisible:
la source
(array|sort)[-1]
lieu deMeasure -max
fonctionner en PSv5, mais d'obtenir des résultats incorrects dans le noyau. Aucune idée pourquoi.(0..10|sort)[-1]
mais il retourne 10 sur PSv5 mais 9 sur PS Core. C'est parce qu'il le traite dans l'ordre lexicographique au lieu de numérique. Dommage que.C (gcc), 250 octets
Essayez-le en ligne!
Remarque: cette soumission modifie le tableau d'entrée.
s()
est la fonction à appeler avec un argument d'un mutableint[16]
(qui est le même en mémoire comme unint[4][4]
, ce qui estg()
l'interprète comme).s()
trouve l'emplacement de la16
dans le tableau, puis transmet cette information àg
, qui est une fonction récursive qui prend un emplacement, définit le nombre à cet emplacement sur 0, puis:Si un nombre positif est adjacent, indiquez à nouveau l'emplacement du plus grand nombre adjacent.
Sinon, renvoyer la somme des nombres dans le tableau.
la source
s(int*a){for(i=0;a[i]<16;++i);return g(a,i%4,i/4);}
Wolfram Language (Mathematica) , 149 octets
Essayez-le en ligne!
la source
Ajouter ++ , 281 octets
Essayez-le en ligne!
Oof, c'est compliqué.
Vérifier tous les cas de test
Comment ça fonctionne
Pour cette explication, nous allons utiliser l'entrée
Ceci implémente les deux fonctions d'assistance:
Enfin, la sortie t , c’est-à-dire les valeurs restantes non collectées.
la source
C # (.NET Core) , 258 octets
Sans LINQ. L'utilisation de System.Collections.Generic est destinée au formatage suivant - la fonction ne l'exige pas.
Essayez-le en ligne!
la source
Perl 6 ,
151136126125119 octetsSuper solution minable. Prend les entrées sous forme de tableau aplati.
Essayez-le en ligne!
la source
Perl 5
-MList::Util=sum -p
, 137 octetsEssayez-le en ligne!
la source
K (ngn / k) , 49 octets
Essayez-le en ligne!
l'entrée (
x
) est un tableau 1d(+!4 4)!x
un dictionnaire qui mappe des paires de coordonnées aux valeurs dex
h::
assigner à une variable globaleh
*>
la clé correspondant à la valeur maximale{
}\
répéter jusqu'à la convergence, en collectant les valeurs intermédiaires dans une listeh[,x]:0
mettre à zéro la position actuelle+x+0,'1-!3 3
positions voisines(
)#h
filtrez-lesh
comme un petit dictionnaire*>
quel voisin a la valeur maximale? il devient la position actuelle pour la nouvelle itération+/h
enfin, renvoyer la somme desh
valeurs restantes dela source
Wolfram Language (Mathematica) ,
124115 octetsEssayez-le en ligne!
Cela prend un tableau 2D, le remplit de chaque côté, puis l'aplatit immédiatement afin que nous n'ayons pas à passer d'octets d'indexation. Le seul coût pour cela est
Join@@
d'aplatir. Ensuite, cela se passe comme ci-dessous.Version 124 octets pour un tableau 2D: essayez-le en ligne!
Principalement mon propre travail, avec un peu dérivé de la réponse de 149 octets de J42161217 .
Ungolfed:
la source