¡El festival de mediados de otoño ha comenzado!
Desafortunadamente, todos mis pasteles de luna fueron robados: se están volviendo demasiado caros para gente pequeña como yo, ¡y me temo que no podré comer ninguno este año!
Así que te pido ayuda. ¿Podrías hacerme un poco?
Para aquellos que no lo saben, déjenme educarlos sobre cómo se ve un pastel de luna.
¡Los pasteles de luna vienen en muchos tamaños diferentes!
Así que te voy a dar mi entrada , n , cuando quiera una.
Aquí hay algunos ejemplos de salida que quiero:
Pastel de luna de tamaño n = 3:
(@@@@@)
(@MAF@)
(@@@@@)
Pastel de luna de tamaño n = 6:
(@@@@@@@@@@@)
(@ @)
(@ M @)
(@ F @)
(@ @)
(@@@@@@@@@@@)
Es decir, un pastel de luna de tamaño n es:
- norte líneas altas
- 2n - 1 @s de largo
- 2n + 1 caracteres de largo (@s y corchetes)
¡Y será mejor que no me arrojes tus pasteles de luna de práctica demasiado pequeños!
Suponga que la entrada siempre será n> = 3 .
Los pasteles de luna también contienen una de las siguientes decoraciones :
- MF
- MAF
- HMF
- JCJ
- TTT
- ZJ
- LF
- RF
- CF
Cuál, no importa, siempre y cuando esté centrado vertical y horizontalmente .
¡También se puede escribir vertical u horizontalmente!
¡Quiero variedad!
Si realmente me vas a hacer dos del mismo pastel de luna, ¡será mejor que la decoración sea diferente!
Es decir, múltiples ejecuciones de su programa con exactamente la misma entrada no siempre deben producir la misma decoración .
No puedo esperar para comer tus pasteles de luna, así que cuanto antes pueda recibirlos ( más corto será tu código ) ¡mejor!
¡Buena suerte!
Para aquellos que se preguntan sobre las decoraciones:
son las iniciales de todos los nombres alternativos para el Festival del Medio Otoño.
Se puede encontrar una lista en la página de Wikipedia vinculada en la parte superior de esta publicación.
Aclaraciones:
No hay reglas sobre los espacios en blanco iniciales y finales .
¡Ten tanto o tan poco como quieras!
¡Las decoraciones deben estar en el centro de tu pastel de luna!
En decoraciones horizontales, esto significa que debe estar en la línea media de su pastel, y el número de caracteres a la izquierda y derecha de la cadena de decoración debe ser igual.
En decoraciones verticales, esto significa que debe residir en la columna central de su pastel, y el número de caracteres por encima y por debajo de la decoración debe ser igual.
¡No se deben usar todas las decoraciones!
El único requisito es que debe haber más de una posibilidad para cualquier entrada n . Las posibilidades tampoco necesitan ser uniformes.
Las funciones son aceptables.
MAF
y noMF
? No veo unaA
en tus opciones de decoración.Respuestas:
Pyth,
71655958 bytesGuardado 1 byte gracias a @StevenH.
Pruébalo en línea. Banco de pruebas.
Tanto relleno.
fuente
?%Q2
con@,
(invertir el orden de las dos opciones) ...Q
. Yo (ab) usé mucho eso en el golf, mi propia respuesta de Pyth.JavaScript ES6,
206196192188187180176169165156 bytesDescompostura
Mi primer intento de golf de código. Esto probablemente se puede jugar más al golf.
ahorrado 4 bytes gracias a @ETHProductions
Editar Me tomé la libertad de usar para satisfacer:
Date.now()%2
new Date%2
esto me permite guardar otros 7 bytes
+Math.random()>.5
ahorró otros 4 bytes gracias a @Arnauld
fuente
['MA','HA'][r]+'F'
se puede jugar golf'MH'[r]+'AF'
.[' R ',' C '][r]
con" ${'RC'[r]} "
, reemplazando cada uno"
con un backtick.['MA','HM'][r]+'F'
realidad es dos bytes más largo que['MAF','HMF'][r]
;)' @'[+!s]
lugar de(s?' ':'@')
new Date%2
lugar deDate.now()%2
.Pyth,
9979716864 bytesPyth es
muy malohaciendo cuerdas. O tal vez solo soymalomejorando en jugar golf.Puede crear las decoraciones
MAF
yHMF
horizontalmente, y las decoracionesMF
yCF
verticalmente.Pruébalo en línea!
fuente
Vim, 118 bytes
Toma la entrada como un búfer (por ejemplo, un archivo con el número n como contenido).
Aquí está con los caracteres de control no imprimibles en formato xxd:
Pruébalo en línea! (Como resultado, el intérprete de V también funciona bien para el código Vim normal).
Explicación
fuente
@a
a arg1,@b
a arg2, etc. pero esta es una característica específica de V. Esto técnicamente no importa, ya que lo has hecho"aD
al principio, pero pensé en señalarlo. 2) Podrías quitar un byte si lodd@ap
Y@apdd
dd@ap
no funciona del todo .dd@aP
funciona, pero luego requiere un adicionalj
y otro adicionalk
en la línea.PHP,
342292249185178176 bytesLlamar con
php -r '<code>' <size>
historia
Rev 1: versión inicial; todos los tamaños (incluidos pasteles pequeños), todas las decoraciones, todas las direcciones posibles
Rev. 2: se eliminaron los pasteles pequeños (-36 bytes), las opciones de decoración reestructuradas, se eliminó un elemento de decoración (-21) y un solo byte de golf (-1).
Rev. 3: Hasta cuatro decoraciones; (-17), solo horizontal para tamaños impares (-18) más golf menor (-8).
Rev. 4: Gracias a Jörg por jugar golf en la parte del "pastel de pintura"; se quitó un asombroso (-31).
Otro -6 con mi golf adicional, y -27 por usar una sola cadena en lugar de una serie de cadenas.
Rev. 5: -7 bytes principalmente gracias a Christallkeks
Descompostura
Esto se está volviendo más delgado por horas. :)
fuente
for($i=0;$i<$n=$argv[1];$i++){$o[]=str_pad("(@",2*$n-1,!$i|$i==$n-1?"@":" ")."@)";}
!$i|$i==$n-1?"@":" "
; el ternario simplemente no aceptaría el suyo (en mi máquina), aunque es correcto.for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)==0])."@)\n";
Además, parece que tiene "MAD" jugando golf a sus decos ;-)Java 7,
399349 bytesVersión actualizada con ayuda de @Dodge y @Kevin Cruijssen:
Pruébalo aquí!
La nueva versión está mucho más optimizada y eliminó el
String
manejo de la matriz. Además, como se sugiere, ahora solo hay 4 decoraciones: 2 para entradas pares (MF
,ZJ
) y 2 para entradas impares (MAF
,HMF
) que se combinan en una solaString
.Sin golf:
fuente
"MAF"
repite?char[]
más eficiente y seguir jugando a otras cosas. @Cyoce DupliquéMAF
porque entonces tengo todas las decoraciones para una entrada par en los índices0,2,4,6,8
y todas las decoraciones para una entrada impar en los índices1,3,5,7,9
. Eso facilita el cálculo del índice aleatorio para una entrada dada.Math.random()*5
da un número aleatorio de0-4
.*2
lo extiende a0,2,4,6,8
.+n%2
agrega1
entradas impares para obtener1,3,5,7,9
.Lote, 386 bytes.
Solo emitirá HMF, MAF, MF o CF según corresponda. Nota: ciertas líneas terminan en espacios en blanco. Variables:
n
Parámetro de entrada (leído desde STDIN)f
Prefijos de decoración (el sufijoF
está implícito)o
Rareza den
(solo se usa una vez, pero lasif
declaraciones no aceptan expresiones)l
Fila del carácter vertical superior, o0
para una decoración horizontal.u
Fila del carácter vertical inferior, o0
para una decoración horizontal.h
Fila de la decoración horizontal (se sobrescribe con una decoración vertical)d
Índice de decoración en prefijo de decoración (0/1 para horizontal o 1/3 para vertical)c
Cadena den-3
espacioss
Cadena de salida para cada fila%1
Número de fila, pero configurado tambiénn
para la primera fila, de modo que tanto la primera como la última fila usen@
s en lugar de espacios.fuente
C, 233 bytes
Debería poder jugar golf un poco desde aquí ...
Gran desafío, esto fue difícil y feo de codificar.
Corre con esta función principal;
fuente
Ruby 2.3.1,
449265245233230 caracteresParece que debería haber una respuesta rubí, así que aquí hay una respuesta rubí. Realmente no es tan inteligente, espero que alguien más aquí sea más inteligente;)
Versión de golf:
Trucos de golf:
Versión legible
Pruebas
fuente
Estaba aburrido ... aquí hay dos versiones más:
PHP, 193 bytes
la respuesta de un puerto de Lmis
PHP, 191 bytes
imprimir el pastel carácter por carácter en un solo bucle
Descompostura
fuente
Python 3,
318301297285272 bytesEliminó 17 bytes con la ayuda de DJMcMayhem
Eliminado 4 bytes gracias a mbomb007
Eliminó otros 12 bytes gracias a DJMcMayhem
Eliminó otros 13 bytes gracias a mbomb007
Mi primer golf, así que no es tan bueno. Utilicé: aliasing math.ceil como y y str.format como z, formatos de anidación, importación de una sola línea, lambda y operación bit a bit, además de algunas otras cosas para obtener esto como es.
Versión sin golf (importaciones separadas, sin alias y sin operación bit a bit):
Curiosamente, el uso de la versión no bit a bit de esto todavía produce una salida correcta, sin embargo, la salida es diferente:
No bit a bit:
Bitwise:
fuente
from ... import*
escribir importaciones para guardar algunos bytesimport math;y=math.ceil
para quitar dos bytes. Esto le daríaimport random;import math;y=math.ceil;lambda n:"{a}{}{a}".format("{d}(@{}{b}F{c}@)\n{e}".format(" "*(y((2*n-5)/2)),b=random.sample(["L","R"],1)[0],c=" "*((2*n)-(5+y((2*n-5)/2))),d="(@{}@)\n".format(" "*(2*n-3))*y((n-3)/2),e="(@{}@)\n".format(" "*(2*n-3))*(n-(3+(y((n-3)/2))))),a="({})\n".format("@"*(2*n-1)))
13 bytes menos.format
ya que lo llamas mucho. El problema es que no sé exactamente cómo crear un alias para una función miembro (comostr.format
), por lo que tendría que experimentar un poco. Sin embargo, no estoy seguro de que sea más corto.C # 448 bytes
Golfizado:
Pruébalo aquí
Sin golf:
fuente