Für die Zwecke dieser Herausforderung wird ein Polyphthong als zusammenhängendes Stück eines Strings definiert, das nur Vokale enthält und eine Länge von mindestens 2 hat. Wenn Sie einen nicht leeren String als Eingabe verwenden, müssen Sie alle darin enthaltenen Polyphthongs ausgeben .
Hat beispielsweise "abeoic"
die folgenden zusammenhängenden Segmente (durch Leerzeichen getrennt):
a b e o i c ab be eo oi ic abe beo eoi oic abeo beoi eoic abeoi beoic abeoic
Wenn wir diejenigen entfernen, die etwas anderes als Vokale enthalten oder eine Länge von weniger als 2 haben, erhalten wir unsere gewünschten Polyphthongs:
eo oi eoi
Ihre Einsendungen müssen die folgenden Regeln einhalten:
Sie können für E / A entweder Klein- oder Großbuchstaben wählen, der Ausgabefall muss jedoch mit dem Eingabefall übereinstimmen.
Die Vokale sind
aeiou
(für Kleinbuchstaben) undAEIOU
(für Großbuchstaben).y
Ich werdeY
nicht als Vokal betrachtet.Die Eingabe enthält nur druckbare ASCII-Daten.
Wenn ein Polyphthong mehrmals vorkommt, können Sie ihn entweder nur einmal oder alle seine Vorkommen ausgeben.
Jedes sinnvolle E / A-Format und -Verfahren ist zulässig (auch die Eingabe- und Ausgabelisten sind in Ordnung).
Testfälle
Eingabe -> Ausgabe (Kleinbuchstaben) r67 ^^ () * 6536782! 87 -> [] Programmieren von Rätseln und Code Golf -> [] und ... ich habe gewonnen! -> ['aa', 'aa', 'aaa'] abeoic -> ['eo', 'oi', 'eoi'] yah eioo ala -> ['ei', 'io', 'oo', 'eio', 'ioo', 'eioo'] @yabeeeayio__e -> ['ee', 'ee', 'ea', 'io', 'eee', 'eea', 'eeea'] 0ioen0aaiosnjksd -> ['io', 'oe', 'aa', 'ai', 'io', 'ioe', 'aai', 'aio', 'aaio']
Beachten Sie, dass für Testfälle 3 und 6, können Sie Ausgang 'aa'
und 'ee'
jeweils nur einmal (die vierte Regel sehen).
Dies ist Code-Golf , die kürzeste Einsendung in Bytes in jeder Sprache gewinnt!
'aa'
erscheint zweimal. Muss ein String mehrfach ausgegeben werden, wenn er an verschiedenen Stellen vorkommt, oder kann man nur eindeutige Polyphtongs ausgeben?Antworten:
Python 2 ,
10297 Bytesdanke an @JonathanFrech für -5 Bytes
Probieren Sie es online!
Kleinbuchstaben I / O
quelle
...AEIOU'
, da du nur Kleinbuchstaben als Eingabe nehmen darfst.print([w[a:b]for a in l for b in l[a+2:]if{*w[a:b]}<={*'aeiou'}])
arbeitet für 93.JavaScript (ES6),
77 bis75 ByteErwartet Eingaben in Kleinbuchstaben. Gibt eindeutige Polyphthongs aus, ohne sie zu wiederholen.
Testfälle
Code-Snippet anzeigen
Wie?
Wir bauen rekursiv den Baum aller möglichen Polyphthongs auf, kürzen Zweige, sobald der aktuelle Knoten nicht mehr in der Eingabe enthalten ist, und speichern alle übereinstimmenden Knoten mit mindestens 2 Zeichen.
quelle
Netzhaut ,
23 bis20 BytesProbieren Sie es online!
Dies druckt alle Vorkommen eines Polyphthongs.
Erläuterung
Retina kann zwar alle überlappenden Übereinstimmungen ermitteln, dies bedeutet jedoch, dass von jeder Position aus nach einer Übereinstimmung gesucht wird. Wenn es also mehrere Übereinstimmungen von derselben Position gibt, wird nur eine davon zurückgegeben. Die einzige Möglichkeit, um wirklich alle überlappenden Übereinstimmungen zu erhalten, besteht darin, diese Funktion zweimal zu verwenden, und zwar einmal von links nach rechts und einmal von rechts nach links (so dass wir von jeder möglichen Startposition aus die längstmögliche Übereinstimmung erhalten und dann auch alle Übereinstimmungen für die möglichen Endpositionen).
Also das eigentliche Programm:
Holen Sie sich alle überlappenden Läufe von Vokalen. Was dies wirklich bedeutet, ist, alle Suffixe aller Vokalläufe zu erhalten.
Erhalten Sie nun alle Präfixe, die mindestens die Länge 2 haben, indem Sie von rechts nach links übereinstimmen. Das
M
ist hier implizit, weil es die letzte Zeile des Programms ist.quelle
!&`[aeiou]{2,}
ist so nah an richtig , ist es eine Möglichkeit , es gieriger zu bekommen , damit es gegen Spieleio
?&
Sie können also von jeder Position aus versuchen, eine Übereinstimmung zu erzielen. Sie können also nicht mehrere Übereinstimmungen unterschiedlicher Länge von derselben Position aus haben. Deshalb brauche ich eine zweite Stufe.QuadS , 20 + 1 = 21 Bytes
mit der
o
FlaggeProbieren Sie es online!
In der Reihenfolge, in der die Dinge geschehen:
[aeiou]+
bei jedem Spiel dieser PCRE,\⍵M
Präfixe des Spiels1↓
Lass den ersten fallen (der einen Vokal hat),/⍵
Verketten Sie alle Listen der Präfixe⊃
offen legen (weil Ermäßigungen enthalten/
)Dies entspricht der stillschweigenden Dyalog APL-Funktion:
Probieren Sie es online!
quelle
Mathematica, 92 Bytes
Probieren Sie es online!
quelle
Java (OpenJDK 8) ,
138135134 BytesProbieren Sie es online!
quelle
i<y-1
kann seini<=y
undString#matches
prüft implizit den gesamten String, so dass Sie das^
und nicht benötigen$
. +1 dafür, dass du mich geschlagen hast. Ich wollte gerade meine eigene 138-Byte-Antwort veröffentlichen (aber mit diesen Änderungen, die ich vorgeschlagen habe, ist Ihre kürzer). :)J ,
3429 BytesProbieren Sie es online!
quelle
Gelee , 9 Bytes
Probieren Sie es online!
Erläuterung
-4 Bytes dank Mr. Xcoder
quelle
L>1$$
withL’$
.L’$
withḊ
for 9 bytes. An equivalent would beẆṫLḊḟÐḟØc
.C (gcc), 104 bytes (99 bytes with lowercase only or uppercase only)
Yeah, it leaks - so what?
Try it online!
quelle
#include
, and you only need to handle one letter case, so you can shorten it to 80 bytes.R, 137 bytes
outgolfed by Mark!
Try it online!
quelle
unique
.Perl 5, 53 +1 (-p)
Try It Online
quelle
PowerShell,
9388 bytesTry it online!
Uses lowercase or uppercase I/O (or a mix!).
Borrows code from my answer on Exploded Substrings to get all the substrings, then pulls out those that regex
-match
against^[aeiou]{2,}$
-- i.e., those that are at least two vowels in length and only vowels. Those strings are left on the pipeline and output is implicit.quelle
Haskell,
148137130123118 bytesThanks to @Laikoni for -11 bytes, further -7 bytes by pointing me to golfing tips, another -7 bytes, and yet another -5 bytes, for a total of whopping -30 bytes.
This looked like a good fit for Haskell but the result doesn't seem to agree.I guess Haskell was an OK-ish choice after all. I'm still annoyed by the waysubsequences
works though.Try it online!
quelle
;
, but increase the readability of the code. You always usee
together withv
, so you can directly declaree=(
elem"aeiou")
.y!!0
is shorter thanhead y
. There isconcatMap
instead ofconcat.map
, but even shorter is(=<<)
from the list monad wich has the same effect.Data.Lists
instead ofData.List
. The former has all functions of the latter, but also additional stuff likepowerslice
, which gives a list of all continuous subsequences.y@(h:_:_)
to droplength y>1
and shortenv(y!!0)
tov h
.(\x y->v x&&v y)
can be shortened by converting to point-free, either manually using this tip or by using pointfree.io. (2) The list monad can also be used with thedo
notation, that isdo x<-l;[...]
is the same asl>>=(\x->[...])
. Btw, on TIO you can put yourmain
into the header or footer field to have the byte count match the actual submission.Perl, 45 bytes
quelle
R,
120 bytes110 bytesTry it online!
How it works
quelle
C, 119 bytes
Try it online!
quelle
JavaScript (ES6), 105 bytes
Probably has a lot of golfing left to do.
quelle
Perl 5, 44 + 1 (
-n
) = 45 bytesTry it online!
quelle
05AB1E, 10 bytes
Try it online!
Explanations:
quelle
ŒʒžMм_}ʒg≠
ŒD1ùKʒžMм_
for 10 bytes. I'm trying to find a way to golf it down thoughC,
10575 bytesA function accepting a pointer to lowercase input, and producing space-separated strings on standard output:
Test program
Demo
Explanation
Using GCC on Debian Linux, I seem to get away with the incompatible implicit declarations of
strchr()
andprintf()
. Other platforms may require<stdio.h>
and<string.h>
to be included.Try it online (requires Javascript).
quelle
f(p)char*p;
not bef(char*p)
?f(s,d)char*s,*d
.APL (Dyalog), 53 bytes
This is a
Dfn
(direct function). Usage isp '<argument>'
. Fair warning: this is not very efficient and times out forinput > 8 characters
on TIO, but works normally when given enough time.Try it online!
Thanks to @Adám for 16 bytes!
How it works:
This is easier to understand if we break the code in smaller portions:
G←⊃,/{(,v∘.,⊢)⍣⍵⊢v←'aeiou'}¨⍳≢1↓⍵
: This part of the function takes the length of the (right) argument and mixes the vectoraeiou
to itself that many times, yielding every possible combination of[2, length(right arg)]
vowels.(G∊⊃,/⌽,\∘⌽¨,\⌽⍵)/
: This part checks which element(s) of G are members of the substrings of the input. This returns a boolean vector, with1
's at the indices of the vowel combinations that are present in the input and0
's where they're not. The resulting vector is then mapped (/
) overG
, returning the elements corresponding to the truthy values.The whole thing is then assigned to
p
.p←
is not included in the byte count because it's not necessary, it just makes using the function easier.quelle
⊆
to filter. Use/
.Haskell, 74 bytes
Try it online!
quelle
Ruby 2.4, 100 bytes
This is my first attempt at golfing, and I'm sure there are lots of ways to shorten this code.
quelle
Ruby, 80 bytes
Try it online!
quelle
.compact
can be-[nil]
Pyth, 15 bytes
Try it online!
Definitely golfable, I want to get it better before writing out explanation.
quelle
T-SQL (SQL Server 2014), 281 bytes
Input give by
Uses a common table expression
s
to blow the input apart into ordered individual letters, and then a second common table expressionc
to generate all ordered combinations, throwing out non vowels.SQL Fiddle
quelle
PHP, 139 bytes
Online demo
How it works
Select sub-strings (beginning with the length of 2) consisting of adjacent characters and move along string. Collect any sub-strings that only contain vowels. Repeat with longer sub-strings.
For string 'abcdef' these are the substrings generated and checked:
quelle