Me ama, no me ama
Este sencillo juego para niños es antiguo, pero sigue siendo popular. Ya que estamos viviendo en el siglo XXI, ¡digitalicemoslo!
Especificación
El programa no debe ingresar nada, a menos que esté utilizando un lenguaje que no pueda generar semilla aleatoria; en ese caso, puede tomar la semilla como entrada. Su tarea es escribir un programa que genere aleatoriamente un total de 3 a 20 líneas inclusive: "Me ama ..." y "No me ama ..." por turnos, como en el juego (y una línea adicional; mantenga leyendo).
Sin embargo, hay algunas restricciones. Cada línea debe ir seguida de nueva línea. La primera línea debe ser "Me ama ...". La última línea ("Me ama" o "No me ama") debe terminar con un signo de exclamación o un solo punto, respectivamente. Después de la última línea, debe generar un corazón ( <3
) o un corazón roto ( </3
) en la nueva línea, dependiendo de si "Me ama". o "No me ama". Fue la última oración.
Se permiten espacios en blanco al final.
Salida de ejemplo
Salida:
Me
ama ... No
me
ama ... Me ama ... No
me ama ... ¡Me ama!
<3
Otra salida:
Me
ama ... No
me
ama ... Me ama ... No me ama.
</ 3
Este es el código de golf , por lo que gana la entrada más corta.
Además, mi primer desafío :) ¡Buena suerte!
fuente
[3, 20)
) o de 3 hasta 20 ([3, 20]
)?Respuestas:
Pyth,
5453515048 bytesfuente
%2tWZ"<</33
para que la impresión del corazón ahorre 1. Sin embargo, no estoy convencido de que esta sea la mejor manera.%
.@".!"Z%hZ"</3
ahorra dos bytesCJam,
535049 bytesGracias a Dennis por guardar 1 byte.
Pruébalo aquí.
Explicación
El código simplemente descarga la cadena en bits y piezas en la pila, que se imprime automáticamente al final del programa:
fuente
Brainfuck, 2766 bytes (actualmente no válido)
Simplemente porque. Agregaré una versión sin golf más tarde.
Código
Pseudocódigo
Muestra
Cuando se ejecuta, el programa ingresa a una sesión interactiva en espera de entrada. La entrada debe ser un número. Este número se usa como semilla.
Semilla: 1 (el número aleatorio es 5, toma 218,168,042 operaciones)
Semilla: 3 (número aleatorio es 20, toma 463,253,048 operaciones)
Te sugiero que no siembres
6
, ya que se necesitan2,105,900,375
iteraciones para calcular el resultado :).Compilar / Correr
Necesita un intérprete rápido para esto. Ningún intérprete en línea que he probado podría manejar la velocidad de ejecución. Los ips (iteraciones por segundo) deberían ser más que
100,000,000
. Entonces se me ocurrió otra solución.Este es un compilador Brainfuck to C escrito en Brainfuck. Puede usar cualquier intérprete en línea para transpilar mi código a C. puro. Sugiero usar brainfuck.tk . Pegue mi código en la entrada stdin, pegue este código en la entrada de código:
Descargue la fuente y compílela:
También puede ejecutar una copia del código C en línea aquí: vía. CodingGround .
Optimizaciones
Todavía queda trabajo por hacer, pero la reutilización de la célula es casi óptima.
Observaciones
Puedes usar palabras o frases como semilla:
fuente
Javascript (ES6),
1191049998 bytesfuente
new Date
truco en mi respuesta?Loves me not... Loves me... Loves me not! <3
yLoves me not... Loves me... Loves me not... Loves me. </3
. Creo que tendrá que cambiar uno de los condicionales para arreglar esto. EDITAR: Oh, solo cambia el''
y' not'
en la cuarta línea.Pitón, 147
Utiliza el en
from random import*
lugar deimport random
y enrandint
lugar derandrange
guardar algunos bytes. Probablemente quedan algunos bytes para jugar al golf.fuente
"LLoovveess mmee n o t"[i%2::2].strip()
parece innecesariamente complicada. ¿No puedes simplemente hacer"Loves me"+~i%2*" not"
?["Loves me","Loves me not"][i%2]
es más óptimo, ya que ahora está desperdiciando caracteres.strip()
y un par de espacios. Pero sí, use el código deJavascript (ES6),
110102 bytesEste fue un reto pequeño pero divertido. Es posible acortar más. ¡Gracias a Mwr247 por algunos trucos para salvar bytes!
Versión alternativa con
repeat()
105 bytes:Darn JS 5 + -char nombres incorporados. Oh bien. Sugerencias bienvenidas!
fuente
18+3|0
?Math.random()
. Supongo que no es necesario ahora.Perl, 85
fuente
Ruby, 91 bytes
fuente
Common Lisp
106104 bytesEsto solo funciona en lisps que no comprueban una secuencia adecuada (por ejemplo, cmucl, sbcl, clisp) ccl verificará la circularidad y el error en el nivel de seguridad predeterminado. ecl se repetirá para siempre.
Explicación:
#1=(1 0 . #1#)
genera una lista circular que contiene1
y0
ysubseq
se usa para hacer una lista de longitud [3,20] (esta es la única parte no portátil, yasubseq
que el estándar solo lo requiere para trabajar en listas apropiadas (es decir, no circulares)).Nuestro formato ahora opera en una lista
1 0 1 0...
de longitud [3,20]Explicación de las
format
directivas:~{
itera sobre esta lista~[
seguido de cualquier número de~;
y terminado con~]
seleccionará el enésimo elemento, en función del valor del argumento de formato. Esto se usa aquí para que el primer elemento en un~[
sea el caso "me ama no" y el segundo el caso "me ama". Tenga en cuenta que con~[
un separador de~:;
selecciona un caso predeterminado.~#[
funciona como,~[
excepto que el argumento es el número de argumentos restantes. 0 argumentos restantes significa que estamos al final, el caso predeterminado es imprimir...
~:*
realiza una copia de seguridad de la posición de la lista de argumentos, lo que nos permite imprimir el avance correcto.fuente
Julia, 98 bytes
Sin golf:
fuente
Shell de UNIX, 193 bytes
fuente
Java,
210209203200177 bytesvolteadoi%2==0
ai%2<1
{ ... }
apoyos parafor
-loop, movidoe
declaración de bucleRandom
uso reelaborado y el incremento parai
Nota: nueva línea se agrega a continuación para formatear en este sitio, el recuento anterior es para una sola línea.
Sin golf:
fuente
main()
aunque ...C,
123, 121, 109106caracteres (108 bytes)(con un poco de ♥♥♥ trampa ♥♥♥)
También hay un punto Unicode de corazón roto en 1f494, pero tuve dificultades para encontrar una fuente que lo implemente.
fuente
O=0
, porqueC
autoinicializar ints a0
?main(o,O)
donde tenía que ser inicializado.time
como un número aleatorio ... ¡Listo!srand(time(0))
cambiarán su respuesta con la misma frecuencia. El srand es completamente inútil :-)Python 2,
161159156144 bytesSon 39 bytes solo para obtener el número aleatorio.
Muchas gracias a muddyfish , fryamtheeggman y orlp por su ayuda.
PYG , 109 bytes
fuente
import random as r
print'</3'if i%2 else'<3'
aprint['<3','</3'][i%2]
para guardar 3 bytes.import random as r;a=r.randrange(3,21)
yimport random;a=random.randrange(3,21)
son de la misma longitud.PowerShell,
121119111 BytesEditar: en realidad es más corto para incluir explícitamente en
"Loves me"
lugar de declarar$l
Edit2: olvidé que puedo jugar al golf
for()
haciendo ductos ... durr ...No está nada mal. Utiliza bloques de ejecución de código en línea
$(...)
para ajustar dinámicamente la cadena impresa a medida quefor()
avanzamos. Tenga en cuenta que debido a que esto utiliza un implícitoGet-
delanteRandom
para guardar un par de bytes, esto puede funcionar extremadamente lento en ciertas versiones de PowerShell. ReferenciaAmpliado a continuación para aclaración:
fuente
C ++,
210193184168 bytesEn C ++ ... porque ... ¿Por qué no? :)
En Vivo:
210193184168Solo espero que alguno de mis cambios no dependa de la plataforma.
Gracias a Ben Voigt por la ayuda. Además, gracias a todos los comentarios, fueron muy útiles.
fuente
j=3+(int)(rand()*17.0/RAND_MAX)
#define c cout
yusing namespace std;
porauto&c=std::cout;
int i=0,j=rand()*20.0/RAND_MAX;while(i<j)
Groovy, 110 bytes
Un maravilloso tipo de amor:
fuente
Python 2, 117 bytes
Observe que a todos les
Loves me( not)?
sigue...
una nueva línea, excepto la última. Así que esto parece un trabajo parajoin
.fuente
".!\n\n<</33"[n%2::2]
es 2 bytes más corto.R,
141132128114111109 bytesCódigo
Sin golf
Me inspiré en el código de Eric Brooks .
Edición 1: ahora el código genera correctamente la última puntuación como lo señala Martin
Edición 2: cambió el bucle for a una muestra e incluyó los corazones dentro de la última cadena de línea.
Edición 3: se eliminó
{}
y cambió+(x==k)*2
a+2*!x<k
Edición 4: Volver al ciclo for y se eliminó
()
de(i%%2)+1
Edición 5: se escribió
me
4 veces y se eliminósep=""
fuente
R,
119111105 bytesEdiciones 1,2: Codificar las dos opciones explícitamente es ahorrar espacio.
fuente
=
para asignación en lugar de<-
y otro haciendox%%2>0
en lugar dex%%2==1
. También tenga en cuenta que esto no maneja la última línea correctamente; debería haber un.
o!
más que...
. (Ver ejemplo de salida en la pregunta.)x%%2>0
; justx%%2
C 226 bytes
(Con formateo)
fuente
Python 2, 115 bytes
fuente
PHP,
191187146165 BytesSin golf:
48,49 bytes para pyth y cjam ... wow :)
fuente
MSL,
178176156154 bytesEdición 1: se cambió
== 0
a< 1
Edición 2: se eliminaron espacios en blanco innecesarios, ¡gracias AlexA!
Edición 3: paréntesis eliminados
fuente
Perl, 97 bytes
Versión legible:
fuente
Hassium , 265 bytes
La respuesta ha sido golfizada.
fuente
</3
.rnd = new Random();rnd.next(0,2);
1000 veces, la distribución está bien. Sin embargo, si ejecutornd = new Random();
una vez yrnd.next(0,2);
1000 veces, siempre obtengo exactamente 5330
sy 4671
s.C # (160)
El código está inspirado en la respuesta de hjk , el crédito va para él.
Sin golf:
fuente
Lua,
137132 bytesProbablemente se pueda jugar mucho más al golf, pero aquí está por ahora:
Explicación del código y sin golf:
Editar: Cortó algunos espacios en blanco.
fuente
Jelly , 55 bytes (¿no compite?)
Pruébalo en línea!
Como de costumbre, Jelly apesta con cuerdas.
fuente
PowerShell ,
8588 bytes+3 bytes gracias Veskah: Ese es un buen punto.
Pruébalo en línea!
fuente
of *3* to 20 lines inclusive
. ¡Gracias!