Étant donné une liste de travaux, qui doivent être effectués dans l'ordre, chacun prenant un emplacement à faire, combien de temps cela prendra-t-il pour les exécuter tous si après avoir effectué un travail, le même travail ne peut pas être effectué pour les deux emplacements suivants (refroidissement des emplacements )? Cependant, un travail différent peut être affecté dans ces emplacements de refroidissement.
Par exemple,
[9,10,9,8] => output: 5
Parce que les emplois seront attribués en tant que [9 10 _ 9 8]
.
1. Tout d'abord, 9 a besoin de deux points de refroidissement _ _. Nous commençons donc par 9 _ _
.
2. Le travail suivant 10 est différent du travail précédent 9, nous pouvons donc allouer l'un des _ _. Ensuite, nous aurons 9 10 _
.
3. Troisièmement, 9 ne peut pas être alloué maintenant, car le premier travail 9 est le même travail et nécessite un temps de refroidissement. 9 10 _ 9
.
4. Enfin, 8 n'est pas le même que les deux autres travaux précédents, il peut donc être alloué juste après 9 et puisqu'il s'agit du dernier travail, il n'a pas besoin de temps de refroidissement. La liste finale est 9 10 _ 9 8
et la sortie attendue est 5, qui est le nombre de spots (ou nombre de slots)
Cas de test:
[1,2,3,4,5,6,7,8,9,10] => output : 10 ([1 2 3 4 5 6 7 8 9 10])
[1,1,1] => output: 7 ([1 _ _ 1 _ _ 1])
[3,4,4,3] => output: 6 ([3 4 _ _ 4 3])
[3,4,5,3] => output: 4 ([3 4 5 3])
[3,4,3,4] => output : 5 ([3 4 _ 3 4])
[3,3,4,4] => output : 8 ([3 _ _ 3 4 _ _ 4])
[3,3,4,3] => output : 7 ([3 _ _ 3 4 _ 3])
[3,2,1,3,-4] => output : 5 ([3 2 1 3 -4])
[] => output : 0 ([])
[-1,-1] => output : 4 ([-1 _ _ -1])
La valeur d'entrée peut être n'importe quel entier (négatif, 0, positif). La longueur de la liste des tâches est 0 <= longueur <= 1 000 000.
La sortie sera un entier, le nombre total d'emplacements, qui est indiqué dans le cas de test comme sortie. La liste entre parenthèses indique comment la sortie serait générée.
la source
[]
?Réponses:
Gelée , 14 octets
Essayez-le en ligne!
la source
05AB1E , 22 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Brachylog , 10 octets
C'est toujours agréable de voir le problème où Brachylog est le plus performant
Explication
Essayez-le en ligne!
la source
R , 123 octets
Essayez-le en ligne - programme unique!
Essayez-le en ligne - plusieurs exemples!
Un programme complet qui lit une liste d'entiers séparés par des virgules comme entrée et génère les emplacements nécessaires. Je suis sûr que cela pourrait être joué un peu plus, et la mise en œuvre de cette solution basée sur regex dans d'autres langues serait plus efficace en octets.
Remarque sur le deuxième TIO, je l'ai enveloppé dans une fonction pour permettre l'affichage de plusieurs exemples. Cette fonction affiche également la liste finale, mais celle-ci n'est pas affichée dans le programme principal si elle est exécutée isolément.
la source
Requête TSQL, 158 octets
Saisissez les données sous forme de tableau.
La requête est récursive donc
est nécessaire, car la liste des nombres peut dépasser 100 bien qu'elle ne puisse gérer que 32 767 récursions - la limitation est-elle vraiment nécessaire dans cette tâche?
Essayez-le en ligne
la source
R ,
8170 octetsEssayez-le en ligne!
Après plusieurs tentatives infructueuses, le code est devenu plutôt laid et pas si court, mais au moins il fonctionne maintenant ...
Tout d'abord, nous évaluons la durée des exécutions consécutives du même travail. Par exemple,
3, 3, 4, 3
cela donne:Chacune de ces exécutions produit des
(len - 1) * 3 + 1
étapes (+ 1
est gérée séparément).Ensuite, nous traitons les occurrences du même travail à 2 endroits d'intervalle, comme:,
x, y, x
en utilisantdiff(s, lag=2)
. Le vecteur résultant est également divisé en séquences consécutives (r
) parrle
fonction. Maintenant, en raison de diverses alternances entrelacées, nous devons ajouter desceiling(r$len/2)
étapes pour toutes les séries de zéros. Par exemple:x y x
(longueur 1) etx y x y
(longueur 2) nécessitent tous deux 1 pas supplémentaire:x y _ x (y)
x y x y x
(longueur 3) etx y x y x y
(longueur 4) nécessitent toutes deux 2 étapes supplémentaires:x y _ x y _ x (y)
Enfin, nous devons compenser les occurrences de ces alternances au milieu d'un long terme du même travail
x, x, x, x...
:, donc1-l%/%6
au lieu de simplement1
.la source
diff(s,lag=2)
de la détection de proximité! Maintenant tu es un octet plus court que ma solution ...Python 2 , 67 octets
Essayez-le en ligne!
Met en œuvre le défi assez littéralement. Utilise des copies de la liste elle-même en tant que "blancs", car ceux-ci ne peuvent être égaux à aucun nombre.
la source
Fusain ,
2723 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Boucle sur les travaux.
Ajoutez des points de refroidissement tandis que le travail est l'un des deux derniers dans le résultat.
Ajoutez le travail en cours au résultat.
Imprimez le nombre de taches.
la source
R ,
7468 octetsEssayez-le en ligne!
Construit le tableau de travail (en sens inverse), puis prend la longueur. Un peu
plus courtque la réponse de Kirill L. , donc parfois, l'approche naïve est plutôt bonne. EDIT: encore plus court! J'ai également emprunté le modèle de test de Kirill.-6 octets remplaçant
max(0,which(y==x[2:1]))
parmatch(y,x,0)
.la source
c
fonction?c
représentecombine
, bienconcatenate
qu'il soit préférable; il combine ses arguments en une seule liste.Perl 6 , 98 octets
Essayez-le en ligne!
Blergh, il doit y avoir une meilleure façon de le faire. Je ne suis pas sûr à 100% que cela soit tout à fait correct, bien qu'il passe tous les cas extrêmes auxquels je pourrais penser.
Fondamentalement, cela commence par regrouper tous les triplets de la liste d'entrée, avec un remplissage de chaque côté. Par exemple,
[1,2,1,2]
devient(Any,1,2), (1,2,1), (2,1,2), (1,2,Nil)
. Nous obtenons lesrepeated
éléments dans chaque triplet, devenant(), (1), (2), ()
.Il s'agit alors d'
squish
éléments consécutifs qui ne sont pas la même liste, mais qui sont de la même taille (pour ne pas écraser quelque chose comme[1,1,1]
), et le premier élément n'est pas égal à l'élément précédent (car nous ne pouvons pas fusionner les heures[1,1,2,2]
), et enfin l'élément précédent n'a pas non plus été écrasé ([1,2,1,2,1,2]
). Donc,(1), (2)
dans l'exemple ci-dessus, ils seraient écrasés ensemble.Enfin, nous obtenons
sum
toutes les longueurs de cette liste, qui représentent nos heures insérées, et ajoutons la longueur de la liste d'origine.Par exemple:
la source
JavaScript (ES6), 57 octets
Essayez-le en ligne!
Commenté
la source
C (gcc) , 69 octets
Essayez-le en ligne!
Récursivité simple.
la source
Perl 6 , 48 octets
Essayez-le en ligne!
45 octets si la liste comporte au moins deux éléments:
Essayez-le en ligne!
la source
Smalltalk, 125 octets
Explication
la source
Perl 5
-pl
,4240 octetsEssayez-le en ligne!
la source
-p
et en retravaillant la substitution: essayez-le en ligne!Lot, 184 octets
L'entrée se fait via des arguments de ligne de commande et la sortie se fait via un code de sortie. Explication:
Suivez les deux derniers travaux.
Initialisez le décompte.
Traitez chaque tâche.
Afficher le décompte final.
Pour chaque travail:
Si nous avons traité le travail récemment, ajoutez un nombre approprié de points de refroidissement. En outre, effacez le dernier travail afin que le travail suivant ne déclenche le refroidissement que s'il est identique à ce travail.
Mettez à jour les deux derniers travaux et attribuez une place à ce travail.
la source
Swift, 114 octets
Essayez-le en ligne!
la source
3,4,3,4
, devrait miser 5, pas 6.s = a
peut êtres=a
, et vous pouvez faires+=
plutôt que plusieurss=s+...
et supprimer des espaces après le?
:for i in 1...a.count-1{s+=a[i-1]==a[i] ?3:i>1&&a[i-2]==a[i] ?2:1}
pour économiser 9 octets.Python 3 ,
7975 octets-3 octets grâce à mypetlion
-1 octet grâce à Sara J
Essayez-le en ligne!
la source
a[0]in b[:2]and f(a,['']+b)or f(a[1:],[a[0]]+b)
peut devenirf(*[a[1:],a,[a[0]]+b,['']+b][a[0]in b[:2]::2])
pour économiser 2 octets.[a[0]]+b
peut devenira[:1]+b
pour économiser 1 octet.['']+b
par[b]+b
enregistre un octet -b
est une liste, donc il ne sera jamais égal à aucune des valeurs dea
Java (JDK) , 110 octets
Essayez-le en ligne!
Code commenté non golfé:
la source
3,4,3,4,3,4
, renvoie 7 au lieu de 8Gelée , 20 octets
Essayez-le en ligne!
Bien que cela soit assez similaire à la réponse courte de @ EriktheOutgolfer , je l'ai écrite sans voir la sienne. En tout cas c'est mieux!
Explication
Lien dyadique d'aide, prend la liste actuelle comme élément de gauche et l'élément suivant comme droit
Lien monadique principal, prend la liste des entiers en entrée
la source
Python 2 , 75 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 52 octets
Essayez-le en ligne!
la source
APL (Dyalog Classic) , 22 octets
Essayez-le en ligne!
la source
JavaScript (V8), 101 octets
Essayez-le en ligne!
Le code décompressé se présente comme suit:
Ma toute première tentative de golf de code, peut probablement être beaucoup optimisée en réduisant le tableau et en le passant récursivement.
la source
Zsh ,
6660 octets-6 octets implicites
"$@"
Essayez-le en ligne! Je recommande fortement d'ajouter
set -x
au début afin que vous puissiez suivre.a
contient toujours les deux derniers travaux, donc si la recherche trouve un travail correspondant dansa[2]
, nous incrémentons de trois (puisque les emplacements de travail seront[... 3 _ _ 3 ...]
).Si
a
n'est pas défini, la recherche échouera et l'expansion arithmétique renverra une erreur, mais cela ne se produit que lors du premier travail et n'est pas fatal.Nous pouvons enregistrer un octet de plus si nous utilisons à la
$[x+=i+1]
place, et il n'y a pas de commandes sur le système des utilisateurs entièrement composées de chiffres.la source
K (ngn / k) , 27 octets
Essayez-le en ligne!
la source