Wyzwanie
Biorąc pod uwagę jedno słowo jako dane wejściowe, określ, czy słowo jest nieparzyste, czy parzyste.
Dziwne i parzyste słowa
Załóż ogólne zasady:
odd + odd = even
even + odd = odd
odd + even = odd
even + even = even
W alfabecie litery nieparzyste to:
aeiou
A litery parzyste to:
bcdfghjklmnpqrstvwxyz
To samo dotyczy wielkich liter ( AEIOU
są nieparzyste i BCDFGHJKLMNPQRSTVWXYZ
są parzyste).
Następnie „dodajesz” każdą z liter w słowie razem. Na przykład słowo cats
to jest równoważne z:
even + odd + even + even
Co upraszcza:
odd + even
Co dodatkowo upraszcza:
odd
Więc słowo cats
jest dziwne.
Przykłady
Input: trees
Output: even
Input: brush
Output: odd
Input: CAts
Output: odd
Input: Savoie
Output: even
Input: rhythm
Output: even
Zasady
Wszystkie wprowadzone dane będą pojedynczym słowem, które będzie zawierać tylko znaki alfabetyczne.
Jeśli słowo jest nieparzyste, wypisz prawdziwą wartość. Jeśli słowo jest parzyste, wypisz wartość falsey.
Zwycięski
Najkrótszy kod w bajtach wygrywa.
code-golf
string
decision-problem
Rozpad beta
źródło
źródło
Odpowiedzi:
05AB1E , 6 bajtów
Wyjaśnienie
Wypróbuj online!
źródło
EXCEL, 79 bajtów:
input:
tę funkcję można umieścić w dowolnym miejscu Z WYJĄTKIEM A1
Zadaj swoje pytanie w A1.
Wyjście: 0 jeśli parzyste, 1 jeśli nieparzyste.
źródło
JavaScript (ES6),
34413332 bajtyZaoszczędzono 1 bajt dzięki Arnauldowi:
1
0
Poprzednie rozwiązania:
33 bajty dzięki Arnauldowi:
1
0
Innym sposobem bez operatorów bitowych:
41 bajtów:
1
0
null
42 bajty do zwrotu
0
zamiastnull
:34 bajty, łamanie słów bez nieparzystych liter:
Zaoszczędzono 2 bajty dzięki Shaunowi H.
źródło
f=
nie jest potrzebne, a wywołanie exec na obiekcie wyrażenia regularnego jest krótsze.s=>/[aeiou]/ig.exec(s).length%2
exec
zg
flagą.s=>s.split(/[aeiou]/i).length&1^1
?s=>~s.split(/[aeiou]/i).length&1
jest w rzeczywistości o jeden bajt krótszy.Brain-Flak
206196192178 + 3 = 181 bajtówWypróbuj online!
Wymaga to działania
-c
flagi w trybie ASCII, dodając dodatkowe 3 bajty do długości programu.Nie golfił
Wyjaśnienie
Najpierw zapisz wysokość stosu do przyszłych celów
Następnie, gdy stos nie jest pusty (zakłada, że żaden ze znaków nie jest równy zero)
Odejmij dziewięćdziesiąt siedem (i zachowaj 3 do późniejszych optymalizacji)
Jeśli nie jest zero (tj. Nie jest)
Odejmij 4 (i zapisz 4 do późniejszych optymalizacji)
Jeśli nie jest zero (tzn. Nie e)
Odejmij 4 (i zapisz 4 do późniejszych optymalizacji)
Jeśli nie jest zero (tj. Nie i)
Odejmij 6 (i zapisz 6 do późniejszych optymalizacji)
Jeśli nie jest zero (tzn. Nie o)
Odejmij 6 (zapisz 6, ponieważ program oczekuje jednego później)
Jeśli nie jest zero (tj. Nie u)
Przenieś resztę do drugiego stosu i ustaw zero na aktywnym stosie, aby uciec od wszystkich ifs
Po ucieczce wszystkich ifów usuń zero i sześć
Po przetworzeniu wszystkich znaków odejmij wysokość przesunięcia od pierwotnie zapisanej wysokości.
Mod przez dwa
źródło
-c
ma tylko +1 bajt, ponieważ zawsze odpowiedź Perla dodaje tylko 1 bajt / flagę.perl -pe'code'
jest tylko jeden bajt dłuższy niżperl -e'code'
.C, 42 bajty
Działa to z GCC 4.x na procesorze x86-64. Wyniki mogą się różnić w zależności od konfiguracji.
Przetestować go na repl.it .
Kosztem kolejnych 5 bajtów można uniknąć niezdefiniowanego zachowania, więc kod powinien działać, o ile int ma szerokość co najmniej 32 bity.
Jak to działa
Modulo 32 , kody wszystkich nieparzystych liter to 1 , 5 , 9 , 15 i 21 . 2130466 jest 32-bitową liczbą całkowitą, która ustawiła bity w tych pozycjach i nie ustawiła bitów we wszystkich innych.
Kiedy f jest wywoływany na łańcuch, najpierw sprawdza, czy pierwszy znak łańcucha jest bajtem zerowym (terminator łańcucha). Jeśli tak,
*s
zwraca 0, a f zwraca 0 . W przeciwnym razie*s
podaj kod literowy i&&
zostanie wykonany odpowiedni argument logicznego AND ( ).Ponieważ
>>
GCC generuje instrukcję zmiany. Na x86-64 CPU odpowiednie wskazówki dla 32-bitowej liczby całkowitej ignoruje wszystkie ale niższe 5 bitów w prawym argumencie, który zapobiega to zmniejszeniu*s
modulo 32 . Prawe przesunięcie i następujące po nim bitowe AND z 1 wyodrębnia bit 2130466, który odpowiada literze, która będzie 1, jeśli tylko i tylko jeśli litera jest nieparzysta.Następnie zwiększamy wskaźnik s (skutecznie odrzucając pierwszą literę), wywołujemy rekurencyjnie f na ściętym łańcuchu i bierzemy bitową XOR wyniku z góry oraz wynik wywołania rekurencyjnego.
źródło
sed
44(42 + 1 dla -n) 43-1 dzięki Neilowi
Drukuje
o
na nieparzyste i nic na parzysteźródło
s/[aeiou][^aeiou]*[aeiou]//gi
może zaoszczędzić bajt, jeśli poprawnie policzyłem.Python, 41 bajtów
źródło
Python, 42 bajty
Nie wiele do wyjaśnienia tutaj. Funkcja bez nazwy, która zwraca 0 lub 1.
źródło
Brain-Flak ,
524, 446, 422 bajtówWypróbuj online!
Wersja bez golfa, bardziej czytelna:
źródło
Galaretka ,
13 1211 bajtów-1 bajt dzięki @Luis Mendo (użyj,
Ḃ
aby zastąpić%2
)-1 bajt dzięki @Dennis (użyj kompresji ciągu)
Wszystkie przypadki testowe znajdują się w TryItOnline
W jaki sposób?
Niekonkurencyjne, 5 bajtów (ponieważ właśnie dodałem funkcję
Øc
)Przypadki testowe również w TryItOnline
Tak jak powyżej, ale
Øc
daje samogłoski alfabetu łacińskiego,'AEIOUaeiou'
źródło
%2
przezḂ
“¡ẎṢɱ»
.“”«»‘’
(istnieje również⁾
ciąg znaków dwóch znaków, ale używany w skompresowanych ciągach).Haskell,
3837 bajtówDzięki Angs za jeden bajt!
źródło
odd
zamiasteven
. Oszczędza jeden bajt!Python 3, 53 bajtów
Można to prawdopodobnie pograć w golfa dalej:
źródło
in
i'aeiou'
afor
, a użyciesum
zapisać 8 bajtów:lambda n:sum(x in'aeiou'for x in n.lower())&1
(choć jak widać z postu DJMcMayhem Korzystanie wszystkie dziesięć samogłosek jest także krótszy)sum()
polecenia przed tym golfem, więc jeszcze raz się nauczyłem! Miłego dnia :)Java, 73
widziałem kilka innych odpowiedzi w języku Java, w przeciwnym razie nie podzieliłbym się nimi. Dzięki Phaeze za uratowanie bajtu.
źródło
%2>0
C 52 bajty
główny i wynik:
źródło
h(o){return~-o?1^h(1+strpbrk(o,"aeiouAEIOU")):1;}
oszczędza 3 bajty.Pyth, 14 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Rubinowy, 30 bajtów
źródło
Vim,
32, 31, 29 klawiszyPonieważ interpreter V jest wstecznie kompatybilny, możesz wypróbować go online! tutaj.
Jedentrzy bajty zapisane dzięki m-chrzan!źródło
s/.../gi
zamiasts/\c.../g
?'<C-r>"'
->@"
.@"
15 minut temu. Najlepszą wskazówką, jaką mam, jest użycie:help foo
i/
dokumentacji: P.:h foo
jest krótszy. : PJava 7, 88
Nie golfowany:
źródło
dimwit , 14 bajtów (niekonkurencyjny)
Pomyślałem, że będzie to zabawne, proste wyzwanie na początek dla nowego języka.
Wyjaśnienie
a
- wypchnij nową macierz do matrycyr[aeiou]}
- zlicz wystąpienie wszystkich wartości pasujących do wyrażenia regularnego „[aeiou]” w pierwszej tablicy (ponieważ pierwsza tablica zawiera dane wejściowe), ignorując wielkość liter i wypchnij tę wartość na koniec ostatniej tablicy.e
- jeśli ostatnia liczba w ostatniej tablicy jest parzysta (którą ustawiliśmy na liczbę wystąpień), wykonaj następne operacje aż do nawiasu zamykającego („}”)t
- zatrzymać wykonywanie, wyczyścić macierz i ustawić pierwszą wartość na false}
- koniece
bloku koduT
- zatrzymać wykonywanie, wyczyścić macierz i ustawić pierwszą wartość na trueWypróbuj online!
Użyj pola wprowadzania, aby wprowadzić słowo.
Wkrótce dodam dokumentację ...
źródło
PowerShell v2 +,
4542 bajtówPobiera dane wejściowe
$args[0]
, wysyła je,-replace
aby usunąć wszystkie znaki inne niż samogłoska, bierze wynikowe.length
i%2
sprawdza, czy jest nieparzyste / parzyste.Przykłady
źródło
J, 20 bajtów
Proste podejście
Wyjaśnienie
źródło
Japt, 7 bajtów
Przetestuj online! Wyjścia 1 dla nieparzystych, 0 dla parzystych.
Jak to działa
źródło
Oktawa, 34 bajty
Jest to 6 bajtów krócej niż przy użyciu tradycyjnego podejścia
ismember
,@(s)mod(sum(ismember(s,'aeiouAEIOU')),2)
oraz dwa bajty krótszy niż podejście regex:@(s)mod(nnz(regexpi(s,'[aeiou]')),2)
.Sprawdź to tutaj .
źródło
PHP, 41 bajtów
To daje -1 dla prawdy i 0 dla falsey.
źródło
Mathematica, 44 bajty
Daje wartość True dla nieparzystego ciągu i False dla parzystej.
źródło
q, 29 bajtów
źródło
C #
64625650 bajtówJuż używamy linq, więc Contains zapisuje 2 bajty nad IndexOfKorzystanie z metody przeciążenie Count oszczędza 6 bajtówAnonimowa funkcja, która pobiera ciąg znaków i zlicza nieparzyste litery, a następnie zwraca true, jeśli jest ich nieparzysta liczba, lub false, jeśli nie ma.
To nowe rozwiązanie dzieli ciąg na dowolny ze znaków w podanej tablicy znaków. Mechanika tego odwraca znaczenie
%2
wyniku; 0 jest teraz nieparzyste, a 1 nawet stąd1>
.Wypróbuj online tutaj!
źródło
string.Split()
zliczenia samogłosek wystarczy 50 bajtów i nie potrzebujesz LINQ.s=>1>s.Split("aeiouAEIOU".ToCharArray()).Length%2;
Retina , 19 bajtów
Wypróbuj online! (Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
Pierwszy wiersz zlicza samogłoski na wejściu. Druga linia sprawdza, czy wynik jest nieparzysty.
źródło
MATL ,
8, 7 bajtówWypróbuj online!
Wyjaśnienie:
źródło
Pyke, 10 bajtów
Wypróbuj tutaj!
źródło