Program powinien pobrać ciąg znaków i odwrócić w nim spółgłosek, zachowując kolejność samogłosek. Wszystkie litery będą pisane małymi literami, więc nie musisz się martwić o obudowę. Przykłady podano poniżej.
Wejście:
a test case
.
Spółgłoski są tutajt,s,t,c,s
. Powinny one pochodzić w odwrotnej kolejności, tzns,c,t,s,t
i wstawiony z powrotem do napisu na tych samych stanowiskach, na których znajdowały się wstępnie odwrócone znaki:a sect sate
.Wejście:
well-done
. Wyjście:nedl-lowe
.- Wejście:
reverse the consonants
. Wyjście:setenne sne cohtosarvr
.
To jest kod golfowy, wygrywa najkrótsze rozwiązanie.
Y
należy uważać za samogłoskę bez względu na to, co to jest, a nie odwróconą.
Wszystko, jak również liczby, znaki interpunkcyjne, cudzysłowy i inne symbole ( @#$%^&*(){}[]\|/<>~-_+=`
), mogą potencjalnie pojawić się na wejściu.
-[...]
specyficzny dla siatkówki, czy też dla wyrażeń regularnych .net, czy jest to ogólna funkcja wyrażeń regularnych, którą do tej pory przeoczyłem?[...&&[^...]]
.<[b..z] - [eiouy]>
lub<:Ll - [aeiouy]>
robi różnicęPython 2, 86 bajtów
Pobiera dane wejściowe jako ciąg znaków w cudzysłowie. Iteruje przez dane wejściowe, zastępując każdą spółgłoskę
%s
ins
. Krotkac
przechowuje napotkane spółgłosek w odwrotnej kolejności. Następnie formatowanie ciągów zastępuje litery%s
„s”s
spółgłoskami „in”c
.Podziękowania dla Sp3000 za sprawdzenie spółgłoski, co pozwoliło zaoszczędzić 4 bajty na liście spółgłosek.
źródło
Galaretka ,
2220 bajtówWypróbuj online!
Jak to działa
źródło
JavaScript ES6,
82818078 bajtówZapisano bajt dzięki Martinowi i Dziurawej Zakonnicy oraz 2 bajty Neilowi!
Testowanie
źródło
/(?![aeiouy])[a-z]/g
/(?[_aeiouy])\w/g
zadziała?_
, co jest symbolem, który OP chce zachować na swoim miejscu.q.onchange=q.onkeydown=q.onkeyup=
naq.oninput=
...Python 2, 106 bajtów
Oczekuje danych wejściowych
"quotes"
, które moim zdaniem są dozwolone.źródło
Pyke, 18 bajtów
Wypróbuj tutaj!
lub 16 bajtów w nowej wersji:
(Zmień, więc jeśli dla zwraca wszystkie dane wyjściowe ciągów i miał dane wejściowe, zwraca ciąg zamiast listy)
Wypróbuj tutaj!
~c
zawiera spółgłosek:bcdfghjklmnpqrstvwxz
źródło
GNU sed, 73
Wynik obejmuje +1 za
-r
flagę przekazaną do sed.Ideone.
Wielokrotnie przełącza pierwszą i ostatnią małą spółgłoskę i konwertuje je na wielkie litery, dopóki nie będzie więcej dopasowań. Następnie przekonwertuj cały ciąg z powrotem na małe litery.
źródło
J, 53 bajty
Może nie jest to najlepszy sposób, ale chciałem użyć,
C.
ponieważ można to rozwiązać za pomocą permutacji.Stosowanie
Wyjaśnienie
źródło
MATL,
182221 bajtów1 bajt zapisany dzięki @Luis
Niestety najdłuższą częścią tego jest uzyskanie listy spółgłosek (
2Y211Y2'y'hX-
).Wypróbuj online!
Wyjaśnienie
źródło
tt2Y211Y2'y'hX-m)P5M(
Perl 5 (58 + 4 = 62 bajty)
+4 kara za bieg z
-0777
flagą, która ustawia Perla w tryb slurp, aby poprawnie obsługiwać nowe linie.Akceptuje wprowadzanie przez STDIN i drukuje do STDOUT.
Wyjaśnienie
źródło
JavaScript (ES6), 72 bajty
Rozdzielenie
/([^\W\d_aeiouy])/
powoduje, że spółgłoski spadają w nieparzystych wpisach w tablicy. Następnie wystarczy zamienić te wpisy z równoważnym wpisem odliczającym od końca tablicy i połączyć wynik razem.źródło
JavaScript (ES6), 57
70Edytuj Niesamowite 20% oszczędności dzięki x @ Neil
Późno na imprezę, ale wydaje się, że wszyscy javascript coś przeoczyli
Test
źródło
c.pop()
.Perl 5,
926855 bajtówZaoszczędzono 37 bajtów dzięki pomocy @manatwork . ;-)
Tłumaczenie rozwiązania @Lynn Python na Perla.
źródło
g
siła „ ”:@s=split//;
→@s=/./g;
ifor(@s){push@a,$_ if(/[^\Waeiou]/);}
→@a=/[^\Waeiou]/g;
. To znaczy,m//
zeg
modyfikatorów zwraca tablicę wszystkich meczów.@b=@a=…
. Równieżfor
o jedną instrukcję w bloku (w takim przypadku;
nie jest konieczne po to), można przekształcić go w modyfikatora oświadczenie i części ogranicznikami:print$_~~@b?pop@a:$_ for/./g
. (Tak, przepraszam, przegapiłem to: nie trzeba przechowywać@s
wartości w zmiennej.)Pyth,
26252423 bajtówZestaw testowy.
źródło
Julia, 53 bajty
To pobiera tablicę znaków jako dane wejściowe i odwraca spółgłoski w miejscu. Wypróbuj online!
Kredyt trafia do @ Sp3000 za sprawdzanie spółgłoski małymi literami.
Jak to działa
i=find(...,s)
zwraca wszystkie indeksy s, dla których predykat ... zwraca true i zapisuje je jako zmienną i .c->'}'>c∉"aeiouy"<"$c"
wykonuje trzy testy i zwraca wartość true tylko wtedy, gdy wszystkie są dodatnie.'}'>c
sprawdza, czy znak c jest przed { ."aeiou"
sprawdza, czy ciąg c występuje po a .c∉"aeiouy"
sprawdza, czy c nie jest samogłoską.Na koniec
s[i]
zwraca wszystkie spółgłosek is[flipud(i)]=s[i]
przypisuje je do pozycji ws, które odpowiadają odwróconym indeksom wi .źródło
∉
)?Java,
319305261188 bajtówPodziękowania dla @ Leaky Nun za pomoc w tym :-)
Stary:
Inspiracja zaczerpnięta stąd ❤
Nie golfił
źródło
0
jako znaku specjalnego (null
gwarantuje się, że nie będzie w ciągu) i możesz to sprawdzićs[i]<1
(nie ma ujemnego znaku)char
cię na kawałki. :)Rubin,
5350 bajtów-3 bajty z @manatwork
Wypróbuj tutaj
źródło
Python 2,
10398100 bajtówPort mojej odpowiedzi JavaScript. Edycja: Zapisałem 5 bajtów dzięki @ Dennis ♦, z których natychmiast musiałem wydać dwie cyfry poprawiające.
źródło
R, 120 bajtów
Nowa odpowiedź:
przyjmuje ciąg znaków jako x
Stara odpowiedź poniżej (110 bajtów) była z mojej strony kiepska, co właśnie odwróciło spółgłosek:
źródło
APLX, 31 bajtów
⎕a~'aeoiuy'
małe litery bez samogłosekt←⍞
przechowują wprowadzane znaki jako tc←(
…)∊
przechowują logiczne „spółgłoski?” jak ct/⍨
ekstrakt (spółgłosek) z t⌽
odwróć(c/t)←
zamień spółgłosek z (odwrócone)t
zwraca zmodyfikowany ciągźródło
Python 2.7, 144 bajty
To najpierw buduje odwróconą listę spółgłosek, a następnie wstawia każdy z pozostałych znaków z powrotem w oryginalnym indeksie.
Bez golfa:
https://repl.it/C30O
źródło
Matematyka 216 bajtów
źródło
Haskell,
157131 bajtówAktualizacja
Rozwiązanie @ atlasologa uświadomiło mi, że potrzebuję tylko listy spółgłosek zamiast par (nie trzeba ich jednak odwracać, ponieważ używam prawego zagięcia).
Nie golfił
Stary
Tworzy listę par spółgłosek, a następnie przechodzi przez łańcuch, zastępując każdą spółgłoskę, używając tej listy.
Trochę prymitywne, ale chciałem to zrozumieć, nie patrząc najpierw na odpowiedzi. :)
źródło
if ... then ... else
. b)f
lepiej napisać jako operator infix, powiedzmy%
. c) nie potrzebują dla wewnętrznej pary()
w((r:q),s)
. d) zastępuje""
się_
w 2 liniif
. Łącznie (k
pozostaje taka sama)c%(r:q,s)|c`elem`k=(q,r:s)|1<2=(r:q,c:s);c%(_,s)=("",c:s);g s=snd$foldr(%)(filter(`elem`k)s,"")s
.s-lang ,
1716 bajtów (niekonkurujących)Zapisano jeden bajt, ponieważ s-lang nie wymaga już ostatniego nawiasu argumentów
Wypróbuj online!
Zacząłem pracować nad językiem golfowym do manipulacji strunami (od dłuższego czasu chciałem to zrobić) i pomyślałem, że będzie to zabawne pytanie.
Wyjaśnienie:
r
odwraca ciąg z danym dopasowaniem wyrażenia regularnego (jeśli nie podano argumentu wyrażenia regularnego, domyślnie będzie to.
)[
rozpoczyna opcjonalny argument wyrażenia regularnego dlar
(?![aeiouy])\w
regex pasujący do dowolnego znaku spółgłoskowego z wyłączeniem y (niestety JavaScript nie pozwala na odejmowanie klas znaków)]
zwykle kończy opcjonalny argument wyrażenia regularnego dlar
, ale nie jest nam potrzebny, ponieważ jest to ostatnia funkcja i ostatni argumentźródło
Matlab, 67 znaków
Dla wejścia
'this is a string of- stuff.'
produkuje
s = ffit is a fgnirt os- ssuht.
si
to wskaźniki spółgłosek w ciągu wejściowym. Ostatnia instrukcja zastępuje te znaki tymi samymi znakami, ale w odwrotnej kolejności przez indeksowanie.źródło
-
. Pytanie mówi, że każda interpunkcja jest poprawnym wprowadzeniem i należy ją zignorować. Musisz także użyć,input('')
aby pobrać dane lub napisać anonimową funkcję, ponieważ nie możemy zaakceptować zmiennej jako takiej.flip
do odwrócenia łańcucha.ans
, ponieważ do tego jest przypisane domyślne wejście do konsoli Matlab?s=input('')
lub jakoś przekształcić w anonimową funkcję@(s)
PowerShell , 81 bajtów
Wypróbuj online!
Mniej golfa:
PowerShell , 88 bajtów, -f
Wypróbuj online!
źródło
q / kdb +, 45 bajtów
Rozwiązanie:
Wyjaśnienie:
Znajdź indeksy spółgłosek i zamień je na odwrócone spółgłosek:
Uwagi:
Miałem 3 sposoby na zbudowanie listy spółgłoskowej, ta w rozwiązaniu jest nieco lepsza niż alternatywy:
"bcdfghjklmnpqrstvwxz"
na 22 znaki (najbardziej nudne).Q.a _/0 3 6 11 16 19
na 21 znaków (trochę fajnie, upuść każdy indeks).Q.a except"aeiouy"
na 19 znaków (drugi najbardziej nudny)źródło
Jq 1,5 ,
289263 bajtówWyjaśnienie
Przykładowy przebieg
Wypróbuj online
źródło
Java 8, 157 bajtów
Wypróbuj online!
Uwaga: wypisuje ostrzeżenia kompilatora na stderr.
Wyjaśnienie:
Nie będę kłamał, moim jedynym celem było pokonanie tej odpowiedzi
źródło
APL (Dyalog Extended) , 22 bajty
Wypróbuj online!
źródło