Derzeit sind wir bei meiner Arbeit in ein neues Gebäude umgezogen. Es soll auf dem neuesten Stand der Technik sein und verfügt über automatische Lichter, automatische Rollläden und ist heute als das umweltfreundlichste Gebäude in dieser Stadt bekannt.
Es funktioniert jedoch nicht wirklich gut. Die Rollläden gehen manchmal an bewölkten Tagen herunter und steigen auf, wenn die Sonne scheint, und die Lichter verursachen manchmal Disco-Effekte, indem sie alle 5-10 abwechselnd ein- und ausgeschaltet werden Protokoll. Wir haben auch keine manuelle Möglichkeit, diese Rollläden oder die Temperatur zu steuern, ABER wir haben eine Fernbedienung für die Lichter.
Diese Fernbedienungen wurden jedoch ohne Bedienungsanleitung geliefert und enthalten etwas mehr als 20 Tasten, die alle möglichen Dinge erledigen, außer dem, was Sie zu wollen scheinen.
PS: Ich habe diese Herausforderung vor 1,5 Monaten in der Sandbox geschrieben. Momentan wissen wir, wie die Fernbedienungen funktionieren.
Ein großer Vorteil dieses Gebäudes ist, dass es außen über 30 Grad Celsius hat, innen aber immer die gleiche Raumtemperatur von 21 Grad hat.
Das war also das Intro, und die Fernbedienung für die Lichter inspirierte diese Herausforderung.
Herausforderung:
Nehmen wir an, wir haben zunächst eine Lampe ausgeschaltet:
L
Dann drücken wir alle Arten von Tasten und geben anschließend den Zustand der Lampe aus.
Wir verwenden die folgenden Nummern für die verschiedenen Funktionen der Fernbedienung für die Lampe. Wenn sich vor dieser Zahl ein Minuszeichen befindet, machen wir das Gegenteil.
1
= EIN;-1
= AUS.2
= Festigkeit um 25% erhöhen;-2
= Verringern Sie die (schwache) Festigkeit um 25%.3
= Spread um 50% erhöhen;-3
= Spread um 50% verringern.4
= Umschalten der Lichtart.
Das ist alles ziemlich vage, also gehen wir etwas genauer darauf ein, was jedes Ding bedeutet:
Also, -1
(AUS) ist ziemlich offensichtlich und 1
geht in den anfänglichen EIN-Zustand (50% für 2
und 50% für 3
):
//
//
L ====
\\
\\
2
und -2
ist, wie weit sich das Licht bewegt ( ==
wird alle 25% angehängt):
0% (equal to a light bulb that is OFF)
L
25%
L ==
50%
L ====
75%
L ======
100%
L ========
3
und -3
wie weit verbreitet sich das Licht:
0%:
L ====
50%:
//
//
L ====
\\
\\
100%:
|| //
||//
L ====
||\\
|| \\
(HINWEIS: Wenn 2
und 3
beide zu 100% sind, haben Sie diesen Status:
|| //
|| //
|| //
||//
L ========
||\\
|| \\
|| \\
|| \\
4
ist die Art des Lichts umzuschalten.
Default:
//
L ==
\\
After toggling (note the single space before '/' instead of two):
/
L --
\
Eingang:
Sie erhalten eine Eingabe mit den möglichen Tastendrücken. Beispielsweise:
12-34
Ausgabe:
Der Status der Lichtlampe, nachdem alle Tasten des Eingangs nacheinander gedrückt wurden. Mit der obigen Beispieleingabe haben wir also die folgende Ausgabe:
L ------
Herausforderungsregeln:
- Die Eingabe enthält nur
1234-
(und niemals ein-
vorheriges4
). - Sie können niemals unter 0% oder über 100% gehen. Wenn eine Zahl über diese Grenzen hinaus zunehmen / abnehmen würde, können Sie sie ignorieren.
- Wenn die Lampe ausgeschaltet ist, können Sie alle Aktionen ignorieren. Wenn sie wieder eingeschaltet wird, wird sie wieder in den ursprünglichen EIN-Zustand zurückgesetzt (50% für beide
2
und3
, und Standard4
). Beispiel:12-1-341
Druckt nur den oben genannten anfänglichen EIN-Zustand. (TIPP: Sie können alles vor dem Ende1
der Eingabe ignorieren - ausgenommen-1
.) - Leerzeichen, die der Länge des Lichts oder einer einzelnen neuen Zeile entsprechen, sind nicht gesperrt. Das Hinzufügen zusätzlicher unnötiger neuer Zeilen ist jedoch nicht möglich.
- Sie können die Eingabe als Liste von Ganzzahlen anstelle einer einzelnen Zeichenfolge verwenden. Anstelle von
12-34
können Sie also[1,2,-3,4]
als Eingabe haben.
Allgemeine Regeln:
- Dies ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich nicht von Code-Golf-Sprachen davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, eine möglichst kurze Antwort für "jede" Programmiersprache zu finden. - Für Ihre Antwort gelten Standardregeln , sodass Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme verwenden dürfen. Ihr Anruf.
- Standardschlupflöcher sind verboten.
- Wenn möglich, fügen Sie bitte einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie bei Bedarf auch eine Erklärung hinzu.
Testfälle:
12-34
L ------
12-1-341
//
//
L ====
\\
\\
14-3224333-2
|| //
|| //
||//
L ======
||\\
|| \\
|| \\
142-1-314-3-322
L --------
1324-2-3
/
/
L ----
\
\
134
| /
|/
L ----
|\
| \
1-2-2-214-3-3-3
L ----
134
?4
). Danke für die Frage.1
gedrückt wird, werden die Parameter zurückgesetzt?Antworten:
Python 2, 221 Bytes
Dies dauerte länger als ich erwartet hatte. Die erste Zeile berechnet den Zustand der Lampe, der Rest implementiert den Druck.
Die Eingabe erfolgt über STDIN im Array-Formular.
Siehe die Testfälle auf ideone
quelle
R,
323320 BytesUngolfed:
liest eine Eingabezeile (durch Leerzeichen getrennte Ganzzahlen)
initialisiert die Variablen a (Einssein), b (Helligkeit), c (Breite), d (Strahlentyp).
d
ist entweder null oder zwei, was bedeutet, dass wir if (d) später und nicht länger if (d> 1) oder ähnliches aufrufen und ein paar Bytes speichern können.Eine Golf-y-Schreibweise,
while(length(z))
bei der z ein ganzzahliger Vektor ist.Der Rest der ersten Zeile behandelt die Eingabe über eine
switch
Anweisung. Die zweite Zeile wird ausgedruckt.Es ist möglich, dass einige
<-
davon durch ersetzt werden können=
, aber ich denke, Sie werden durch lexikalisches Scoping lebendig gefressen ...Beachten Sie auch, dass in R Backslashes maskiert werden müssen.
c*(c>0)
ist eine golfartige Schreibweisemax(c,0)
, die einen Charakter rettet.Wenn das Licht nicht an
*
ist:
, wird diefor(i in a*b:-b)
Schleife nur wiederholt , da sie eine niedrigere Priorität als hat0:0
.Aktualisieren; 3 Bytes wurden gespart, indem die Schleife in der ersten Zeile durch ein for (anstatt while) ersetzt wurde. Beachten Sie, dass
1:sum(1|z)
weniger Zeichen als1:length(z)
oder vorhanden sindseq_along(z)
.seq(z)
würde in den meisten Fällen funktionieren, aber nicht, wenn diez
Länge eins ist. Die angegebene Lösung funktioniert nicht für Eingaben der Länge Null, aber ich hoffe, dass dies außerhalb des Rahmens des Wettbewerbs liegt.quelle
Kotlin , 445 Bytes
Mein erster Kotlin Golf, 38 Bytes weniger als Java :)
Mit Leerraum und Tests:
Interessanterweise war es kürzer, die Funktionszuweisung (die eines ausgewerteten Lambdas) zu verwenden , anstatt die Funktion normal und /
print
oderreturn
die erstellte Zeichenfolge zu definierenfun f() =
. (Ist diese Beschreibung sinnvoll?)Ich wünschte nur, SE hätte die richtige Hervorhebung der Kotlin-Syntax
quelle
Java 8,
484483452446440 BytesEndlich .. Ok, meine eigene Herausforderung ist etwas schwieriger als ich erwartet hatte ..; P.
Dies kann ohne Zweifel mit einem völlig anderen Ansatz gespielt werden. Ich bestimme jetzt zuerst, was zu tun ist, und drucke es dann aus. Der Druck ist tatsächlich die schwierigste dieser Herausforderung, imho.
-6 Bytes dank @ceilingcat .
Erläuterung:
Probieren Sie es hier aus.
quelle
Stapel, 552 Bytes
Hinweis:
set v=
Enthält ein nachfolgendes Leerzeichen undset s=
drei. Dies war sehr umständlich, da Sie|
in Batch nicht einfach eine variable Anzahl von s drucken können. Sie müssen daher einen Platzhalter verwenden und ihn in der Echo-Anweisung ersetzen.quelle
05AB1E , 106 Bytes
Eingabe als Liste von ganzen Zahlen.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Wir haben jetzt die Zeichenfolge:
Nun gut:
Lesen Sie diesen 05AB1E-Tipp von mir (Abschnitte Komprimieren großer Ganzzahlen und Komprimieren ganzzahliger Listen? ) , Um zu verstehen, warum dies so
•Wθ¨S9ƒTª»þúÙ•6в
ist[5,3,2,2,2,2,2,2,2,2,4,1,1,0,0,4,1,1,3,0,0,4,1,1,3,3,0,0,4,1,1,3,3,3,0,0]
. undŽ8Ã
ist2234
.quelle