Das Problem mit der Caesar-Chiffre ist, dass die daraus resultierenden Wörter oft unaussprechlich sind. Das Problem mit Pig Latin ist, dass es einfach zu dekodieren ist. Warum nicht kombinieren?
Eingang
Ein Wort aus den 26 englischen Buchstaben.
Ausgabe
Ändern Sie zunächst jeden Konsonanten im Wort zum nächsten Konsonanten im Alphabet. Also geht b nach c, d geht nach f und z geht nach b. Ändern Sie dann jeden Vokal zum nächsten Vokal im Alphabet (u geht zu a). Zuletzt, nur wenn der erste Buchstabe des Wortes ein Konsonant ist, verschieben Sie diesen Buchstaben an das Ende des Wortes und fügen Sie "ay" an das Ende des Wortes hinzu.
Beispiele:
cat -> evday
dog -> uhfay
eel -> iim
- Das ist Code-Golf , also gewinnt der kürzeste Code.
- Fall spielt keine Rolle.
- Verwendete Vokale sind A, E, I, O und U
z → bay
the → jivay
? (Das heißt, wenn das Wort mit mehreren Konsonanten beginnt, verschieben wir nur einen von ihnen?)Antworten:
Stax , 20 Bytes
Führen Sie es aus und debuggen Sie es
Erläuterung
Ich ging einige Iterationen durch und brachte es schließlich auf 20. Meine ursprüngliche Lösung war 53 Bytes.
quelle
Ruby ,
96 bis69 BytesProbieren Sie es online!
Unterhaltsame Tatsache des Tages: tr () entspricht den Zeichenfolgen von rechts nach links. Ich habe immer angenommen, dass es von links nach rechts ist.
quelle
R ,
8685 BytesEinfacher Weg.
chartr
hat die charmante und nützliche Eigenschaft, dass Buchstabenbereiche angegeben werden können , wodurch einige Bytes gespart werden.-1 Byte durch Stehlen der Übersetzungsstrings von @ GBs Ruby-Lösung - stimmen Sie zu!
Probieren Sie es online!
quelle
Java (JDK) , 167 Byte
Probieren Sie es online!
Credits
quelle
05AB1E , 21 Bytes
Probieren Sie es online!
Erläuterung
quelle
Node.js 10.9.0 ,
121116 BytesErwartet die Eingabezeichenfolge in Kleinbuchstaben.
Probieren Sie es online!
Vokale identifizieren
Und tut:
Kommentiert
quelle
Python 2 ,
1531211109991 BytesProbieren Sie es online!
8 Bytes wurden aufgrund eines Vorschlags von Matthew Jensen abgeschabt
quelle
lambda s:[s[1:]+s[0]+"ux",s][s[0]in'aeiou'].translate(8*".ecdfighjoklmnpuqrstvawxyzb.....")
translate
in Python 2 ...T-SQL, 169 Bytes
Die Eingabe erfolgt gemäß unseren E / A-Standards über eine bereits vorhandene Tabelle .
Führt zuerst die Zeichenersetzung mit der Funktion ( neu in SQL 2017 )
TRANSLATE
durch und überprüft dann das erste Zeichen.Ärgerlich lange vor allem aufgrund der SQL-Keyword-Länge.
quelle
Shell-Skript, 70 Byte
Probieren Sie es online!
quelle
Haskell ,
10297 BytesProbieren Sie es online!
quelle
Retina 0,8,2 , 50 Bytes
Probieren Sie es online! Link enthält Testfälle. Ähnliches Vorgehen bei der R-Antwort. Erläuterung:
o
bezieht sich auf die andere Menge, dhaei\oub-df-hj-np-tv-zb
die erweitert sich zuaeioubcdfghjlkmnpqrstvwxyzb
, alsouo
erweitert sich zuuaeioubcdfghjlkmnpqrstvwxyzb
. Dies führt zu folgender Transliteration:Die zweiten
u
undb
werden ignoriert, da sie niemals abgeglichen werden können, so dass dies die gewünschte Chiffre liefert. (Beachten Sie, dass Sie in Retina 1 natürlichv
stattaei\ou
für eine 5-Byte-Speicherung verwenden können.)Wenn der erste Buchstabe kein Vokal ist, drehen Sie ihn bis zum Ende und setzen Sie das Suffix
ay
.quelle
Gelee , 24 Bytes
Probieren Sie es online!
Dank Jonathan Allan 1 Byte gespart (verwenden Sie die Zwei-Zeichen-Syntax anstelle von Anführungszeichen).
quelle
⁾ay
für ein Byte. Das©
könnte nach dem gehen,e
da das ist, was Sie speichern. Ich habeØẹØḄ,żṙ€¥1ẎyṙḢe©ØḄƊ®⁾ayẋ
.> <> ,
9492 BytesProbieren Sie es online!
Bearbeiten: 2 Bytes durch Eingabe von Mod 97 anstelle von 32 Bytes gespeichert, so dass das Wörterbuch am Anfang der Zeile beginnen kann. Vorherige Version:
quelle
Rot , 149 Bytes
Probieren Sie es online!
Wie (fast) immer der längste Eintrag
quelle
F # (Mono) , 197 Bytes
Probieren Sie es online!
quelle
Perl 5 , 56 Bytes
Probieren Sie es online!
quelle
-
s zwischenc
undd
oderg
undh
?<s>58</s> 56 bytes
in den Header und viele Leute fügen ein "Edit: 2 Bytes dank @Neil gespeichert" hinzu. oder solche, wenn ihnen in einem Kommentar geholfen wird.Dyalog APL (SBCS), 57 Bytes
Probieren Sie es online!
Nimmt Eingaben nur in Großbuchstaben vor! (Weil
⎕A
ist Großbuchstaben)⎕A{(⍺~⍵)⍵}'AEIOU'
: Vektor von Konsonanten und Vokalen(⊂⍵⍳⍨∊a)⌷∊1⌽¨a
: Verwendet Indizes für jeden Buchstaben des Wortes im normalen Alphabet (⊂⍵⍳⍨∊a
), um (⌷
) in die Chiffre zu indizieren∊1⌽¨a
.('AY',⍨1⌽⊢)⍣(∊/⊃¨⍵a)
: Verschiebt den ersten Buchstaben an das Ende und fügt 'AY' hinzu, wenn der erste Buchstabe ein Konsonant ist.Danke für die coole Herausforderung!
quelle
JavaScript (SpiderMonkey) , 107 Byte
Probieren Sie es online!
Erwartet Eingaben in Kleinbuchstaben.
Ersetzt jedes Zeichen der Zeichenfolge durch ein Zeichen nach dem Zeichen in der Zeichenfolge
'aeiouabcdfghjklmnpqrstvwxyzb'
und füllt dann alles mit einem Anfangskonsonanten.quelle
PHP, 112 Bytes
oder
Nehmen Sie die Eingabe in Kleinbuchstaben an. Laufen Sie als Pipe mit
-nR
oder versuchen Sie es online .Sie können auch
strtr($s,uzbcadfgehjklminpqrsotvwxy,range(a,z))
anstelle von verwendenstrtr($s,range(a,z),ecdfighjoklmnpuqrstvawxyzb)
.quelle