Todos aman la geometría. Entonces, ¿por qué no intentamos codificar el golf? Este desafío implica tomar letras y números y hacer formas dependiendo de ello.
La entrada
La entrada será en forma de (shapeIdentifier)(size)(inverter)
.
Pero, ¿qué son shapeIdentifier, size e inverter?
El identificador de forma es el identificador del tipo de forma que creará con *
s. Los siguientes son los identificadores de forma:
s
- Cuadradot
- triángulo
El tamaño estará entre 1-20
, y es el tamaño de la figura.
El inversor es si la forma estará invertida o no, lo que se denota con a +
o a -
. Tenga en cuenta: s3-
== (igual) s3+
porque los cuadrados son simétricos. Sin embargo t5-
,! = (No es igual) t5+
.
Los espacios en blanco finales están bien en la salida, pero los espacios en blanco iniciales no lo están.
Ejemplos de salida
Input: s3+
Output:
***
***
***
Input: t5+
Output:
*
***
*****
Input: t3-
Output:
***
*
Notas especiales
La entrada del triángulo siempre será un número impar, por lo que los triángulos siempre terminarán con 1 *
en la parte superior.
El tamaño del triángulo es el tamaño de la base si el inversor lo es
+
y es el tamaño de la parte superior si el inversor lo es-
.
fuente
Respuestas:
Pyth,
40363432 bytes-1 byte por @isaacg
Un punto y coma dentro de una lambda es ahora el valor global de la variable lambda, una característica que guarda un byte.
Probarlo aquí .
Banco de pruebas .
fuente
qez\+
con}\+z
, porque+
solo puede aparecer en la última posición.Pyth, 38 bytes
Banco de pruebas
Básicamente tan sencillo como se pone. Desearía poder combinar parte de la lógica de las dos formas, pero actualmente está separada.
fuente
JavaScript (ES6),
142146147Editar 1 byte guardado thx @ETHproductions Editar 2 bytes sve thx @ user81655
Prueba (ejecutar en Firefox)
fuente
\d
->.
, ya que se garantiza que habrá exactamente un no dígito antes y despuési.match(/.(.+)(.)/)
->i.match`.(.+)(.)`
Python 2, 106 bytes
El resultado es un rectángulo perfecto, con cada línea rellenada con espacios finales, lo que supongo que está bien según los comentarios en el OP.
Nota: Todavía no estoy seguro de si
input
está permitido en Python 2 para problemas como estos ...fuente
Japt,
6260555251 bytesPruébalo en línea!
Lo primero que debemos hacer es descubrir qué tan grande debe ser nuestra forma. Esto es bastante simple:
Ahora organizamos la forma de la salida:
Por ahora, nos hemos ocupado del tamaño y la forma de la salida. Todo lo que queda es la rotación. Los triángulos están actualmente apuntados hacia arriba, por lo que debemos voltearlos si el tercer carácter es
+
:Y con salida implícita, nuestro trabajo aquí está hecho. :-)
fuente
Python 2,
235193167157 BytesActualizar:
Se realizó una optimización significativa mediante el uso de comprensiones de listas y str.center (). Tengo la sensación de que puedo hacer un poco más, pero luego tendré una nueva mirada.
Actualización 2
Guardado 10 bytes con las sugerencias de Sherlock9. ¡Muchas gracias! :)
Vieja respuesta
Enfoque bastante sencillo. Escribir línea por línea en una cadena que saqué al final. Los triángulos siempre se dibujan invertidos y se invierten si es necesario. ¡El hecho de que puedas multiplicar una cadena con un entero me salvó muchos bytes!
Intentaré jugar golf un poco más tarde, agradecería sugerencias mientras tanto, ya que todavía no he experimentado tanto.
editar: Golfed mucho con la ayuda en los comentarios y robando el cálculo del tamaño de una de las otras respuestas de Python. Creo que eso es lo máximo que puedo hacer con este algoritmo.
fuente
wc
esto me da un conteo de bytes de 235. ¿Me equivoco?raw_input
, el uso leinput
ahorra 4 bytes. Además, no necesita los corchetes en la segunda línea, esto y no usar la variablex
(usarif"s"in d
) le ahorra otros 9 bytes.[]
corchetes en cada una de lasjoin
llamadas a funciones. En segundo lugar,if d<"t"else
es más corto y funciona porque"s3+"<"t"<"t3+"
en Python. Tercero,else"\n".join
y.center(x)for
. Sin espacio. No es requerido Cuarto,print o[::-1]if"+"in d else o
donde reorganicé las cosas por dos bytes (un espacio entre]
yif
y otro entreif
y"+"
.JavaScript, 220 bytes.
Corre con
f(input here)
Intentalo aquí!
Los cuadrados tienen líneas nuevas al final, pero los triángulos no. Explicación:
fuente
Python 2,
157132 bytesEl primer intento confirmó que el
+/-
final era opcional, deshacerme de eso me permitió afeitarme un montónLa idea aquí es hacer una lista que pueda incluirse en una salida genérica. La parte más difícil fue separar la longitud de la entrada.
fuente
x=int(d[1]if len(d)<4 else d[1:3])
con d como la cadena de entrada. Eso es 5 bytes más corto que su solución. ¡Todavía estás muy por delante de mi respuesta de Python aunque, tengo que tratar de entender lo que hiciste allí y vencerte la próxima vez! :)x=int(d[1:-1])
es mucho más corto para eso, solo lo vi en la otra respuesta de Python.Retina ,
10285 bytesEl recuento de bytes supone que el código fuente está codificado como ISO 8859-1.
Pruébalo en línea.
Intentaré jugar al golf un poco más tarde.
fuente
\n
lugar de\r\n
. Base64 del contenido:XGQrCiQwJCo6wrYKXigoXHcpKyk6KDorKQokMSQyJDMkMsK2JDAKbWBzJHw6dAoKKWAoLispwrYtKFxEKikKLSQywrYkMQptYF4uCgpHYC4KVGB0czpgICo=
(copia directa desde Notepad ++). Por extraño que parezca, cualquier solución en línea me da 85 bytes ... Hum ...¶
. Definitivamente son un solo byte en ISO 8859-1 (con valor 182).En serio, 54 bytes
Pruébalo en línea
@Mego: ¿Ves eso
#dXdXεj
? CUERDA EN LAMINAS ????fuente
ES6,
178172159 bytesEsto funciona debido a una observación interesante que hice. Si repite
n
espacios yn
asteriscos, obtiene (por ejemplo, paran=5
) esto:Ahora, tome subcadenas con el mismo inicio y longitud:
Estas subcadenas son exactamente las cadenas que necesitamos para
t5
.Editar: Guardado 6 bytes gracias a @ edc65.
Editar: ahorré 13 bytes gracias a ocultar el
u+=v
tercer argumento,substr
lo que me permitió simplificar la inicialización.fuente
t
código de manejo resultó quew
yu
se convirtieron en equivalentes y que me salvó suficientes bytes que me lleve de vuelta a 178![,b,c]=s.match
y más tardes<'t'
... debería guardar algunos bytes (solo Firefox)s
me permite usar los<'t'
que me ahorró 6 bytes, gracias.MATL , 48 bytes
Usos la versión actual (10.1.0) del lenguaje / compilador.
El código de caracteres de entrada acepta en cualquier orden: todos
s11+
,11s+
e incluso1+s1
serían cadenas de entrada válidas.EDITAR (30 de julio de 2016): el código vinculado reemplaza
1L3$)
porY)
para ajustarse a los cambios recientes en el idiomaPruébalo en línea!
Explicación
fuente
C, 259 bytes
sin golf
Sugerencias y críticas son bienvenidas.
fuente
Rubí, 99
Calcula un cuadrado o triángulo de altura
n
y ancho promedion
marcando la pendiente de los lados (por lo que el ancho del triángulo calculado es 2n-1 en la base, 1 en la punta). Pero solo imprime las filas que no excedenn
caracteres.sin golf en el programa de prueba
fuente
Jolf, 37 bytes, sin competencia
Agregué funciones después de que se publicó este desafío, por lo que no se puede considerar su aceptación. Esto está codificado en ISO-8859-7. Pruebe todos los casos de prueba aquí .
Parte 1: analizar la cadena
Parte 2: obtener el resultado
Parte 3: invirtiendo el resultado
fuente