Je travaille dans une boulangerie qui sert du blé, du seigle, de l'orge, des céréales et du pain français, mais le boulanger est un peu bizarre - il empile les pains dans un ordre aléatoire et laisse parfois quelques étagères à la fin vides.
Chaque jour, le même client entre et demande une de chaque miche de pain, mais la chose délicate est qu'il est un germophobe, donc quand je remplis son sac, je ne peux pas prendre des pains de deux étagères adjacentes dans des sélections consécutives.
Il faut une seconde pour marcher entre les étagères adjacentes. C'est un magasin très fréquenté; pour toute configuration aléatoire de pains, je voudrais minimiser le temps nécessaire pour obtenir un de chaque pain unique. Je peux commencer et terminer sur n'importe quelle étagère.
Si la commande d'aujourd'hui est W B W G F R W
, un chemin possible est 0, 3, 5, 1, 4
, pour un total de 12 secondes:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12
( 1, 2, 3, 4, 5
ne fonctionne pas, car le pain est prélevé consécutivement sur les étagères adjacentes.)
Si c'est le cas B W B G B F B R B W B F
, un chemin possible est 1, 3, 5, 7, 10
, pour un total de 9 secondes.
Le gestionnaire s'assure toujours qu'il existe une solution possible, donc je n'ai pas besoin de m'inquiéter d'attraper de mauvaises entrées. Il m'envoie généralement la commande dans un fichier, mais si je veux, je peux le taper sur STDIN ou le lire d'une manière différente. J'aimerais que le programme imprime les index du meilleur chemin, ainsi que son heure, selon les règles d'E / S par défaut .
En bref:
- 5 sortes de pain.
- Les commandes de pain apparaissent sous la forme de chaînes d'ordre et de longueur aléatoires.
- Vous devez sélectionner un de chaque pain unique.
- Impossible d'effectuer des sélections consécutives adjacentes.
- Minimisez la distance entre les indices de sélection.
- Ne vous inquiétez pas des entrées invalides.
- Les règles d'E / S par défaut s'appliquent.
C'est le golf par code , le nombre d'octets le plus court gagne.
0+3+5+1+4=13
mais1+3+5+7+10=26
non9
.'WBWG FRW'
une entrée est -elle également valide?Réponses:
JavaScript (ES6), 114 octets
1 octet enregistré grâce à @Oliver
Prend l'entrée comme un tableau de caractères. Génère une chaîne séparée par des virgules où la première valeur est la durée totale et les suivantes décrivent le chemin.
Essayez-le en ligne!
Commenté
la source
Python 2 ,
212210 octetsEssayez-le en ligne!
2 octets de thx à Jonathan Frech .
la source
if len(...)==5and all(...)
peut êtreif(len(...)==5)&all(...)
d'économiser deux octets.