Herausforderung
Die Herausforderung besteht darin, eine bestimmte Zeichenfolge mit den unten angegebenen Regeln zu verschlüsseln. Die Zeichenfolge enthält nur Kleinbuchstaben , Ziffern und / oder Leerzeichen .
Äquivalent eines Zeichens
Zunächst müssten Sie wissen, wie Sie das "Äquivalent" der einzelnen Zeichen finden.
Wenn der Charakter ein Konsonant ist, ist dies der Weg, um seine Entsprechung zu finden:
1) List all the consonants in alphabetical order
b c d f g h j k l m n p q r s t v w x y z
2) Get the position of the consonant you are finding the equivalent of.
3) The equivalent is the consonant at that position when starting from the end.
Beispiel: 'h' und 't' sind Äquivalente voneinander, weil 'h' und 't' sich vom Anfang bzw. Ende an an der sechsten Position befinden.
Das gleiche Verfahren wird angewendet, um das Äquivalent von Vokalen / Ziffern zu finden. Sie listen alle Vokale oder Ziffern (beginnend mit 0) der Reihe nach auf und finden das Äquivalent.
Nachstehend finden Sie eine Liste der Entsprechungen aller Zeichen:
b <-> z
c <-> y
d <-> x
f <-> w
g <-> v
h <-> t
j <-> s
k <-> r
l <-> q
m <-> p
n <-> n
a <-> u
e <-> o
i <-> i
0 <-> 9
1 <-> 8
2 <-> 7
3 <-> 6
4 <-> 5
Verschlüsselungsregeln
1) Sie bewegen sich von links nach rechts.
2) Wenn das Zeichen ein Konsonant / eine Ziffer ist, wird sein Äquivalent genommen, und wenn es ein Leerzeichen ist, wird ein Leerzeichen genommen.
3) Wenn der Charakter ein Vokal ist, nimmst du das Äquivalent und bewegst dich in die entgegengesetzte Richtung. Wenn Sie sich zum Beispiel nach rechts bewegen und auf einen Vokal stoßen, verschlüsseln Sie dieses Zeichen. Wechseln Sie dann zum am weitesten rechts befindlichen unverschlüsselten Zeichen und beginnen Sie mit der Verschlüsselung in der linken Richtung und umgekehrt.
4) Sie sollten einen Charakter nicht zweimal an derselben Position betrachten. Die Schritte sollten befolgt werden, bis alle Zeichen in der Eingabe abgedeckt sind.
5) Die Gesamtzahl der Zeichen in der Eingabe (einschließlich Leerzeichen) sollte der Gesamtzahl der Zeichen in der Ausgabe entsprechen.
Bitte beachten Sie, dass die verschlüsselten Zeichen in der Ausgabe in der Reihenfolge angezeigt werden, in der sie verschlüsselt wurden.
Lassen Sie mich jetzt eine Zeichenfolge für Sie verschlüsseln.
String = "tre d1go3t is"
Moving left to right
"t" -> "h"
"r" -> "k"
"e" -> "o"
Vowel encountered. Now moving right to left.
"s" -> "j"
"i" -> "i"
Vowel encountered. Now moving left to right.
" " -> " "
"d" -> "x"
"1" -> "8"
"g" -> "v"
"o" -> "e"
Vowel encountered. Now moving right to left.
" " -> " "
"t" -> "h"
"3" -> "6"
Output -> "hkoji x8ve h6"
Beispiele
"flyspy" -> "wqcjmc"
"hero" -> "toek"
"heroic" -> "toyike"
"ae" -> "uo"
"abe" -> "uoz"
"the space" -> "htoo jmuy"
"a d1g13t" -> "uh68v8x "
"we xi12" -> "fo78i d"
"this is a code" -> "htioj ixej uy "
Sie können auch Großbuchstaben anstelle von Kleinbuchstaben verwenden.
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code!
quelle
Antworten:
JavaScript (Node.js) ,
173...166156...124123 Bytes-28 byte Danke Arnauld
Probieren Sie es online!
In der ersten Iteration
String
wird auf geändertArray
, und nachfolgende Iterationen werden weiterhin verwendetArray
. Voilà!Ursprünglicher Ansatz (166 Bytes):
quelle
&
hat bei einigen zahlen nicht funktioniert aber&&
funktioniert. Vielen Dank.q=="0"|+q
ist eigentlich 1 Byte kürzer alsq>" "&&1/q
.05AB1E , 22 Bytes
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
žhžMžN)UvćXJXíJ‡D?žMsåiR
war das, was ich für eine Verbesserung hielt, aber ich kann nichtXJXiJ
genug reduzieren .DJsíJ
der auch nicht sehr effektiv war.C 196 Bytes
Probieren Sie es online!
quelle
J , 132 Bytes
Probieren Sie es online!
Diesmal ein ausführliches, explizites Verb.
Erläuterung:
c=.(u:97+i.26)
macht eine Liste azv=.'aeiou'
macht eine Liste von Vokalen-.
Entfernt die Vokale aus der Liste der Buchstabend=.u:48+i.10
erstellt eine Liste mit Zifferng=.;"0|.
Ein Hilfsverb zum Erstellen einer Liste von Ersetzungssymbolpaaren in Kästchena=.''
eine Liste zum Speichern des Ergebnisseswhile.*#y do.a=.a,{.y rplc(g c),(g d),g v
solange die Länge der Liste> 0 ist, nimm ein Symbol, ersetze es und hänge es an das Ergebnis any=.|.^:({:a e.v)}.y
Lassen Sie ein Symbol am Anfang der Liste fallen. Wenn das Symbol ein Vokal ist, kehren Sie die Liste umend.
Beendet diewhile
Schleifea
gibt das Ergebnis zurückquelle
Sauber ,
221206198190186178 BytesProbieren Sie es online!
quelle
Netzhaut , 78 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Tauschen Sie jedes Zeichen mit seinem Äquivalent aus.
Wiederholen, solange ein Vokal übrig bleibt.
Gib den Text bis zum Vokal aus.
Löschen Sie den Text bis zum Vokal.
Kehren Sie den restlichen Text um. Wenn keine Vokale mehr vorhanden sind, wird dies implizit ausgegeben. Für die Testfälle gibt der Header jedoch den Text am Ende jeder Zeile aus.
quelle
Stax , 24 Bytes
Starte es
Hier ist die ASCII-Darstellung des gleichen Programms.
Es übersetzt zuerst jede Zeichenklasse und beginnt dann eine while-Schleife. In der Schleife wird das nächste Zeichen ausgegeben und der Rest der Zeichenfolge wird bedingt umgekehrt, wenn ein Vokal angetroffen wird.
quelle