Introducción
Todos conocemos la genial S (también conocida como Superman S, Stüssy S, Super S, Skater S, Pointy S, Graffiti S, etc., etc.): miles de millones de escolares de todo el mundo dibujaron esta S e inmediatamente se sintieron orgullosos de sí mismos. En caso de que hayas olvidado o tenido una infancia completamente desagradable , aquí hay una imagen de dicho genial S:
Dado un factor de escala n
como entrada (donde ), genera el Cool S en ASCII art.
Cómo dibujarlo
Desde la página de Wikipedia en el Cool S:
Salida
El Cool S cuando n
= 1 es:
^
/ \
/ \
/ \
| | |
| | |
\ \ /
\ \/
/\ \
/ \ \
| | |
| | |
\ /
\ /
\ /
v
Y para diferentes valores de n
, simplemente aumenta el n
tiempo de salida . Por ejemplo, n
= 2:
^
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
v
Tenga en cuenta que las secciones verticales son dos veces más largas y el espacio entre las líneas verticales es dos veces más ancho.
Y cuando n
= 3:
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
\ /
\ /
v
Nota: aunque no es obligatorio, su código también puede admitirn
= 0:
^
/ \
\\/
/\\
\ /
v
Victorioso
El programa más corto en bytes gana.
Λ
Respuestas:
Carbón ,
58 53 47 4341 bytesPruébalo en línea!
Solo quería probar otro enfoque, esto dibuja el exterior a través de reflexiones (gracias a Neil por expandir la idea) y luego dibuja la parte interior. Como el carbón tiene la
:Left
dirección predeterminada para dibujar líneas, hago uso de esa dirección tanto como sea posible para guardar algunos bytes dibujando la S horizontalmente, así:Y luego solo necesito rotar el lienzo 90 grados en sentido antihorario.
fuente
Rotate
? Eso me da una idea ...Python 3 ,
255249248209 bytes-6 bytes gracias a Kevin Cruijssen
-1 byte gracias a Kevin Cruijssen
-39 bytes gracias a Rod y Jo King
Pruébalo en línea!
Ahora maneja n = 0.
fuente
o+~d
pueden serm-d
yrange(o)
pueden serrange(m+1)
, y luego puede eliminarloso=m+1\n
para guardar 6 bytes. Buena respuesta, sin embargo, +1 de mi parte.p(s)\np(s[::-1])
ap(s+q+s[::-1])
: 248 bytesprint
, y más 4 mediante la eliminación[]
dejoin([...])
, totalizando 238 bytesq.join
en una variable para guardar un byteq.join
s, y un par de otras cosasCarbón ,
474241 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación: Dibuja las siguientes líneas en orden:
¿Dónde
5
está el carácter actual de la cadenav^
? Al final del primer bucle, el cursor se coloca en el punto9
. Luego se gira todo el lienzo para que se pueda dibujar la otra mitad del Cool S. (El lienzo se rota dos veces, pero esto es solo un detalle de implementación).El carbón no es compatible,
RotateCopy(:Up, 4)
pero si lo fuera, funcionaría para 33 bytes:fuente
Lienzo ,
363229 bytesPruébalo aquí!
Una gran cantidad de manipulación de pila. (desactualizada) explicación:
fuente
Python 2 ,
227208207202196181 bytesPruébalo en línea!
Gracias a Jo King por 1 byte; y luego otros 5 bytes en total (vía
n => 2*n
).Funciona para
n=0
también.fuente
C (gcc) ,
379353344334 bytesUtilicé un par de
#define
s para la eliminación de la subexpresión y varios globales para comunicarme entre las funciones internas. El bucle principal va {0,1,2,3,3,2,1,0} para construir el S.Gracias a Jonathan Frech por las sugerencias.
Pruébalo en línea!
fuente
w -r-1
posiblemente podría jugar golfw~r
.C (gcc) ,
260254 bytes-6 bytes gracias a ceilingcat .
Pruébalo en línea!
Atropellar
Podemos dividir la forma en partes:
Cada parte podría describirse mediante una serie de líneas, tres caracteres y tres relaciones con ciertos valores que deciden el ancho del campo en cada línea.
Una primera iteración llegó a ser:
Las llamadas a la
g()
macro se parecen mucho a una tabla que podría construirse y repetirse. Los anchos de campo a veces están relacionados con el contador de índice, y otras veces no. Podemos generalizar el ancho de campo para que seaF * i + A
, donde F es un factor con el que multiplicarsei
, y A es un valor para agregar al ancho. Entonces, el último ancho de la cuarta llamada anterior sería-2 * i + t
, por ejemplo.Así obtenemos:
Al final no fue mucho más corto que una versión ajustada de la que
g()
llama, pero más corto es más corto.fuente
Java, 435 bytes
La función en sí misma toma 435 bytes. Ciertamente hay margen de mejora, "alto nivel" mediante el análisis de las reglas sobre dónde colocar qué personaje (al final, la S es simétrica) y "bajo nivel", por el golf clásico (tal vez sacando otra variable o combinando dos de los
for
bucles). Pero es una primera oportunidad con este lenguaje poco feo:fuente
t=...
un poco menos para ahorrar bytes. Si tiene alguna pregunta sobre alguno de los cambios que hice, avíseme. :)PHP ,
378374378377376335331328 bytes-3 bytes, gracias a manatwork
-4 bytes, usó str_pad en lugar de str_repeat
-41 bytes, gracias a las sugerencias de manatworks
-1 byte, fusionó dos incrementos en a + = 2
-1 byte, eliminado superfluo \
-4 bytes haciendo eco una vez.Olvidé que necesitaba pasar la cadena a la función, así que esto es más bytesFunciona para n = 0 también.
Pruébalo en línea!
fuente
'v'
en la finalecho
.$i>0
e$m>0
puede escribirse simplemente como$i
y$m
..
concatenación después de esto a,
. Pruébalo en línea!Python 3 ,
321307 bytesGracias a @EsolangingFruit por guardar 14 bytes
Pruébalo en línea!
Python 2 , 303 bytes
Pruébalo en línea!
fuente
'\\','/'
en la segunda línea con*'\/'
para guardar tres bytes.print
input()
automáticamenteeval()
la cadena, para que pueda omitir elint()
llamada.for l in L:print(*l,sep="")
(no creo que haya un equivalente en Python 2).