Contexte:
Jack est une citrouille qui aime effrayer les citoyens des villages près de son potiron à chaque Halloween. Cependant, chaque année après que quelqu'un a allumé la bougie à l'intérieur de lui, il a un temps limité pour effrayer tout le monde avant que la bougie ne s'éteigne, ne pouvant ainsi effrayer plus de villageois parce que personne ne peut le voir. Ces dernières années, il n'a pu effrayer qu'un petit nombre de villages en raison de sa mauvaise prise de décision, mais maintenant qu'il vous a aidé, il pourra effrayer autant de villages que possible!
Tâche:
Compte tenu de la liste des emplacements des villages et de la durée de vie des bougies, affichez le nombre maximal de villages que Jack peut visiter. Vous n'avez pas besoin d'imprimer le chemin lui-même.
Contribution:
La durée de vie de la bougie et une liste des emplacements des villages dans un système de coordonnées cartésiennes. Le patch de citrouille d'origine de Jack sera toujours à 0,0. Vous pouvez formater l'entrée comme vous le souhaitez. Pour simplifier les mouvements de Jack, il ne peut se déplacer qu'horizontalement, verticalement ou en diagonale, ce qui signifie que sa bougie perdra 1 ou 1,5 (il prend un peu plus longtemps en diagonale) unités de vie à chaque mouvement. La bougie s'éteint lorsque la durée de vie est inférieure ou égale à 0.
Sortie:
Un entier égal au nombre maximum de villages que Jack peut visiter avant que la bougie ne s'éteigne.
Règles:
C'est le code-golf , donc le code le plus court en octets gagne. Les échappatoires standard ne sont pas autorisées.
Cas de test:
// Format [lifespan] [list of village coordinates] -> [maximum visit-able villages]
4 -1,0 1,0 2,0 3,0 4,0 5,0 -> 3
4 1,1 2,2 3,3 -> 2
5 1,1 2,1 3,1 4,1 5,0 5,1 -> 4
la source
Réponses:
Gelée,
30292725 octetsEssayez-le en ligne!
Apparemment, le produit scalaire de Jelly ignore simplement une incompatibilité de taille de liste et ne multiplie pas les éléments supplémentaires de l'autre tableau, les ajoute simplement. Rase 2 octets.
Explication
la source
Java 7,
206201 octetsMerci à @KevinCruijssen pour avoir économisé 5 octets
Non golfé
la source
i-x
deux fois etb[c]-y
deux, vous pouvez donc ajouter,t
aux pouces, puis utiliser ceci:Math.sqrt((t=i-x)*t+(t=b[c]-y)*t)*1
au lieu deMath.sqrt((i-x)*(i-x)+(b[c]-y)*(b[c]-y))*1
.Scala, 196 octets
Non golfé:
Explication:
la source
JavaScript (ES6), 145
Fonction récursive anonyme, le paramètre
s
est la durée de vie de la bougie, le paramètrel
est la liste des coordonnées du village.A Depth First Search , s'arrêtant lorsque la distance atteint la durée de vie de la bougie
Moins de golf voir l'extrait ci-dessous
Tester
la source
MATL , 27 octets
EDIT (26 nov 2016): En raison de changements dans la
Xl
fonction, elle doit être remplacée dans le code ci-dessus par2$X>
. Les liens ci-dessous intègrent cette modification.Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
La distance citrouille entre deux villes séparées Δ x et Δ y dans chaque coordonnée peut être obtenue comme (| Δ x | + | Δ y | + max (| Δ x |, | Δ y |)) / 2.
Le code suit ces étapes:
Code commenté:
la source
Python 2.7 , 422 octets
merci à NoOneIsHere d'avoir signalé des améliorations supplémentaires!
merci à edc65 d'avoir noté de ne pas sauvegarder la liste mais d'utiliser des itérateurs à la place!
Essayez-le en ligne!
Explication:
La fonction calcule la distance entre deux points selon les règles données, la boucle parcourt toutes les permutations générées par le générateur de l'entrée et calcule la distance, si la distance est inférieure à la durée de vie de la bougie, elle la soustrait et ajoute la place à la compteur, si ce compteur est supérieur au courant max, il le remplace.
non golfé:
la source
current
c
, etll
m
.PHP, 309 octets
Absolument brutale et même pas très courte. Utilisez comme:
Avec plus d'espace et enregistré dans un fichier:
la source
Python, 175 octets
c
est la durée de vie de la bougie,l
est une liste de tuples - coordonnées du village,v
est le nombre de villages visités,(x,y)
est la paire de coordonnées du village où Jack se trouve actuellement.r(t)
est une fonction qui calcule la distance jusqu'à la position actuelle et est utilisée pour trier la liste afin que la plus proche deviennel[0]
. La formule utilisée est | Δx | + | Δy | - min (| Δx |, | Δy |) / 2.Essayez-le ici!
la source
Raquette
Essai:
Sortie:
Cependant, le code ci-dessus ne fonctionne pas pour les valeurs négatives de x et y.
la source