introduction
Jonny veut jouer à Frogger. Cependant, il n'est pas très bon. En fait, il essaiera seulement d'avancer, et seulement après que les plateformes auront bougé.
Découvrez si la grenouille de Jonny parvient à atteindre la fin du chemin ou si elle meurt sur son chemin.
Défi
Le programme recevra en entrée une grille Frogger composée de 0
s et 1
s, au format suivant:
- La grille aura une largeur et une longueur aléatoires, et au moins 3x3
1
représente les plateformes0
représente l'eauF
représente la position de départ de la grenouille- Chaque première et dernière ligne de la grille sera composée uniquement de
1
s, et ne bougera pas, et la grenouilleF
sera placée au hasard sur la dernière ligne - Chaque couche intermédiaire sera toujours en mouvement et aura un
<
ou>
à la fin de chaque ligne indiquant si elle se déplace vers la gauche ou la droite
Remplacer ces symboles par les vôtres est autorisé, tant qu'ils sont tous distincts et que vous spécifiez les remplacements dans votre réponse.
L'entrée peut être dans n'importe quel format compatible (chaîne avec sauts de ligne, tableau de chaînes, tableau de caractères, ...).
Règles du défi
- À chaque tour, toutes les plates-formes se déplaceront d'un carré, selon la direction indiquée par le signe
<
ou>
- Les plateformes réapparaissent de l'autre côté de la grille si elles sont repoussées de "l'écran"
- Si la grenouille est sur une plate-forme mobile, elle se déplacera avec elle
- Après cela, la grenouille sautera d'un carré vers la rangée supérieure. La grenouille se déplacera à chaque tour.
- La grenouille meurt si elle saute dans l'eau (
0
) ou si elle touche le côté de la grille avec une plate-forme mobile
Votre programme doit produire une valeur vraie si la grenouille survit et une valeur fausse sinon.
C'est le code-golf , donc la réponse la plus courte en octets l'emporte. Des échappatoires standard s'appliquent.
Exemples
Exemple 1
Contribution
11111
00111>
00101<
1F111
Production
1
Exécution
Tour 1:
11111
10011
01010
1F111
11111
10011
0F010
11111
Tour 2:
11111
11001
F0100
11111
11111
F1001
10100
11111
Tour 3:
11111
1F100
01001
11111
1F111
11100
01001
11111
Exemple 2
Contribution
11111
00100<
00100<
1F111
Production
0
Exécution
Tour 1:
11111
01000
01000
1F111
11111
01000
0F000
11111
Tour 2:
11111
10000
F0000
11111
11111
F0000
10000
11111
Tour 3:
11111
00001
00001
11111
la source
<
ou>
alors nous pouvons prendre des tableaux rectangulaires en entrée? Au fait, beau défi!<
ou>
à la fin.0
ou attendra-t-elle la suivante1
? S'il peut attendre, ira-t-il à chaque fois1
, ou peut-il attendre intelligemment? C'est à dire avec le cas de test11111 00001< 00011< 11F11
, sera-ce falsey car il saute dans l'eau ( collerette de marches ); sera-t-il falsey parce qu'il sort du cadre ( coller des étapes ); ou sera-t-elle véridique car elle attend intelligemment la deuxième plateforme avant de sauter en avant ( coller d'étapes )?0
.Réponses:
Python 2 ,
168165152 152145137129 octetsEssayez-le en ligne!
Le format d'entrée est une liste de chaînes; caractères ayant la signification donnée dans l'énoncé du problème.
Explication:
i
est le numéro du tour (en commençant par le tour 1);x
est la position de la grenouille au début de ce tour.La ligne sur laquelle la grenouille est sur le point de monter est la chaîne
l
(notez que via le découpage, ceux-ci viennent de bas en haut).d=('<'in l)%-2|1
rendements-1
ou1
selon la direction dans laquelle la ligne se déplace.Puisque c'est le
i
e tour, cette ligne aura décalé de sa position d'origine pari
octets; et donc le caractère sur lequel la grenouille est sur le point de sauter estl[(x-d*i)%L]
oùL
est la largeur de la ligne, donc nous voulons que ce caractère soit égal à'1'
; c'est à dire,>'0'
.De plus, nous voulons vérifier que la grenouille ne sera pas décalée du bord au début du prochain tour; c'est la fonction de l'expression
-1<x+d<L
.Ces conditions sont enchaînées (puisque
'0'>-1
c'est toujoursTrue
); et si à tout moment l'expression résultante est fausse,k
deviendra (et restera ensuite)0
.Dans tous les cas, nous mettons à jour la position de la grenouille
x+=d
et augmentons le numéro de ligne; puis faites mousser, rincez, répétez.la source
Python 2 ,
246245244242 octets-3 octets grâce à M. Xcoder
-1 octets grâce à Jonathan Frech
Essayez-le en ligne!
Explication
d
est la direction dans laquelle chaque couche se déplaceraq
est le personnage qui sera enroulé[q,' '][q<'L']
laissera tomber la grenouille hors de l'écransum([r[d+1:d-1],[[q,' '][q<'L']]][::d-~d],[])+r[-1:]
supprimera le dernier caractère (la direction), puis supprimera le premier caractère et l'ajoutera ou supprimera l'avant-dernier et l'ajoutera (basé surd
), et ajoutera la direction en arrière, déplaçant efficacement la ligne entière vers la gauche / droite.if'F'in r:j=r.index('F');r[j]='L';m[i-1][j]=min('F',m[i-1][j])
fera sauter la grenouillemin('F',m[i-1][j])
fera tomber la grenouille dans l'eaumin
et<
) suit l'ordre' ' < '0' < '1' < 'F' < 'L'
L'entrée sera une liste de liste de caractères:
' '
- eau'F'
- grenouille'L'
- plate-forme'0'
- déplacez le calque vers la gauche'1'
- déplacez le calque vers la droitela source
if i<len(m)-1
pourrait éventuellement êtreif~-len(m)>i
.Java 8,
293277 octetsUtilise les caractères par défaut spécifiés dans la description du défi (
01F<>
).Essayez-le en ligne.
Explication:
la source