W tym wyzwaniu musisz wziąć ciąg pasujący do wyrażenia regularnego ^[a-zA-Z]+$
lub cokolwiek rozsądnego (nie musisz brać pod uwagę wielkich lub małych liter, jeśli chcesz) (możesz założyć, że ciąg jest wystarczająco długi i ma odpowiednią strukturę dla wszystkich operacji) i wypisuje kolejny ciąg, wygenerowany podobnie do słowa na końcu ostatniego tweeta dadaist przez POTUS ( "Despite the constant negative press covfefe"
).
Jak sprawdzić ciąg:
Najpierw zdobądź pierwszą grupę dźwiękową (wymyślona terminologia).
Jak Ty to robisz? Dobrze:
Znajdź pierwszą samogłoskę (
y
jest także samogłoską)v creation
Znajdź potem pierwszą spółgłoskę
v creation
Usuń resztę ciągu
creat
To twoja pierwsza grupa dźwiękowa.
Następny krok:
Uzyskaj ostatnią spółgłoskę z grupy dźwiękowej
t
i zastąp go wersją dźwięczną lub bezdźwięczną. Aby to zrobić, znajdź literę w tej tabeli. Zamień na podaną literę (która może być tą samą literą)
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
więc rozumiemy
d
Następnie weź następną samogłoskę po tej spółgłosce. Możesz założyć, że ta spółgłoska nie znajduje się na końcu łańcucha. Połącz te dwa razem, a następnie powtórz to dwukrotnie:
didi
Połącz to z pierwszą grupą dźwiękową:
creatdidi
Zrobiłeś: ciąg jest kowariancjonowany i możesz go teraz wyprowadzić.
Przypadki testowe:
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
To jest golf golfowy , dlatego prosimy o jak najkrótszy program!
Odpowiedzi:
Galaretka ,
5857 bajtówPełny program, który akceptuje listę małych liter i drukuje wynik.
Wypróbuj online!
W jaki sposób?
źródło
JavaScript (ES6),
107103 bajtówZaoszczędzono 4 bajty dzięki GOTO 0
Przypadki testowe
Pokaż fragment kodu
źródło
s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)
Galaretka ,
4539 bajtówWypróbuj online!
Jak to działa
źródło
CJam ,
59585756 bajtówWypróbuj online!
Wyjaśnienie
źródło
C,
219213206179175 bajtówWypróbuj online!
źródło
#define
s i funkcję flagami preprocesora (-D...
).Perl 5 ,
8172 bajtówWypróbuj online!
źródło
\K
, ale zrobiliście to 9 bajtów lepiej niż ja. Dobra odpowiedź!PHP, 121 bajtów
Wypróbuj online!
źródło
echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;
$argn
na coś krótszego?$a
, na przykład - to -3 bajtyPyth, 54 bajty
Definiuje funkcję
y
, która oczekuje łańcucha. Wypróbuj online: pakiet testowyźródło
Python 3,
155139 bajtówusunięto 16 bajtów dzięki @ovs
usunął 1 bajt dzięki Gáborowi Fekete
źródło
'aeiouy]'
, być może zaoszczędzi to trochę bajtów. Możesz także usunąć niektóre znaki z ciągów zastępujących, ponieważ są one takie same.IndexError
, a zapisywanieaeiouy])
nie zapisuje żadnych bajtów.s='aeiouy])'
, możesz użyćb,c,v=re.findall('(.*?[%s([^%s.*?([%s'%(s,s,s)
. Nie jest krótszy, ale może prowadzić do ogólnego skrócenia.k='aeiouy])'
orazf'(.*?[{k}([^{k}.*?([{k}'
Java 8,
243236222 bajtówUżywa
.replaceAll
wyrażeń regularnych z grupami przechwytywania, aby odfiltrować części, których nie chcemy.Wyjaśnienie:
Wypróbuj tutaj.
źródło
Haskell ,
143141138137136 136 bajtówWypróbuj online!
źródło
nx
go jedną literą pozwoli zaoszczędzić 2 bajty.z
pozaf
i przełączanie się na strażników zamiastlet
oszczędza kolejne dwa bajty: Wypróbuj online!(s,v)<-break z i,(m,c:x)<-span z v
w(s,(m,c:x))<-span z<$>break z i
.let
, dzięki!z
wyprowadzkif
?Python,
261260 bajtówNie regex, nie ezoteryczne rozwiązanie. Zajęło mi to około 20 minut i godzinę więcej na grę w golfa.
Prawdopodobnie ma więcej list do zrozumienia niż cała standardowa biblioteka Pythona, głównie dlatego, że nie znam regex ...
Wypróbuj online! (Z walizkami testowymi)
źródło
Rubinowy , 90 bajtów
Wypróbuj online!
Nie znając tego trochę, mamy coś równoważnego do:
źródło
Python 2,
251246245239237234229211 bajtówPierwsze zgłoszenie tutaj.
Wypróbuj online!
Inni golfiści, którzy pomogli mi:
źródło
not n
, abyn<1
na 2 bajty, ponieważ wiesz, żen
nigdy nie będzie ujemny. Możesz także zmienićn==3
na,n>2
ponieważ wiesz,n
że nigdy nie będzie większy niż3
. Można również użyć sztuczek Pythona do warunkowych skrócić pierwszy i przedostatni nawet dalej:n=[n,1][i in w and n<1]
;r+=[0,r][n<2]
r,v,c=('',)*3
nar=v=c=''
, ponieważ ciągi są niezmienne. Próbowałem wielu innych sprytnych sztuczek, ale frustrujące są one tak długo. Warto też dodać Wypróbuj online! link do twojego postuRubin ,
175141110 bajtówWypróbuj online!
tr
argumentomNie golfił
źródło
Hash[*"bpcgdtfvgkkgpbsztdvfzs".chars]
c=[^aeiou]
obejmuje wszystkie znaki alfabetyczne, jest ono krótsze. Mają pierwszą interpolacja dla każdej zmiennej przypisać go jednocześnie do -2 bajtów:/^(.*?${v='[aeiou]'}+(#{c='[^aeiou]})).../
. Wreszcie$2.tr("b-z","pgtevkhijgl-obqrzdufwxys")
zamiast rozwiązania Hash.\g<n>
) zamiast interpolacji, plus kolejne 14 za pomocą @ ValueInk za[^aeiou]
sugestię:s=~/^(.*?([aeiouy])+([^aeiou]))\g<3>*(\g<2>)/
.programming
->progkaka
, którego nie mogę do końca zrozumieć.\g<3>
aktualizuje wartość 3 USD, więc nie możemy użyć tego skrótu.Kryształ,
203194187186184163 bajtówźródło
c=v
io+=<...>
MATLAB / Octave -
159158 bajtówPoniższe prace zakładają, że ciąg wejściowy składa się z małych liter.
Wyjaśnienie
a = input('','s');
: Pobiera ciąg ze STDIN i przechowuje go w zmienneja
.m=ismember(a,'aeiouy');
: Zwraca tablicę boolowską o tym samym rozmiarze, co ciąga
określający położenie samogłoseks='pgt vkh jglmn bqrzd fwx s';
covfefe
Odwzorowanie spółgłosek jako ciąg znaków. Ten ciąg ma 25 znaków i pomija samogłoski. Pierwsza pozycja, w której'a'
ma być samogłoska, jest usuwana, podczas gdy inne pozycje, w których znajdują się samogłoski, są zastępowane znakiem spacji. Dzieje się tak dlatego, że kiedy określimy pierwszą spółgłoskę występującą po samogłosce, przekonwertujemy spółgłoskę na pozycję umożliwiającą dostęp do znaku w tym ciągu w celu ustalenia pierwszego składnika przekształconego słowa.m(1:find(m,1))=1
: Ustawia pierwszą pozycję tablicy boolowskiej do miejsca, w którym znaleźliśmy pierwszą samogłoskę, tak jak wszystkie samogłoski. Stanie się tak, że gdy będziemy szukać następnej spółgłoski następującej po pierwszej samogłosce, zignorujemy te znaki.i=find(~m,1);
: Znajduje pierwszą pozycję łańcucha, który jest spółgłoską po pierwszej samogłosce.f=a(1:i)
: Usuwa ciąg po pierwszej spółgłosce następującej po samogłosce. Po prostu próbkujemy od pierwszej pozycji ciągu do tego momentu.d=s(f(end)-97);
: Weź ostatni znak ciągu, który pozostaje, i znajdzie miejsce, w którym musimy pobrać próbkę z ciągu wyszukiwania i pobierze ten znak. Odejmowanie znaku i liczby w MATLAB lub Octave łączy się, tworząc liczbę całkowitą, przekształcając znak w kod ASCII. W tym przypadku odejmujemy ostatni znak od znaku na początku alfabetu, aby dać nam pozycję względem początku. Jednak zamiast odejmować przezb
(98), odejmujemy przez,a
ponieważ MATLAB rozpoczyna indeksowanie o 1 zamiast 0.'a'
Kod ASCII wynosi 97.m(1:i)=0;
: Bierze maskę logiczną i ustawia wszystkie znaki w ciągu wejściowym od pierwszej pozycji do pierwszej spółgłoski po samogłosce na false.v=a(find(m,1));
: Znajduje następną samogłoskę, która następuje po pierwszej spółgłosce z ciągu wejściowego.[f d v d v]
: Wypisz naszcovfefe
ied string.Przykład działa
Wypróbuj online!
http://www.tutorialspoint.com/execute_octave_online.php?PID=0Bw_CjBb95KQMdjROYVR0aFNrWXM
Po naciśnięciu przycisku Wykonaj u góry poczekaj chwilę, a następnie wprowadź żądany ciąg. Wprowadź ciąg powoli, ponieważ wydaje się, że występuje opóźnienie podczas wprowadzania tekstu.
źródło
Clojure,
182156 znakówJak to działa
Zwraca sekwencję
((\p \r) (\e) (\s) (\i) (\d) (\e) (\n \t))
Destructures Seq w
s=(\p \r)
,m=(\e)
,c=\s
,n=\i
.Lub „przykład” To
s=[]
,m=(\e)
,c=\x
,n=\a
.Zwraca ciąg wyjściowy, łącząc elementy razem i łącząc je w łańcuch.
A potem po prostu usunąłem tyle białych znaków, ile mogłem, wciąż kompilując.
Odblokowane:
źródło
c
na przykład wywołać funkcję główną . (Zezwalamy również na funkcje anonimowe, które w wielu językach są krótsze; nie jestem pewien, czy są one w Clojure). Widzę, że wprowadziłeś już taką poprawę we wnętrzu swojego kodu, więc prawdopodobnie nie trzeba tu wiele zmieniać.R, 341 znaków
Horrendous R próba, dlaczego struny są takie trudne
Wersja do odczytu:
źródło
BlitzMax, 190 bajtów
Pobiera słowo ze standardowego wejścia i wypisuje wynik na standardowe wyjście. Zakłada się, że słowo wejściowe jest pisane małymi literami i zawiera co najmniej jedną samogłoskę, po której następuje spółgłoska.
Bardziej czytelna wersja programu z formatowaniem i deklaracjami zmiennych:
Jak to działa:
BlitzMax nie ma wbudowanej funkcji wyrażenia regularnego lub podobnego, więc pętla służy do iteracji znaków słowa wejściowego, dopóki nie znajdzie samogłoski, po której następuje łańcuch co najmniej jednej spółgłoski. Zmienna c przechowuje pozycję ostatniej z tych spółgłosek, v pozycji samogłoski. Pętla nadal sprawdza, czy po łańcuchu znajduje się kolejna samogłoska, a jeśli tak, v jest odpowiednio aktualizowana. Następnie spółgłoskę w c wyszukuje się w ciągu „bpdtfvgkcgsz”, który działa jak tabela zastępcza. Jeśli spółgłoska znajduje się w tabeli w dowolnej pozycji, wówczas pozycja ta jest edytorem XOR z 1, a znak w pozycji wynikowej zostaje użyty jako zamiennik. Operacja XOR zmienia 0 na 1, 2 na 3, 4 na 5 itd. I odwrotnie, tak że b zostaje zamienione na p, dzt i tak dalej. Wreszcie oryginalny ciąg do c,
Przykładowe wyniki:
źródło
Perl, 71 bajtów
Uruchom także z
perl -pe
. Kilka bajtów mniej niż poprzednie rozwiązanie Perla. Trzeba też przyznać, że stamtąd czerpałem inspirację.źródło
05AB1E ,
10110488 bajtów-16 bajtów dzięki Okx
Mam nadzieję, że w jakiś sposób można to zrobić sposób bardziej efektywny.
Wypróbuj online!
Wyjaśnienie
źródło
"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"
z.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•
zaoszczędzić 15 bajtówžOÃćIsk
sięžOÃ0èk
zapisać kolejny bajt.žOÃнk>[DIs£¤žPså#\>]©s[DIsèDžOså#\>]s\.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`®θkèìDJ
Wypróbuj online. Głównie pozbyłem się wszystkich swapów i potrójnych swapów, używając zamiast tego zmiennej. I0è
może byćн
, a ja wymienić2׫
zDJ
przyłączyć cały stos razem. PS: Wysłałem również 55 bajtów odpowiedź 05AB1E przy użyciu innej techniki. (Który zawiera również link do lepszego zrozumienia kompresji w 05AB1E.: D)Kryształ, 130 bajtów
Jak to działa
zapisz wyrażenie regularne do wyszukiwania pierwszej samogłoski do
c
.podziel pierwszy argument na trzy części {"", Ciąg do jednego znaku przed pierwszą spółgłoską po pierwszej samogłosce, reszta ciągu} i zapisz każdy z elementów na x, y i z.
uzyskaj pierwszy znak, odpowiednią spółgłoskę.
pobierz indeks spółgłoski w lewym ciągu lub
nil
.jeśli
i
nie jestnil
, użyj tego indeksu dla drugiego ciągu (rodzaj skrótu golfowego).jeśli
i
jestnil
, użyj oryginalnego znaku.następnie dołącz pierwszą samogłoskę z
z
.na koniec wydrukuj pierwszą część z pierwszego wyrażenia regularnego
y
, pierwszej spółgłoskik
i dwa razy więcej niż poprzednio obliczony ciągb
.Wypróbuj online .
źródło
Siatkówka , 68 bajtów
Wypróbuj online!
źródło
Lua,
164157 bajtówEdycja 1: Usunięto 7 bajtów, szukając dowolnej postaci po spółgłosek (patrz regex)
Wypróbuj online!
Ten program pobiera ciąg w argumencie CLI i wypisuje swoją wersję kowariancji.
To moje pierwsze zgłoszenie do golfa kodowego! Nie sprawdziłem szczegółowo pozostałych, więc mogłem przeoczyć kilka typowych optymalizacji (i wpadłem w pułapki). Użyłem Lua, ponieważ polubiłem ten mały język i starałem się znaleźć regex, który odpowiada moim potrzebom.
Oto czystsza wersja, wykorzystująca funkcję (zamierzałem użyć jednej, ale słowa kluczowe w Lua są za długie!):
Podziel się swoją opinią :)
Uwaga: jeśli się zastanawiasz, przy użyciu MoonScript trwa 149 bajtów!
źródło
JavaScript (ES5),
237229 bajtówWypróbuj online!
Prawdopodobnie nie najbardziej golfowy, ale jest to ES5.
Ostatnio naprawiono błąd. Przykładowe dane wyjściowe:
źródło
sed, 106 (105 + 1) bajtów
Jest to sed z
-E
flagą, która najwyraźniej liczy się dla jednego bajtu.Wypróbuj online!
źródło
C #,
584581 bajtów-3 bajty dzięki Destructible Lemon
To moje pierwsze zgłoszenie na temat Code Golf i ogólnie Stack Exchange. Wiem, że C # nie jest świetnym językiem golfowym i to prawdopodobnie nie jest całkowicie zoptymalizowane, ale chciałem spróbować: p. Wszelkie wskazówki są mile widziane!
Wersja do gry w golfa:
Wersja do odczytu:
źródło
x++ < l
, czy coś (może,l > x++
jeśli pierwszy nie działa). nie jestem pewienSmileBASIC 3, 195 bajtów
Bardzo późno na to pytanie, ale jak mogłem się oprzeć dobrym wyzwaniom dla SmileBASIC 3? Funkcje takie jak iteracja po sekwencji lub manipulowanie ciągiem nie są tak solidne jak inne języki, więc jest to trochę trudne, aby zrobić to tak małe, jak to możliwe. Zakłada, że słowa są duże.
Szczegółowe wyjaśnienie tutaj!
źródło
05AB1E , 55 bajtów
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zapoznaj się z moimi poradami 05AB1E (sekcja Jak kompresować ciągi znaków, które nie są częścią słownika? ), Aby zrozumieć, dlaczego tak
.•gÍĆdQ¸G•
jest"bcdfkszgvtgp"
.źródło