Le but de ce défi est d'écrire un programme ou une fonction qui renvoie le moins de coups nécessaires pour terminer un cours donné.
Contribution
- La disposition du cours peut être transmise de la manière et du format que vous préférez. (lu à partir de la console, passé en tant que paramètre d'entrée, lu à partir d'un fichier ou de tout autre, chaîne de lignes multiples, tableau de chaînes, tableau de caractères / octets bidimensionnel).
- La position de départ de la balle et le trou peuvent également être passés en entrée, il n'est pas nécessaire de les analyser à partir de l'entrée. Dans les cas de test, ils sont inclus dans le cours pour s'assurer qu'il n'y a pas de confusion sur la position réelle.
- Vous pouvez remapper les caractères saisis vers autre chose, tant qu'ils sont toujours reconnaissables comme des caractères distincts (par exemple, des caractères ASCII imprimables).
Sortie
- Le programme doit renvoyer le score le plus bas possible (le moins de frappes nécessaires pour atteindre le trou) pour tout cours passé en entrée dans un format raisonnable (chaîne, entier, flottant ou haïku décrivant le résultat)
- Si le parcours est impossible à battre, revenez
-1
(ou toute autre valeur falsifiée de votre choix qui ne serait pas retournée pour un parcours battable).
Exemple:
Dans cet exemple, les positions sont notées basées sur 0, X / Y, de gauche à droite, de haut en bas - mais vous pouvez utiliser n'importe quel format que vous aimez car le résultat est de toute façon complètement indépendant du format.
Contribution:
###########
# ....#
# ...#
# ~ . #
# ~~~ . #
# ~~~~ #
# ~~~~ #
# ~~~~ o #
# ~~~~ #
#@~~~~ #
###########
Ball (Start-Position): 1/9
Hole (End-Position): 8/7
Sortie:
8
Règles et champs
Le cours peut comprendre les champs suivants:
'@'
Ballon - Le début du cours'o'
Hole - Le but du cours'#'
Mur - La balle s'arrêtera lorsqu'elle heurtera un mur'~'
Eau - À éviter'.'
Sable - La balle s'arrêtera immédiatement sur le sable' '
Glace - La balle continuera de glisser jusqu'à ce qu'elle touche quelque chose
Les règles de base et les restrictions du jeu:
- Le ballon ne peut pas se déplacer en diagonale, seulement à gauche, à droite, de haut en bas.
- La balle ne s'arrêtera pas devant l'eau, seulement devant les murs, sur le sable et dans le trou.
- Les coups de feu dans l'eau sont invalides / impossibles
- La balle restera dans le trou, ne la sautera pas comme sur la glace
- Le parcours est toujours rectangulaire.
- Le parcours est toujours bordé d'eau ou de murs (aucun contrôle des limites requis).
- Il y a toujours exactement une balle et un trou.
- Il n'est pas possible de battre tous les parcours.
- Il peut y avoir plusieurs chemins qui donnent le même score (le plus bas).
Échappatoires et conditions gagnantes
- Les failles standard sont interdites
- Les programmes doivent se terminer
- Vous ne pouvez pas inventer de règles supplémentaires (frapper la balle si fort qu'elle saute sur l'eau, rebondit sur un mur, saute par-dessus des champs de sable, des courbes dans les coins, etc.)
- Il s'agit de code-golf , donc la solution avec le moins de caractères l'emporte.
- Les solutions doivent être capables de gérer tous les cas de test fournis, si cela est impossible en raison des restrictions de la langue utilisée, veuillez le préciser dans votre réponse.
Cas de test
Cours # 1 (2 grèves)
####
# @#
#o~#
####
Cours # 2 (pas possible)
#####
#@ #
# o #
# #
#####
Cours # 3 (3 grèves)
~~~
~@~
~.~
~ ~
~ ~
~ ~
~ ~
~.~
~o~
~~~
Cours # 4 (2 grèves)
#########
#~~~~~~~#
#~~~@~~~#
## . ##
#~ ~ ~ ~#
#~. o .~#
#~~~ ~~~#
#~~~~~~~#
#########
Cours # 5 (pas possible)
~~~~~~~
~... ~
~.@.~.~
~... ~
~ ~ ~.~
~ . .o~
~~~~~~~
Réponses:
JavaScript (ES6), 174 octets
Prend la saisie dans la syntaxe de
curling curling([x, y])(a)
, où x et y sont les coordonnées indexées 0 de la position de départ et a [] est une matrice d'entiers, avec0
= glace,1
= mur,2
= sable,3
= trou et4
= eauRetourne
0
s'il n'y a pas de solution.Essayez-le en ligne!
Commenté
la source
Python 3 , 273 octets
Essayez-le en ligne!
-41 octets grâce aux ovs
-1 octet grâce à Jonathan Frech
la source
if k+1
ne pouvait pas êtreif-~k
?C #,
461418 octetsIl s'agit simplement d'une implémentation de référence non compétitive pour (espérons-le) relancer ce défi:
Golfé par Kevin Cruijssen
Non golfé
Essayez-le en ligne
la source
int P(string[]C){int w=C[0].Length,i=0,l=c.Length;var c=string.Join("",C);var h=new int[l];for(var n=new List<int>();i<l;n.Add(i++))h[i]=c[i]!='@'?int.MaxValue:0;for(i=1;;i++){var t=n;n=new List<int>();foreach(int x in t){foreach(int d in new[]{-1,1,-w,w}){for(int j=x+d;c[j]==' ';j+=d);if(c[j]=='#'&h[j-d]>s){h[j-d]=s;n.Add(j-d);}if(c[j]=='.'&h[j]>s){h[j]=s;n.Add(j);}if(c[j]=='o')return s;}}if(n.Count<1)return -1;}}
(418 octets). De plus, pourriez-vous peut-être ajouter un lien TIO avec un code de test?