Opis wyzwania
W tym wyzwaniu traktujemy tylko love
i hate
jako uczucia. Jeśli chcemy wypowiedzieć wyrażenie porządku N
, przełączamy się między nimi (zaczynając od 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.
Wzór jest następujący dla każdej dodatniej liczby całkowitej N
. Biorąc pod uwagę N
, wypowiedz odpowiednie odczucie wyrażenia porządku N
.
Notatki
- Kropka (
.
) na końcu wyrażenia jest obowiązkowa, - Dozwolone są końcowe i wiodące białe znaki (w tym znaki nowej linii),
- Dane wyjściowe dla wartości dodatnich lub niecałkowitych
N
są niezdefiniowane, - Jest to wyzwanie dla golfistów , dlatego ustaw swój kod tak krótko, jak to możliwe!
order
wejście iexpression
wyjście?Odpowiedzi:
Python, 54 bajty
źródło
f n=take(12*n-5)(cycle"I hate that I love that ")++"it."
(56 bajtów)CJam , 36 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C,
83767574 bajtyDzięki @Leaky Nun za uratowanie 11 bajtów i dodanie 4 bajtów!
Dzięki @YSC za uratowanie bajtu!
Wypróbuj na Ideone
źródło
i=0;while(n--)
->for(i=0;n--;)
zapisuje 1 znak.JavaScript (ES6),
757370 bajtówZapisano 2 bajty dzięki Neilowi
Zapisano 3 bajty dzięki Whothehellisthat
Test
źródło
['I hate','I love'][i&1]
->i&1?'I love':'I hate'
Java 8, 91 bajtów
Program testów bez golfa
źródło
c=i->for(...)
Mathematica, 63 bajty
źródło
Galaretka , 25 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E ,
343227 bajtówZaoszczędzono 5 bajtów dzięki Adnan .
Wyjaśnienie
Wypróbuj online!
źródło
R, 79 bajtów
Na szczęście w R domyślnym separatorem dla
cat
spacji jest spacja.(Edytowane z oryginalnej 73-bajtowej wersji, która nie całkiem rozwiązała problem).
źródło
for
pętli i%%
. +1Siatkówka ,
4238 bajtówDzięki Leaky Nun za pomoc w grze w golfa!
Dane wejściowe są przyjmowane jednostkowo.
Wypróbuj online!
Wyjaśnienie
Zamień każdą parę
1
s na1I love n
.Zamień pozostałe
1
s naI hate n
.Zamień
n
na końcu linii nait.
i co drugi n nathat
.źródło
l
: retina.tryitonline.net/…JavaScript (ES5),
9994 bajtówZaoszczędź 5 bajtów dzięki Leaky Nun.
OLD 99 bajtowe rozwiązanie:
Kolejne 98-bajtowe rozwiązanie:
Mój kod przed minifikacją:
źródło
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 bajtów
źródło
PowerShell v2 +, 64 bajty
Raczej proste. Pętle z
1
góry na wkład$args[0]
, przy czym każdy wprowadzania iteracji jednej'I love'
lub'I hate'
w rurociągu, w oparciu o pseudo trójskładnikowymi za modulo-2 (IE, naprzemiennie tam i z powrotem, począwszy'I hate'
). Ciągi te są obudowane w parens i-join
ed z' that '
do smush je ze sobą, a następnie ciąg konkatenacji' it.'
na końcu.Przypadki testowe
źródło
php,
6462 bajtówNiestety nie udało mi się znaleźć sposobu, aby uniknąć powtórzenia „tego, co ja”, a przynajmniej nie można tego zrobić w mniej niż 7 bajtach.
edycja: zapisane 2 bajty dzięki @ Jörg Hülsermann
źródło
Perl,
625450 bajtów(kredyt dla @Ton Hospel )
Demo: http://ideone.com/zrM27p
Poprzednie rozwiązania:
(kredyt dla @Dada )
Biegnij z
perl -pE '$_="I xe that "x$_;s/x/$@++&1?lov:hat/ge;s/\w+.$/it./'
Pierwsze rozwiązanie (tylko to było moje)
W częściach:
Demo: http://ideone.com/mosnVz
źródło
perl -pE '$_="I xe that "x$_;s/x/$@++&1?lov:hat/ge;s/\w+.$/it./'
.$@++&1
? For@+
perldoc mówi „przechowuje przesunięcia końców ostatnich udanych podrzędnych w aktualnie aktywnym zakresie dynamicznym”, co nie ma dla mnie większego sensu. Jak rozumiem, używasz tej tablicy w kontekście skalarnym ($ @ + - czy ją odsuwasz?), Aby uzyskać liczbę elementów, a następnie dodać (+) dopasowany ciąg (& 1). Nie, nie, nie. Nie wiedziałem, że nie powinienem był pisać w PPCG, to jest zbyt zaciemnione: D$@
jest po prostu skalarem (mogłem go użyć$x
lub dowolnym innym skalarem),++
jest operatorem przyrostowym i&1
jest mniej więcej taki sam jak%2
. Więc to w zasadzie to samo co$x++%2
.@
nazwy zmiennej skalarnej; & 1 za „i” ostatni bit, aby sprawdzić, czy jest parzysty (a nie odsyłacz wsteczny, jak myślałem). Ok, rozumiem teraz, dzięki.$|--
przełącznika zamiast$@++%2
Bash + coreutils, 106 bajtów:
Po prostu tworzy sekwencję rozpoczynającą
1
się od liczby całkowitej wejściowej włącznie, używającseq
wbudowanego, a następnie iteruje ją jeden po drugim, najpierw wypisując,hate
jeśli wartość zmiennej iteracyjneji
, nie jest podzielna przez2
i wlove
żaden inny sposób. W tej samej iteracji wybiera wyjście,that
jeślii
nie jest równe wartości wejściowej, i wit.
przeciwnym razie.Wypróbuj online! (Ideone)
źródło
printf
ciągu znaków i nie używaj specyfikatorów formatu. Nie ma sensu, aby porównać czyi%2
jest większa niż 0. I odwrócić polecenia na liście, można użyć mniej niż porównania zamiasti==$1
:for i in `seq $1`;{ printf "I `((i%2))&&echo hat||echo lov`e `((i<$1))&&echo that||echo it.` ";}
. Nawiasem mówiąc, zwykle nazywamy takie rozwiązania, jak Bash + coreutils, ponieważ użycieseq
.///,
6057 bajtów-3 bajty dzięki m-chrzan
Wejście unarne z końcowym nowym wierszem.
Wypróbuj online!
źródło
/T/that /
do początku i zastąpić wszystkie wystąpieniathat
zT
.R,
9290 bajtówAdaptacja R odpowiedzi pytona @Leaky Nun. Praca z ciągami w języku R jest nużąca jak zawsze.
Prawdopodobnie można to jednak pograć w golfa.
Edycja: zapisano 2 bajty, zmieniając:
[1:((n*12)-5)]
do[6:(n*12)-5]
źródło
C, 96 bajtów
Nie widziałem powyższego rozwiązania z Uwolnienie jądra helu, które jest lepsze.
źródło
MATL , 37 bajtów
Wypróbuj online!
Wyjaśnienie
Kod opiera się na następującym odwzorowaniu liczb na ciągi znaków:
Program popycha do ciągu liczb w trzech grupach:
2
,0
,3
; Następnie2
,1
,3
; Następnie2
,0
,3
; ... tyle razy ile danych wejściowychn
. Następnie finał3
jest przekształcany w a4
, mapowanie jest stosowane do przekształcania liczb na ciągi, a ciągi są łączone za pomocą spacji jako separatora.źródło
JavaScript (ES6), 68 bajtów
źródło
C #,
8583 bajtówRekurencyjnie konstruuje ciąg, używając opcjonalnego parametru, aby śledzić, która nienawiść / miłość i ile dołączyć.
-2 bajty od tej wskazówki do sprawdzania parzystości / nieparzystości liczby.
Brak opcjonalnego rozwiązania parametru,
878684 bajtówTen robi to samo, z wyjątkiem tego, który określa nienawiść / miłość do dołączenia na podstawie tego, czy parametr jest dodatni czy ujemny. Każda iteracja parametru zbliża się do zera, naprzemiennie.
źródło
Czw. 100 bajtów
Traktuje dane wejściowe jako jednoargumentowe. (Ciąg n
#
s)źródło
Pyke, 36 bajtów
Wypróbuj tutaj!
Również 36 bajtów
Wypróbuj tutaj! (
X
Zamiast tego używa linkuI
, powinno to działać dla tej samej ilości bajtów offline, gdzie można dosłownie użyć tych bajtów. Online\r
zostaje automatycznie zastąpione\n
)źródło
> <> (Ryba), 82 bajtów
Wątpię, że jest bardzo wydajny, ale wydaje się, że mniej więcej działa. Dane wejściowe są
-v
przekazywane przez stos początkowy, co daje wynik 85 bajtów, jeśli podasz rozmiar argumentu wymaganego do tego.Wypróbuj online!
źródło
Lua, 75 bajtów
źródło
('I hate that I love that '):rep(n):sub(1,n*12-5)
. I wyglądałby ładniej, gdybyś połączył „to”. do końca, ponieważprint()
wypisuje swoje parametry oddzielone tabulatorem./// , 68 bajtów
Wprowadź unarne - dodaj więcej
1
s w ostatniej sekcji.Wypróbuj online!
źródło
dc, 75 bajtów
Naprawdę po prostu drukujemy po jednym kawałku sznurka na raz i nie pozostawiamy żadnych śmieci na stosie. To świetnie, nie musimy marnować żadnych bajtów zajmujących się rejestrem naszego licznika.
źródło
Julia, 91 bajtów
Myślałem, że dodam rozwiązanie Julii:
źródło