Ausgehend von einer Liste von Jobs, die in der Reihenfolge ausgeführt werden müssen, in der jeweils ein Slot ausgeführt wird, wie lange es dauert, sie alle auszuführen, wenn nach dem Ausführen eines Jobs für die nächsten beiden Slots (Abkühlen der Slots) nicht derselbe Job ausgeführt werden kann )? In diesen Cooling-Off-Slots kann jedoch ein anderer Job zugewiesen werden.
Beispielsweise,
[9,10,9,8] => output: 5
Weil Jobs zugewiesen werden als [9 10 _ 9 8]
.
1. Erstens benötigt 9 zwei Abkühlpunkte _ _. Also fangen wir an mit 9 _ _
.
2. Der nächste Job 10 unterscheidet sich vom vorherigen Job 9, sodass wir einen von _ _ zuweisen können. Dann werden wir haben 9 10 _
.
3. Drittens kann 9 jetzt nicht zugewiesen werden, da der erste Job 9 derselbe Job ist und eine Abkühlzeit benötigt. 9 10 _ 9
.
4. Last, 8 ist nicht dasselbe wie alle anderen vorherigen zwei Jobs, daher kann es direkt nach 9 zugewiesen werden, und da dies der letzte Job ist, muss keine Abkühlzeit eingehalten werden. Die endgültige Liste ist 9 10 _ 9 8
und die erwartete Ausgabe ist 5, was der Anzahl der Plätze (oder der Anzahl der Slots) entspricht.
Testfälle:
[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])
Der Eingabewert kann eine beliebige Ganzzahl sein (negativ, 0, positiv). Die Länge der Jobliste beträgt 0 <= Länge <= 1.000.000.
Die Ausgabe ist eine Ganzzahl, die Gesamtzahl der Slots, die im Testfall als Ausgabe angegeben wird. Die Liste in der Klammer gibt an, wie die Ausgabe generiert werden soll.
Gewinnkriterium
Code-Golf
quelle
[]
?Antworten:
Jelly , 14 Bytes
Probieren Sie es online!
quelle
05AB1E , 22 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Brachylog , 10 Bytes
Es ist immer wieder schön zu sehen, wo Brachylog am besten abschneidet
Erläuterung
Probieren Sie es online!
quelle
R , 123 Bytes
Probieren Sie es online aus - einzelnes Programm!
Probieren Sie es online aus - mehrere Beispiele!
Ein vollständiges Programm, das eine durch Kommas getrennte Liste von Ganzzahlen als Eingabe liest und die benötigten Slots ausgibt. Ich bin mir sicher, dass dies noch ein bisschen mehr Spaß machen könnte, und die Implementierung dieser auf Regex basierenden Lösung in einigen anderen Sprachen wäre in Byte effizienter.
Hinweis zum zweiten TIO Ich habe es in eine Funktion eingeschlossen, damit mehrere Beispiele angezeigt werden können. Diese Funktion zeigt auch die endgültige Liste an, diese wird jedoch nicht im Hauptprogramm ausgegeben, wenn sie isoliert ausgeführt wird.
quelle
TSQL-Abfrage, 158 Byte
Eingabedaten als Tabelle.
Die Abfrage ist also rekursiv
ist notwendig, weil die Liste der Zahlen 100 überschreiten kann, obwohl sie nur 32.767 Rekursionen verarbeiten kann - ist die Einschränkung wirklich für diese Aufgabe erforderlich?
Probieren Sie es online aus
quelle
R ,
8170 BytesProbieren Sie es online!
Nach mehreren erfolglosen Versuchen wurde der Code ziemlich hässlich und nicht so kurz, aber zumindest funktioniert es jetzt ...
Zuerst bewerten wir die Länge aufeinanderfolgender Läufe desselben Jobs. ZB
3, 3, 4, 3
dafür gibt es:Jeder dieser Läufe erzeugt
(len - 1) * 3 + 1
Schritte (+ 1
wird separat behandelt).Als Nächstes verarbeiten wir Vorkommen desselben Jobs, die zwei Stellen voneinander entfernt sind, z. B .:
x, y, x
mitdiff(s, lag=2)
. Der resultierende Vektor wirdr
durch dierle
Funktion auch in aufeinanderfolgende Läufe ( ) aufgeteilt . Aufgrund verschiedener verschachtelter Abwechslungen müssen wir jetztceiling(r$len/2)
Schritte für alle Nulldurchläufe hinzufügen . Z.B:x y x
(Länge 1) undx y x y
(Länge 2) benötigen beide 1 zusätzlichen Schritt:x y _ x (y)
x y x y x
(Länge 3) undx y x y x y
(Länge 4) benötigen jeweils 2 zusätzliche Schritte:x y _ x y _ x (y)
Schließlich müssen wir das Auftreten dieser Wechsel in der Mitte einer langen Laufzeit desselben Jobs kompensieren:
x, x, x, x...
also1-l%/%6
statt einfach1
.quelle
diff(s,lag=2)
zu kommentieren, wie man die Nähe erkennt! Jetzt sind Sie ein Byte kürzer als meine Lösung ...Python 2 , 67 Bytes
Probieren Sie es online!
Implementiert die Herausforderung buchstäblich. Verwendet Kopien der Liste selbst als "Leerzeichen", da diese keiner Zahl entsprechen können.
quelle
Kohle ,
2723 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Schleife über die Jobs.
Fügen Sie Abkühlungspunkte hinzu, während der Job einer der letzten beiden im Ergebnis ist.
Fügen Sie dem Ergebnis den aktuellen Job hinzu.
Drucken Sie die Anzahl der Punkte.
quelle
R ,
7468 BytesProbieren Sie es online!
Konstruiert das Arbeitsarray (in umgekehrter Reihenfolge) und nimmt dann die Länge an. Nur ein bisschen
kürzerals Kirill L.'s Antwort , daher ist der naive Ansatz manchmal ziemlich gut. EDIT: wieder kürzer! Ich habe mir auch Kirills Testvorlage ausgeliehen.-6 Bytes ersetzen
max(0,which(y==x[2:1]))
durchmatch(y,x,0)
.quelle
c
Funktion?c
steht fürcombine
, obwohl esconcatenate
vielleicht besser ist; es kombiniert seine Argumente in einer einzigen Liste.Perl 6 , 98 Bytes
Probieren Sie es online!
Blergh, es muss einen besseren Weg geben. Ich bin nicht zu 100% sicher, dass dies völlig richtig ist, obwohl es alle Randfälle übersteigt, die mir einfallen.
Grundsätzlich beginnt dies damit, dass alle Triplets der Eingabeliste gruppiert werden und nach beiden Seiten aufgefüllt werden. Zum Beispiel
[1,2,1,2]
wird(Any,1,2), (1,2,1), (2,1,2), (1,2,Nil)
. Wir bekommen dierepeated
Elemente in jedem Triplett, werden(), (1), (2), ()
.Es gibt dann
squish
aufeinanderfolgende Elemente, die nicht dieselbe Liste, aber dieselbe Größe haben (um etwas nicht zu zerquetschen[1,1,1]
), und das erste Element ist nicht gleich dem Element davor (weil wir die Stunden nicht zusammenführen können[1,1,2,2]
), und Schließlich wurde das vorhergehende Element nicht ebenfalls zerquetscht ([1,2,1,2,1,2]
). So würde(1), (2)
im obigen Beispiel oben zusammengequetscht werden.Schließlich erhalten wir
sum
die Gesamtlänge dieser Liste, die unsere eingefügten Stunden darstellt, und fügen die Länge der ursprünglichen Liste hinzu.Beispielsweise:
quelle
JavaScript (ES6), 57 Byte
Probieren Sie es online!
Kommentiert
quelle
C (gcc) , 69 Bytes
Probieren Sie es online!
Einfache Rekursion.
quelle
Perl 6 , 48 Bytes
Probieren Sie es online!
45 Bytes, wenn die Liste mindestens zwei Elemente enthält:
Probieren Sie es online!
quelle
Smalltalk, 125 Bytes
Erläuterung
quelle
Perl 5
-pl
,4240 BytesProbieren Sie es online!
quelle
-p
die Ersetzung verwenden und überarbeiten: Probieren Sie es online aus!Batch, 184 Bytes
Die Eingabe erfolgt über Befehlszeilenargumente und die Ausgabe erfolgt über Exit-Code. Erläuterung:
Verfolgen Sie die letzten beiden Jobs.
Initialisieren Sie die Zählung.
Verarbeiten Sie jeden Job.
Die endgültige Zählung ausgeben.
Für jeden Job:
Wenn wir den Auftrag kürzlich bearbeitet haben, fügen Sie eine angemessene Anzahl von Abkühlungspunkten hinzu. Löschen Sie außerdem den letzten Job, damit der nächste Job nur dann eine Abkühlung auslöst, wenn er mit diesem Job identisch ist.
Aktualisieren Sie die letzten beiden Jobs und weisen Sie diesem Job einen Platz zu.
quelle
Schnell, 114 Bytes
Probieren Sie es online!
quelle
3,4,3,4
, sollte 5, nicht 6 wetten.s = a
kanns=a
, und Sie können tun,s+=
anstatt mehreres=s+...
und entfernen Sie Leerzeichen nach dem?
:for i in 1...a.count-1{s+=a[i-1]==a[i] ?3:i>1&&a[i-2]==a[i] ?2:1}
um 9 Bytes zu sparen.Python 3 ,
7975 Bytes-3 Byte dank mypetlion
-1 Byte dank Sara J
Probieren Sie es online!
quelle
a[0]in b[:2]and f(a,['']+b)or f(a[1:],[a[0]]+b)
kann werdenf(*[a[1:],a,[a[0]]+b,['']+b][a[0]in b[:2]::2])
, um 2 Bytes zu sparen.[a[0]]+b
kann werdena[:1]+b
, um 1 Byte zu sparen.['']+b
durch[b]+b
speichert ein Byte -b
ist eine Liste, sodass sie niemals mit einem der Werte ina
Java (JDK) , 110 Byte
Probieren Sie es online!
Ungolfed kommentierte Code:
quelle
3,4,3,4,3,4
, gibt 7 statt 8 zurückGelee , 20 Bytes
Probieren Sie es online!
Obwohl dies der kürzeren Antwort von @ EriktheOutgolfer ziemlich ähnlich ist , habe ich sie geschrieben, ohne seine zu sehen. Auf jeden Fall ist sein besser!
Erläuterung
Dyadischer Helfer-Link, aktuelle Liste als linkes Element und nächstes Element als rechtes Element
Monadischer Hauptlink, verwendet eine Liste von Ganzzahlen als Eingabe
quelle
Python 2 , 75 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 52 Byte
Probieren Sie es online!
quelle
APL (Dyalog Classic) , 22 Byte
Probieren Sie es online!
quelle
JavaScript (V8), 101 Byte
Probieren Sie es online!
Der entpackte Code sieht wie folgt aus:
Mein allererster Code-Golf-Versuch kann wahrscheinlich erheblich optimiert werden, indem das Array verkleinert und rekursiv übergeben wird.
quelle
Zsh ,
6660 Bytes-6 Bytes von implizit
"$@"
Probieren Sie es online! Ich empfehle dringend
set -x
, den Start zu ergänzen, damit Sie mitmachen können.a
Enthält immer die letzten beiden Jobs. Wenn die Suche also einen passenden Job in findeta[2]
, erhöhen wir uns um drei (da die Job-Slots dies sind[... 3 _ _ 3 ...]
).Wenn
a
nicht festgelegt, schlägt die Suche fehl und die arithmetische Erweiterung gibt einen Fehler zurück, der jedoch nur beim ersten Auftrag auftritt und nicht schwerwiegend ist.Wir können ein weiteres Byte speichern, wenn wir
$[x+=i+1]
stattdessen verwenden, und es gibt keine Befehle auf dem Benutzersystem, die ausschließlich aus Ziffern bestehen.quelle
K (ngn / k) , 27 Bytes
Probieren Sie es online!
quelle