L'inspiration pour ce casse - tête de golf de code est le problème du pont et la flamme , où d personnes au début d'un pont doivent tous franchir dans le moins de temps.
Le hic, c'est qu'au plus deux personnes peuvent traverser en même temps, sinon le pont s'écraserait sous leur poids, et le groupe n'a accès qu'à une seule torche, qui doit être portée pour traverser le pont.
Chaque personne dans le puzzle entier a un temps spécifié qu'elle prend pour traverser le pont. Si deux personnes se croisent, la paire va aussi lentement que la personne la plus lente.
Il n'y a pas de nombre fixe de personnes qui doivent traverser le pont; votre solution DOIT fonctionner pour n'importe quelle valeur de d .
Vous n'avez pas besoin d'utiliser d'entrée standard pour ce problème, mais pour expliquer le problème, j'utiliserai le format d'entrée et de sortie suivant pour l'explication. Le premier chiffre, d , est le nombre de personnes au début du pont. Ensuite, le code recherchera les nombres d , chacun représentant la vitesse d'une personne.
La sortie du code sera le MOINS de temps requis pour traverser tout le monde du début du pont à la fin du pont, tout en répondant aux critères expliqués précédemment.
Voici quelques cas d'entrée et de sortie et l'explication du premier cas d'entrée. C'est à vous de dériver un algorithme à partir de ces informations pour résoudre le problème dans le moins d'octets de code possible.
contribution
4
1 2 5 8
production
15
Pour atteindre cette sortie, les gens doivent traverser de la manière suivante.
A and B cross forward (2 minutes)
A returns (1 minute)
C and D cross forward (8 minutes)
B returns (2 minutes)
A and B cross forward (2 minutes)
Voici un autre cas de test pour vous guider sur votre chemin.
contribution
5
3 1 6 8 12
production
29
Règles:
- Supposons que l'entrée ne sera pas triée et vous devez le faire vous-même (si vous en avez besoin)
- Le nombre de personnes dans le puzzle n'est pas fixé à 4 (N> = 1)
- Chaque passage de groupe et individuel doit avoir une torche. Il n'y a qu'une seule torche.
- Chaque groupe doit être composé d'un maximum de 2 personnes seulement!
- Non, vous ne pouvez pas sauter du pont et nager de l'autre côté. Pas d'autres astuces comme celle-ci;).
1 3 4 5
, qui devraient renvoyer 14 et non 15.1 4 5 6 7
a un problème similaire. 25 contre 26N >= 2
personnes (ce qui signifie, curieusement, que c'est un travail supplémentaire pour gérer le cas trivial de "1 personne a besoin de traverser"), donc une clarification sur ce point serait formidable. Merci d'avance.Réponses:
Python 3,
10099 octetsune solution récursive
Merci à @xnor pour cet article
Grâce à @lirtosiast, économisez 2 octets, à @movatica, économisez 1 octet et à @gladed indiquant que ma solution précédente ne fonctionne pas
utilisez l'astuce suivante pour évaluer quelque chose dans la fonction lambda
s.sort() or s
ici, nous calculons le tri et renvoyons le résultat du tests.sort()or len(s)>3
Non golfé
Résultats
la source
len(s)==2
àlen(s)<3
s[0]*(len(s)==2)
pas(s[0]*len(s)==2)
avec le bugf([1]) -> 0
que nous ne pouvons pas le remplacer par<3
merciA5:22
Python 2,
119114112 11211911010095 octetsOn m'a conseillé de séparer mes réponses.
Une solution utilisant
Theorem 1, A2:09
ce papier xnor linked . Pour citer le document (le changer en indexation nulle):The difference between C_{k-1} and C_k is 2*t_1 - t_0 - t_{N-2k}.
Ungolfing:
la source
Ruby,
9413397961019699 octetsOn m'a conseillé de séparer mes réponses.
Ceci est une solution basée sur l'algorithme décrit dans
A6:06-10
de cet article sur le problème du pont et de la torche .Edit: Correction d'un bug où
a=s[0]
n'est pas encore défini quanda
est appelé à la fin ifs.size <= 3
.Ungolfing:
la source
Scala,
113135 (darnit)Un peu golfé:
Testeur:
Pas génial en général, mais peut-être pas mal pour une langue fortement typée. Et à contrecœur grâce à xnor d'avoir repéré un cas que je n'ai pas attrapé.
la source
Rubis,
1049593 octetsOn m'a conseillé de séparer mes réponses.
Il s'agit d'une solution basée sur ma solution Python 2 et
Theorem 1, A2:09
de cet article sur le problème du pont et de la torche .Ungolfing:
la source