On vous a donné un sac de quilles. Tout le monde sait que pour apprécier le plus les différentes saveurs, vous devez alterner entre les saveurs.
Bases:
- Vous ne pouvez manger qu'une quille à la fois
- L'ordre de manger vos quilles doit être périodique.
- Chaque période ne peut pas contenir plus d'une fois une saveur particulière.
- Votre sac n'a que tant de quilles. Vous ne pouvez pas manger plus d'une saveur particulière de quille que celle qui apparaît dans votre sac.
- Vous voulez manger autant de quilles que vous le pouvez (ce n'est pas toujours possible)
Exemples:
Disons que vous commencez avec 3 quilles rouges, 2 bleues et 3 vertes:
R B G R B G R G Invalid: The last R must be followed by a B, not a G
R B G R B G R Valid, but sub-optimal
R R R Valid, but sub-optimal
R G B R G B R G Valid and optimal
G R B G R B G R Also valid and optimal (there are multiple good solutions)
Entrée sortie
- Vous obtenez une liste non vide d'entiers positifs pour le nombre de couleurs. (L'exemple ci-dessus serait
[3,2,3]
). - Vous devez renvoyer une liste contenant une commande valide et optimale.
- Au lieu d'utiliser des couleurs, vous utiliserez les indices de la liste d'entrée. (Le dernier exemple de sortie ci-dessus serait
[2,0,1,2,0,1,2,0]
). - Votre sortie peut être indexée 0 ou indexée 1. Mes exemples seront indexés 0
Cas de test
1 0
4 0 0 0 0
4 1 0 0 0 0
3 1 0 1 0 or 0 0 0
5 2 2 0 1 2 0 1 2 0
2 3 5 2 1 0 2 1 0 2 1 or 1 2 0 1 2 0 1 2
2 4 5 2 1 2 1 2 1 2 1 2
3 4 5 2 1 0 2 1 0 2 1 0 2 1 or 1 2 0 1 2 0 1 2 0 1 2
1 1 1 1 1 6 5 0 1 2 3 4 5 (lots of other solutions)
1 1 1 1 1 8 5 5 5 5 5 5 5 5
2 4 6 8 3 2 1 3 2 1 3 2 1 3 2 1 3 2
Ceci est un code-golf , alors faites vos solutions aussi courtes que possible dans votre langue préférée!
Réponses:
JavaScript (ES6),
177175 octetsFormaté et commenté
Formule utilisée
Vous trouverez ci-dessous un tableau montrant le fonctionnement de la formule
F(i, j) = minimum(value[j], value[i] + 1)
, ici aveci = 0
et l'entrée[ 5, 2, 2 ]
.Cette formule peut être interprétée comme suit: pour chaque type de quille, nous ne pouvons sélectionner plus que le numéro du type le moins disponible plus un.
Cas de test
Afficher l'extrait de code
la source
m
être à la fin des "boucles" sont-ils induits par le golf ou est-ce juste la façon dont JS est?m=0
ici est induite par le golf, cependant, car je ne me soucie pas de la valeur initiale de cette boucle (elle sera de toute façon écrasée). L'initialisationm
est pratique.[1,2,3].reduce((x, y) => x+y, 10)
en JS seraitreduce(lambda x,y: x+y, [1,2,3], 10)
en Python (je pense), les deux résultant en16
.Gelée , 22 octets
Indexation basée sur 1.
Essayez-le en ligne!
Comment?
Répète chaque préfixe des index triés par valeur descendant une fois de plus que ce qui serait réalisable avec le sac de quilles donné, puis supprime la ou les quilles finales de chacun d'entre eux si nécessaire pour les rendre réalisables, et renvoie celle avec le plus de quilles .
Le nombre qui doit être supprimé d'une répétition périodique supplémentaire est simplement le nombre avec le nombre minimum à travers ce préfixe.
la source
Python3,
174172167 octetsIdée
Étant donné par exemple 3 quilles rouges, 2 bleues et 3 vertes, on peut les disposer dans une grille, triées par couleur et quantité:
Si l'on essaie de manger exactement i quilles, on peut au moins manger i * c quilles au total, où c est le nombre de quilles dans la colonne r, par exemple pour i = 2 on peut manger au moins 6 quilles.
La seule chose qui reste à faire est de compter combien de quilles supplémentaires peuvent être mangées par une période incomplète.
Golfé
Commenté
Essayez-le en ligne!
Modifier: remplacé
(i+1)
par-~i
pour enregistrer 2 octets.Edit: -5 octets grâce à Dead Possum
la source
sum(1for e in b if e[0]>c)
poursum(c<e[0]for e in b)
. Cela convertirait True à 1 implicitement et vous ferait économiser 5 octets