Zufällig inspiriert von Zahlen, die zunehmen, während Buchstaben abnehmen
Bei einer Liste von gemischten Buchstaben und ganzen Zahlen (z. B. ['a', 2, 3, 'b']
) erhöhen Sie die Buchstaben um eine Stelle im Alphabet (Umbruch bei z
bis a
) und verringern Sie die Zahlen um 1. Für das obige Beispiel sollte die Ausgabe sein ['b', 1, 2, 'c']
.
- Die Eingabe kann eine Liste gemischter Typen, eine durch Trennzeichen getrennte Zeichenfolge, eine Liste von Zeichenfolgen usw. sein.
z
wickelt sich zua
,1
geht aber zu0
und0
geht zu-1
usw.- Die Eingabe wird immer nur
[a-z]
und ganze Zahlen sein. Sie können Großbuchstaben[A-Z]
als Eingabe wählen, wenn dies für Sie einfacher ist. - Die Eingabe ist garantiert nicht leer.
- Die Eingabe darf nur Ziffern oder nur Buchstaben enthalten.
Beispiele:
Input
Output
['a', 2, 3, 'b']
['b', 1, 2, 'c']
['a', 'b', 'z']
['b', 'c', 'a']
[-1, 0, 257, 'x']
[-2, -1, 256, 'y']
[0, 3, 1, 20382876]
[-1, 2, 0, 20382875]
Regeln und Erläuterungen
- Eingabe und Ausgabe können auf jede bequeme Weise erfolgen .
- Sie können das Ergebnis an STDOUT drucken oder als Funktionsergebnis zurückgeben.
- Die Ausgabe muss nicht dasselbe Format wie die Eingabe haben (z. B. können Sie die Eingabe als Zeichenfolge und die Ausgabe als Liste verwenden).
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
- Falls zutreffend, können Sie davon ausgehen, dass die Eingabe- / Ausgabe-Ganzzahlen in den systemeigenen
int
Bereich Ihrer Sprache passen . - Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
int
Bereich Ihrer Sprache passen , sodass Sie niemalsInteger.MinValue
eine Eingabe erhalten würden.Antworten:
05AB1E , 5 Bytes
Probieren Sie es online!
quelle
Python 3 , 59 Bytes
Probieren Sie es online!
-1 Byte danke an Erik den Outgolfer
quelle
-96
mit+8
ein Byte.''!=i*0
ist drei Bytes kürzer als meinestr(i)>'9'
, gute ArbeitPerl 5 (-p), 17 Bytes
Probieren Sie es online!
Bonus 19-byter:
TIO . Dieser enthält einige coole Tricks, schlägt aber die oben beschriebene, unkomplizierte Lösung nicht.
quelle
Ruby , 34 Bytes
Versuchen Sie für jedes Element, das Element -1 zurückzugeben. Strings können dies nicht, daher treten Fehler auf und werden von der
rescue
Klausel aufgefangen, die stattdessensucc
den nächsten Buchstaben im Alphabet zurückgibt.succ
"rollt über" anz
und kehrt zurückaa
, also nehmen wir einfach das erste Zeichen in der zurückgegebenen Zeichenfolge.Probieren Sie es online!
quelle
JavaScript (Node.js) , 55 Byte
Probieren Sie es online!
quelle
Python 3 ,
182130118 Bytes-51 Bytes dank @AdmBorkBork und @Black Owl Kai, -1 Bytes dank @Black Owl Kai, -12 Bytes durch Ersetzen
.append()
mit+=[]
und Ersetzenn+1
mit-~n
Probieren Sie es online!
Ich habe dies gemacht, während sich die Frage in der Sandbox befand, habe sie aber erst jetzt veröffentlicht. : P
Ungolfed
Erläuterung
Für jedes Element in der eingegebenen Liste
x
wird versucht, 1 zu subtrahieren und zur eventuell zurückgegebenen Liste hinzuzufügen. Wenn ein Fehler auftritt (weil das Element ein String ist), wird der Index des Buchstabens im Alphabet um 1 addiert und dieser Mod 26 wird genommen. Der Mod 26 bricht einen Index von 26 auf 0 zurück.quelle
(x+27)%26
es das gleiche Ergebnis wie(x+1)%26
str(d)==d
prüfen, ob es sich um eine Zeichenfolge handelt, anstatt sich auf try / except zu verlassen. Dann, da Sie try / except nicht mehr brauchen, können Sie das Ganze in einem Listenverständnis machen! Ich lasse Sie ein bisschen mehr darüber nachdenken, aber Sie können auf diese Weise leicht unter 100 Bytes kommen;)J , 30 Bytes
Probieren Sie es online!
quelle
Gema , 55 Zeichen
Schmutzige Lösung. Das Herumwickeln in Buchstabenschritten ist schmerzhaft lang, daher gibt es eine separate Regel.
Die Eingabe kann alles Mögliche sein, verwenden Sie nur einige Trennzeichen. (Sie können sogar Trennzeichen zwischen Zahlen und Buchstaben weglassen. Mit dem Preis von 1 Zeichen für den Wechsel zu können
<L1>
Sie auch Trennzeichen zwischen Buchstaben weglassen.)Probelauf:
Probieren Sie es online!
Gema, 66 Zeichen
Saubere Lösung. Halb relativ effizient, dann halb reiner Schmerz.
Probelauf:
Probieren Sie es online!
quelle
R 77
85BytesDanke @ Giuseppe für die 8 Bytes
Probieren Sie es online!
Nimmt die Eingabe als Liste. Nach einer großen Änderung durch @ Giuseppe wird hiermit
Map
eine Funktion auf die Liste angewendet . Es nutztmatch
, um für einen Charakter zu testen. Während des Tests werden die erweiterte Briefliste und der Index für die Rücksendung gespeichert.quelle
character
s sind nicht endlich, weil sie von gegossennumeric
werdenis.finite
und sind soNA
?is.finite
, dass ich dich losgeworden bin. Ich dachte, ich würde es selbstMap
undmatch
. Es ist gut, jeden Tag etwas zu lernen :)MathGolf , 14 Bytes
Probieren Sie es online!
Nimmt Buchstaben als Kleinbuchstaben.
Erläuterung
quelle
Retina ,
525048584137 Bytes-4 Bytes dank @FryAmTheEggman (und für die Erwähnung hatte ich einen Fehler:
1 → -1
statt1 → 0
).+10 Bytes, um einen Fehler mit
1
und zu beheben0
. Solch ein nerviger Edge-Fall, der mich eine ganze Weile fertig gemacht hat. Aber jetzt hat er auf 41 Bytes golfen. (Jetzt bin ich neugierig auf die in den Kommentaren erwähnten <40-Byte-Versionen @Neil und @CowsQuack .) Vielen Dank an @Neil für den Tipp, das0
zu konvertieren-
und zuerst mit den negativen Werten umzugehen hatmir sehr geholfen.) Anscheinend brauche ich die Grenzen an dieser Stelle nicht, also -4 Bytes ..>.>
E / A ist durch Kommas getrennt.
Probieren Sie es online aus.
Erläuterung:
Alle umschreiben
"zabcdefghijklmnopqrstuvwxy(z)"
zu"abcdefghijklmnopqrstuvwxyz"
:Ersetzen Sie alle Standalones
0
durch-
:Konvertieren Sie alle Zahlen in unäre Zahlen, indem Sie sie durch die Anzahl der Unterstriche ersetzen:
Für alle negativen Werte mit null oder mehr unären Linien: Behalten Sie das Minuszeichen bei und berechnen Sie die Gesamtlänge dieser Übereinstimmung (einschließlich der
-
), die zurück in eine Ganzzahl konvertiert wurde:Für die positiven Ganzzahlen gilt: Passen Sie eine positive Ganzzahl an, indem Sie eine einzelne unäre Linie gefolgt von null oder mehr unären Linien abgleichen. Ersetzen Sie sie dann durch die Länge dieser Erfassungsgruppe, um diese einzelne unäre Linie zu entfernen und sie gleichzeitig wieder in ganze Zahlen umzuwandeln:
quelle
SNOBOL4 (CSNOBOL4) , 103 Bytes
Probieren Sie es online!
quelle
PHP , 50 Bytes
Probieren Sie es online!
Tests
Gibt Buchstaben / Ganzzahlen aus, die durch
_
ein nachstehendes Trennzeichen getrennt sind.In PHP können Sie Buchstaben direkt inkrementieren, also habe ich es ausgenutzt. Aber das
z
wird inkrementiertaa
, um es ina
das umzuwandeln ,(++$a)[0]
was nur das erste Zeichen des inkrementierten Werts ausgibt.quelle
Japt
-m
,1312 Bytes-1 Byte dank Shaggy
Versuch es
Erläuterung:
Hinweis :
;
verwandelt sichC
in Kleinbuchstabenquelle
z
nach umhüllta
.o
->¤
spart euch hier ein byte.+2
und dann wäre-1
dank Shaggy genauer! : D+2
war dank Oliver: PHaskell,
5251 BytesDa Haskell keine Listen gemischter Typen zulässt, werden Buchstaben und Zahlen als Zeichenfolgen zurückgegeben.
Probieren Sie es online!
Überprüfen Sie für jedes Listenelement: Wenn die Zeichenfolge ist
"z"
, geben Sie zurück"a"
; Wenn das erste Zeichen der Zeichenfolge> ist'`'
(dh ein Buchstabe, keine Ziffer), geben Sie den Nachfolger der Zeichen in der Zeichenfolge zurück. Andernfalls muss es eine Zahl sein. Wandeln Sie sie in eine Ganzzahl um, subtrahieren Sie 1 und verwandeln Sie sie erneut in eine Zeichenfolge.Edit: -1 Byte dank @cole.
quelle
Gelee , 13 Bytes
Probieren Sie es online!
Clevere Lösung von Jonathan Allan .
Hinweis: Dies ist kein vollständiges Programm. Die Fußzeile über TIO ermöglicht die Eingabe mit einem Befehlszeilenargument zum Testen der Funktion.
quelle
®i‘ị®µ’e?€Øa©
ist ein Fix für Null, glaube ich.Ọ
das in diesem Fall nicht funktioniert. Ironisch, da ich es vermieden habe, s~
als Bedingung für-1
die Eingabe zu verwenden ...®i‘ị®
C ++ 17 (gcc) , 120 Bytes
Hier
f
ist die erforderliche Funktion;l
ist sowohl der Eingabe- als auch der Ausgabeparameter, und es wird erwartet, dass es sich um einen Container mit Objekten handelt, die kompatibel sindstd::variant<char, int>
oder umgekehrt.Probieren Sie es online!
quelle
dzaima / APL,
21 bis20 BytesProbieren Sie es online!
-1 danke an ngn.
quelle
(⎕l⍳⍵)⊇1⌽⎕l
->⎕l(⍳⊇1⌽⊣)⍵
K (oK) , 27 Bytes
Probieren Sie es online!
-8 danke an ngn und dzaima :)
quelle
{$[-9=@x;x-1;90=x;"A";`c$1+x]}'
Großbuchstaben und in Großbuchstaben (und das'
muss als Eingabe gezählt werden, sollte eine Liste sein)'
sollte gezählt werden. Hier ist ein etwas längerer Ausdruck, der nicht benötigt wird'
und sich auch um "z" -> "a"{`c`i[t]$(-26*x~'"z")+x+1-2*t:x~'0+x}
@'
:{(`c$97+26!-96+;-1+)[x~'0+x]@'x}
. Hier-96
(+1 abzüglich des ASCII-Codes von "a") kann durch ersetzt werden,8
da es mit Mod 26 aufgenommen wurde.{(`c$65+26!14+;-1+)[x=_x]@'x}
-9=@x
->x=_x
Runenverzauberungen , 36 Bytes
Probieren Sie es online!
Der allgemeine Vorgang besteht darin, die Eingabe zu lesen, eine 0 (Zwang zu Zeichenfolge) voranzustellen, sie in eine Zahl umzuwandeln (ein einzelnes Zeichen gibt immer -1 zurück) und sie mit der Eingabe zu vergleichen. Wenn dies der Fall ist, muss es sich um einen numerischen Wert handeln, 1 wird subtrahiert und gedruckt. Wenn nicht gleich, muss es ein Zeichen sein, subtrahiere 1, vergleiche mit
{
. Wenn kleiner als, drucken Sie, andernfalls ersetzen Sie es durcha
und drucken Sie.Wiederholen, bis das Programm einen Stapelunterlauf ausführt.
Die Ausgabe wird durch getrennt
;
, um 1 Byte zu speichern (und hat ein nachfolgendes Byte ). Die Eingabe ist durch Leerzeichen getrennt.quelle
Stax , 17 Bytes
Führen Sie es aus und debuggen Sie es
Das fühlt sich an, als ob es möglich sein sollte, eine kürzere Version zu erstellen, aber ich kann der Gelegenheit nicht widerstehen, eine neue Stax-Funktion aus der letzten Version zu verwenden.
Behandlung der gesamten Eingabe als Zeichenfolge:
eval(match) - 1
. Dies ist die neue Funktion, da das Ersetzen von Regex-Blöcken keine Zeichenfolge, sondern eine Ganzzahl ist.quelle
Python 3, 66 Bytes
Bearbeiten:
Ich habe die Lösung von Jitse bis jetzt nicht gesehen. Der Trick von if ''! = I * 0 ist großartig!
quelle
148 Bytes
Repl.it Link
Ungolfed:
quelle
Kohle , 16 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Übernimmt die Eingabe in STDIN, wobei jede Zeile entweder ein Kleinbuchstabe oder eine Ganzzahl ist, und gibt sie in separaten Zeilen in STDOUT aus. Erläuterung:
Wiederholt von STDIN eingeben, bis eine leere Zeile erreicht ist.
Geben Sie diesen Ausdruck in einer eigenen Zeile aus.
Ist dies eine Teilzeichenfolge des vordefinierten Kleinbuchstaben?
Wenn ja, drucken Sie den nächsten Buchstaben zyklisch aus.
Verringern Sie andernfalls den Wert und setzen Sie ihn für den impliziten Druck in einen String zurück.
quelle
Zsh , 47 Bytes
Probieren Sie es online!
quelle
C (GCC) ,
9386 BytesProbieren Sie es online!
Die Eingabe ist eine abgeschlossene
NULL
Anordnung von abgeschlossenen'\0'
Zeichenfolgen, z{"a", "b", "c", "17", NULL}
.-7 Bytes dank @ceilingcat
quelle
Perl 6 , 31 Bytes
Probieren Sie es online!
Anonym Welches Lambda, das jedes Element der Liste zuordnet und versucht, eines davon zu subtrahieren, andernfalls es zu erhöhen und das erste Zeichen in dem Fall zu übernehmen, in dem es
z
umgebrochen wirdaa
.quelle
T-SQL 2012, 61 Byte
Großbuchstaben werden für die Eingabe benötigt.
Tabellenvariable als Eingabe verwenden.
Probieren Sie es online aus
quelle
SimpleTemplate, 80 Byte
Dies wurde in einer Sprache geschrieben, die ich gemacht habe.
Aufgrund von Einschränkungen im Compiler kann ich es nicht mehr reduzieren.
Und jetzt ungolfed:
Und die Erklärung:
{@each argv as value}
- durchläuft alle Werte inargv
. (argv
enthält alle übergebenen Argumente).Wenn das
as <var>
nicht vorhanden ist, die Standardeinstellung_
angenommen.{@if value is matches "@\d+@"}
- prüft, obvalue
mit dem regulären Ausdruck übereinstimmt"@\d+@"
.{@inc by -1 value}
- erhöht den Wert um -1 (im Grunde genommen eine Verringerung).{@echo value, "\n"}
und{@echol_}
-echol
gibt die übergebenen Werte aus und fügt am Ende eine Zeile hinzu.{@else}
- selbsterklärend{@inc by 1 value}
- erhöht den Wert um 1. Wenn dasby <value>
fehlt, wird angenommen, dass es 1 ist.{@echo value.0, "\n"}
und{@echol_.0}
-echol
gibt die übergebenen Werte aus und fügt am Ende eine Zeile hinzu.Dies ist erforderlich , weil die Herausforderung Regeln:
z wraps to a
.Wenn an
@inc
für eine Zeichenfolge verwendet wird, werden die Zeichen inkrementiert und bei einem Trefferz
wird ein Zeilenumbruch ausgeführtaa
.Die Ausgabe des ersten Zeichens erfüllt die Herausforderung auf Kosten von 7 Bytes.
{@/}
- schließt die{@else}
obige (optional).{@/}
- schließt das{@each}
obige (optional).Sie können dies anprobieren: Adresse http://sandbox.onlinephpfunctions.com/code/7533641a0aa1fc8bf4699a9c758690de186b052f
Jedes übergebene Argument für
render()
ist ein neuer Wert, der berücksichtigt wird.quelle
Perl, 64 Bytes
quelle