Описание задачи
В этой проблеме, мы рассматриваем только love
и hate
как чувства. Если мы хотим выразить чувство порядка N
, мы чередуем эти два (начиная с hate
):
order | expression
1 I hate it.
2 I hate that I love it.
3 I hate that I love that I hate it.
4 I hate that I love that I hate that I love it.
Шаблон следует для каждого положительного целого числа N
. Учитывая N
, выведите соответствующее чувство выражения порядка N
.
Заметки
- Полная остановка (
.
) в конце выражения обязательна, - Трейлинг и пробелы (включая переводы строк) разрешены,
- Выходные данные для неположительного или нецелого числа
N
не определены, - Это задача для игры в гольф , поэтому сделайте ваш код как можно короче!
order
вход иexpression
выход?Ответы:
Python, 54 байта
источник
f n=take(12*n-5)(cycle"I hate that I love that ")++"it."
(56 байт)CJam , 36 байт
Попробуйте онлайн!
объяснение
источник
C
83767574 байтаСпасибо @Leaky Nun за сохранение 11 байтов и добавление 4 байтов!
Спасибо @YSC за сохранение байта!
Попробуйте это на Ideone
источник
i=0;while(n--)
->for(i=0;n--;)
сохраняет 1 символJavascript (ES6),
757370 байтСохранено 2 байта благодаря Нейлу
Сохранено 3 байта благодаря Whothehellisthat
Тест
источник
['I hate','I love'][i&1]
->i&1?'I love':'I hate'
Java 8, 91 байт
Тестовая программа Ungolfed
источник
c=i->for(...)
Mathematica, 63 байта
источник
Желе , 25 байт
Попробуйте онлайн!
объяснение
источник
05AB1E ,
343227 байтСохранено 5 байтов благодаря Аднану .
объяснение
Попробуйте онлайн!
источник
R, 79 байт
К счастью, в R разделителем по умолчанию для
cat
является пробел.(Отредактировано из оригинальной 73-байтовой версии, которая не совсем решила проблему.)
источник
for
цикла и%%
. +1Retina ,
4238 байтСпасибо Leaky Nun за помощь в игре в гольф!
Ввод принимается в одинарном виде.
Попробуйте онлайн!
объяснение
Заменить каждую пару
1
s на1I love n
.Заменить оставшиеся
1
s наI hate n
.Замените
n
в конце строки наit.
все остальные n наthat
.источник
l
: retina.tryitonline.net/…Javascript (ES5),
9994 байтаСохранено 5 байтов благодаря Leaky Nun.
Старое 99-байтовое решение:
Другое 98-байтовое решение:
Мой код до минификации:
источник
function(c){for(d="",b=0;b<c;++b)d+=(b%2?"I love ":"I hate ")+(b==c-1?"it.":"that ");return d}
Haskell, 70 байт
источник
PowerShell v2 +, 64 байта
Скорее просто. Петли от
1
до ввода$args[0]
, каждой итерации размещения либо'I love'
или'I hate'
на трубопроводе, на основе псевдо-трехкомпонентной для по модулю 2 (т.е. он переключается назад и вперед, начиная с'I hate'
). Эти строки заключены в круглых скобках и-join
эды с' that '
к smush их вместе, а затем конкатенации' it.'
в конце.Тестовые случаи
источник
php,
6462 байтаК сожалению, я не мог найти способ избежать повторения «того, что я», или, по крайней мере, не сделать это менее чем за 7 байтов.
редактирование: сохранено 2 байта благодаря @ Jörg Hülsermann
источник
Perl,
625450 байт(кредит @Ton Hospel )
Демо: http://ideone.com/zrM27p
Предыдущие решения:
(кредит @Dada )
Бежать с
perl -pE '$_="I xe that "x$_;s/x/$@++&1?lov:hat/ge;s/\w+.$/it./'
Первое решение (только это было мое)
По частям:
Демо: http://ideone.com/mosnVz
источник
perl -pE '$_="I xe that "x$_;s/x/$@++&1?lov:hat/ge;s/\w+.$/it./'
.$@++&1
? Для@+
perldoc говорит «держит смещения концов последних успешных submatches в настоящее время активной динамической рамки» , который не имеет большого смысла для меня. Как я понимаю, вы используете этот массив в скалярном контексте ($ @ + - вы разыменовываете его?), Чтобы получить количество элементов, а затем добавить (+) соответствующую строку (& 1). Нет, нет, я знал, что не должен был публиковаться в PPCG, он слишком запутан: D$@
это просто скаляр (я мог бы использовать$x
или любой другой скаляр),++
является оператором приращения, и&1
примерно так же, как%2
. Так что это в основном так же, как$x++%2
.@
для скалярного имени переменной; & 1 для "и" последний бит, чтобы проверить, является ли он четным (а не обратная ссылка, как я думал). Хорошо, теперь понял, спасибо.$|--
вместо этого$@++%2
Bash + coreutils, 106 байт:
Просто создает последовательность, начиная
1
с целого входного целого и включающую его, используяseq
встроенную функцию , а затем перебирает ее одну за другой, сначала выводя,hate
если значение переменной итерацииi
, не делится на2
иlove
иначе. На той же итерации он выбирает вывод,that
еслиi
он не равен входному значению, иit.
иначе.Попробуйте онлайн! (Ideone)
источник
printf
строку и не использовать спецификаторы формата. Бессмысленно сравнивать лиi%2
больше 0. Я сторнирование команды в списке, вы можете использовать меньше , чем сравнение вместоi==$1
:for i in `seq $1`;{ printf "I `((i%2))&&echo hat||echo lov`e `((i<$1))&&echo that||echo it.` ";}
. Кстати, мы обычно обозначаем такие решения как Bash + coreutils, потому что используютseq
.///,
6057 байт-3 байта благодаря m-chrzan
Ввод в унарном виде с завершающей новой строкой.
Попробуйте онлайн!
источник
/T/that /
в начало и заменить все экземплярыthat
сT
.R,
9290 байтR-адаптация ответа Python @Leaky Nun. Работа со строками в R утомительна как всегда.
Это, вероятно, может быть дальше в гольф, хотя.
Редактировать: сохранил 2 байта, изменив:
[1:((n*12)-5)]
в[6:(n*12)-5]
источник
C 96 байт
Я не видел вышеупомянутое решение от выпуска ядер гелия, что лучше.
источник
MATL , 37 байт
Попробуйте онлайн!
объяснение
Код основан на следующем отображении чисел в строки:
Программа помещает число в строку в группах из трех:
2
,0
,3
; Затем2
,1
,3
; Затем2
,0
,3
; ... столько раз, сколько на входеn
. После этого финал3
преобразуется в a4
, сопоставление применяется для преобразования чисел в строки, и строки объединяются с использованием пробела в качестве разделителя.источник
JavaScript (ES6), 68 байт
источник
C #,
8583 байтаРекурсивно строит строку, используя необязательный параметр, чтобы отслеживать, какую ненависть / любовь и сколько добавить.
-2 байта из этого совета для проверки четности / нечетности числа.
Без дополнительного параметра решение,
878684 байтаЭтот делает то же самое, за исключением того, что определяет, какую ненависть / любовь добавлять, основываясь на том, является ли параметр положительным или отрицательным. На каждой итерации параметр приближается к нулю, знакопеременный знак.
источник
Чт, 100 байт
Принимает ввод как унарный. (Строка из n
#
s)источник
Пайк, 36 байт
Попробуй это здесь!
Также 36 байтов
Попробуй это здесь! (Ссылка использует
X
вместоI
, это должно работать для того же количества байтов в автономном режиме, где вы можете буквально использовать эти байты. Онлайн\r
автоматически заменяется на\n
)источник
> <> (Рыба), 82 байта
Сомневаюсь, что это очень эффективно, но, похоже, работает более или менее. Ввод осуществляется через начальный стек, который составляет 85 байт, если вы указали размер
-v
аргумента, необходимый для этого.Попробуйте онлайн!
источник
Луа, 75 байт
источник
('I hate that I love that '):rep(n):sub(1,n*12-5)
. И выглядел бы лучше, если бы вы связали "это". до конца, потому чтоprint()
выводит свои параметры через таб./// , 68 байт
Ввод в унарном виде - добавьте больше
1
s в последний раздел.Попробуйте онлайн!
источник
постоянный ток, 75 байт
Мы действительно просто печатаем один кусок строки за раз, и не оставляем мусор в стеке. Это здорово, нам не нужно тратить байты на регистр для нашего счетчика.
источник
Юлия, 91 байт
Думал, я добавлю решение Джулии:
источник