Es gibt eine sehr einfache Chiffre, die einen Buchstaben durch seine Position im Alphabet ersetzt. Zum Beispiel abc
würde 1 2 3
in dieser Chiffre werden.
Diese Herausforderung ist eine alternative Herangehensweise an diese Chiffre.
Die Herausforderung
Erstellen Sie ein Programm, das eine Eingabe von ASCII-Zeichen akzeptiert und eine durch Leerzeichen getrennte Zeichenfolge ausgibt:
ganze Zahlen
-26
durch26
Briefe
a
durchj
Die Ausgabe sollte über STDOUT oder die nächstgelegene Alternative Ihrer Sprache erfolgen.
Spezifikationen
Großbuchstaben sollten negiert werden. Ein Kapital wäre
D
zum Beispiel-4
, während ein Kleinbuchstabed
wäre4
.Stellen sollten in ihre Alpha-Gegenstücke geändert werden.
1
Seina
und so weiter. Alle Nullen in der Eingabe werdenj
.Alle nicht alphanumerischen Zeichen (außer Leerzeichen) sollten ignoriert werden.
Leerzeichen sind
0
.Benachbarte Leerzeichen in der Ausgabe sollten auf ein einzelnes Leerzeichen reduziert werden.
Input: You + Me Correct Output: -25 15 21 0 -13 5 Incorrect Output: -25 15 21 0 0 0 -13 5
Ein einzelnes Leerzeichen oder eine neue Zeile ist zulässig.
Beispiele
Input: programming puzzles
Output: 16 18 15 7 18 1 13 13 9 14 7 0 16 21 26 26 12 5 19
Input: Code Golf
Output: -3 15 4 5 0 -7 15 12 6
Input: Programming Puzzles & Code Golf
Output: -16 18 15 7 18 1 13 13 9 14 7 0 -16 21 26 26 12 5 19 0 -3 15 4 5 0 -7 15 12 6
Input: C0d3 G0lf
Output: -3 j 4 c 0 -7 j 12 6
Input: abc_ABC
Output: 1 2 3 -1 -2 -3
Anzeigetafel
Damit Ihre Partitur auf der Tafel erscheint, sollte sie in folgendem Format vorliegen:
# Language, Bytes
Durchgestrichene Symbole sollten kein Problem verursachen.
quelle
Antworten:
CJam,
585754515049 BytesGerade als ich die Erklärung aufgeschrieben habe, ist mir aufgefallen, dass eine der alternativen 50-Byte-Versionen um ein Byte verkürzt werden kann ...
Teste es hier.
50-Byte-Lösungen:
Erläuterung
Dies muss das erste Mal sein, dass CJams Modulo-Verhalten für negative Werte für mich nützlich war.
quelle
JavaScript (ES6),
110107133120 ByteNimm das, alter ich!
Es gibt möglicherweise viel mehr Platz zum Golfen, vor
allem, wenn es um die Regexesgeht. Ungolfed-Version:Vorschläge willkommen!
quelle
All non-alphanumeric characters should be ignored.
. Test: 'A $ b' sollte sein-1 2
Pyth,
5049 BytesProbieren Sie es hier aus .
Bearbeiten: Neu strukturierte String-Bereinigung, um sicherzustellen, dass Unterstriche korrekt behandelt werden. Es hat sogar ein Byte gespart, yay!
Dieses Programm erstellt eine Suchzeichenfolge, mit der die Eingabe bereinigt wird. Dies wird dann dem entsprechenden Index in dieser Zeichenfolge zugeordnet. Schließlich wird jeder Index, der größer als 26 ist, in das richtige ASCII-Zeichen konvertiert.
Vorherige Version, die
\W
Regex verwendet hat, mit 50 Bytes:quelle
Julia,
145136 BytesUngolfed:
Um die Ziffern als Buchstaben zu erhalten, addieren wir 58 zum ASCII-Wert und subtrahieren 10, wenn das aktuelle Zeichen nicht 0 ist. Dadurch wird sichergestellt, dass 0
j
und die anderen Zifferna
- zugeordnet sindi
.Das Negieren von Großbuchstaben erfolgt mit
cmp
. Dies gibt -1 für Großbuchstaben und 1 für Kleinbuchstaben zurück.Probieren Sie es online aus
quelle
Perl 5,
120–116113105 BytesBereinigt zuerst die unerwünschten Zeichen und zusätzlichen Leerzeichen.
Klettert dann für jeden Charakter die ASCII-Tabelle hinunter.
Prüfung
quelle
s/ +/ /g
, und das zweite Regex kann als Golfspiel verwendet werden . Das erste Regex ist falsch, weil \ w mit dem Unterstrich übereinstimmts/[^\w ]|_//g
C
142138135Ein bisschen Ungolfed:
Besteht die angegebenen Tests in GCC 4.9.3 und Clang 3.5.2.
quelle
> <> (Fisch),
219209 BytesVersuch es hier aus
Dies ist meine erste Code Golf Antwort! Endlich konnte ich die Sprache verwenden, die ich für eine Code-Golf-Herausforderung verwenden wollte, und dies schien die perfekte zu sein, da Zeichen automatisch in Dezimalstellen umgewandelt werden.
Ich habe erwartet, dass mein Ergebnis viel kürzer ist, aber anscheinend nicht. Allerdings habe ich diesen nicht zu sehr golfen. Es gibt ein paar Stellen, an denen der Code sauberer / sinnvoller sein könnte, aber keine Bytes speichert, da sie sich an Stellen befinden, an denen ohnehin Leerzeichen erforderlich sind. Es könnte eine Möglichkeit geben, einige Bytes im letzten Bit in der zweiten Zeile zu speichern, damit es in die entgegengesetzte Richtung geht und mit der 00 zusammenpasst, die bereits da ist. Ich muss später mehr damit spielen
Grundsätzlich wird überprüft, ob das aktuelle Zeichen ein Leerzeichen, eine Zahl, ein Großbuchstabe oder ein Kleinbuchstabe ist, indem überprüft wird, ob es sich im Bereich der höchsten / niedrigsten Werte dieser Gruppe befindet. Wenn dies nicht der Fall ist, wird es verworfen. Wenn es sich um einen Buchstaben handelt, wird es in eine Zahl umgewandelt, wenn es sich um einen Buchstaben handelt, und in einen Buchstaben, wenn es sich um eine Zahl handelt (oder vielmehr eine Zahl von 97-106, die die Werte für die Buchstaben aj sind). Dann wird geprüft, ob der oberste Wert kleiner als 28 ist. In diesem Fall handelt es sich um eine Zahl und gibt eine Zahl aus. Andernfalls handelt es sich um einen Buchstaben und gibt den von der Zahl dargestellten Buchstaben aus. Anschließend wird eine Schleife ausgeführt, bis der Stapel leer ist.
quelle
JavaScript (ES6), 108
122 124Bearbeiten Mit dem regulären Ausdruck aus @ Max's Kommentar
Bearbeiten2 14 Bytes gespeichert dank ETHProductions
EcmaScript 6 ist nur für die Pfeilfunktionen gedacht, daher sollte es in Firefox und neuestem Chrome funktionieren.
Testen Sie das folgende Snippet
quelle
[R](/ +/g,' ')[R](/./g,
zu[R](/ +|./g,
. (Entschuldigen Sie, dass Sie einen alten Beitrag veröffentlicht haben, übrigens)Pyth, 57 Bytes
Live-Demo und Testfälle.
quelle
CJam, 52 Bytes
Probieren Sie es online aus
Der Hauptbestandteil der Lösung besteht darin, dass der CJam-
er
Operator (Transliteration) verwendet wird. Als Argumente für den Operator werden die Liste aller Zeichen und eine Liste der entsprechenden Werte benötigt.Als Vorverarbeitungsschritt für die Eingabe werden Zeichen entfernt, die nicht Teil der Übersetzungstabelle sind (Sonderzeichen), und wiederholte Leerzeichen werden auf ein einzelnes Leerzeichen reduziert.
Erläuterung:
quelle
Python 2,
191179177173172168160 BytesPrüfung
quelle
PHP, 116 Bytes
nimmt Eingaben von STDIN entgegen; renn mit
-nR
.Nervenzusammenbruch
Sie können das
@
Symbol durch ein Backtick ersetzen , um Leerzeichen im Kleinbuchstabenbereich zu behandeln.Mitjabcdefghi0
für die Ziffern könnten Sie auch verwenden:
.quelle
"#_|[^\w ]#"
anstatt"#[^\w ]|_#"
.Hassium , 1156 Bytes
Sehr lange Antwort
quelle
You + Me
erzeugt die Ausgabe-25 15 21 0 0 -13 5
.Dec
Spalte an.)Jelly , 32 Bytes, Sprachnachstellung
Probieren Sie es online!
Erläuterung
Hilfsfunktion
1Ŀ
(übersetzt jedes alphanumerische Zeichen / Leerzeichen in der Eingabe in eine Zahl)Hilfsfunktion
2£
(gibt den konstanten String zurück“jabcdefghi”
)Hauptprogramm
quelle
Retina,
7470 Bytes (nicht konkurrierend)Beachten Sie das führende Leerzeichen in Zeile 3, das nachfolgende Leerzeichen in Zeile 6 und die leere zweite Zeile.
Probieren Sie es online!
Obwohl die Sprache vor der Herausforderung erstellt wurde, denke ich, dass einige der Sprachfunktionen, die ich nach der Herausforderung verwendet habe, als nicht konkurrierend markiert wurden.
quelle
Java 7,
257254 BytesProbieren Sie es hier aus.
Erläuterung:
Beispiel Eingabe & Ausgabe:
quelle