Это довольно простой вызов.
Вызов
Ввод будет содержать строку (не null
пустую) максимальной длины 100. Выведите количество гласных в каждом слове строки, разделенных пробелами.
правила
- Длина строки не должна превышать 100 символов.
- Строка будет содержать только алфавиты
A-Z
,a-z
а также может содержать пробелы. - Входные данные должны быть получены из
stdin
аргументов или командной строки. - Вывод должен быть выведен в
stdout
. - Вы можете написать полную программу или функцию, которая принимает входные данные
stdin
и выводит результат. - Гласные , что ваши потребности программы / функции для подсчета числа являются
aeiou
иAEIOU
.
Тестовые случаи
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
счет
Это код-гольф , поэтому выигрывает самое короткое представление (в байтах).
stdin
сstdout
. Я не люблю "получать ввод" через аргументы функции. аргументы командной строки кажутся нормальными. Я добавил это в пост.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.
Что вы подразумеваете под гласными?Ответы:
Pyth, 17 байт
Простое решение. Попробуйте онлайн: демонстрация или тестовая привязь
Объяснение:
источник
C
113 108 10396 байтСпасибо @ andrea-biondo за особенно хорошее сохранение 5 байтов.
Это все еще кажется раздутым, так что, надеюсь, я смогу записать его немного позже, сегодня вечером.
Интересная часть, пожалуй,
будет,
1
еслиc
гласный ASCII (в верхнем или нижнем регистре), а0
для других символовa-zA-Z
. Подвыражениеc-65&31
карты'a'
и'A'
в0
,'b'
и'B'
в2
, и т.д. Когда мы добавим33
гласные соответствуют номерам ,33, 37, 41, 47, 53
соответственно, все из которых (удобно) первична. В нашем диапазоне будут делиться только такие числа124701951 = 33*37*41*47*53
, т. Е. Только для гласных остаток124701951%(...)
будет равен нулю.РЕДАКТИРОВАТЬ: Таким образом, можно рассмотреть выражение
!(n%((c-65&31)+s))
где,(n,s) = (124701951, 33)
как определение,c
является ли символ гласным. В комментариях @ andrea-biondo указал, что пара(n,s) = (2016,28)
может также использоваться в этом выражении для определения гласности. Я оставлю текущее объяснение в терминах простых чисел, приведенных выше, но причина, по которой это более короткое спаривание работает снова, заключается в том, что в диапазоне 28--53 единственные числа с простыми коэффициентами, полностью входящими в набор простых факторов 2016 года, составляют 28, 32 36, 42, 48, которые точно соответствуют гласным.EDIT2: еще 5 байтов сохранены, так как
(c-65&31)+28
могут быть сокращены доc%32+27
.EDIT3: преобразован в цикл do-while, чтобы в итоге получить его ниже 100 байт.
Тестовые случаи:
источник
a;
снаружиmain
. Таким образом, вы уменьшаете несколько байт , как вам не нужно объявлятьa
вmain(...)
а также, не нужно инициализироватьa
из цикла.a
повторно инициализируется в каждом цикле, поэтому вы не можете инициализировать его один раз в ноль, объявив global. Я написал небольшой брутфорсер, чтобы найти наименьшую(n, s)
пару, такуюn%((c-65&31)+s)
как ноль для гласных и ненулевой для согласных (az, AZ). Я нашел,(2016, 28)
и это, кажется, работает хорошо:!(2016%((c-65&31)+28))
на 5 символов короче. Во всяком случае, очень хорошее решение :)CJam,
2119 байтовКак это работает :
Попробуйте онлайн здесь
источник
R,
4443 байтаUngolfed + объяснение:
источник
Perl,
35343130
символы+1
для-n
.Как и в большинстве Perl-кода, это работает справа налево.
split
разделит введенную строку на пробел.map
будет запускать код между{}
каждым словом, которое было разделено.lc
делает слово строчным.=~y/aeiou//
даст нам количество гласных..$"
добавит пробел к слову.say
затем печатает все слова!Бежать с:
источник
Python 3, 65 байт
Очень просто, довольно читабельно.
w
обозначает слово,c
обозначает характер.источник
Perl: 30 символов
(Вид силы правил: числа в выходных данных разделены таким же количеством пробелов, как и входные слова.)
Образец прогона:
Perl: 27 символов
(Просто , чтобы показать , как мало было бы , если бы я не забыл о
y///
«s возвращаемого значения. Снова. Теперь иди и upvote chilemagic » s ответ , который напомнил мне оy///
«s возвращаемого значения. Снова.)источник
s!\w+!lc($&)=~y/aeiou//!ge
приводит к27
байтам (26 символов +1 для-p
.y///
. :(Рубин, 38 байт
Использование:
источник
JavaScript ( ES6 ), 68
Ввод / вывод через всплывающее окно. Запустите фрагмент в Firefox для проверки.
источник
Реболь - 70
источник
PowerShell, 35 байт
В некотором роде скучно, но на самом деле конкурировать за один раз? (По умолчанию PowerShell нечувствителен к регистру)
источник
echo <word> | code
где <слово> - ваше слово или фразаБаш - 85
объяснение
read l
читать одну строку из вводаfor w in l
разбивает строку на слова с помощью разделителя пробеловx=${w//[^aouieAOUIE]/}
удаляет из слова все, кроме гласных${#x}
длина полученной строки === количество гласныхисточник
while
..do
..done
было бы короче. Также не нужно последнее/
при замене шаблона. И один буквальный пробел короче, чем указано.read l;for w in $l;do x=${w//[^aouieAOUIE]};echo -n ${#x}\ ;done;echo
Юлия,
76726965 байтUngolfed + объяснение:
Это будет включать в себя один пробел, который, как мне сказали, является законным.
источник
Mathematica, 95 байт
Не собираюсь выигрывать конкурсы, но ...
источник
InputString
существует в веб-интерфейсе, это диалоговое окно в Mathematica.)InputString
занимает следующую строку ввода.golflua, 55 байт
Базовое сопоставление с гласными после принудительной строчной буквы. Эквивалент Lua (ungolfed) будет
источник
gsub('[aeiouAEIOU]','')
и пропуститьlower()
.R 139 байт
Чтение / запись stdout () ужасно
источник
cat()
а неwrite(..., stdout())
.Python 3, 72 байта
Вдохновленный @randomra «s ответ . Это
та же длина,немного длиннее, но с использованием регулярных выражений вместо понимания списка. Это также менее читабельно.источник
import re;print(*map(len,re.sub("[^aeiou ]","",input()).split()))
. (Используйте новую;
2
это флаг без учета регистра) и разбиваться на части," "
чтобы можно было иметь длину 0PHP - 94
Неуправляемая версия
источник
Objective-C, 223 байта
Не самый компактный язык, но он работает.
Несжатая версия:
источник
Matlab, 73 байта
Ваша задача не очень понятна (но она интересна). Я предполагаю, что
a
,e
,i
,o
,u
.Код:
источник
RS , 50 байтов
Это не совсем считается; RS был загружен через 2 недели после публикации. Тем не менее, очевидно, что это все равно ничего не выиграет, так что все равно круто.
Живая демоверсия.
Реализация довольно проста:
источник
Perl,
6045Спасибо kirbyfan64sos за то, что я сэкономил 15 байтов - это действительно помогло!
Обратите внимание, что в конце вывода есть дополнительное место.
источник
split
, установив добавление$/=" ";
, и можете замкнуть префикс цикла наwhile(<>)
. С этими двумя изменениями код становится$/=" ";while(<>){$n=()=/[aeiou]/gi;print"$n "}
, сохраняя 14 байтов!Haskell,
7668 байтПростая реализация, не уверен, есть ли здесь что-нибудь для гольфа.
источник
KDB (Q), 30 байтов
объяснение
Тестовое задание
источник
Smalltalk - 66
72Это в Smalltalk / X; имена для stdin и stdout могут отличаться в squeak / pharo.
В Smalltalk / X (и многих других диалектах) символы понимают #value:, поэтому его можно сократить до 66 символов:
Если кодируется как функция, которая получает строку в качестве аргумента "s":
Конечно, в реальном коде можно было бы использовать служебную функцию «f», которая возвращает вектор отсчетов, и печатать это. Тем не менее, выходной формат тогда не совсем то, что требовал запрос:
источник
Python 2, 76 байт
Я сделал это прежде, чем увидел какое-либо другое решение, затем проверил, чтобы найти два решения P3, которые короче :( Черт возьми ограничения P2.
источник
PowerShell, 65 байт
протестируйте с помощью шаблона ниже после сохранения как
vowels.ps1
Таким образом, это настоящий скрипт, а не просто фрагмент кода, удовлетворяющий таким образом ограничению:
Msgstr "Ввод должен быть получен из аргументов стандартного ввода или командной строки."
источник
Желе , 7 байт
Попробуйте онлайн!
Найдено с помощью мистера Xcoder в чате
объяснение
Если выходные данные должны быть разделены пробелами, тогда добавьте a
K
в конецисточник
САС, 72
Ограничительный формат ввода / вывода для этого действительно вредит этому, поскольку он отвечает за 25 байтов здесь.
источник
C # 186
источник
AEIOU
.