Na potrzeby tego wyzwania polifhong definiuje się jako ciągły kawałek struny , który zawiera tylko samogłoski i ma długość co najmniej 2. Biorąc pod uwagę niepusty ciąg jako dane wejściowe, Twoim zadaniem jest wyprowadzenie wszystkich zawartych w nim polifhongów .
Na przykład "abeoic"
ma następujące ciągłe plasterki (oddzielone spacjami):
a b e o i c ab be eo oi ic abe beo eoi oic abeo beoi eoic abeoi beoic abeoic
Usuwając te, które zawierają wszystko inne niż samogłoski lub mają długość mniejszą niż 2, otrzymujemy pożądane polifthongi:
eo oi eoi
Twoje zgłoszenia muszą być zgodne z następującymi zasadami:
Możesz wybrać małe / wielkie litery dla I / O, ale wielkość wyjściowa musi być taka sama jak wielkość wejściowa.
Samogłoski to
aeiou
(dla małych) iAEIOU
(dla wielkich).y
/Y
nie jest uważane za samogłoskę.Dane wejściowe będą zawierały tylko ASCII do wydruku.
Jeśli polifthong pojawia się wiele razy, możesz zdecydować się na jego wydruk tylko raz lub wszystkie jego wystąpienia.
Dowolny rozsądny format i metoda wejścia / wyjścia jest dozwolona (listy znaków są również w porządku, zarówno dla wejścia, jak i wyjścia).
Przypadki testowe
Wejście -> Wyjście (małe litery) r67 ^^ () * 6536782! 87 -> [] programowanie zagadek i golfa kodowego -> [] aa ... wygrałem! -> [„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”]
Zauważ, że w przypadkach testowych 3 i 6 możesz wypisać dane 'aa'
i 'ee'
odpowiednio tylko raz (patrz czwarta reguła).
To jest golf golfowy , wygrywa najkrótsza przesyłka w bajtach w każdym języku!
'aa'
pojawia się dwa razy. Czy trzeba wielokrotnie wysyłać ten sam ciąg znaków, jeśli pojawia się on w różnych lokalizacjach, czy można wyprowadzać tylko unikalne polifhtongi?Odpowiedzi:
Python 2 ,
10297 bajtówdzięki @JonathanFrech za -5 bajtów
Wypróbuj online!
małe we / wy
źródło
...AEIOU'
, ponieważ jako dane wejściowe możesz brać tylko małe litery.print([w[a:b]for a in l for b in l[a+2:]if{*w[a:b]}<={*'aeiou'}])
pracuje dla 93.JavaScript (ES6),
7775 bajtówOczekuje wprowadzania małymi literami. Wyprowadza unikalne polifthongi bez powtarzania.
Przypadki testowe
Pokaż fragment kodu
W jaki sposób?
Rekurencyjnie budujemy drzewo wszystkich możliwych polifongów, przycinając gałęzie, gdy tylko aktualny węzeł nie jest już zawarty w danych wejściowych, i zapisując wszystkie pasujące węzły o długości co najmniej 2 znaków.
źródło
Siatkówka ,
2320 bajtówWypróbuj online!
Wyświetla wszystkie wystąpienia polifonga.
Wyjaśnienie
Retina ma sposób na uzyskanie wszystkich nakładających się meczów, ale tak naprawdę oznacza to, że będzie szukał jednego meczu z każdej pozycji. Więc jeśli istnieje wiele dopasowań z tej samej pozycji, spowoduje to zwrócenie tylko jednego z nich. Jedynym sposobem, aby naprawdę uzyskać wszystkie nakładające się mecze, jest skorzystanie z tej funkcji dwa razy, raz dopasowując od lewej do prawej i raz od prawej do lewej (aby najpierw uzyskać możliwie najdłuższe dopasowanie z każdej możliwej pozycji początkowej, a następnie uzyskać wszystkie dopasowania dla możliwe pozycje końcowe).
Właściwy program:
Zbierz wszystkie nakładające się serie samogłosek. To tak naprawdę oznacza uzyskanie wszystkich sufiksów wszystkich przebiegów samogłosek.
Teraz uzyskaj wszystkie prefiksy o długości co najmniej 2, dopasowując od prawej do lewej. Jest
M
to niejawne, ponieważ jest to ostatnia linia programu.źródło
!&`[aeiou]{2,}
jest tak bliski poprawności , czy istnieje sposób, aby był bardziej zachłanny, aby pasował doio
?&
jest spróbować dopasować z każdej pozycji, więc nie możesz mieć wielu dopasowań o różnej długości z tej samej pozycji. Dlatego potrzebuję drugiego etapu.QuadS , 20 + 1 = 21 bajtów
z
o
flagąWypróbuj online!
W porządku rzeczy:
[aeiou]+
na każdym meczu tego PCRE,\⍵M
prefiksy meczu1↓
upuść pierwszą (która ma jedną samogłoskę),/⍵
połącz wszystkie listy prefiksów⊃
ujawnij (ponieważ ograniczenia/
zawierają)Jest to równoważne z milczącą funkcją Dyalog APL:
Wypróbuj online!
źródło
Mathematica, 92 bajty
Wypróbuj online!
źródło
Java (OpenJDK 8) ,
138135134 bajtówWypróbuj online!
źródło
i<y-1
może byći<=y
iString#matches
domyślnie sprawdza cały ciąg, więc nie potrzebujesz^
i$
. +1 za pobicie mnie do tego. Właśnie miałem opublikować moją 138-bajtową odpowiedź (ale przy tych zmianach zaproponowałem, że twoja jest krótsza). :)J ,
3429 bajtówWypróbuj online!
źródło
Galaretka , 9 bajtów
Wypróbuj online!
Wyjaśnienie
-4 bajty dzięki Mr. Xcoder
źródło
L>1$$
wL’$
.L’$
zḊ
do 9 bajtów . Odpowiednikiem byłobyẆṫLḊḟÐḟØc
.C (gcc) , 104 bajty (99 bajtów tylko małymi lub tylko dużymi literami)
Tak, przecieka - co z tego?
Wypróbuj online!
źródło
#include
i potrzebujesz tylko jednej litery, więc możesz ją skrócić do 80 bajtów.R , 137 bajtów
rozgromiony przez Marka !
Wypróbuj online!
źródło
unique
.Perl 5, 53 +1 (-p)
Wypróbuj online
źródło
PowerShell ,
9388 bajtówWypróbuj online!
Wykorzystuje małe / duże litery we / wy (lub miks!).
Pożycza kod z moją odpowiedź na eksplodowała podciągi , aby uzyskać wszystkie podciągi, następnie wyciąga te to regex
-match
przeciw^[aeiou]{2,}$
- to znaczy te, które są co najmniej dwie samogłoski długości i tylko samogłoski. Te ciągi są pozostawione w potoku, a dane wyjściowe są niejawne.źródło
Haskell ,
148137130123118 bajtówDzięki @Laikoni za -11 bajtów, kolejne -7 bajtów, wskazując mi wskazówki do gry w golfa, kolejne -7 bajtów, a jeszcze kolejne -5 bajtów, co daje w sumie aż -30 bajtów.
Wyglądało to na dobre dopasowanie do Haskella, ale wynik nie wydaje się zgodny.Wydaje mi się, że Haskell był jednak w porządku. Nadal jednak denerwuje mnie sposób, w jakisubsequences
działa.Wypróbuj online!
źródło
;
, ale zwiększają czytelność kodu. Zawsze używasze
razem zv
, więc możesz bezpośrednio zadeklarowaće=(
elem"aeiou")
.y!!0
jest krótszy niżhead y
. JestconcatMap
zamiastconcat.map
, ale jeszcze krótszy jest(=<<)
z listy monada, która ma ten sam efekt.Data.Lists
zamiastData.List
. Pierwszy ma wszystkie funkcje drugiego, ale także dodatkowe rzeczy, takie jakpowerslice
, który daje listę wszystkich ciągłych podsekwencji.y@(h:_:_)
spadaćlength y>1
i skrócićv(y!!0)
dov h
.(\x y->v x&&v y)
można skrócić, przechodząc w tryb bez punktów, albo ręcznie, używając tej końcówki, albo używając pointfree.io . (2) Monady listy można również używać zdo
notacją, todo x<-l;[...]
znaczy tak samo jakl>>=(\x->[...])
. Przy okazji, w TIO możesz umieścić swoje polemain
w nagłówku lub stopce, aby liczba bajtów była zgodna z rzeczywistym przesłaniem.Perl, 45 bajtów
źródło
R ,
120 bajtów110 bajtówWypróbuj online!
Jak to działa
źródło
C, 119 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 105 bajtów
Prawdopodobnie zostało jeszcze wiele do gry w golfa.
źródło
Perl 5 , 44 + 1 (
-n
) = 45 bajtówWypróbuj online!
źródło
05AB1E , 10 bajtów
Wypróbuj online!
Objaśnienia:
źródło
ŒʒžMм_}ʒg≠
ŒD1ùKʒžMм_
10 bajtów. Próbuję jednak znaleźć sposób naC,
10575 bajtówFunkcja akceptująca wskaźnik do małych liter i generująca ciągi rozdzielone spacjami na standardowym wyjściu:
Program testowy
Próbny
Wyjaśnienie
Używając GCC w systemie Debian Linux, wydaje mi się, że uciekam od niekompatybilnych niejawnych deklaracji
strchr()
iprintf()
. Inne platformy mogą wymagać<stdio.h>
i<string.h>
zostać uwzględnione.Wypróbuj online (wymaga Javascript).
źródło
f(p)char*p;
nie byćf(char*p)
?f(s,d)char*s,*d
.APL (Dyalog) , 53 bajty
Jest to
Dfn
( d Skierować F unctio n ). Zastosowanie jestp '<argument>'
. Uczciwe ostrzeżenie: nie jest to zbyt wydajne i czas oczekiwaniainput > 8 characters
na TIO, ale działa normalnie, gdy ma wystarczająco dużo czasu.Wypróbuj online!
Dzięki @ Adám za 16 bajtów!
Jak to działa:
Łatwiej to zrozumieć, jeśli podzielimy kod na mniejsze części:
G←⊃,/{(,v∘.,⊢)⍣⍵⊢v←'aeiou'}¨⍳≢1↓⍵
: Ta część funkcji przyjmuje długość (prawego) argumentu iaeiou
wiele razy miesza wektor z sobą, uzyskując każdą możliwą kombinację[2, length(right arg)]
samogłosek.(G∊⊃,/⌽,\∘⌽¨,\⌽⍵)/
: Ta część sprawdza, które elementy G są członami podciągów danych wejściowych. Zwraca wektor boolowski, przy czym1
s są indeksami kombinacji samogłosek, które są obecne na wejściu i0
tam, gdzie ich nie ma. Powstały wektor jest następnie odwzorowywany (/
)G
, zwracając elementy odpowiadające prawdziwym wartościom.Całość jest następnie przypisana do
p
.p←
nie jest uwzględniony w liczbie bajtów, ponieważ nie jest to konieczne , po prostu ułatwia korzystanie z funkcji.źródło
⊆
do filtrowania. Zastosowanie/
.Haskell , 74 bajty
Wypróbuj online!
źródło
Ruby 2.4, 100 bajtów
To moja pierwsza próba gry w golfa i jestem pewien, że istnieje wiele sposobów na skrócenie tego kodu.
źródło
Rubinowy , 80 bajtów
Wypróbuj online!
źródło
.compact
może być-[nil]
Pyth , 15 bajtów
Wypróbuj online!
Zdecydowanie do gry w golfa, chcę poprawić to przed napisaniem wyjaśnienia.
źródło
T-SQL (SQL Server 2014), 281 bajtów
Podaj dane przez
Używa wspólnego wyrażenia
s
tabelowego, aby rozdzielić dane wejściowe na uporządkowane pojedyncze litery, a następnie drugiego wspólnego wyrażenia tabelowegoc
aby wygenerować wszystkie uporządkowane kombinacje, wyrzucając non-samogłoski.SQL Fiddle
źródło
PHP, 139 bajtów
Demo online
Jak to działa
Wybierz podciągi (zaczynając od długości 2) składające się z sąsiadujących znaków i poruszaj się wzdłuż ciągu. Zbierz wszystkie podciągi zawierające tylko samogłoski. Powtórz z dłuższymi podciągami.
W przypadku ciągu „abcdef” są to wygenerowane i sprawdzone podciągi:
źródło