pannenkoek2012 vise à compléter Super Mario 64 en appuyant le moins possible sur le bouton A, ce qui fait sauter Mario. Chaque "Une presse" se compose de trois parties:
- En appuyant sur le bouton
- Le tenir pendant n'importe quelle durée
- Le libérer
Voir cette vidéo (1:15 - 3:23) pour une excellente explication qui inclut l'image ci-dessus. (Cependant, ce défi n'utilisera pas la terminologie de la demi-presse et posera des obstacles qui nécessitent la publication de A.)
Tâche:
Étant donné une séquence d'obstacles nécessitant d'appuyer sur (P), de maintenir (H) ou de relâcher (R) le bouton A, émettez le plus petit nombre de pressions nécessaires pour les surmonter dans l'ordre indiqué. Le bouton A n'est initialement pas maintenu.
Formulé formellement: étant donné une chaîne S de caractères PHR
, considérez les chaînes de forme (PH*R)*
qui contiennent S comme sous-séquence, et sortez le plus petit nombre possible de P
dans une telle chaîne. Ou, alternativement, trouvez le plus petit nombre de morceaux de la forme dans P?H*R?
laquelle S peut être divisé.
Exemple
Regardons l'entrée RHRPHHHR
. Le bouton A ne démarre pas, donc pour surmonter l'obstacle initial, il R
faut appuyer sur le bouton puis le relâcher (appuyez sur # 1). Ensuite, nous sommes tenus de maintenir le bouton H
, ce qui nécessite encore une fois qu'il soit pressé (appuyez sur # 2). Ensuite, il peut ensuite être libéré après pour le satisfaire R
. Enfin, le reste PHHHR
peut être satisfait par une seule pression (appuyez sur # 3) suivie d'un maintien HHH
et d'un relâchement R
. Ainsi, le nombre de sorties est de 3.
Une autre façon de le voir, c'est que nous pouvons diviser la chaîne d'entrée en 3 parties de formulaire PHH..HHR
où les lettres peuvent être omises.
R
HR
PHHHR
Format d'entrée
L'entrée sera une liste ou une chaîne d'éléments représentant appuyer, maintenir et relâcher comme votre choix de:
P, H, R
p, h, r
1, 2, 3
0, 1, 2
correspondant dans l'ordre donné. L'entrée ne sera pas vide.
Cas de test:
P 1
H 1
R 1
HP 2
RHP 3
HHR 1
PHRH 2
RHRPHHHR 3
HHHHHH 1
PPRRHHPP 6
HPPRHRPRHPPRHPPHRP 12
PRHRHPHHPRRRHPPRHHPPRRRHRHPRPHPRPRHHRPPPRHPRP 28
Classement:
Réponses:
Rétine , 9 octets
Essayez-le en ligne!
la source
Pyth , 13 octets
Essayez-le ici! ou Vérifiez tous les cas de test.
Notez que cela
1
fonctionne également à la place de3
.Comment ça marche?
En savoir plus sur l'expression régulière:
la source
Gelée , 10 octets
Une chaîne monadique prenant une liste (l'
P,H,R : 0,1,2
option) et renvoyant un entier, le nombre.Essayez-le en ligne! ou voir la suite de tests
Comment?
Fonctionne de manière efficace en obtenant toutes les paires adjacentes de comptage alors que tout ne sont pas des « paires de continuation » (
PR
,PH
,HR
, ouHH
) et en ajoutant une.Solution précédente de 11 octets:
Essayez-le en ligne! ou voir la suite de tests
Comment?
Fonctionne comme ci-dessus, mais d'une manière complètement différente ...
et un autre, encore très différent:
(ajouter 19 à chacun, puis pour les paires adjacentes effectuer l'exponentiation, modulo par 13, modulo par 2, additionner et ajouter un).
la source
Lot, 69 octets
Prend l'entrée comme une liste de paramètres de ligne de commande indexés sur 0, mais vous pouvez utiliser une liste de lettres
p, h, r
en majuscules ou en minuscules si vous tapez d'set /a p=0, h=1, r=2
abord. Explication:b
conserve la dernière entrée (par défaut à2
pour relâché) etn
le nombre de pressions. Chaque entrée ajoute une presse si la dernière entrée était un communiqué ou si l'entrée actuelle est une presse.la source
set
peut définir plusieurs variables à la fois? Utile à savoir.set /a
est une évaluation arithmétique, donc tant que toutes les variables que vous souhaitez définir sont numériques, vous pouvez simplement utiliser l'opérateur virgule pour concaténer les expressions d'affectation.Python 2, 44 octets
Utilise P-> 1 H-> 2 R-> 3
la source
Deorst , 11 octets
Essayez-le en ligne!
Utilise M. Xcoder regex
la source
Japt, 11 octets
Essayez-le | Vérifier tous les cas de test
è
compte le nombre de correspondances du RegEx dans l'entrée etÉ
soustrait 1.la source
Python 2 , 48 octets
Essayez-le en ligne!
Prend
0,1,2
en entrée.la source
Husk ,
65 octetsEssayez-le en ligne! L'entrée est une liste
0,1,2
(le lien TIO utilise des lettres pour un copier-coller plus facile des cas de test).Explication
J'utilise la même idée générale que la réponse Jelly de Jonathan Allan : diviser sur les occurrences des "paires de discontinuités" PP, HP, RH, RR et RP, et compter les blocs résultants. Dans le codage 0,1,2, ces paires sont exactement celles dont l'élément gauche est 2 ou l'élément droit est 0.
la source
Javascript (ES6), 30 octets
la source
Haskell , 36 octets
Essayez-le en ligne!
Utilise l'
0,1,2
encodage.la source
Gelée , 10 octets
Essayez-le en ligne! ou Suite de tests! (
Voléemprunté à Jonathan.)Alternative:
Essayez-le en ligne!
Gelée , 11 octets
1 octet enregistré avec l'aide de caird coinheringaahing.
Essayez-le en ligne!
la source
μ
du troisièmeKotlin , 36 octets
Embellie
Tester
TIO
TryItOnline
la source
J ,
1817 octets-1 Merci à @FrownyFrog
Prend entrée sous la forme de
0,1,2
. La fonction d'assistance sur TIO convertit les cas de test dans ce formulaire.Essayez-le en ligne!
La logique des comparaisons peut encore être jouable. Je tord mon cerveau en nœuds en essayant de penser à des déclarations plus équivalentes et plus courtes.
Explication (solution précédente)
La seule différence entre la solution actuelle et la précédente est la façon dont les comparaisons sont générées. La solution actuelle compare explicitement les éléments adjacents en décalant le tableau et la solution précédente compare les éléments adjacents en examinant les infixes de 2.
Ce serait beaucoup plus propre si deux prises ne faisaient rien. Le code prend des infixes de deux et vérifie s'ils ne sont pas ascendants et non deux fois. Si tel est le cas, nous en ajoutons un à notre décompte final. Nous devons ajouter 1 à la fin car nous sommes hors de l'un sinon (ou vous pouvez ajouter une
_
ou toute valeur supérieure à 2).La façon dont il vérifie si l'infixe est deux prises consiste à multiplier les deux valeurs ensemble et à voir s'il s'agit d'une seule (deux prises le sont
1 1
).la source
1+1#.}:(<+:1=*)}.
est un plus court.1+1#.0=}.*2-}:
Vim +
wc
, 25 octets␊
est la touche de retour et␘
est Ctrl+XEssayez-le en ligne!
Explication
la source