Этот конкурс - дань уважения победителю конкурса «Лучшая картина» на Оскаре 2017 « La La Land Moonlight» !
Напишите функцию / программу, которая принимает строку, содержащую только буквы [A-Za-z]
, четыре символа, которые являются общими в ежедневных предложениях .,'?
и пробелах, и выводит строку в стиле La La Land.
Чтобы быть более точным, возьмите буквы до и включая первую группу гласных, и напечатайте / выведите ее дважды, добавляя каждый раз пробел, а затем печатайте / выводите всю строку. у это гласный в этом вызове. Пунктуация и заглавные буквы должны быть сохранены.
Вы можете предположить, что все строки содержат по крайней мере один гласный, и что все строки начинаются с буквы.
Тестовые случаи:
Land
La La Land
Moonlight
Moo Moo Moonlight
quEueIng
quEueI quEueI quEueIng
This isn't a single word.
Thi Thi This isn't a single word.
It's fun to play golf
I I It's fun to play golf
Ooo
Ooo Ooo Ooo
I'm okay
I I I'm okay
Hmm, no. There will be at least one vowel, but it can be anywhere.
Hmm, no Hmm, no Hmm, no. There will be at least one vowel, but it can be anywhere.
Why is y a vowel?
Why Why Why is y a vowel?
Это код-гольф, поэтому выигрывает самый короткий код на каждом языке. Пояснения приветствуются , также на основных языках.
MOONLIGHT
. И просто для удовольствия:Why did the chicken cross the road?
Ответы:
Sed 30 байтов
источник
*
вместо\+
?05AB1E ,
231918 байтСохранено 1 байт благодаря Okx .
Попробуйте онлайн! или как тестовый набор
объяснение
источник
Желе ,
24 22 20 1914 байт-5 байт, используя трюк из блестящего ответа Эминьи (ищите 10 в списке isVowel)
Попробуйте онлайн! (не совсем уверен, как сделать набор тестов для этой полной программы)
15- байтовая альтернатива:
Вот полный набор тестов.
Как?
источник
Python, 61 байт
Вот первый не основанный на регулярных выражениях язык (с использованием регулярных выражений).
Сохранено 1 байт благодаря Нейлу .
источник
JavaScript (ES6), 40
46Редактировать 5 + 1 байт, сохраненных thx @Arnauld
Слишком долго по сравнению с другими, используя тот же трюк (как обычно)
источник
'$& $& $&'
- я всегда забываю специальные долларовые символы. Спасибо. К сожалению, теперь это действительно порт ответа сетчатки Мартина.^
Требуется Retina , который - я думаю , - выглядит на все матчи по умолчанию. Но нужно ли нам это здесь?x=>(y=/.*?[aeiouy]+/i.exec(x)+' ')+y+x
Сетчатка , 24 байта
Попробуйте онлайн!
источник
Пакетная, 180 байт
Реализует конечный автомат.
g
отслеживает, видели ли мы когда-либо гласную, поэтому, если текущая буква не является гласной, мы знаем, выводить ли или продолжать следующую букву.источник
PowerShell ,
4647413938 байтПопробуйте онлайн!
Спасибо Maarten Bamelis за исправление
Сохранено 6 байтов благодаря Rynant
Сохранено
23 байта благодаря Joeyисточник
Рубин,
313230 байтДва байта сохранены благодаря GB и Cyoce.
источник
PHP,
5554 байтаПримечание: в зашифрованной версии используется кодировка IBM-850.
Запустите так:
объяснение
Просто замените регулярное выражение на нестрогое совпадение с любым символом в начале строки, за которым следует любое количество гласных (используйте
i
параметр для нечувствительности к регистру). Затем эта группа захвата печатается дважды, за которой следует вся строка.Tweaks
-R
сделать$argn
доступным (Thx Titus)источник
Javascript (ES6), 38 байт
источник
Perl, 25 + 1 (
-p
флаг)источник
Perl 6 , 30 байт
Попробуйте онлайн!
источник
{S:i/.*?<[aeiouy]>+/$/ $/ $//}
С
202196195193190180i,j,k,m,n;f(char*a){if((a[i/12]-"AEIOUY"[i++%6])%32==0)k=n=24-(i%12);else if(k&&!n--){m=j=(i-13)/12;for(i=0;i<j*2;)printf("%c%c",a[i%j],(i==j-1)*32),i++;printf(" %s", a);}m?:f(a);}
Попробуйте онлайн!
Вещи, оставленные для игры в гольф:
• Сверните две печати в одну.
• Печать моего пробела может быть изменена на
%*c
логику, я уверен.• Я использую условные выражения, которые можно удалить
•
j=(i-13)/12
может быть сокращено.• Условная проверка [AY], если
==0
это обычно не требуется, хотя в данный момент я остановился на ней (пробовал переключать if-else и отключать все==0
вместе, но для этого требуется добавить {скобки} и увеличить размер байта)Уловки, которые я использовал для игры в гольф:
• Объединение двойного для поиска строки цикла с использованием модуля по оси X и целочисленного деления по оси Y (входная строка против строки гласного). (Ось X повторяется дважды перед итерацией один раз по оси Y; первый раз с [AZ] и второй раз с [az], используя символьное значение 32 разностное.
• Отказ от необходимости использовать «[AY] и [ay]», просто взяв расстояние между наборами символов и по модулю 32. Таким образом, если расстояние равно 0 (AA) или если расстояние равно 32 (aA)
• Повторное использование целочисленных переменных, которые больше не используются в качестве логических переменных.
• Рекурсивный вызов функции с той же строкой для обработки через нее и исключения второго цикла for.
• Установите значения BOOL в соответствии с логикой установки другой переменной. (например, bool = i = 5;) чтобы выбить обоих одним камнем.
• Тернарная пустота - истинное злоупотребление. (ССЗ)
Читаемый формат:
Сбил 10 байтов благодаря Кейу Гану (в комментариях)
источник
j=(i-13)/12
может быть сокращено.i=j=k=m=n=0;
?i,j,k,m,n;
для инициализации.MATL, 33 байта
Попробуйте это на MATL Online
объяснение
источник
'(^.*?[yY%s]+)'13Y2YD'$1 '8:)YX
сохраняет 2 байта'(^.*?[%s]+)'19Y2YD'$1 '8:)YX
сохраняет еще 219Y2
не существовало, когда этот ответ был представлен, к сожалениюV ,
21, 20 байтовПопробуйте онлайн!
Объяснение:
HexDump:
Альтернативная версия (21 байт):
Попробуйте онлайн!
Это использует нелепое сжатие регулярных выражений, и ему все еще удается получить удар от других языков игры в гольф. Для справки, это примерно две трети длины обычной «несжатой» версии, а именно:
Объяснение:
Вот hexdump:
источник
Python 3 ,
7568 байтПопробуйте онлайн!
Объяснение:
Работает, генерируя логическое значение для каждого символа во входной строке на основе того, является ли он гласным, и находя самый низкий индекс
0
первого не гласного (исключая первый символ). Он возвращает подстроку к этому индексу дважды, разделенную пробелами, и исходную строку.источник
Clojure,
192188181 байт-4 байта путем встраивания
first-sp-pred
( упс ).-7 байт, удалив пропущенные пробелы
Это было гораздо более сложным, чем я думал, что это произойдет! Я вручную разбираю строку ... так как до сих пор не дошел до изучения регулярных выражений: /
Смотрите предварительный гольф код для разбивки:
источник
Python 3 ,
10196 байтПопробуйте онлайн!
решение без регулярных выражений
комментарии:
источник
w=c in a
наw=c in'aAeEiIoOuUyY'
Ом , 19 байт (CP437), не конкурирует
Новый язык, и как таковой, мне пришлось добавить некоторые новые функции, чтобы сделать эту работу, что, к сожалению, делает это неконкурентным (потому что лазейки).
Объяснение:
источник
Q
), поиск по подрешеткам ( ),u
срезы строк / массивов (├
) и константы гласных (αv
иαy
).PHP,
69 6553 байтатребует PHP 5.3 или более поздней версии. Запустите как трубу с
-F
или попробуйте несколько версий онлайн .Сохранено 4 байта (и исправлен код) с помощью регулярного выражения, украденного из @aross;
Еще 10 с
preg_filter
вместоpreg_match
и-F
и еще два с улучшенным регулярным выражением.
7581 байт для версии без регулярных выражений:требуется PHP 5 или более поздняя версия; заменить
?:
с?1:
более старые PHP. Бежать с-nR
Сломать
источник
This isn't a single word
:T T This isn't a single word.
i
модификатор, который делает регистр нечувствительным к регистру. Другая версия проверяла только строчные буквы. Исправлена.R, 49 байт
sub("(.*?[aeiouy]+)","\\1 \\1 \\1",scan(,""),T,T)
Замените на основе регулярных выражений, сопоставьте все, пока не появится гласная, запишите и замените ее 3 раза.
scan
дождавшисьdouble
ввода типа, чтобы сказать, что он должен использоватьcharacter
тип, мы должны дать ему два аргумента, во-первых, это значение по умолчанию, строка emtpy для stdin, а во-вторых, оценку R разрешают использовать только,c
поскольку это не является неоднозначнымcharacter
в этом контексте.T
обозначаетTRUE
и сохраняет некоторый символ как 4-й и 5-й параметр в sub, чтобы он велел игнорировать регистр и использовать PCRE (жадность не совпадает с синтаксисом R regex)4 байта сохранены благодаря Sumner18 вместе со ссылкой Tio на работающий код
источник
Java 8,
147140 байтGolfed:
Ungolfed:
Примечание: литерал
2
в коде является значениемjava.util.regex.Pattern.CASE_INSENSITIVE
.источник
import java.util.regex.*;
чтобы сохранить несколько байтов.C, 123 байта
Звоните как:
источник
Пайк , 22 байта
Попробуйте онлайн!
Это на 4 байта длиннее, чем следовало бы, если бы я реализовал более короткий способ получения гласных, включая
y
.источник
Сетчатка, 24 байта
Попробуйте онлайн
источник
Python 3 ,
130102 байтаПопробуйте онлайн!
Не использует никаких функций и не использует внешние библиотеки! (Если только печать и ввод не считаются функциями, которые они выполняют).
Работает, видя, выходит ли оно из согласных в начале названия в «гласную зону». Если он находится в «гласной зоне» и обнаруживает согласную, то печатается заголовок.
Сохранено 28 байт благодаря @LliwTelracs
источник
MATLAB / Octave,
5851 байт7 байтов сохранено благодаря @HughNolan
Создает анонимную функцию с именем,
ans
которую можно вызвать, передав ей строку:ans('Land')
Демо онлайн
Для совместимости с MATLAB
$0
следует использовать вместо$1
вышеуказанной функции.источник
@(x)regexprep(x,'^.*?[aeiouyAEIOUY]+','$0 $0 $0 ');
- также Matlab, кажется, использует $ 0, а не $ 1 странноC (gcc) ,
111110 байтовПопробуйте онлайн!
Он просто использует библиотечные функции
strspn()
иstrcspn()
использует порядок, в котором gcc оценивает параметры функции. Немного меньше в гольфСпасибо @gastropner за -1.
источник
Pyth - 24 байта
Тестовый пакет .
источник
y
?