Votre tâche consiste donc à prendre un bloc 3x3 où -
sont les espaces vides moyens et *
les espaces remplis moyens, par exemple:
-**
-*-
*-*
et réorganiser le bloc de sorte que le *
s forme un X, comme ceci:
*-*
-*-
*-*
Entrée: 3x3 carrés comme ci-dessus, ils peuvent être 3 lignes, un tableau ou comme vous le souhaitez.
Sortie: le plus petit nombre de mouvements à réorganiser en X. Chaque mouvement retourne 2 caractères qui se touchent et sont horizontaux l'un de l'autre, verticaux l'un de l'autre ou diagonaux l'un de l'autre. Si ce n'est pas possible, renvoyez toute sortie impossible, par exemple 999
ou -4242
. 5
est le plus petit de ces nombres.
Cas de test:
1) Sortie: 1
-**
-*-
*-*
2) Sortie: -1
-*-
-*-
*-*
3) Sortie: 3
---
-**
***
4) Sortie: 0
*-*
-*-
*-*
Vous pouvez remplacer les caractères vides et non vierges mais assurez-vous d'inclure lequel est lequel dans votre message
Code Golf
N'oubliez pas que c'est le golf de code le code le plus court gagne!
la source
*
et vice versa, ou les échanger?*
? Pouvez-vous ajouter des cas de test supplémentaires?*
ou moins de 5 rend impossible.-1
? Par exemple5
(impossible autrement), ou lancer une erreur?Réponses:
Python 3 ,
10478 octetsEssayez-le en ligne!
Edit: appliqué les suggestions de @Jonathan Allan et @ xnor pour réduire considérablement le nombre d'octets.
L'entrée est une liste de
chaînesde longueur 9 avec des zéros et des uns, les uns étant les*
s.Voici quelques observations:
Par conséquent, nous testons d'abord si la chaîne en a cinq, puis comptons ces choses:
0124
,0346
,2458
,4678
étant tous les)n[4]
one, puis testez chaque plage d'extraction'111'
.max
au lieu desum
.la source
count
s parsum
s et'111'
par[1]*3
) TIO (j'ai essayé d'être intelligent avec unen[i::j]>=[1]*3
boucle mais je n'ai pas trouvé plus court).max(n,n[6:],n[::3],n[2::3])>='1'*3
.Gelée , 26 octets
Essayez-le en ligne!
Prenez une liste plate en entrée.
Dommage que Jelly n'ait pas d '"indices véridiques multidimensionnels" ...
T€ṭ€"JẎ
fonctionne aussi mais prend 1 octet de plus.Algorithme: Il y a 5 positions de bloc actuelles et 5 cibles (destinations), l'algorithme essaie chacun des 5! correspondant et afficher la somme minimale de la distance [source, destination] Chebyshev.
la source
Haskell ,
176132126 126104 octetsEssayez-le en ligne!
Prend une liste d'entiers avec 1 comme caractère non vide. Additionne le nombre de carrés indexés non nuls, puis ajoute 1 si l'un des motifs de déplacement double est trouvé (carré central et colonne / ligne de bord complètement remplis). La dernière partie est un peu inutile, je pense, pourrait probablement être beaucoup améliorée par rapport à cette méthode de force brute. Renvoie 5 (une sortie impossible) sur une entrée impossible.
la source
length
test peut être raccourcisum[1|1<-a]
. Fonctions
vers(1-e,n+sum[1|b>e])
laquelle vous pouvez vous connecter pour enregistrer un autre octet. Vous pouvez utiliser laotherwise
garde dansm
la sauvegarde deux()
. Enfin,&&
au niveau supérieur dans un garde peut être remplacé par,
. ...sum
compréhension sur une liste pour convertir un booléen en int. Essayez-le en ligne!m
. Essayez-le en ligne!a
must be0
ne peut pas être utilisé à lasum a
place desum[1|1<-a]
? Essayez-le en ligne!1
s à moins que le centre ne soit0
, vous pouvez faire à la3<-
place deelem 3$
. Vous pouvez également utiliser à lasum.map(a!!)
place desum<$>map(a!!)
.Python 2 ,
194192 octetsEssayez-le en ligne!
la source
[0,1,0,1,0,1,1,1,0]
(attendu: 4, réel: 13).JavaScript (ES6), 123 octets
Prend l'entrée comme un entier de 9 bits. Résout le casse-tête en appliquant naïvement les règles, ce qui s'est avéré ne pas être l'approche la plus courte.
Essayez-le en ligne!
Commenté
NB : Ce code effectue des mouvements illégaux au-delà du haut du plateau lorsque m est multiplié par 64. Mais ils sont simplement ignorés, car ils ne peuvent pas conduire à une solution plus courte que la meilleure solution légale.
Vous trouverez ci-dessous les 9 masques de bit d'échange de base et le motif cible. Le coin supérieur gauche est le bit le plus significatif.
la source
Gelée , 26 octets
Essayez-le en ligne!
Un lien monadique.
Comment?
Inspiré par la réponse Python de Bubbler ; golfé pour convenir à Jelly ...
la source
JavaScript, 85 octets
Ceci est un port regex de la réponse de Bubbler .
Saisissez une chaîne de 0/1.
Afficher l'extrait de code
la source
Stax ,
2322 octetsExécuter et déboguer
Ce programme prend un tableau de
[0, 1]
comme entrée et retourne un nombre entier de mouvements, ou une chaîne vide si aucune solution n'est possible.Considérez ces indices pour la grille
1
s dans l'entrée, alors il n'y a pas de solution, donc nous ne produisons aucune sortie.1
de ces positions produira le résultat final.1
dans une position incorrecte, sa distance est soit 1 ou 2. Ce sera 2 ssi il est entouré d'autres1
s. Par exemple, s'il y a1
s aux indices [0, 1, 2, 4], alors la distance pour le mauvais1
est 2.Dans cet esprit, considérez ce pseudo-code pour obtenir la distance contribuée au résultat par l'index 1.
b
de 0 à 15.0 <= b <= 7
la distance est 0. Lorsque8 <= b <= 14
la distance est 1. Lorsqueb == 15
la distance est 2. Ceci peut être calculé en utilisant la division entière parb * 2 / 15
.Ainsi, la distance totale peut être calculée en répétant ce processus 4 fois et en faisant tourner la grille entre les deux.
Exécutez celui-ci
la source
Excel,
8681 octetsAncien: lorsque la sortie «impossible» était
-1
Utilise
1
pour rempli et0
pour vide, entrée dans la plageA1:C3
.Possibilité de jouer au golf plus loin si nous pouvons retourner des valeurs autres queRetourne une-1
"impossible".#DIV/0!
erreur sur les grilles impossiblesFonctionne sur la même logique que la réponse Python de Bubbler .
la source