Die Sprache: Opposition
Eine lustige Sprache zum Sprechen wird erstellt, indem auf jedes Wort der folgende Vorgang angewendet wird:
- Setzen Sie
op
nach jedem Konsonanten. SoCode
wird esCopodope
.
Ja das ist es. Für den Zweck dieser Herausforderung y
ist immer ein Konsonant.
Die Herausforderung: Entgegensetzung
Geben Sie bei einem gegenteiligen Wort das ursprüngliche Wort zurück. Die Eingabe enthält nur Buchstaben. Der erste Buchstabe kann groß geschrieben werden. Das ursprüngliche Wort wird niemals leer sein und wird immer einen Vokal enthalten.
Testfälle:
Oppified -> Original
a a
I I
itop it
opop op
Opop Op
popopop pop
Copopop Cop
opopopop opop
Kopicopkop Kick
Asopia Asia
soptopopop stop
hopoopopsop hoops
hopoopopedop hooped
ooooohop oooooh
aaaopopaaa aaaopaaa
Popopopsopicoplope Popsicle
gopaloplopopopinopgop galloping
aopopbopopopcopopop aopbopcop
code-golf
string
natural-language
mbomb007
quelle
quelle
op
, sodass eine Antwort in der Art vonreplace(/(.)op/, '\1')
keinen von ihnen fehlschlägt. Ich schlage vor, dass Sie ein Wort wiehoop
oderlooped
zu den Testfällen hinzufügen .Antworten:
V ,
12, 5 BytesProbieren Sie es online!
7 Bytes gespart dank der Erkenntnis von @ Xnor, dass wir nicht nach Vokalen suchen müssen, da die Eingabe immer entgegengesetzt werden muss.
quelle
...op
Netzhaut , 9 Bytes
Probieren Sie es online!
Anstatt zu überprüfen, ob das vorangegangene Zeichen ein Konsonant ist, stellen wir nur sicher, dass das aktuelle Zeichen
op
weder dem Anfang der Zeichenfolge noch der vorherigen Übereinstimmung benachbart ist. Der einzige Fall, in dem wir mit einem falschen übereinstimmen könnten,op
ist, wenn die ursprüngliche Zeichenfolge einenop
(resultierendenopop
) enthält. In diesem Fall wird nur der ersteop
anstelle des zweiten entfernt, und das Ergebnis ist dasselbe.quelle
loop
?loop
ist keine gültige Eingabe, da Sie sie nicht erhalten können, wenn Sie ein anderes Wort ablehnen.lopoop
(die entgegengesetzte Version vonloop
) ist gültig und wird nicht entgegensetztloop
.loop
istlopoopop
.Python , 42 Bytes
Probieren Sie es online!
Wenn ich mich nicht irre, können Sie einfach alle
?op
durch ersetzen,?
ohne sich um Vokale zu kümmern. Wenn die ursprüngliche Zeichenfolge enthältop
, ist sie dagegenopop
und die Ersetzung gibt sie anop
und nicht weiter zurück. Dies liegt daran, dass sich die Musterübereinstimmungen für?op
nicht überlappen können, sodass nur einesop
entfernt wird.Eine Nicht-Regex-Lösung ist 5 Byte länger.
Python , 47 Bytes
Probieren Sie es online aus
quelle
re
nachdem Sie es referenziert haben‽Perl 5 , 10 + 1 = 11 Bytes
Probieren Sie es online!
Laufen Sie mit
-p
(1 Byte Strafe); Golfsprachen führen möglicherweise implizite E / A-Vorgänge automatisch aus, aber Perl benötigt eine Option dafür.Als ich die Antwort von @ xnor sah , wurde mir klar, dass es mit einer Perl-spezifischen Regex-Funktion verbessert werden könnte.
s/a\Kb/c/g
ist äquivalent zus/ab/ac/g
(mit anderen Worten, dass///
ersetzt nur die Dinge nach dem ersten\K
). So sieht es in Perl aus.quelle
Retina ,
158 BytesProbieren Sie es online!
-7 Bytes dank Kevin Cruijssen
quelle
[^aeiou]
mit.
. Siehe @xnors Erklärung in seiner Python-Antwort .Los ,
103 bis92 BytesMuss ... kompilieren ... eingebaute Funktionen haben seltsame Namen. : P
Probieren Sie es online!
quelle
Haskell (
936261 Bytes)danke an @nimi vorschläge in kommentaren!
quelle
v
undo
nur einmal, können Sie es inline.notElem
ist kürzer alsnot(...elem...)
. Sie können die&&
in einer Wache mit einem ersetzen,
. Der letzte Fall füra
kann als geschrieben werdena x=x
. Keine Notwendigkeit für()
inx:(a r)
.=="op"
kann durch einen wörtlichen Mustervergleich ersetzt werden:a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
x
und weglassen"
.PHP , 36 Bytes
Probieren Sie es online!
quelle
preg_replace
zu beheben.$argn
ist eine reservierte Variable, die verfügbar ist, wenn PHP mit der-R
Option über die Befehlszeile ausgeführt wirdJapt , 9 Bytes
Probieren Sie es online aus
quelle
JavaScript (ES6), 35 Byte
Fügen Sie
f=
am Anfang und rufen Sie wief(arg)
.Ich bin überrascht, dass noch niemand eine JavaScript-Lösung gepostet hat.
Testschnipsel
quelle
C (gcc) 83 Bytes
Probieren Sie es online!
quelle
/// , 18 Bytes
Probieren Sie es online!
Beachten Sie, dass dieses Snippet durch
op
a ersetzt werden.
soll. Später wird jedoch eine Ersetzung definiert, beiop
der die Zeichenfolge wiederhergestellt wird. Diese zweite Anweisung würdeop
durch ein ersetzt werden.
(und somit ein.
in das Endergebnis einfügen ), also habe ich ein\
zwischeno
und verwendetp
, um das Muster zu brechen.quelle
APL (Dyalog) , 13 Bytes
Probieren Sie es online!
Einfach PCRE R eplace jedes Zeichen gefolgt von „op“ mit dem Charakter selbst.
quelle
Kristall, 39 Bytes
Wie es funktioniert
Es wird einfach nach jedem Konsonanten gesucht, gefolgt von der Sequenz
op
. Wenn ja, ersetzt diese Sequenz nur mit den Konsonanten gefunden vor:([^aeiou])
.Probieren Sie es online aus
quelle
Java 8,
3626 Bytes-10 Bytes durch Ersetzen
[^aeiou]
durch.
, dank der Erklärung von @xnor in seiner Python-Antwort .Probieren Sie es hier aus.
quelle
Ruby ,
342722 + 1 = 23 Bytes-4 Bytes dank RJHunter.
+1 Byte für das
-p
Flag.Probieren Sie es online!
quelle
-p
Option kostet ein Byte, ermöglicht es Ihrem Skript jedoch, direkt damit zu beginnengsub
.sed, 22 bytes
Liest von STDIN bis EOF und gibt den gegenteiligen String aus.
Verwendet die gleiche Längenreduktionstechnik aus der Python-Antwort von @ xnor
quelle
R 29 Bytes
Probieren Sie es online!
Ähnlich wie bei den meisten anderen Lösungen wird hier das Zeichen gefolgt von op erfasst und durch das Zeichen selbst ersetzt.
quelle