Mein elektrisches Garagentor funktioniert so:
- Es gibt nur einen Druckknopf, um die Tür zu steuern
- Wenn die Tür vollständig geschlossen ist und ich auf den Knopf drücke, beginnt sich die Tür zu öffnen. Das vollständige Öffnen dauert 10 Sekunden
- Wenn die Tür vollständig geöffnet ist und ich auf den Knopf drücke, beginnt sich die Tür zu schließen. Das vollständige Schließen dauert 10 Sekunden
- Wenn sich die Tür auf halbem Weg öffnet oder schließt und ich auf den Knopf drücke, stoppt die Tür und bleibt teilweise offen.
- Immer wenn die Tür anhält, entweder aufgrund einer automatischen Beendigung einer Öffnungs- oder Schließaktion oder aufgrund einer manuellen Unterbrechung durch teilweises Drücken des Knopfes, kehrt der Mechanismus um und merkt sich die Richtung für die nächste Aktion.
- Wenn der Knopf gedrückt wird, während die Tür angehalten, aber teilweise geöffnet ist, beträgt die Zeit, bis die Aktion abgeschlossen ist, einen Bruchteil von 10 Sekunden, proportional zu der Zeit, die erforderlich ist, um die Aktion abzuschließen.
Angenommen, die Tür ist zu Beginn vollständig geschlossen.
Eine Eingabeliste mit ganzen Zahlen wird angezeigt. Diese ganzen Zahlen geben die Anzahl der Sekunden an, die ich zwischen aufeinanderfolgenden Drücken der Steuertaste warte.
Zwei Dinge ausgeben:
- Ein Prozentsatz, der den Zustand der Tür angibt, sobald alle Tastendrücke abgeschlossen sind und die Tür einen stabilen Zustand erreicht hat. Die Ausgabe des
%
Symbols ist optional. - eine eindeutige Angabe, in welche Richtung die Tür beim nächsten Tastendruck fährt. Dies kann
up
/down
,U
/D
,+
/-
,1
/0
oder was auch immer Sie wählen.
Es kann davon ausgegangen werden, dass die Tür weniger als 10 Sekunden benötigt, um einen Öffnungs- oder Schließvorgang abzuschließen.
Beispieleingaben:
<empty list> # button was pushed just once
20 # button was pushed twice with 20 seconds between
10
5
20 20
10 10
5 5
1 2 3
8 9 10 11
11 10 9 8 7
Erwartete Ausgänge entsprechen den obigen Eingängen
100% D
0% U
0% U
50% D
100% D
100% D
0% U
100% D
0% U
20% U
Gearbeitetes Beispiel für den letzten Test
- Tür fährt zu. Taste wird gedrückt
- Warten Sie 11 Sekunden. Die Tür wird vollständig geöffnet. Taste wird gedrückt.
- Warten Sie 10 Sekunden. Die Tür bleibt vollständig geschlossen. Taste wird gedrückt.
- Warten Sie 9 Sekunden. Taste wird gedrückt. Tür bleibt zu 90% geöffnet.
- Warten Sie 8 Sekunden. Taste wird gedrückt. Die Tür beginnt sich zu schließen.
- Warten Sie 7 Sekunden. Taste wird gedrückt. Tür bleibt bei 20% geöffnet. Die nächste Richtung wird oben sein.
Antworten:
Lua,
258248242 BytesUngolfed
Ich verstehe nicht, wie Ihre Testfälle richtig sein können ...OP behobenquelle
Pyth,
504539 Bytes6 Bytes dank Sp3000.
Testsuite.
quelle
JavaScript (ES6),
109106 Bytesquelle
Ruby, 152 Bytes
Testfälle:
quelle
->v{
zu->*v{
(glaube ich) wechseln . Außerdem müssen Sie die Räume vor dem:
als auch nach? Und bist du dir sicher, dass das:a<=0
nicht passt(:a) <= 0
?:a<=0
würde ich eine bekommen ,ArgumentError: comparison of Symbol with 0 failed
wenn es nicht funktioniert. Ich denke, weil es das analysiert hat?
und weiß, dass es sich um einen ternären Operator handelt, funktioniert es einfach. Die Regeln sind in der Tat seltsam. Ich habe Leerzeichen oder eckige Klammern gesetzt, um Syntaxfehler wieSyntaxError: unexpected tLABEL
undNoMethodError: undefined method
u? Zu vermeiden .a=u ? a+w : a-w
und zu ändern,a=a+w*d
wo esd
ist1
oder-1
je nach Richtung, aber ich habe es noch nicht ausgearbeitet.Python 3.5,
193187185181175173172 Bytes:Nimmt Eingaben in Form von durch Kommas getrennten Zahlen vor, zum Beispiel
1,2,3,4,5
oder sogar1.2,3.4,7.8,9.2
. Gibt mitU
oder ausD
, ob die Tür im nächsten Schritt auf- oder abfährt. Wird im Laufe der Zeit mehr Golf spielen.Probieren Sie es online! (Ideone) (Hier erfolgt die Eingabe in Form einer Liste, die aus durch Kommas getrennten Zahlen besteht, z
[1,2,3,4,5]
. B. )quelle
PHP,
128120 BytesDer Code wird hier so umgebrochen, dass er in das Code-Feld passt. Setzen Sie alles in eine einzelne Zeile, setzen Sie den PHP Open Marker davor und speichern Sie ihn in einer Datei. Oder starten Sie es von der Kommandozeile mit
php -d error_reporting=0 -r '...the code...' [arguments]
.Der ungolfed Quellcode, die Testsuite und Anwendungsbeispiele sind auf github zu finden .
quelle