L'obiettivo di questa sfida è scrivere un programma o una funzione che restituisca il minor numero di avvertimenti necessari per completare un determinato corso.
Ingresso
- Il layout del corso può essere passato in qualsiasi modo e formato che preferisci. (letto dalla console, passato come parametro di input, letto da un file o da qualsiasi altra stringa a più righe, array di stringhe, array di caratteri / byte bidimensionali).
- La posizione iniziale della palla e il foro possono essere passati anche come input, non è necessario analizzarli dall'input. Nei casi di test sono inclusi nel corso per assicurarsi che non ci sia confusione sulla posizione effettiva.
- È possibile rimappare i caratteri di input a qualcos'altro, purché siano ancora riconoscibili come caratteri distinti (ad esempio caratteri ASCII stampabili).
Produzione
- Il programma deve restituire il punteggio più basso possibile (minima quantità di strike necessari per raggiungere la buca) per qualsiasi rotta superata come input in un formato sensibile (stringa, numero intero, float o haiku che descriva il risultato)
- Se il corso è impossibile da battere, ritorna
-1
(o qualsiasi altro valore di falsa a tua scelta che non verrebbe restituito per un corso battibile).
Esempio:
In questo esempio le posizioni sono annotate in base 0, X / Y, da sinistra a destra, dall'alto in basso - ma è possibile utilizzare qualsiasi formato desiderato poiché il risultato è comunque completamente indipendente dal formato.
Ingresso:
###########
# ....#
# ...#
# ~ . #
# ~~~ . #
# ~~~~ #
# ~~~~ #
# ~~~~ o #
# ~~~~ #
#@~~~~ #
###########
Ball (Start-Position): 1/9
Hole (End-Position): 8/7
Produzione:
8
Regole e campi
Il corso può consistere nei seguenti campi:
'@'
Ball - L'inizio del corso'o'
Hole - L'obiettivo del corso'#'
Muro : la palla si ferma quando colpisce un muro'~'
Acqua - Deve essere evitato'.'
Sabbia - La palla si fermerà immediatamente sulla sabbia' '
Ice - Ball continuerà a scorrere fino a quando non colpisce qualcosa
Le regole e le restrizioni di base del gioco:
- La palla non può muoversi in diagonale, solo a sinistra, a destra, su e giù.
- La palla non si fermerà davanti all'acqua, solo davanti alle pareti, sulla sabbia e nella buca.
- I colpi nell'acqua non sono validi / impossibili
- La palla rimarrà nella buca, non la salterà come se fosse sul ghiaccio
- Il corso è sempre rettangolare.
- Il percorso è sempre delimitato da acqua o muri (non sono richiesti controlli al contorno).
- C'è sempre esattamente una palla e una buca.
- Non tutti i corsi sono possibili da battere.
- Potrebbero esserci più percorsi che portano allo stesso punteggio (più basso).
Scappatoie e condizioni vincenti
- Sono vietate le scappatoie standard
- I programmi devono terminare
- Non puoi inventare regole aggiuntive (colpire la palla così forte da saltare sull'acqua, rimbalzare da un muro, saltare su campi di sabbia, curve agli angoli, ecc.)
- Questo è code-golf , quindi vince la soluzione con il minor numero di caratteri.
- Le soluzioni devono essere in grado di gestire tutti i casi di test forniti, se ciò è impossibile a causa delle restrizioni della lingua utilizzata, specificarlo nella risposta.
Casi test
Corso n. 1 (2 avvertimenti)
####
# @#
#o~#
####
Corso n. 2 (non possibile)
#####
#@ #
# o #
# #
#####
Corso n. 3 (3 avvertimenti)
~~~
~@~
~.~
~ ~
~ ~
~ ~
~ ~
~.~
~o~
~~~
Corso n. 4 (2 avvertimenti)
#########
#~~~~~~~#
#~~~@~~~#
## . ##
#~ ~ ~ ~#
#~. o .~#
#~~~ ~~~#
#~~~~~~~#
#########
Corso n. 5 (non possibile)
~~~~~~~
~... ~
~.@.~.~
~... ~
~ ~ ~.~
~ . .o~
~~~~~~~