Ich arbeite in einer Bäckerei, die Weizen, Roggen, Gerste, Getreide und französisches Brot serviert, aber der Bäcker ist etwas komisch - er stapelt die Brote in zufälliger Reihenfolge und lässt manchmal am Ende nur einige Regale leer.
Jeden Tag kommt derselbe Kunde herein und fragt nach einem Brot, aber das Schwierige ist, dass er keimtötend ist. Wenn ich also seine Tasche fülle, kann ich keine Brote aus zwei benachbarten Regalen in aufeinanderfolgender Auswahl nehmen.
Es dauert eine Sekunde, um zwischen benachbarten Regalen zu gehen. Es ist ein geschäftiger Laden; Für jede zufällige Konfiguration von Broten möchte ich die Zeit minimieren, die erforderlich ist, um eines von jedem einzelnen Brot zu erhalten. Ich kann an jedem Regal beginnen und enden.
Wenn die heutige Bestellung lautet W B W G F R W
, ist ein möglicher Pfad 0, 3, 5, 1, 4
für insgesamt 12 Sekunden:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12
( 1, 2, 3, 4, 5
funktioniert nicht, weil Brot nacheinander aus benachbarten Regalen gepflückt wird.)
Wenn ja B W B G B F B R B W B F
, ist ein möglicher Pfad 1, 3, 5, 7, 10
für insgesamt 9 Sekunden.
Der Manager stellt immer sicher, dass es eine mögliche Lösung gibt, sodass ich mir keine Sorgen machen muss, schlechte Eingaben zu erhalten. Normalerweise sendet er mir die Bestellung in einer Datei, aber wenn ich möchte, kann ich sie in STDIN eingeben oder anders lesen. Ich möchte, dass das Programm die Indizes des besten Pfads sowie seine Zeit gemäß den Standard-E / A-Regeln druckt .
Zusamenfassend:
- 5 Brotsorten.
- Laibreihenfolgen werden als Zeichenfolgen in zufälliger Reihenfolge und Länge angezeigt.
- Muss eines von jedem einzelnen Brot auswählen.
- Aufeinanderfolgende aufeinanderfolgende Auswahlen können nicht getroffen werden.
- Minimieren Sie den Abstand zwischen Auswahlindizes.
- Sie müssen sich keine Sorgen über ungültige Eingaben machen.
- Es gelten die Standard-E / A-Regeln .
Dies ist Code-Golf , kürzeste Byte-Anzahl gewinnt.
0+3+5+1+4=13
aber1+3+5+7+10=26
nicht9
.'WBWG FRW'
eine gültige Eingabe?Antworten:
JavaScript (ES6), 114 Byte
1 Byte dank @Oliver gespeichert
Nimmt die Eingabe als Array von Zeichen auf. Gibt eine durch Kommas getrennte Zeichenfolge aus, wobei der erste Wert die Gesamtzeit ist und die nächsten den Pfad beschreiben.
Probieren Sie es online aus!
Kommentiert
quelle
Python 2 ,
212210 BytesProbieren Sie es online aus!
2 Bytes danke an Jonathan Frech .
quelle
if len(...)==5and all(...)
kann seinif(len(...)==5)&all(...)
, zwei Bytes zu speichern.