Étant donné une position avec une rangée de tours et / ou des espaces vides, affichez le nombre de mouvements de tour différents possibles. Une tour peut se déplacer vers la gauche ou la droite vers un espace vide, mais pas vers celui qui nécessite de passer sur une autre tour. Lorsqu'une tour se déplace, les autres tours restent en place.
Par exemple, à partir de cette position, 6 mouvements sont possibles:
.R..RRR.
- La première tour (la plus à gauche) peut se déplacer de 1 espace vers la gauche, ou 1 ou 2 espaces vers la droite (3 mouvements)
- La tour suivante ne peut se déplacer que de 1 ou 2 cases à gauche (2 mouvements)
- La troisième tour ne peut pas bouger du tout car elle est coincée entre deux autres tours (0 mouvement)
- La dernière tour ne peut se déplacer que de 1 case vers la droite (1 coup)
Notez qu'une position peut ne pas avoir de tour du tout, ou pas d'espace vide du tout.
Entrée: Une liste non vide (chaîne, tableau, etc.) de tours et d'espaces vides. Vous pouvez les représenter sous la forme True
/ False
, 1
/ 0
, 'R'
/ '.'
ou deux caractères codés sur un seul octet ou des chiffres à un chiffre de votre choix. C'est à vous de choisir celui qui signifie tour et celui qui signifie espace vide.
Sortie: Un entier non négatif. Les flotteurs entiers sont également très bien.
Cas de test
La sortie est le nombre à gauche.
6 .R..RRR.
0 .
0 R
4 R..RR
3 ...R
8 ..R..R..
0 ......
Pour plus de cas de test, voici toutes les entrées jusqu'à la longueur 5.
0 .
0 R
0 ..
1 .R
1 R.
0 RR
0 ...
2 ..R
2 .R.
1 .RR
2 R..
2 R.R
1 RR.
0 RRR
0 ....
3 ...R
3 ..R.
2 ..RR
3 .R..
3 .R.R
2 .RR.
1 .RRR
3 R...
4 R..R
3 R.R.
2 R.RR
2 RR..
2 RR.R
1 RRR.
0 RRRR
0 .....
4 ....R
4 ...R.
3 ...RR
4 ..R..
4 ..R.R
3 ..RR.
2 ..RRR
4 .R...
5 .R..R
4 .R.R.
3 .R.RR
3 .RR..
3 .RR.R
2 .RRR.
1 .RRRR
4 R....
6 R...R
5 R..R.
4 R..RR
4 R.R..
4 R.R.R
3 R.RR.
2 R.RRR
3 RR...
4 RR..R
3 RR.R.
2 RR.RR
2 RRR..
2 RRR.R
1 RRRR.
0 RRRRR
Python 3 ,
3029 octetsEssayez-le en ligne!
-1 octet grâce à @JoKing
La fonction prend une chaîne d'octets Python en entrée. Chaque espace vide est codé sous forme de tabulation et chaque tour est codée sous forme d'octet
b'\x00'
ayant une valeur0
.Le calcul équivaut à
lambda s:(s+s).strip().count(b'\t')
un nombre d'octets inférieur.la source
JavaScript (ES6),
3833 octets5 octets enregistrés grâce à @JoKing
Prend l'entrée sous forme de chaîne. Attend un espace pour une case vide et tout autre personnage pour une tour.
Essayez-le en ligne!
Commenté
Python 2 ,
4033 octets7 octets enregistrés grâce à @Grimy
Essayez-le en ligne!
la source
count
place desplit
( TIO )Japt , 5 octets
L'essayer
la source
Perl 6 , 16 octets
Essayez-le en ligne!
Une expression régulière qui correspond à toutes les instances exhaustives de tours suivies d'espaces ou d'espaces suivis d'une tour et renvoie le nombre de correspondances.
la source
05AB1E , 5 octets
Essayez-le en ligne!
la source
Rétine ,
2315 octetsDoublez le nombre d'espaces entre les tours, les lignes grep avec au moins une tour, puis comptez le nombre d'espaces.
Essayez-le en ligne!
Bien que le programme utilise des espaces au lieu de points, j'ai ajouté un code de préfixe afin que les cas de test fournis puissent être facilement collés et utilisés.
J'espérais pouvoir utiliser des correspondances qui se chevauchent
(?<=R.*) | (?=.*R)
, mais les chevauchements ne sont pas aussi agressifs. Il faudrait compter toutes les façons possibles d'obtenir une correspondance afin de retourner le résultat correct avec cette méthode.la source
.R.R.R.
bien que changer la première ligneR.+R
puisse aider?Gelée , 6 octets
Essayez-le en ligne!
Un lien monadique prenant une liste de
0
tour et1
d'espace et renvoyant un entier avec le nombre de coups. Le lien TIO prend la liste collée des cartes possibles donnée dans la question, convertit au bon format et sort ensuite les réponses calculées et correctes.Explication
la source
Japt , 6 octets
Espaces pour les espaces, tout autre caractère pour les tours.
L'essayer
la source
Escargots, 7 octets
Au moins ça bat Retina :)
Essayez-le en ligne!
la source
Gelée , 5 octets
Essayez-le en ligne!
-1 merci à Jonathan Allan .
0
représentent une tour,1
représente un espace vide.la source
Ẉ
pour obtenir les cinq:ḲẈ+ƝS
Ẉ
ṣ0
Stax ,
765 octetsExécuter et déboguer
Utilisez l'onglet pour le carré vide et tout autre caractère pour la tour.
la source
C (clang) , 57 octets
Essayez-le en ligne!
J'ai réalisé que cela ne fonctionnait pas pour les listes vides .. Maintenant ça marche! De plus, vous avez économisé quelques octets!
1 = tour. 0 = espace.
pour (.. i + = n ++? - i: 1) // compte les espaces ou réinitialise les mouvements supplémentaires => i = - ~ i ! * n ++ (@ceilingcat)
o + = * n? r = 1, i: r; // ajoute à la sortie -i- (déplacements supplémentaires) quand une tour est rencontrée plus définit -r- (tour rencontré), -i- sera effacé pour incrémenter la phrase.
ajoute -r- pour chaque espace (tour atteint garanti)
la source
Haskell , 36 octets
Essayez-le en ligne!
Utilise 1 pour l'espace vide, 0 pour la tour. Compte le nombre de 1 ne figurant pas dans un bloc initial de uns et l'ajoute au résultat pour la chaîne inversée.
la source
Haskell , 33 octets
Essayez-le en ligne!
Fonction anonyme qui prend l'entrée comme une liste de 1 (espaces) et de 0 (tours). Cela coupe les espaces du début et de la fin de la liste, puis concatène les deux versions de la liste et les additionne.
Celui-ci utilise GHC 8.4.1 ou une version ultérieure pour avoir accès à l'
<>
opérateur sans l'importer.la source
Python 2 , 59 octets
Essayez-le en ligne!
la source
Japt , 6 octets
Essayez-le en ligne
la source
Wolfram Language (Mathematica) ,
4338 octetsEssayez-le en ligne!
Port de la solution de rétine de Neil . Utilise 1 pour les espaces et 0 pour les tours.
la source
Haskell ,
685854 octetsEssayez-le en ligne!
la source
Rouge , 46 octets
Essayez-le en ligne!
Juste un port rouge des solutions JavaScript / Python d' Arnauld . Prend un espace comme un carré vide.
la source
Java 11,
3532 octetsPort de la réponse Python 3 de @Joel .
-3 octets grâce à @Joel également.
Utilise NULL-bytes (
\0
) pour Rooks et tabs (\t
) pour les espaces.Essayez-le en ligne.
J'ai essayé d'utiliser
s->(s+s).trim().chars().sum()/9
au début en 31 octets, mais cela ne fonctionne pas parce que la fonctionString#trim
intégrée supprime non seulement les espaces / tabulations / sauts de ligne de début et de fin, mais également tous les autres octets qui sont plus petits ou égaux àU+0020
(Unicode 32; un espace) , donc cela supprimera également les octets NULL ..Merci à Joel de m'avoir recommandé le nouveau Java 11+
String#strip
intégré (que j'ai oublié qu'ils ont ajouté) comme alternative. Celui-ci supprime également les portions de fin / début, mais dans ce cas, seuls les espaces blancs , de sorte que les octets NULL sont conservés.Explication:
la source
String.strip()
pour supprimer uniquement les espaces blancs: 32 octetsPerl 5
-MList::Util=sum -pF/R/
, 40 octetsEssayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) , 27 octets
Un octet enregistré grâce à @someone
Essayez-le en ligne!
la source
Stax ,
76 octets-1 octet grâce à récursif
Exécuter et déboguer
la source
v
, ce qui vous fera économiser un octet.Befunge-98 (PyFunge) , 73 octets
Essayez-le en ligne!
la source
C ,
183156151137 1379691 octetsMerci à plafondcat pour 91 octets.
R est une tour, tout le reste est un espace.
TIO
la source
82
place ou'R'
, il est plus court pour utilisere+e*d
quee*(1+d)
,e=0,d=1;else e++; can be changed to
e = -1, d = 1; e ++;, and
b [a] `etb[++a]
peut être remplacé par*b
et*++b
Pyth , 7 octets
Essayez-le en ligne!
Prend une chaîne de
R
pour les tours,(espace) pour les espaces vides
la source
x86-64 - 26 octets
L'entrée est un tableau de 32 bits maximum et un entier représentant le nombre de carrés, 1 représentant la tour, 0 représentant le vide.
Copie les bits pour qu'ils soient ajoutés à gauche et supprime les bits de fin zéro. Obtient ensuite le nombre de bits zéro de tête et le soustrait du nombre total de bits zéro.
Code machine x86-64 - 22 octets - échecs de longueur régulière uniquement.
L'entrée est un entier de 32 bits avec l'octet de poids faible composé de 8 bits représentant les tours. 1 est une tour, 0 est vide.
Copie les bits dans l'octet significatif suivant et supprime les zéro bits de fin. Obtient ensuite le nombre de bits zéro de tête et le soustrait du nombre total de bits zéro.
la source