Herausforderungsbeschreibung
In dieser Herausforderung betrachten wir nur love
und hate
als Gefühle. Wenn wir einen Gefühlsausdruck der Ordnung aussprechen wollen N
, wechseln wir zwischen diesen beiden (beginnend mit 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.
Das Muster folgt für jede positive ganze Zahl N
. Geben Sie N
den entsprechenden Gefühlsausdruck der Ordnung aus N
.
Anmerkungen
- Punkt (
.
) am Ende des Ausdrucks ist obligatorisch, - Nachgestellte und führende Leerzeichen (einschließlich Zeilenumbrüche) sind zulässig.
- Die Ausgabe für eine nicht positive oder nicht ganzzahlige Zahl
N
ist undefiniert. - Dies ist eine Code-Golf- Herausforderung, also mach deinen Code so kurz wie möglich!
order
die Eingabe undexpression
die Ausgabe?Antworten:
Python, 54 Bytes
quelle
f n=take(12*n-5)(cycle"I hate that I love that ")++"it."
(56 Bytes)CJam , 36 Bytes
Probieren Sie es online!
Erläuterung
quelle
C
83767574 BytesVielen Dank an @Leaky Nun für das Speichern von 11 Bytes und das Hinzufügen von 4 Bytes!
Vielen Dank an @YSC für das Speichern eines Bytes!
Probieren Sie es auf Ideone
quelle
i=0;while(n--)
->for(i=0;n--;)
spart 1 ZeichenJavascript (ES6),
757370 Bytes2 Bytes dank Neil
gespeichert 3 Bytes dank Whothehellisthat gespeichert
Prüfung
quelle
['I hate','I love'][i&1]
->i&1?'I love':'I hate'
Java 8, 91 Bytes
Ungolfed-Testprogramm
quelle
c=i->for(...)
Mathematica, 63 Bytes
quelle
Gelee , 25 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E ,
343227 Bytes5 Bytes gespart dank Adnan .
Erläuterung
Probieren Sie es online!
quelle
R, 79 Bytes
Glücklicherweise ist in R das Standardtrennzeichen für
cat
ein Leerzeichen.(Bearbeitet von der ursprünglichen 73-Byte-Version, die das Problem nicht ganz gelöst hat.)
quelle
for
Schleife und%%
. +1Netzhaut ,
4238 BytesVielen Dank an Leaky Nun, die mir geholfen hat, Golf zu spielen!
Die Eingabe erfolgt unär.
Probieren Sie es online!
Erläuterung
Ersetzen Sie jedes Paar von
1
s durch1I love n
.Ersetzen Sie die verbleibenden
1
s durchI hate n
.Ersetzen Sie das
n
am Ende der Zeile mitit.
und alle anderen n mitthat
.quelle
l
: retina.tryitonline.net/…Javascript (ES5),
99 bis94 Byte5 Bytes dank Leaky Nun gespeichert.
ALTE 99-Byte-Lösung:
Eine weitere 98-Byte-Lösung:
Mein Code vor der Verkleinerung:
quelle
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 Bytes
quelle
PowerShell v2 +, 64 Byte
Eher unkompliziert. Schleifen von
1
bis zur Eingabe$args[0]
, wobei jede Iteration entweder'I love'
oder'I hate'
in der Pipeline platziert wird, basierend auf einem Pseudoternär für Modulo-2 (dh abwechselnd vor und zurück, beginnend mit'I hate'
). Diese Zeichenketten werden in Pars gekapselt und-join
ed mit' that '
ihnen zusammen smush, dann String - Verkettung' it.'
am Ende.Testfälle
quelle
PHP,
6462 BytesLeider konnte ich es nicht vermeiden, das "Ich" zu wiederholen, oder zumindest nicht in weniger als 7 Bytes.
edit: 2 Bytes gespart dank @ Jörg Hülsermann
quelle
Perl,
625450 Bytes( Dank an @Ton Hospel )
Demo: http://ideone.com/zrM27p
Bisherige Lösungen:
(Gutschrift an @Dada )
Laufen Sie mit
perl -pE '$_="I xe that "x$_;s/x/$@++&1?lov:hat/ge;s/\w+.$/it./'
Erste Lösung (nur das war meins)
In Teilen:
Demo: http://ideone.com/mosnVz
quelle
perl -pE '$_="I xe that "x$_;s/x/$@++&1?lov:hat/ge;s/\w+.$/it./'
.$@++&1
? Denn@+
perldoc sagt "hält die Offsets der Enden der letzten erfolgreichen Submatches im aktuell aktiven dynamischen Bereich", was für mich wenig sinnvoll ist. Soweit ich weiß, verwenden Sie dieses Array im skalaren Kontext ($ @ + - dereferenzieren Sie es?), Um die Anzahl der Elemente zu ermitteln, und fügen Sie dann die übereinstimmende Zeichenfolge (& 1) hinzu (+). Nein, nein, nein, ich wusste, ich hätte nicht auf PPCG posten sollen. Es ist zu verschleiert: D$@
ist nur ein Skalar (ich hätte auch$x
einen anderen Skalar verwenden können),++
ist der Inkrementoperator und&1
ist ungefähr der gleiche wie%2
. Es ist also im Grunde dasselbe wie$x++%2
.@
skalaren Variablennamen. & 1 für "und" das letzte Bit, um zu überprüfen, ob es gerade ist (und keine Rückbeziehung, wie ich dachte). Ok jetzt verstanden, danke.$|--
als Umschalter anstelle von$@++%2
Bash + Coreutils, 106 Bytes:
Erstellt einfach eine Sequenz, die mit der integrierten Funktion
1
bis einschließlich der Eingabe-Ganzzahl beginntseq
, und durchläuft sie dann nacheinander. Dabei wird zunächst ausgegeben,hate
ob der Wert der Iterationsvariablen,,i
nicht durch2
und durch teilbar istlove
. In derselben Iteration wählt es dann die Ausgabe,that
wenni
nicht gleich dem Eingabewert ist, undit.
andernfalls.Probieren Sie es online! (Ideone)
quelle
printf
die Zeichenfolge ein und verwenden Sie keine Formatbezeichner. Ist sinnlos zu vergleichen , obi%2
größer ist als 0 ich Ihnen die Befehle in der Liste umkehren, können Sie weniger verwenden als Vergleich statti==$1
:for i in `seq $1`;{ printf "I `((i%2))&&echo hat||echo lov`e `((i<$1))&&echo that||echo it.` ";}
. Im Übrigen bezeichnen wir solche Lösungen in der Regel als Bash + Coreutils, weil die Verwendung vonseq
.///
6057 Bytes-3 Bytes dank m-chrzan
Eingabe in unary mit nachfolgender neuer Zeile.
Probieren Sie es online!
quelle
/T/that /
am Anfang hinzufügen und alle Instanzen vonthat
durch ersetzenT
.R
9290 BytesEine R-Adaption von @Leaky Nuns Python-Antwort. Das Arbeiten mit Strings in R ist wie immer mühsam.
Dies könnte aber wahrscheinlich weiter golfen werden.
Bearbeiten: 2 Bytes gespeichert durch Ändern von:
[1:((n*12)-5)]
zu[6:(n*12)-5]
quelle
C 96 Bytes
Ich habe die obige Lösung von Releasing Helium Nuclei nicht gesehen, was besser ist.
quelle
MATL , 37 Bytes
Probieren Sie es online!
Erläuterung
Der Code basiert auf der folgenden Zuordnung von Zahlen zu Zeichenfolgen:
Das Programm schiebt Zahlen auf den String in Gruppen von drei:
2
,0
,3
; dann2
,1
,3
; dann2
,0
,3
; ... so oft wie die Eingaben
. Danach wird das Finale3
in ein umgewandelt4
, die Zuordnung wird angewendet, um Zahlen in Zeichenfolgen umzuwandeln, und die Zeichenfolgen werden unter Verwendung von Leerzeichen als Trennzeichen verbunden.quelle
JavaScript (ES6), 68 Byte
quelle
C #,
8583 BytesErstellt die Zeichenfolge rekursiv mit einem optionalen Parameter, um festzustellen, welcher Hass / welche Liebe und wie viele angehängt werden sollen.
-2 Bytes von diesem Tipp zum Überprüfen der Ebenheit / Ungerade einer Zahl.
Keine optionale Parameterlösung,
878684 BytesDieser tut dasselbe, außer dass er bestimmt, welcher Hass / welche Liebe angehängt werden soll, basierend darauf, ob der Parameter positiv oder negativ ist. Bei jeder Iteration nähert sich der Parameter dem Vorzeichen Null.
quelle
Thue, 100 Bytes
Nimmt Eingaben als unär. (Eine Zeichenfolge von n
#
s)quelle
Pyke, 36 Bytes
Probieren Sie es hier aus!
Auch 36 Bytes
Probieren Sie es hier aus! (Link verwendet
X
stattI
, dies sollte für die gleiche Anzahl von Bytes offline funktionieren, wo Sie diese Bytes buchstäblich verwenden können. Online\r
wird automatisch ersetzt durch\n
)quelle
> <> (Fisch), 82 Bytes
Zweifel, es ist sehr effizient, aber es scheint mehr oder weniger zu funktionieren. Die Eingabe erfolgt über den Startstapel, wodurch die Punktzahl 85 Bytes beträgt, wenn Sie die Größe des dafür
-v
erforderlichen Arguments angeben.Probieren Sie es online!
quelle
Lua, 75 Bytes
quelle
('I hate that I love that '):rep(n):sub(1,n*12-5)
. Und würde schöner aussehen, wenn Sie "es" verketten. bis zum Ende, weilprint()
seine Parameter durch Tabulator getrennt ausgibt./// 68 Bytes
Eingabe in unary - fügen Sie
1
im letzten Abschnitt weitere s hinzu.Probieren Sie es online!
quelle
Gleichstrom, 75 Bytes
Wir drucken hier wirklich nur einen Strang nach dem anderen und hinterlassen keinen Müll auf dem Stapel. Das ist großartig, wir müssen keine Bytes verschwenden, die mit einem Register für unseren Zähler zu tun haben.
quelle
Julia, 91 Bytes
Dachte ich füge eine julia Lösung hinzu:
quelle