Descripción del desafío
En este desafío, solo consideramos love
y hate
como sentimientos. Si queremos pronunciar una expresión de orden de sentimientoN
, alternamos entre estos dos (comenzando por 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.
El patrón sigue para cada entero positivo N
. Dado N
, da salida a la expresión de sentimiento correspondiente del orden N
.
Notas
- El punto (
.
) al final de la expresión es obligatorio, - Se permiten espacios en blanco al inicio y al final (incluidas las nuevas líneas),
- La salida para un no positivo o no entero
N
no está definida, - Este es un desafío de código de golf , ¡así que haga su código lo más corto posible!
order
la entrada yexpression
la salida?Respuestas:
Python, 54 bytes
fuente
f n=take(12*n-5)(cycle"I hate that I love that ")++"it."
(56 bytes)CJam , 36 bytes
Pruébalo en línea!
Explicación
fuente
C,
83767574 bytes¡Gracias a @Leaky Nun por guardar 11 bytes y agregar 4 bytes!
¡Gracias a @YSC por guardar un byte!
Pruébalo en Ideone
fuente
i=0;while(n--)
->for(i=0;n--;)
ahorra 1 char.Javascript (ES6),
757370 bytesGuardado 2 bytes gracias a Neil
Guardado 3 bytes gracias a Whothehellisthat
Prueba
fuente
['I hate','I love'][i&1]
->i&1?'I love':'I hate'
Java 8, 91 bytes
Programa de prueba sin golf
fuente
c=i->for(...)
Mathematica, 63 bytes
fuente
Jalea , 25 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E ,
343227 bytesGuardado 5 bytes gracias a Adnan .
Explicación
Pruébalo en línea!
fuente
R, 79 bytes
Afortunadamente en R, el separador predeterminado para
cat
es un espacio.(Editado de la versión original de 73 bytes que no resolvió el problema).
fuente
for
bucle y%%
. +1Retina ,
4238 bytes¡Gracias a Leaky Nun por ayudarme a jugar golf!
La entrada se toma en unario.
Pruébalo en línea!
Explicación
Reemplace cada par de
1
s con1I love n
.Reemplace los
1
s restantes conI hate n
.Reemplace el
n
al final de la línea conit.
y cada dos n conthat
.fuente
l
: retina.tryitonline.net/…Javascript (ES5),
9994 bytesGuardado 5 bytes gracias a Leaky Nun.
VIEJA solución de 99 bytes:
Otra solución de 98 bytes:
Mi código antes de la minificación:
fuente
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
fuente
PowerShell v2 +, 64 bytes
Más bien sencillo. Bucles desde
1
hasta la entrada$args[0]
, cada iteración colocando'I love'
o'I hate'
en la tubería, en base a un pseudoternario para módulo 2 (es decir, alterna de un lado a otro, comenzando con'I hate'
). Esas cadenas se encapsulan en parens y-join
ed con' that '
al SMUSH juntos, entonces la concatenación de cadenas' it.'
en el extremo.Casos de prueba
fuente
php,
6462 bytesDesafortunadamente, no pude encontrar una manera de evitar repetir el "que yo", o al menos no hay forma de hacerlo en menos de 7 bytes.
editar: guardado 2 bytes gracias a @ Jörg Hülsermann
fuente
Perl,
625450 bytes(crédito a @Ton Hospel )
Demostración: http://ideone.com/zrM27p
Soluciones anteriores:
(crédito a @Dada )
Corre con
perl -pE '$_="I xe that "x$_;s/x/$@++&1?lov:hat/ge;s/\w+.$/it./'
Primera solución (solo esto fue mío)
En partes:
Demostración: http://ideone.com/mosnVz
fuente
perl -pE '$_="I xe that "x$_;s/x/$@++&1?lov:hat/ge;s/\w+.$/it./'
.$@++&1
? Porque@+
perldoc dice "mantiene los desplazamientos de los extremos de las últimas submezclas exitosas en el ámbito dinámico actualmente activo", lo que no tiene mucho sentido para mí. Según tengo entendido, usa esta matriz en contexto escalar ($ @ + - ¿la está desreferenciando?) Para obtener el número de elementos y luego agrega (+) la cadena coincidente (& 1). No no no Sabía que no debería haber publicado en PPCG está demasiado ofuscado: D$@
es solo un escalar (podría haber usado$x
o cualquier otro escalar),++
es el operador de incremento y&1
es más o menos lo mismo que%2
. Entonces es básicamente lo mismo que$x++%2
.@
nombre de la variable escalar; & 1 para "y" ing el último bit para verificar si es par (y no una referencia inversa como pensé). Ok entendido ahora, gracias.$|--
como$@++%2
Bash + coreutils, 106 bytes:
Simplemente crea una secuencia que comienza en
1
e incluye el entero de entrada usando elseq
incorporado, y luego lo itera uno por uno, primero generandohate
si el valor de la variable de iteracióni
, no es divisible por2
y de lolove
contrario. En la misma iteración, elige la salidathat
sii
no es igual al valor de entrada, y de loit.
contrario.¡Pruébelo en línea! (Ideone)
fuente
printf
la cadena y no use especificadores de formato. No tiene sentido comparar sii%2
es mayor que 0. Te invierto los comandos en la lista, puede utilizar menos de la comparación en lugar dei==$1
:for i in `seq $1`;{ printf "I `((i%2))&&echo hat||echo lov`e `((i<$1))&&echo that||echo it.` ";}
. Por cierto, generalmente etiquetamos soluciones como Bash + coreutils, debido al uso deseq
.///,
6057 bytes-3 bytes gracias a m-chrzan
Entrada en unario con nueva línea final.
Pruébalo en línea!
fuente
/T/that /
al principio y reemplazar todas las instancias dethat
conT
.R,
9290 bytesUna adaptación R de la respuesta de Python de @Leaky Nun. Trabajar con cadenas en R es tedioso como siempre.
Sin embargo, esto probablemente podría jugarse más.
Editar: guardado 2 bytes cambiando:
[1:((n*12)-5)]
a[6:(n*12)-5]
fuente
C, 96 bytes
No vi la solución anterior al liberar Helium Nuclei, que es mejor.
fuente
MATL , 37 bytes
Pruébalo en línea!
Explicación
El código se basa en la siguiente asignación de números a cadenas:
El programa empuja números a la cadena en grupos de tres:
2
,0
,3
; entonces2
,1
,3
; entonces2
,0
,3
; ... tantas veces como la entradan
. Después de eso, el final3
se transforma en a4
, la asignación se aplica para transformar los números en cadenas, y las cadenas se unen utilizando el espacio como separador.fuente
JavaScript (ES6), 68 bytes
fuente
C #,
8583 bytesConstruye recursivamente la cadena, utilizando un parámetro opcional para realizar un seguimiento de qué odio / amor y cuántos agregar.
-2 bytes de este consejo para verificar la paridad / impar de un número.
Sin solución de parámetro opcional,
878684 bytesÉste hace lo mismo, excepto que determina qué odio / amor agregar en función de si el parámetro es positivo o negativo. Cada iteración el parámetro se acerca a cero, signo alterno.
fuente
Jue 100 bytes
Toma la entrada como unario. (Una cadena de n
#
s)fuente
Pyke, 36 bytes
Pruébalo aquí!
También 36 bytes
Pruébalo aquí! (El enlace usa en
X
lugar deI
, esto debería funcionar para la misma cantidad de bytes sin conexión donde literalmente puede usar esos bytes. En línea\r
se reemplaza automáticamente con\n
)fuente
> <> (Pez), 82 Bytes
Dudo que sea muy eficiente, pero parece funcionar más o menos. La entrada se realiza a través de la pila inicial, lo que hace que la puntuación sea de 85 Bytes si incluye el tamaño del
-v
argumento requerido para hacerlo.Pruébalo en línea!
fuente
Lua, 75 bytes
fuente
('I hate that I love that '):rep(n):sub(1,n*12-5)
. Y se vería mejor si concatena "eso". hasta el final, porqueprint()
genera sus parámetros separados por tabulación./// , 68 bytes
Entrada en unario: agregue más
1
s en la última sección.Pruébalo en línea!
fuente
dc, 75 bytes
Realmente solo estamos imprimiendo un trozo de cadena a la vez aquí, y no dejando basura en la pila. Esto es genial, no necesitamos desperdiciar ningún byte relacionado con un registro para nuestro contador.
fuente
Julia, 91 bytes
Pensé agregar una solución de julia:
fuente