Вызов
Учитывая одно слово в качестве входных данных, определить, является ли слово нечетным или четным.
Нечетные и четные слова
Предположим, общие правила:
odd + odd = even
even + odd = odd
odd + even = odd
even + even = even
В алфавите нечетные буквы:
aeiou
И четные буквы:
bcdfghjklmnpqrstvwxyz
То же относится и к заглавным буквам ( AEIOU
нечетные и BCDFGHJKLMNPQRSTVWXYZ
четные).
Затем вы «добавляете» каждую букву в слове вместе. Например, слово cats
эквивалентно:
even + odd + even + even
Что упрощает до:
odd + even
Что упрощает дальше:
odd
Так что слово cats
странное.
Примеры
Input: trees
Output: even
Input: brush
Output: odd
Input: CAts
Output: odd
Input: Savoie
Output: even
Input: rhythm
Output: even
правила
Весь ввод будет одним словом, которое будет содержать только алфавитные символы.
Если слово нечетное, выведите истинное значение. Если слово четное, выведите значение фальси.
выигрыш
Самый короткий код в байтах побеждает.
code-golf
string
decision-problem
Бета распад
источник
источник
Ответы:
05AB1E , 6 байтов
объяснение
Попробуйте онлайн!
источник
EXCEL, 79 байт:
вход:
эта функция может быть размещена в любом месте, кроме А1.
Поместите слово в вопрос А1.
Выход: 0, если четный, 1, если нечетный.
источник
JavaScript (ES6),
34413332 байтаСохранено 1 байт благодаря Арно:
1
0
Предыдущие решения:
33 байта благодаря Арно:
1
0
Другой способ без побитовых операторов:
41 байт:
1
0
null
42 байта для возврата
0
вместоnull
:34 байта, разбиваются на слова без лишних букв:
Сохранено 2 байта благодаря Shaun H
источник
f=
не требуется, и вызов exec для объекта regex короче.s=>/[aeiou]/ig.exec(s).length%2
exec
сg
флагом.s=>s.split(/[aeiou]/i).length&1^1
?s=>~s.split(/[aeiou]/i).length&1
на самом деле на один байт короче.Brain-Flak
206196192178 + 3 = 181 байтПопробуйте онлайн!
Это требует
-c
флаг работал в режиме ASCII, добавляя дополнительные 3 байта к длине программы.Ungolfed
объяснение
Сначала сохраните высоту стека для будущих целей
Тогда пока стек не пустой (предполагается, что ни один из символов не равен нулю)
Вычтите девяносто семь (и сохраните 3 для последующих оптимизаций)
Если это не ноль (то есть не а)
Вычтите 4 (и сохраните 4 для дальнейшей оптимизации)
Если это не ноль (т.е. не е)
Вычтите 4 (и сохраните 4 для дальнейшей оптимизации)
Если это не ноль (то есть не я)
Вычтите 6 (и сохраните 6 для дальнейшей оптимизации)
Если это не ноль (т.е. не о)
Вычтите 6 (сохраните 6, потому что программа ожидает один позже)
Если это не ноль (то есть не вы)
Переместите остаток в другой стек и положите ноль в активный стек, чтобы избежать всех if
После того, как все ifs были удалены, удалите ноль и шесть
Как только все символы были обработаны, вычтите высоту смещения из первоначально сохраненной высоты.
Мод на двоих
источник
-c
это только +1 байт, так как когда-либо Perl ответ также добавляет только 1 байт / флаг.perl -pe'code'
всего на один байт длиннееperl -e'code'
.C, 42 байта
Это работает с GCC 4.x на процессоре x86-64. Результаты могут отличаться в зависимости от настроек.
Проверьте это на repl.it .
За счет дополнительных 5 байтов можно избежать неопределенного поведения, поэтому код должен работать до тех пор, пока int имеет ширину не менее 32 бит.
Как это работает
По модулю 32 коды символов всех нечетных букв равны 1 , 5 , 9 , 15 и 21 . 2130466 - это 32-разрядное целое число, которое устанавливает биты в этих позициях и не устанавливает биты во всех остальных.
Когда f вызывается в строке, он сначала проверяет, является ли первый символ строки нулевым байтом (терминатор строки). Если она есть,
*s
дает 0 и F возвращает 0 . В противном случае*s
выведите символьный код буквы и будет выполнен правильный аргумент логического AND (&&
).Для
>>
, GCC генерирует команду сдвига. На процессоре x86-64 соответствующая инструкция для 32-разрядного целого числа игнорирует все, кроме младших 5 битов правильного аргумента, что позволяет избежать уменьшения*s
по модулю 32 . Сдвиг вправо и последующее побитовое И с 1 извлекает бит 2130466 , соответствующий букве, который будет равен 1 тогда и только тогда, когда буква нечетная.После этого мы увеличиваем указатель s (фактически отбрасывая первую букву), рекурсивно вызываем f для обезглавленной строки и берем побитовый XOR результата сверху и результата рекурсивного вызова.
источник
Сед
44(42 + 1 для -n) 43-1 спасибо Нейлу
Принты
o
для нечетных и ничего для четныхисточник
s/[aeiou][^aeiou]*[aeiou]//gi
может сэкономить вам байт, если я посчитал правильно.Python, 41 байт
источник
Python, 42 байта
Не так много, чтобы объяснить здесь. Безымянная функция, которая возвращает 0 или 1.
источник
Brain-Flak ,
524, 446, 422 байтаПопробуйте онлайн!
Ungolfed, более читаемая версия:
источник
Желе ,
13 1211 байт-1 байт благодаря @Luis Mendo (используйте
Ḃ
для замены%2
)-1 байт благодаря @Dennis (используйте сжатие строк)
Все тестовые случаи в TryItOnline
Как?
Не конкурирует, 5 байт (так как я только что добавил функцию
Øc
)Тестовые случаи также в TryItOnline
То же, что и выше, но
Øc
дает гласные латинского алфавита,'AEIOUaeiou'
источник
%2
наḂ
“¡ẎṢɱ»
.“”«»‘’
(также⁾
есть строка, состоящая из двух символов, но используемая в сжатых строках).Haskell,
3837 байтСпасибо Angs за один байт!
источник
odd
вместоeven
. Сохраняет один байт!Python 3, 53 байта
Это может быть, вероятно, в дальнейшем:
источник
in
и'aeiou'
иfor
и используйтеsum
для сохранения 8 байт:lambda n:sum(x in'aeiou'for x in n.lower())&1
(хотя, как вы можете видеть из поста DJMcMayhem, использование всех десяти гласных также короче)sum()
До этого гольфа я не знал о команде, поэтому еще раз кое-чему научился! Хорошего дня :)Ява, 73
видел пару других java ответов, иначе бы не поделился. Спасибо Phaeze за сохранение байта.
источник
%2>0
C 52 байта
главное и результат:
источник
h(o){return~-o?1^h(1+strpbrk(o,"aeiouAEIOU")):1;}
экономит 3 байта.Pyth, 14 байт
Попробуйте онлайн!
Объяснение:
источник
Рубин, 30 байтов
источник
Vim,
32, 31, 29 нажатий клавишПоскольку V-интерпретатор обратно совместим, вы можете попробовать его онлайн! Прямо здесь.
ОдинТри байта сохранен благодаря m-chrzan!источник
s/.../gi
вместоs/\c.../g
?'<C-r>"'
->@"
.@"
15 минут назад. Лучший совет Vim, который у меня есть, это использовать:help foo
и/
документацию: P.:h foo
это короче. : PЯва 7, 88
Ungolfed:
источник
тусклый , 14 байтов (не конкурирующий)
Я думал, что это будет весело, простая задача для нового языка.
объяснение
a
- вставить новый массив в матрицуr[aeiou]}
- подсчитать вхождения всех значений, соответствующих регулярному выражению "[aeiou]" в первом массиве (поскольку первый массив содержит входные данные), игнорируя регистр, и перенести это значение в конец последнего массива.e
- если последнее число в последнем массиве является четным (которое мы устанавливаем для числа вхождений), выполняйте следующие операции вплоть до закрывающей скобки ("}")t
- остановить выполнение, очистить матрицу и установить первое значение равным false}
- конецe
блока кодаT
- остановить выполнение, очистить матрицу и установить для первого значения значение trueПопробуйте онлайн!
Используйте поле ввода для ввода слова.
Я скоро добавлю документацию ...
источник
PowerShell v2 +,
4542 байтаПринимает ввод
$args[0]
, передает его-replace
для удаления всех не гласных символов, принимает полученный результат.length
и%2
проверяет, является ли он нечетным / четным.Примеры
источник
J, 20 байт
Прямой подход
объяснение
источник
Japt, 7 байт
Проверьте это онлайн!Выходы 1 для нечетных, 0 для четных.
Как это работает
источник
Октава, 34 байта
Это на 6 байт короче, чем традиционный подход, использующий
ismember
,@(s)mod(sum(ismember(s,'aeiouAEIOU')),2)
и два байта короче , чем регулярное выражение подхода:@(s)mod(nnz(regexpi(s,'[aeiou]')),2)
.Проверьте это здесь .
источник
PHP, 41 байт
Это выводит -1 для правды и 0 для фальси.
источник
Mathematica, 44 байта
Дает True для нечетной строки и False для четной.
источник
q, 29 байт
источник
C #
64625650 байтМы уже используем linq, поэтому Contains сохраняет 2 байта над IndexOfИспользование метода перегрузки Count сохраняет 6 байтовАнонимная функция, которая берет строку и считает нечетные буквы, затем возвращает true, если их нечетное число, или false, если их нет.
Это новое решение разбивает строку на любой из символов в данном массиве символов. Механика этого переворачивает значение
%2
результата; 0 теперь нечетное, а 1 четное, следовательно1>
.Попробуйте онлайн здесь!
источник
string.Split()
Для подсчета гласных требуется всего 50 байтов , а LINQ вам не нужен.s=>1>s.Split("aeiouAEIOU".ToCharArray()).Length%2;
Сетчатка , 19 байт
Попробуйте онлайн!(Первая строка включает набор тестов, разделенных переводом строки.)
Первая строка считает гласные на входе. Вторая строка проверяет, что результат нечетный.
источник
MATL ,
8, 7 байтовПопробуйте онлайн!
Объяснение:
источник
Пайк, 10 байт
Попробуй это здесь!
источник