In dieser Herausforderung müssen Sie eine Zeichenfolge verwenden, die dem regulären Ausdruck entspricht ^[a-zA-Z]+$
oder was auch immer sinnvoll ist (Sie müssen keine Groß- oder Kleinbuchstaben berücksichtigen, wenn Sie möchten) (Sie können davon ausgehen, dass die Zeichenfolge lang genug ist und für alle die richtige Struktur aufweist Operationen) und geben eine weitere Zeichenfolge aus, die ähnlich wie das Wort am Ende eines kürzlich von POTUS ( "Despite the constant negative press covfefe"
) veröffentlichten dadaistischen Tweets erzeugt wurde .
So verstecken Sie einen String:
Holen Sie sich zuerst die erste Klanggruppe (zusammengesetzte Terminologie).
Wie machst Du das? Gut:
Finde den ersten Vokal (
y
ist auch ein Vokal)v creation
Finden Sie danach den ersten Konsonanten
v creation
Entfernen Sie den Rest der Zeichenfolge
creat
Das ist deine erste Soundgruppe.
Nächster Schritt:
Holen Sie sich den letzten Konsonanten der Soundgruppe
t
und ersetzen Sie es durch die stimmhafte oder stimmlose Version. Suchen Sie dazu den Buchstaben in dieser Tabelle. Ersetzen Sie durch den angegebenen Buchstaben (der möglicherweise der gleiche Buchstabe ist).
b: p
c: g
d: t
f: v
g: k
h: h
j: j
k: g
l: l
m: m
n: n
p: b
q: q
r: r
s: z
t: d
v: f
w: w
x: x
z: s
also bekommen wir
d
Nehmen Sie dann den nächsten Vokal nach diesem Konsonanten. Sie können davon ausgehen, dass sich dieser Konsonant nicht am Ende der Zeichenfolge befindet. Verbinde diese beiden und wiederhole es dann zweimal:
didi
Verketten Sie dies mit der ersten Klanggruppe:
creatdidi
Sie haben es geschafft: Die Zeichenfolge ist verdeckt, und Sie können sie jetzt ausgeben.
Testfälle:
coverage: covfefe
example: exxaxa
programming: progkaka (the a is the first vowel after the g, even though it is not immediately after)
code: codtete
president: preszizi
Dies ist Code-Golf , also machen Sie bitte Ihr Programm so kurz wie möglich!
Antworten:
Jelly ,
5857 BytesEin vollständiges Programm, das eine Liste von Kleinbuchstaben akzeptiert und das Ergebnis druckt.
Probieren Sie es online!
Wie?
quelle
JavaScript (ES6),
107103 Byte4 Bytes gespart dank GOTO 0
Testfälle
Code-Snippet anzeigen
quelle
s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)
Jelly ,
4539 BytesProbieren Sie es online!
Wie es funktioniert
quelle
CJam ,
59585756 BytesProbieren Sie es online!
Erläuterung
quelle
C
219213206179175 BytesProbieren Sie es online!
quelle
#define
s und der Funktion durch Präprozessor-Flags (-D...
) entfernt werden.Perl 5 ,
8172 BytesProbieren Sie es online!
quelle
\K
, aber Sie haben es 9 Bytes besser gemacht als ich. Gute Antwort!PHP, 121 Bytes
Probieren Sie es online!
quelle
echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;
$argn
in etwas kürzeres umbenennen ?$a
Zum Beispiel - das sind -3 BytesPyth, 54 Bytes
Dies definiert eine Funktion
y
, die einen String erwartet. Probieren Sie es online aus: Test Suitequelle
Python 3,
155139 Bytes16 Bytes dank @ovs entfernt
1 Byte dank Gábor Fekete entfernt
quelle
'aeiouy]'
, die möglicherweise einige Bytes einspart. Sie können auch einige Zeichen aus den Ersetzungszeichenfolgen entfernen, da dieselben vorhanden sind.IndexError
und beim Speichernaeiouy])
keine Bytes gespeichert werden.s='aeiouy])'
, könntest du das gebrauchenb,c,v=re.findall('(.*?[%s([^%s.*?([%s'%(s,s,s)
. Es ist nicht kürzer, könnte aber zu einem Weg führen, es insgesamt zu verkürzen.k='aeiouy])'
undf'(.*?[{k}([^{k}.*?([{k}'
Java 8,
243236222 BytesVerwendet
.replaceAll
reguläre Ausdrücke mit Erfassungsgruppen, um die nicht gewünschten Teile herauszufiltern.Erläuterung:
Probieren Sie es hier aus.
quelle
Haskell ,
143141138137136 BytesProbieren Sie es online!
quelle
nx
mit einem Buchstaben werden 2 Byte gespart.z
außerhalb von deklarierenf
und zu Wachen wechseln, werdenlet
zwei weitere Bytes gespeichert: Probieren Sie es online aus!(s,v)<-break z i,(m,c:x)<-span z v
zu(s,(m,c:x))<-span z<$>break z i
.let
, danke!z
ausf
?Python,
261260 BytesEine nicht reguläre, nicht esoterische Lösung. Es dauerte ungefähr 20 Minuten, und eine Stunde mehr, um Golf zu spielen.
Es hat wahrscheinlich mehr Listenverständnis als die gesamte Python-Standardbibliothek, vor allem, weil ich Regex nicht kenne ...
Probieren Sie es online! (Mit Testfällen)
quelle
Ruby , 90 Bytes
Probieren Sie es online!
Ungolfing es ein bisschen, wir haben etwas Äquivalent zu:
quelle
Python 2,
251246245239237234229211 BytesErste Einreichung hier.
Probieren Sie es online!
Mitgolfer, die mir geholfen haben:
quelle
not n
umn<1
für 2 Bytes, da Sie wissen ,n
wird nie negativ sein. Sie können auch auf ändernn==3
,n>2
da Sie wissen,n
dass niemals größer als sein wird3
. Sie können auch die Verwendung Python Tricks für conditionals den ersten und vorletzten noch weiter zu verkürzen:n=[n,1][i in w and n<1]
;r+=[0,r][n<2]
r,v,c=('',)*3
zur=v=c=''
, da Strings unveränderlich sind. Ich habe eine Reihe anderer cleverer Tricks ausprobiert, aber frustrierend ist, dass sie genauso lang sind. Es kann sich auch lohnen, einen Online-Test durchzuführen! Link zu deinem BeitragRuby ,
175141110 BytesProbieren Sie es online!
tr
ArgumentationsvorschlägeUngolfed
quelle
Hash[*"bpcgdtfvgkkgpbsztdvfzs".chars]
c=[^aeiou]
ist sie kürzer. Haben die erste Interpolation für jede Variable zuzuordnen es gleichzeitig -2 Bytes/^(.*?${v='[aeiou]'}+(#{c='[^aeiou]})).../
. Schließlich$2.tr("b-z","pgtevkhijgl-obqrzdufwxys")
anstelle der Hash-Lösung.\g<n>
) anstelle von Interpolation, plus weitere 14 unter Verwendung von @ ValueInk der[^aeiou]
Vorschlag:s=~/^(.*?([aeiouy])+([^aeiou]))\g<3>*(\g<2>)/
.programming
->progkaka
, den ich nicht ganz herausfinden kann.\g<3>
aktualisiert der Unterausdruck-Aufruf den Wert von $ 3, sodass wir diese Verknüpfung nicht verwenden können.Crystal,
203194187186184163 Bytesquelle
c=v
o+=<...>
MATLAB / Octave -
159158 BytesIm Folgenden wird davon ausgegangen, dass die Eingabezeichenfolge in Kleinbuchstaben geschrieben ist.
Erläuterung
a = input('','s');
: Ruft einen String von STDIN ab und speichert ihn in der Variablena
.m=ismember(a,'aeiouy');
: Gibt ein boolesches Array zurück, das dieselbe Größe wie die Zeichenfolge hat, diea
bestimmt, wo sich die Vokale befindens='pgt vkh jglmn bqrzd fwx s';
Diecovfefe
Abbildung von Konsonanten als Zeichenfolge. Diese Zeichenfolge ist 25 Zeichen lang und lässt die Vokale weg. Die erste Position, an der sich der Vokal'a'
befinden soll, wird entfernt, während die anderen Positionen, an denen sich die Vokale befinden, mit einem Leerzeichen versehen werden. Wenn wir den ersten Konsonanten nach dem Vokal bestimmen, konvertieren wir den Konsonanten in eine Position, um auf ein Zeichen in dieser Zeichenfolge zuzugreifen und die erste Komponente des konvertierten Wortes zu bestimmen.m(1:find(m,1))=1
: Setzt die erste Position des Booleschen Arrays auf die Position, an der wir den ersten Vokal als alle Vokale gefunden haben. Dies wird so sein, dass wir diese Zeichen ignorieren, wenn wir nach dem nächsten Konsonanten suchen, der auf den ersten Vokal folgt.i=find(~m,1);
: Findet die erste Stelle der Zeichenkette, die nach dem ersten Vokal ein Konsonant ist.f=a(1:i)
: Entfernt die Zeichenkette nach dem ersten Konsonanten, der auf den Vokal folgt. Wir probieren einfach von der ersten Position der Zeichenkette bis zu diesem Punkt.d=s(f(end)-97);
: Nehmen Sie das letzte Zeichen der verbleibenden Zeichenfolge und finden Sie, wo wir aus der Nachschlagezeichenfolge abtasten müssen, und erhalten Sie dieses Zeichen. Das Subtrahieren eines Zeichens und einer Zahl in MATLAB oder Octave verschmilzt zu einer Ganzzahl, indem das Zeichen in seinen ASCII-Code konvertiert wird. In diesem Fall subtrahieren wir das letzte Zeichen um das Zeichen am Anfang des Alphabets, um die Position relativ zum Anfang zu erhalten. Anstatt jedoch umb
(98) zu subtrahieren, subtrahieren wir um,a
während MATLAB mit der Indizierung um 1 anstelle von 0 beginnt.'a'
Der ASCII-Code von 0 ist 97.m(1:i)=0;
: Nimmt die Boolesche Maske und setzt alle Zeichen in der Eingabezeichenfolge von der ersten Position bis zum ersten Konsonanten nach einem Vokal auf false.v=a(find(m,1));
: Findet den nächsten Vokal, der auf den ersten Konsonanten folgt, aus der Eingabezeichenfolge.[f d v d v]
:covfefe
Geben Sie unseren ied-String aus.Beispielläufe
Probieren Sie es online!
http://www.tutorialspoint.com/execute_octave_online.php?PID=0Bw_CjBb95KQMdjROYVR0aFNrWXM
Wenn Sie oben auf die Schaltfläche Ausführen klicken, warten Sie einen Moment und geben Sie dann die gewünschte Zeichenfolge ein. Geben Sie die Zeichenfolge langsam ein, da es bei der Texteingabe zu Verzögerungen zu kommen scheint.
quelle
Clojure,
182156 ZeichenWie es funktioniert
Liefert eine Folge von
((\p \r) (\e) (\s) (\i) (\d) (\e) (\n \t))
Destructures die seq in
s=(\p \r)
,m=(\e)
,c=\s
,n=\i
.Oder für „Beispiel“ es ist
s=[]
,m=(\e)
,c=\x
,n=\a
.Gibt die Ausgabezeichenfolge zurück, indem die Teile zusammengefügt und miteinander verknüpft werden.
Und dann habe ich so viel Leerzeichen wie möglich entfernt, während ich es noch kompiliert habe.
De-uglified:
quelle
c
zum Beispiel einfach die Hauptfunktion aufrufen . (Wir erlauben auch anonyme Funktionen, die in vielen Sprachen kürzer sind. Ich bin mir nicht sicher, ob sie in Clojure sind.) Ich sehe jedoch, dass Sie diese Verbesserung im Inneren Ihres Codes bereits vorgenommen haben, so dass hier wahrscheinlich nicht viel geändert werden muss.R, 341 Zeichen
Horrendous R Versuch, warum sind die Saiten so hart
Lesbare Version:
quelle
BlitzMax, 190 Bytes
Nimmt ein Wort aus stdin und gibt das Ergebnis in stdout aus. Es wird angenommen, dass das Eingabewort klein geschrieben ist und mindestens einen Vokal gefolgt von einem Konsonanten enthält.
Eine lesbarere Version des Programms mit Formatierung und Variablendeklarationen:
Wie es funktioniert:
BlitzMax verfügt über keine eingebaute Regex-Funktionalität oder ähnliches. Daher wird eine Schleife verwendet, um die Zeichen des Eingabeworts zu durchlaufen, bis ein Vokal gefolgt von einer Kette von mindestens einem Konsonanten gefunden wird. Die Variable c speichert die Position des letzten dieser Konsonanten gegenüber der des Vokals. Die Schleife prüft weiterhin, ob sich nach der Kette ein weiterer Vokal befindet. In diesem Fall wird v entsprechend aktualisiert. Dann wird der Konsonant bei c in der Zeichenfolge "bpdtfvgkcgsz" nachgeschlagen, die als Ersetzungstabelle fungiert. Wenn der Konsonant in der Tabelle an einer beliebigen Position gefunden wird, wird diese Position mit 1 XOR-verknüpft und das Zeichen an der resultierenden Position wird als Ersatz verwendet. Die XOR-Operation wandelt 0 in 1, 2 in 3, 4 in 5 usw. und umgekehrt um, so dass b mit p, d mit t usw. vertauscht wird. Schließlich ist die ursprüngliche Zeichenfolge bis c,
Beispielergebnisse:
quelle
Perl, 71 Bytes
Laufen Sie auch mit
perl -pe
. Ein paar Bytes weniger als die vorherige Perl-Lösung. Zugegeben, ich habe mich auch von dort inspirieren lassen.quelle
05AB1E ,
10110488 Bytes-16 Bytes dank Okx
Ich hoffe irgendwie, dass dies effizienter gemacht werden kann.
Probieren Sie es online!
Erläuterung
quelle
"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"
mit.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•
15 Byte speichernžOÃćIsk
mitžOÃ0èk
speichern ein weiteres Byte.žOÃнk>[DIs£¤žPså#\>]©s[DIsèDžOså#\>]s\.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`®θkèìDJ
Probieren Sie es online. Ich habe mich hauptsächlich von allen Swaps und Triple-Swaps befreit, indem ich stattdessen eine Variable verwendete. Und0è
kann seinн
, und ich habe ersetzt2׫
mitDJ
den gesamten Stapel miteinander zu verbinden. PS: Ich habe auch eine 55-Byte-05AB1E-Antwort mit einer anderen Technik gepostet. (Dazu gehört auch ein Link zum besseren Verständnis der Komprimierung in 05AB1E.: D)Kristall, 130 Bytes
Wie es funktioniert
Speichern Sie einen regulären Ausdruck für die Suche nach dem ersten Vokal für
c
.Teilen Sie das erste Argument in drei Teile auf {"", String bis ein Zeichen vor dem ersten Konsonanten nach dem ersten Vokal, Rest des Strings} und speichern Sie jedes der Elemente in x, y und z.
Holen Sie sich das erste Zeichen, den entsprechenden Konsonanten.
Holen Sie sich den Index des Konsonanten in der linken Zeichenfolge oder
nil
.Wenn dies
i
nichtnil
der Fall ist , verwenden Sie diesen Index für die zweite Zeichenfolge (eine Art Golf-Hash).Wenn
i
janil
, verwenden Sie das Originalzeichen.Als nächstes wird der erste Vokal von angehängt
z
.Zum Schluss drucken Sie den ersten Teil aus dem ersten regulären Ausdruck
y
, dem ersten Konsonantenk
und dem zweifachen der zuvor berechneten Zeichenfolgeb
.Probieren Sie es online aus .
quelle
Netzhaut , 68 Bytes
Probieren Sie es online!
quelle
Lua,
164157 BytesEdit 1: 7 Bytes entfernt, indem nach einem beliebigen Zeichen nach den Konsonanten gesucht wurde (siehe Regex)
Probieren Sie es online!
Dieses Programm verwendet eine Zeichenfolge im CLI-Argument und gibt die verdeckte Version aus.
Dies ist meine erste Vorlage zu einem Code Golf! Ich habe die anderen nicht im Detail überprüft, daher habe ich möglicherweise einige allgemeine Optimierungen verpasst (und bin in einige Fallen geraten). Ich habe Lua benutzt, weil ich diese kleine Sprache immer mehr mag, und ich habe versucht, eine Regex zu finden, die meinen Bedürfnissen entspricht.
Hier ist eine übersichtlichere Version mit einer Funktion (ich wollte eine verwenden, aber die Schlüsselwörter in Lua sind zu lang!):
Fühlen Sie sich frei, um ein Feedback zu geben :)
Hinweis: Wenn Sie sich fragen, ist es mit MoonScript 149 Byte lang!
quelle
JavaScript (ES5),
237229 ByteProbieren Sie es online!
Wahrscheinlich nicht der Golfspieler, aber es ist ES5.
Kürzlich wurde ein Fehler behoben. Beispielausgabe:
quelle
sed, 106 (105 + 1) Bytes
Dies wird mit dem
-E
Flag gesetzt, das anscheinend für ein Byte zählt.Probieren Sie es online!
quelle
C #,
584.581Bytes-3 Bytes dank Destructible Lemon
Dies ist meine erste Einsendung zu Code Golf und Stack Exchange im Allgemeinen. Ich weiß, dass C # keine großartige Golfsprache ist und dies wahrscheinlich nicht vollständig optimiert ist, aber ich wollte es versuchen: p. Irgendwelche Tipps sind willkommen!
Golf Version:
Lesbare Version:
quelle
x++ < l
, oder so (vielleicht,l > x++
wenn die erste nicht funktioniert).SmileBASIC 3, 195 Bytes
Sehr spät zu dieser Frage, aber wie könnte ich einer guten Herausforderung für SmileBASIC 3 widerstehen? Features wie das Durchlaufen einer Sequenz oder das Bearbeiten eines Strings sind nicht so robust wie andere Sprachen. Daher ist es eine Herausforderung, sie so klein wie möglich zu halten. Angenommen, Wörter sind GROSSBUCHSTABEN.
Detaillierte Erklärung hier!
quelle
05AB1E , 55 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Sehen Sie diese 05AB1E Tipps von mir (Abschnitt Wie Strings nicht Teil des Wörterbuchs komprimieren? ) Zu verstehen , warum
.•gÍĆdQ¸G•
ist"bcdfkszgvtgp"
.quelle