Einige von Ihnen kennen vielleicht die Art und Weise, wie ein Motorrad schaltet. Aber für diejenigen, die es nicht tun, sieht es so aus
6
5
4
3
2
N
1
Jetzt möchte ich wissen, in welchem Gang ich bin, nachdem ich ein paar Hoch- und Runterschaltungen durchgeführt habe. Das Programm sollte von neutral funktionieren.
Beispieleingabe:
V^^
Beispielausgabe:
2
Wie Sie sehen, habe ich einmal von N auf 1 und zweimal auf den 2. Gang hochgeschaltet.
Dies ist ein Code Golf. Kürzeste Antwort in Bytes gewinnt.
Hinweis: Die Eingabe kann aus 2 beliebigen Zeichen bestehen. Kann U und D für oben und unten sein oder was auch immer Sie wollen, es muss eine Zeichenfolge sein . Sie können nicht über den 1. oder 6. Gang hinaus schalten. Wenn Sie auf dem sechsten Platz sind und wieder hochschalten, bleibt es auf dem sechsten Platz. Viel Glück!
Antworten:
JavaScript (ES6),
49484746 BytesErwartet:
1
für unten7
für bisFormatiert und kommentiert
Zahnräder werden wie folgt abgebildet:
So können wir auf einfache Weise die Gültigkeit des aktuellen Zahnrads überprüfen:
Demo
Code-Snippet anzeigen
quelle
05AB1E ,
2220 BytesProbieren Sie es online!
Erläuterung
quelle
MATL,
322823 Bytes5 Bytes gespart dank @Luis
Diese Lösung dient
'2'
zum Hochschalten und'0'
zum Herunterschalten.Probieren Sie es bei MATL Online aus
Erläuterung
quelle
V ,
20, 15 BytesProbieren Sie es online!
Die Eingabe ist eine Zeichenfolge aus
h
(Auf) undl
(Ab) Zeichen.Vielen Dank an @nmjcman für das Speichern von 5 Bytes und das Erlernen einer vim-Funktion, von der ich noch nie etwas gewusst habe!
Wenn wir annehmen könnten, dass die Eingabe niemals außerhalb der Grenzen liegt, wären es einfach 9 Bytes:
Das ist aber leider nicht erlaubt.
Erläuterung:
quelle
n
, nicht1
.Java 7,
106105103 BytesErläuterung:
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
Haskell,
595351 BytesGebrauch
0
für unten und2
für oben. Anwendungsbeispiel:Danke an @xnor für die 6 Bytes! Es stellte sich heraus, dass ich keinen Funktionsnamen oder Klammern benötige, das sind also weitere 2 Bytes.
quelle
read[c]-2
.g=
.g=
weil es klarer istJavaScript (ES6),
4858 BytesVerwendung
Weisen Sie es einer Funktion zu und rufen Sie es dann auf. Die Eingabe ist eine Zeichenfolge, die ein
1
für ein Hochschalten und ein0
für ein Herunterschalten enthält.quelle
f("001")
die N zurückgeben sollten (Gang runter auf 1, Gang runter auf 1, Gang rauf auf N)PHP 7.1, 71 Bytes
wechselt
$g
von -1 auf 5, verwendet negativen Saitenversatz für den ersten Gang.Führen Sie mit aus
-nr
, und geben Sie die Umschaltzeichenfolge als Befehlszeilenargument an.quelle
Jelly ,
17-14BytesVerwendet
6
für oben und0
unten.Probieren Sie es online!
Wie es funktioniert
quelle
Ruby, 58 Bytes
Die erwartete Eingabe ist 'v' für ein Herunterschalten und '^' für ein Hochschalten
quelle
Verarbeitung von JS (geändert) 121 Bytes
Ungolfed
Probieren Sie es online!
Ich ging mit PJs, da ich es gut kenne. Das einzige Problem ist, dass die Version, die ich verwende, sehr streng getippt ist. Ich kann Klammern und viele andere Tricks nicht auslassen. Das ist ziemlich einfach. Die Eingabe sollte in die Variable gehen
a
und es dauert Kleinbuchstabenu d
. Das Programm durchläuft eine Schleife, bis es das Ende der Zeichenfolge erreicht und bei jeder Iteration überprüft, ob es sich um ein au oder ein d handelt. Wenn es so ist und es nicht versucht, vorbei zu "verlagern", wo Sie können, verlagert es sich. Am Ende drucke ich die Ergebnisse!quelle
The input should go into the variable a
Die Verwendung von fest codierten Eingaben ist keine Standardeingabemethode, siehe hier .void f(String[] a){...}
Das sind kaum 100 Bytes.k, 25 Bytes
Es nimmt Eingaben als Zeichenfolge und wird
[
zum Herunterschalten und]
Hochschalten verwendet, da sie günstig angeordnet sind.Beispiele:
quelle
GNU sed ,
8987 + 1 (r Flag) = 88 BytesDa sed keine ganzzahligen Typen oder arithmetischen Operationen hat, wird die Lösung nur mit regulären Ausdrücken erreicht.
Bewegen Sie den Zeiger
x
bei jeder Eingangsverschiebung nach links (fürU
p) oder rechts (fürD
own) entlang eines nicht umhüllenden Bands, das nur die Zellen enthält65432N1
. Die Antwort am Ende ist der Wert in der Zelle links vom Zeiger.Beispiellauf: oder Online ausprobieren!
Erläuterung:
quelle
GNU sed ,
7673 BytesBeinhaltet +1 für
-r
Die Ausgabe ist unärgerlich, mit Ausnahme der neutralen Ausgabe
N
(siehe diesen Konsens ).Probieren Sie es online!
Dies zählt im Grunde genommen unär auf und ab und wandelt dann 1 in N und 0 in 1 um.
quelle
1
als Startwert asN
und nichts as verwenden1
.s/$/1/;:;/1{6}/!s/^U(.*)/\11/;s/^D(.*)1/\1/;t;s/U|D//;t;s/^1$/N/;s/^$/1/
Rebol,
9693 BytesUngolfed:
Anwendungsbeispiel (in der Rebol-Konsole):
quelle
> <> , 35 Bytes
Ein begeisterter Code, der Sie ermutigt, über das Tempolimit hinaus zu fahren.
Akzeptiert alle zwei Eingängen , dessen Code modulo 3 sind 0 und 2 beispielsweise 0und 2.
Für zusätzliche Fischigkeit empfehle ich die Verwendung von <und >.
Erklärung:
Sie können es hier ausprobieren !
quelle
SpecBAS - 102
Verschiebt den Index des Strings abhängig von der Eingabe und druckt das entsprechende Zeichen.
quelle
Pyth, 32 Bytes
Benutzt Leerzeichen und Zeilenvorschub für Ab und Auf.
Erläuterung
Es gibt mit ziemlicher Sicherheit eine bessere Möglichkeit, das Inkrementieren und die Ausgabe durchzuführen.
quelle
CJam ,
2422 BytesGebrauch
(
für unten und)
für oben.Probieren Sie es online!
Erläuterung
quelle
Batch, 144 Bytes
Übernimmt die Eingabe in STDIN,
0
um in einen niedrigeren und6
in einen höheren Gang zu schalten. Diese Nummern wurden gewählt, um das Ignorieren des aktuellen Gangs zu vereinfachen. Schließlich, wenn das Zahnrad1
dannN
gedruckt wird, wird anderweitig0
konvertiert1
und das Zahnrad gedruckt.quelle
Javascript ES6 uneingeschränkt,
136120 Zeichen136 Zeichen für
V^
120 Zeichen für
-+
quelle
Netzhaut , 65 Bytes
Verwendet
u
undd
für auf und ab.Probieren Sie es online!
Erläuterung
Dieses Programm arbeitet so, dass
1N23456
die Reihenfolge der Anweisungen eingehalten wird. Es verfolgt den aktuellen Gang, indem es ein Leerzeichen dahinter hat. Dann dauert es eine Anweisung nach der anderen, bis es keine mehr gibt.Beginnen Sie mit dem Setzen
1 N23456
vor der Eingabe. Das vorangestellte LeerzeichenN
zeigt an, dassN
es sich um den aktuellen Gang handelt.Hierbei handelt es sich um zwei Ersetzungsstufen, die in Gruppen zusammengefasst sind und so lange ausgeführt werden, bis die Zeichenfolge nicht mehr geändert wird:
Der erste befasst sich mit dem Hochschalten des Gangs. Nach dem Leerzeichen wird nach einer beliebigen Anzahl von Gängen gesucht, gefolgt von einem
6
, gefolgt vonu
(u
zeigt die Anweisung zum Hochschalten an). Wenn sich vor der 6 Zeichen befanden, wird das Leerzeichen mit dem Zeichen unmittelbar danach vertauschtu
, das Zeichen gelöscht und der Rest der Zeichenfolge bleibt erhalten. Da das6
im Match obligatorisch ist, wird nur das Leerzeichen mit einem Zeichen vor dem ausgetauscht6
. Es wird nie mit dem tauschen6
.Die zweite Stufe übernimmt das Herunterschalten und funktioniert ähnlich. Es wird optional nach einem Zeichen vor dem Leerzeichen gesucht, danach nach einigen anderen Gängen, die auf enden
6
, gefolgt vond
. Es tauscht das Leerzeichen mit dem Zeichen davor aus, löscht dasd
und lässt den Rest intakt. Wenn sich das Leerzeichen am Anfang der Zeichenfolge befand, gab es keine Übereinstimmung für ein Zeichen vor dem Leerzeichen, sodass kein Auslagerungsvorgang stattfindet.Nachdem keiner der oben genannten Austauschvorgänge mehr ausgeführt werden kann, sind alle Schaltvorgänge abgeschlossen. Die Linie wird sofort nach dem Leerzeichen von allem außer dem Zahnrad befreit. Dies ist der letzte Gang.
quelle
Powershell,
1128785 Bytes$i=1;switch([char[]]$args[0]){'^'{if(5-gt$i){$i++}}'v'{if(1-le$i){$i--}}}'1N2345'[$i]
ungolfed
25 Bytes gespart, indem die Tipps zum Powershell-Codegolf gelesen wurden
sparte 2 Bytes durch Spiegeln der gt / le Operatoren
quelle
Perl 6, 144 Bytes
Funktioniert wie es sollte, glaube ich. Verbesserungen sind willkommen. Das erste Mal mit Perl, aber ich mochte den Gedanken an die Sprache, also musste ich es versuchen.
quelle
Clojure, 74 Bytes
Faltet den Shift-String um und behält einen Index als Akkumulator bei. Bei jeder Iteration wird der Index entweder vergrößert oder verkleinert und dann auf den Bereich 0-6 geklemmt. Schließlich wird ein String mit den Zahnrädern indiziert und zurückgegeben.
Gibt ein Clojure-Zeichen zurück, das den aktuellen Gang darstellt. Gang 1 wird zurückgegeben als
\1
und Gang 'N' wird zurückgegeben als\N
.Pre-Golf Erklärung. Befolgen Sie die Zahlen, da sie von oben nach unten nicht gut lesbar sind.
quelle
Python 3,
6763 BytesZiemlich einfache Lösung.
-4 Bytes dank @ovs!
quelle