Das Programm sollte einen String als Eingabe nehmen und die darin enthaltenen Konsonanten umkehren, wobei die Reihenfolge der Vokale eingehalten wird. Alle Buchstaben werden in Kleinbuchstaben geschrieben, sodass Sie sich keine Gedanken über die Schreibweise machen müssen. Beispiele folgen.
Input:
a test case
.
Die Konsonanten hier sindt,s,t,c,s
. Sie sollten in umgekehrter Reihenfolge kommen, das heißts,c,t,s,t
und eingefügt zurück in die Zeichenfolge in den gleichen Positionen , an denen die vorge Zeichen umgekehrt angeordnet waren:a sect sate
.Input:
well-done
. Ausgang:nedl-lowe
.- Input:
reverse the consonants
. Ausgang:setenne sne cohtosarvr
.
Dies ist der Code Golf, gewinnt die kürzeste Lösung.
Y
sollte als Vokal betrachtet werden, unabhängig davon, was es ist und nicht umgekehrt.
@#$%^&*(){}[]\|/<>~-_+=`
In der Eingabe können sowohl Zahlen als auch Satzzeichen, Anführungszeichen und andere Symbole ( ) enthalten sein.
-[...]
für die Netzhaut oder für reguläre Ausdrücke (.net) spezifisch oder handelt es sich um eine allgemeine reguläre Ausdrückfunktion, die ich bisher übersehen habe?[...&&[^...]]
.<[b..z] - [eiouy]>
oder<:Ll - [aeiouy]>
um Differenz zu setzenPython 2, 86 Bytes
Nimmt Eingaben als Zeichenfolge in Anführungszeichen. Durchläuft die Eingabe und ersetzt jeden Konsonanten durch
%s
ins
. Das Tupelc
speichert die gefundenen Konsonanten in umgekehrter Reihenfolge. Die Formatierung der Zeichenfolgen ersetzt dann das%s
s ins
durch die Konsonanten inc
.Vielen Dank an Sp3000 für die Konsonantenüberprüfung, die 4 Byte bei der Auflistung der Konsonanten eingespart hat.
quelle
Jelly ,
22 bis20 BytesProbieren Sie es online!
Wie es funktioniert
quelle
JavaScript ES6,
82818078 BytesDank an Martin und Leaky Nun jeweils ein Byte und an Neil 2 Byte!
Testen
quelle
/(?![aeiouy])[a-z]/g
/(?[_aeiouy])\w/g
funktionieren_
ist ein Symbol, das das OP beibehalten möchte.q.onchange=q.onkeydown=q.onkeyup=
nurq.oninput=
...Python 2, 106 Bytes
Erwartet Eingaben in
"quotes"
, was meiner Meinung nach erlaubt ist.quelle
Pyke, 18 Bytes
Probieren Sie es hier aus!
oder 16 Bytes mit der neuen Version:
(Ändern Sie dies, wenn für alle Zeichenfolgenausgaben und Zeichenfolgeneingaben Zeichenfolgen anstelle einer Liste zurückgegeben werden sollen.)
Probieren Sie es hier aus!
~c
enthält die Konsonanten:bcdfghjklmnpqrstvwxz
quelle
GNU sed, 73
Das Ergebnis enthält +1 für die
-r
Flagge, die an sed übergeben wurde.Ideone.
Wechselt wiederholt den ersten und den letzten Kleinbuchstabenkonsonanten und konvertiert sie in Großbuchstaben, bis keine Übereinstimmungen mehr vorhanden sind. Konvertieren Sie dann die gesamte Zeichenfolge wieder in Kleinbuchstaben.
quelle
J, 53 Bytes
Vielleicht ist das nicht der beste Weg, aber ich wollte ihn nutzen,
C.
da dies mit Permutationen gelöst werden kann.Verwendungszweck
Erläuterung
quelle
MATL,
182221 Bytes1 Byte gespart dank @Luis
Leider ist der längste Teil davon die Liste der Konsonanten (
2Y211Y2'y'hX-
).Probieren Sie es online!
Erläuterung
quelle
tt2Y211Y2'y'hX-m)P5M(
Perl 5 (58 + 4 = 62 Bytes)
+4 Strafe für das Laufen mit
-0777
Flag, wodurch Perl in den Slurp-Modus versetzt wird, um Zeilenumbrüche korrekt zu behandeln.Akzeptiert Eingaben über STDIN und druckt auf STDOUT.
Erläuterung
quelle
JavaScript (ES6), 72 Byte
Die Aufteilung auf
/([^\W\d_aeiouy])/
führt dazu, dass die Konsonanten in die ungeradzahligen Einträge im Array fallen. Es genügt dann, diese Einträge zu vertauschen, wobei der entsprechende Eintrag vom Ende des Arrays zurückzählt, und das Ergebnis zusammenzufügen.quelle
JavaScript (ES6), 57
70Bearbeiten Erstaunliche 20% Ersparnis dank @Neil
Spät zur Party, aber anscheinend haben alle Javascript-Leute etwas verpasst
Prüfung
quelle
c.pop()
.Perl 5,
926855 BytesGespeichert 37 Bytes dank @manatwork ‚s Hilfe. ;-)
Eine Übersetzung von @Lynn Python-Lösung zu Perl.
quelle
g
Kraft würde da helfen:@s=split//;
→@s=/./g;
undfor(@s){push@a,$_ if(/[^\Waeiou]/);}
→@a=/[^\Waeiou]/g;
. Ich meine,m//
mit demg
Modifikator wird ein Array aller Übereinstimmungen zurückgegeben.@b=@a=…
. Die auchfor
mit einer einzigen Anweisung in dem Block (in diesem Fall das;
nicht notwendig , nachdem es ist), könnten Sie es in Erklärung Modifikator und Ersatz der Trennzeichen verwandeln:print$_~~@b?pop@a:$_ for/./g
. (Yepp, sorry, habe das verpasst: es ist nicht erforderlich, den@s
Wert in einer Variablen zu speichern .)Pyth,
26252423 BytesTestsuite.
quelle
Julia, 53 Bytes
Dies nimmt ein Zeichenarray als Eingabe und kehrt seine Konsonanten an Ort und Stelle um. Probieren Sie es online!
Die Gutschrift für die Konsonantenprüfung in Kleinbuchstaben geht an @ Sp3000.
Wie es funktioniert
i=find(...,s)
liefert alle Indizes von s, für die das Prädikat ... true zurückgibt und speichert sie in der Variablen i .c->'}'>c∉"aeiouy"<"$c"
Führt drei Tests durch und gibt nur dann true zurück , wenn alle positiv sind.'}'>c
überprüft , ob das Zeichen c vor kommt { ."aeiou"
überprüft , ob die Zeichenfolge c nach kommt ein .c∉"aeiouy"
verifiziert, dass c kein Vokal ist.Schließlich
s[i]
liefert alle Konsonanten unds[flipud(i)]=s[i]
ordnet sie Positionen in s , dass entsprechen den umgekehrten Indizes in in i .quelle
∉
)?Java,
319305261188 BytesDank an @ Leaky Nun, die mir dabei geholfen haben :-)
Alt:
Inspiration von hier genommen ❤
Ungolfed
quelle
0
als Sonderzeichen verwenden (esnull
ist garantiert, dass es nicht in der Zeichenfolge enthalten ist) und Sie können es überprüfen, indem Sies[i]<1
(es gibt kein negatives Zeichen)char
dich in Stücke reißen. :)Ruby,
5350 Bytes-3 Bytes von @manatwork
Probieren Sie es hier aus
quelle
Python 2,
10398100 BytesPort meiner JavaScript-Antwort. Edit: 5 Bytes gespart dank @ Dennis ♦, von dem ich prompt zwei Fixziffern ausgeben musste.
quelle
R, 120 Bytes
Neue Antwort:
Nimmt eine Zeichenkette als x
Die alte Antwort unten (110 Bytes) war eine schlechte Form meinerseits, die die Konsonanten einfach umkehrte:
quelle
APLX, 31 Bytes
⎕a~'aeoiuy'
Kleinbuchstaben ohne Vokalet←⍞
speichern Zeicheneingabe als tc←(
...)∊
store Boolean „Konsonant?“ Wenn ct/⍨
(Konsonanten) aus t⌽
reverse extrahiert,(c/t)←
ersetzen Sie Konsonanten durch (die umgekehrten) undt
geben Sie die modifizierte Zeichenfolge zurückquelle
Python 2.7, 144 Bytes
Dies erstellt zuerst eine umgekehrte Liste der Konsonanten und fügt dann jedes der anderen Zeichen wieder in ihren ursprünglichen Index ein.
Nicht golfen:
https://repl.it/C30O
quelle
Mathematica 216 Bytes
quelle
Haskell,
157131 BytesAktualisieren
Durch die Lösung von @atlasologist wurde mir klar, dass ich nur eine Liste der Konsonanten anstelle von Paaren benötige (obwohl ich sie nicht umkehren muss, da ich die rechte Falte verwende).
Ungolfed
Alt
Erstellt eine Liste mit Konsonantenpaaren und durchläuft dann die Zeichenfolge, wobei jeder Konsonant anhand dieser Liste ersetzt wird.
Ein bisschen primitiv, aber ich wollte das herausfinden, ohne zuerst auf die Antworten zu schauen. :)
quelle
if ... then ... else
. b)f
ist besser als Infix-Operator geschrieben, sagen wir%
. c) keine Notwendigkeit für das innere Paar von()
in((r:q),s)
. d) Ersetzen""
durch_
in der 2. Zeile vonf
. Alles in allem (k
bleibt gleich):c%(r:q,s)|c`elem`k=(q,r:s)|1<2=(r:q,c:s);c%(_,s)=("",c:s);g s=snd$foldr(%)(filter(`elem`k)s,"")s
.s lang ,
1716 Bytes (nicht konkurrierend)1 Byte gespeichert, da für s-lang die letzte Argumentklammer nicht mehr erforderlich ist
Probieren Sie es online!
Ich habe angefangen, an einer Saitenmanipulations-Golfsprache zu arbeiten (das wollte ich jetzt schon eine Weile), und ich dachte, es wäre eine lustige Frage, damit zu arbeiten.
Erläuterung:
r
Kehrt die Zeichenfolge mit einem angegebenen Regex-Zeichenvergleich um (wenn kein Regex-Argument angegeben wird, wird standardmäßig Folgendes verwendet.
)[
beginnt das optionale reguläre Ausdrucksargument fürr
(?![aeiouy])\w
der reguläre Ausdruck, der mit einem beliebigen Konsonantenzeichen außer y übereinstimmt (leider erlaubt JavaScript keine Zeichenklassen-Subtraktion)]
Normalerweise endet optionales reguläres Argument fürr
, aber wir brauchen es nicht, da es die letzte Funktion und das letzte Argument istquelle
Matlab, 67 Zeichen
Für eine Eingabe
'this is a string of- stuff.'
produziert
s = ffit is a fgnirt os- ssuht.
si
ist der Index der Konsonanten in der Eingabezeichenfolge. Die abschließende Anweisung ersetzt diese Zeichen durch dieselben Zeichen, jedoch in umgekehrter Reihenfolge durch Indizierung.quelle
-
. Die Frage besagt, dass jede Interpunktion eine gültige Eingabe ist und ignoriert werden sollte. Außerdem müssen Sie entwederinput('')
zum Abrufen der Eingabe verwenden oder eine anonyme Funktion schreiben, da wir eine Variable wie diese nicht als Eingabe akzeptieren können.flip
, um die Zeichenfolge umzukehren.ans
, da dem eine Standardeingabe für die Matlab-Konsole zugewiesen ist?s=input('')
oder irgendwie in eine anonyme Funktion@(s)
PowerShell , 81 Byte
Probieren Sie es online!
Weniger golfen:
PowerShell , 88 Byte, -f
Probieren Sie es online!
quelle
q / kdb + 45 Bytes
Lösung:
Erläuterung:
Finden Sie die Indizes der Konsonanten und ersetzen Sie sie durch die umgekehrten Konsonanten:
Anmerkungen:
Ich hatte 3 Möglichkeiten, die Konsonantenliste zu erstellen, die in der Lösung ist etwas besser als die Alternativen:
"bcdfghjklmnpqrstvwxz"
für 22 Zeichen (am langweiligsten).Q.a _/0 3 6 11 16 19
für 21 Zeichen (irgendwie cool, lassen Sie jeden Index fallen).Q.a except"aeiouy"
für 19 Zeichen (zweitlangweiligste)quelle
Jq 1,5 ,
289263 BytesErläuterung
Probelauf
Probieren Sie es online aus
quelle
Java 8, 157 Bytes
Probieren Sie es online!
Hinweis: Gibt Compiler-Warnungen an stderr aus.
Erläuterung:
Ich werde nicht lügen, mein einziges Ziel war es, diese Antwort zu schlagen
quelle
APL (Dyalog Extended) , 22 Byte
Probieren Sie es online!
quelle