To dość łatwe wyzwanie.
Wyzwanie
Dane wejściowe będą zawierać ciąg znaków (nie null
lub pusty) o maksymalnej długości 100. Wypisz liczbę samogłosek w każdym słowie łańcucha, oddzielone spacjami.
Zasady
- Ciąg nie będzie miał więcej niż 100 znaków.
- Ciąg będzie zawierać tylko alfabetów
A-Z
,a-z
a także może zawierać spacji. - Dane wejściowe muszą być pobierane z
stdin
argumentów wiersza polecenia lub. - Dane wyjściowe muszą być wyprowadzane w
stdout
. - Możesz napisać pełny program lub funkcję, która pobiera dane wejściowe
stdin
i generuje wynik. - Samogłoski, które Twój program / funkcja musi liczyć, to
aeiou
iAEIOU
.
Przypadki testowe
This is the first test case --> 1 1 1 1 1 2
one plus two equals three --> 2 1 1 3 2
aeiou AEIOU --> 5 5
psst --> 0
the quick brown fox jumped over the lazy dog --> 1 2 1 1 2 2 1 1 1
Punktacja
To jest golf golfowy , więc wygrywa najkrótsze przesłanie (w bajtach).
stdin
zstdout
. Nie lubię „uzyskiwać danych wejściowych” za pomocą argumentów funkcji. argumenty wiersza poleceń wydają się być w porządku. Dodałem go do postu.The name "vowel" is often used for the symbols that represent vowel sounds in a language's writing system, particularly if the language uses an alphabet. In writing systems based on the Latin alphabet, the letters A, E, I, O, U, and sometimes Y are all used to represent vowels. However, not all of these letters represent vowels in all languages.
Co rozumiesz przez samogłoski?Odpowiedzi:
Pyth, 17 bajtów
Proste rozwiązanie. Wypróbuj online: Demonstracja lub Uprząż testowa
Wyjaśnienie:
źródło
C,
113 108 10396 bajtówDzięki @ andrea-biondo za wyjątkowo przyjemną oszczędność 5 bajtów.
Nadal czuję się tak, jakby był rozdęty, więc mam nadzieję, że uda mi się dziś wieczorem znieść trochę bajtów.
Ciekawe jest chyba to
będzie,
1
jeślic
jest samogłoską ASCII (wielkimi lub małymi literami) i0
dla innych znakówa-zA-Z
.c-65&31
Mapy podwyrażeń'a'
oraz'A'
do0
,'b'
i'B'
do2
itp. Gdy dodamy33
samogłoski odpowiadają33, 37, 41, 47, 53
odpowiednio liczbom , z których wszystkie są (dogodnie) liczbą pierwszą. W naszym przedziale dzielą się tylko takie liczby124701951 = 33*37*41*47*53
, tj. Tylko w przypadku samogłosek reszta124701951%(...)
będzie wynosić zero.EDYCJA: W ten sposób można rozważyć wyrażenie, w
!(n%((c-65&31)+s))
którym(n,s) = (124701951, 33)
określa się, czy znakc
jest samogłoską. W komentarzach @ andrea-biondo wskazał, że pary(n,s) = (2016,28)
można również użyć w tym wyrażeniu do określenia samogłoski. Zostawię powyższe wyjaśnienie w odniesieniu do liczb pierwszych powyżej, ale powód tego krótszego parowania jest ponownie, ponieważ w zakresie 28--53 jedyne liczby z czynnikami pierwszymi całkowicie w zestawie czynników pierwszych w 2016 r. Wynoszą 28, 32, 36, 42, 48, które dokładnie odpowiadają samogłosek.EDYCJA 2: Kolejne 5 bajtów zapisanych, ponieważ
(c-65&31)+28
można je skrócićc%32+27
.EDYCJA 3: Przekształcony w pętlę „do-while”, aby ostatecznie uzyskać mniej niż 100 bajtów.
Przypadki testowe:
źródło
a;
zewnątrzmain
. W ten sposób można zmniejszyć niektóre bajty jak nie trzeba zadeklarowaća
wmain(...)
, a także, nie trzeba zainicjowaća
z pętli.a
jest inicjowany ponownie w każdej pętli, więc nie można zainicjować go raz na zero, deklarując globalny. Napisałem małego bruteforcera, aby znaleźć najmniejszą(n, s)
parę, taką jakn%((c-65&31)+s)
zero dla samogłosek i niezerowa dla spółgłosek (az, AZ). Znalazłem(2016, 28)
i wydaje się, że działa dobrze:!(2016%((c-65&31)+28))
jest o 5 znaków krótszy. W każdym razie bardzo fajne rozwiązanie :)CJam,
2119 bajtówJak to działa :
Wypróbuj online tutaj
źródło
R
4443 bajtówNiegolfowane + wyjaśnienie:
źródło
Perl,
35343130
znaki+1
dla-n
.Podobnie jak wiele kodów Perla, działa to od prawej do lewej.
split
podzieli wprowadzony wiersz na białe znaki.map
uruchomi kod pomiędzy{}
każdym podzielonym słowem.lc
sprawia, że słowo jest małe.=~y/aeiou//
poda nam liczbę samogłosek..$"
doda spację do słowa.say
następnie drukuje wszystkie słowa!Biegnij z:
źródło
Python 3, 65 bajtów
Bardzo prosty, dość czytelny.
w
oznacza słowo,c
oznacza charakter.źródło
Perl: 30 znaków
(Rodzaj wymusza reguły: liczby na wyjściu są oddzielone tyloma spacjami, ile były słowa wejściowe.)
Przykładowy przebieg:
Perl: 27 znaków
(Wystarczy, aby pokazać, jak krótkie byłoby, gdybym nie zapomnieć o
y///
's wartości zwracanej. Znowu. A teraz idź i upvote chilemagic jest odpowiedź , która przypomniała mi oy///
„s wartości zwracanej. Ponownie).źródło
s!\w+!lc($&)=~y/aeiou//!ge
sprowadza się do27
bajtów (26 znaków +1 dla-p
.y///
. :(Rubinowy, 38 bajtów
Stosowanie:
źródło
JavaScript ( ES6 ), 68
I / O przez wyskakujące okienko. Uruchom fragment w przeglądarce Firefox, aby go przetestować.
źródło
Rebol - 70
źródło
PowerShell, 35 bajtów
Trochę nudne, ale tak naprawdę rywalizujące choć raz? (Program PowerShell domyślnie rozróżnia wielkość liter, woo)
źródło
echo <word> | code
, gdzie <słowo> to twoje słowo lub frazaBash - 85
Wyjaśnienie
read l
odczytać jedną linię z wejściafor w in l
dzieli linię na słowa za pomocą separatora białych znakówx=${w//[^aouieAOUIE]/}
usuwa wszystkie słowa oprócz samogłosek ze słowa${#x}
to długość wynikowego ciągu === liczba samogłosekźródło
while
..do
..done
byłby krótszy. Nie potrzebowałem również ostatniego/
w podstawieniu wzoru. I jedno dosłowne miejsce jest krótsze niż cytat.read l;for w in $l;do x=${w//[^aouieAOUIE]};echo -n ${#x}\ ;done;echo
Julia,
76726965 bajtówNiegolfowane + wyjaśnienie:
Będzie to obejmowało jedno końcowe miejsce, które, jak mi się wydaje, jest uzasadnione.
źródło
Mathematica, 95 bajtów
Nie wygrywam żadnych konkursów, ale ...
źródło
InputString
, czy istnieje w interfejsie internetowym, jest to okno dialogowe w Mathematica.)InputString
pobiera następny wiersz danych wejściowych.golflua, 55 bajtów
Podstawowe dopasowanie wzorców samogłosek po wymuszeniu małych liter. Byłby (nie golfowy) odpowiednik Lua
źródło
gsub('[aeiouAEIOU]','')
i pomijanie byłoby o 2 znaki krótszelower()
.R , 139 bajtów
Odczyt / zapis stdout () jest okropny
źródło
cat()
zamiastwrite(..., stdout())
.Python 3, 72 bajty
Zainspirowany @randomra „s odpowiedź . Ma nieco
tę samą długość, ale używa wyrażenia regularnego zamiast listowego. Jest również mniej czytelny.źródło
import re;print(*map(len,re.sub("[^aeiou ]","",input()).split()))
. (Zamiast tego użyj nowej linii;
).2
wielkość liter ( jest to flaga bez rozróżniania wielkości liter) i dzielona według," "
aby mogły istnieć rzeczy o długości 0PHP - 94
Wersja bez golfa
źródło
Cel C, 223 bajty
Nie jest to najbardziej zwarty język, ale działa.
Wersja nieskompresowana:
źródło
Matlab, 73 bajty
Twoje wyzwanie nie jest bardzo jasne (ale jest interesujące). jestem zarozumiały
a
,e
,i
,o
,u
.Kod:
źródło
rs , 50 bajtów
To się nie liczy; rs został przesłany około 2 tygodni po opublikowaniu. Jednak najwyraźniej i tak nic by to nie wygrało, więc nadal jest fajnie.
Demo na żywo.
Implementacja jest raczej prosta:
źródło
Perl,
6045Dzięki kirbyfan64sos za uratowanie mnie 15 bajtów - to naprawdę pomogło!
Zauważ, że na końcu wyjścia jest dodatkowe miejsce.
źródło
split
, ustawiając dodawanie$/=" ";
, i możesz zewrzeć prefiks pętli dowhile(<>)
. Po tych dwóch zmianach kod staje się$/=" ";while(<>){$n=()=/[aeiou]/gi;print"$n "}
, oszczędzając 14 bajtów!Haskell,
7668 bajtówProsta implementacja, nie jestem pewien, czy jest tu coś do gry w golfa.
źródło
KDB (Q), 30 bajtów
Wyjaśnienie
Test
źródło
Smalltalk - 66
72To jest w Smalltalk / X; nazwy stdin i stdout mogą być różne w squeak / pharo.
W Smalltalk / X (i wielu innych dialektach) symbole rozumieją #value :, więc można ją skrócić do 66 znaków:
Jeśli kodowane jako funkcja, która otrzymuje ciąg jako argument „s”:
Oczywiście w prawdziwym kodzie można użyć funkcji narzędzia „f”, która zwraca wektor zliczeń, i wydrukuje go. Jednak format wyjściowy nie jest dokładnie tym, czego wymagało wyzwanie:
źródło
Python 2, 76 bajtów
Zrobiłem to, zanim zobaczyłem inne rozwiązanie, a następnie sprawdziłem, aby znaleźć dwa rozwiązania P3, które są krótsze :( Ograniczenia Darn P2.
źródło
PowerShell, 65 bajtów
przetestuj za pomocą poniższego wzoru po zapisaniu jako
vowels.ps1
W ten sposób jest to rzeczywisty skrypt, a nie tylko fragment kodu, spełniając w ten sposób ograniczenie:
„Dane wejściowe muszą być pobierane z argumentów stdin lub wiersza poleceń.”
źródło
Galaretka , 7 bajtów
Wypróbuj online!
Znaleziono przy pomocy pana Xcodera na czacie
Wyjaśnienie
Jeśli dane wyjściowe muszą być rozdzielone spacjami, dołącz a
K
na końcuźródło
SAS, 72
Ograniczający format we / wy dla tego naprawdę bardzo go boli, ponieważ odpowiada tutaj za 25 bajtów.
źródło
C # 186
źródło
AEIOU
.