Escriba un programa que tome un entero N a través de stdin o la línea de comando.
Si N es 0, la letra única O
debe imprimirse en stdout.
Si N es positivo , se debe imprimir esta doble hélice de arte ASCII horizontal , dibujada con N segmentos de ancho.
Si N es 1, la salida es:
/\
O O
\/
Si N es 2, la salida es:
/\ /\
O / O
\/ \/
Si N es 3, la salida es:
/\ /\ /\
O / / O
\/ \/ \/
Si N es 4, la salida es:
/\ /\ /\ /\
O / / / O
\/ \/ \/ \/
El patrón continúa exactamente de la misma manera para N. más grande. Tenga en cuenta que la barra diagonal ( /
) debe usarse en todos los lugares donde se cruzan las hélices, excepto en los O
extremos.
Si N es negativo , esta doble hélice vertical ASCII art, dibujada -N segmentos de altura, debe imprimirse.
Si N es -1, la salida es:
O
/ \
\ /
O
Si N es -2, la salida es:
O
/ \
\ /
\
/ \
\ /
O
Si N es -3, la salida es:
O
/ \
\ /
\
/ \
\ /
\
/ \
\ /
O
Si N es -4, la salida es:
O
/ \
\ /
\
/ \
\ /
\
/ \
\ /
\
/ \
\ /
O
El patrón continúa exactamente de la misma manera para los N. más pequeños. Tenga en cuenta que las barras inclinadas hacia atrás ( \
) deben usarse en todos los lugares en los que se cruzan las hélices, excepto los O
extremos.
Detalles
- En lugar de un programa, puede escribir una función que tome N como un entero e imprima el resultado normalmente o lo devuelva como una cadena.
- La salida para cualquier N puede contener opcionalmente una nueva línea final.
- Cualquier línea de salida para cualquier N puede contener opcionalmente 4 o menos espacios finales.
- Nunca debería haber ningún espacio inicial que no sea parte del patrón especificado.
- El código más corto en bytes gana.
fuente
<spc>O<spc>
o\nO\n
. Es innecesario que conduce permitió espacios en blanco?print "."
Acércate para ver la hélice. * nodnod *Respuestas:
CJam,
56 55 53 5250 bytesMira ese tamaño! Los principales culpables son
N = 0
casos especiales y en\
lugar de/
en la hélice vertical.Así es como funciona:
El código se divide en tres partes:
X0>"\/"=" / \\\ / "+
da uno"/ / \\\ / "
o lo"\ / \\\ / "
que es crucial, ya que la hélice está compuesta simplemente por alternativa"/ \"
y"\ /"
unida por uno" / "
o" \ "
. Por ejemplo, si considera que la entrada es2
, entonces su cadena repetida final sería"/ / \\ / / / \\ / "
(sin escapar). Obviamente, esto tiene un extra/
al comienzo y un espacio extra al final.2
, la cadena final deseada sin nuevas líneas sería" O / \\\ / / / \\\ / O"
, pero después del punto anterior, solo tenemos"/ / \\\ / / / \\\ / "
. Entonces eliminamos el primer carácter, agregamos un espacio y'O
al principio y otro'O
al final. Luego finalmente lo dividimos en partes de 3'O
(para el caso de entrada 0)Pruébalo en línea aquí
fuente
JavaScript (ES6), 126
132 133Usando una cadena con plantilla, las nuevas líneas cuentan.
Más legible
fuente
n=>(
haciendo? Nunca he visto ni usado ese operador antes.Pyth, 52 bytes
Demostración.
Explicación:
La primera sección,
M[Jj"/\\"*hGdjP*G+*2dH*2\O_J)
define una funcióng
, que toma dos entradas. La primera entrada,G
es el número de repeticiones a usar. Este es el valor absoluto de la entrada. La segunda entrada,H
es el carácter a colocar en el centro de las espirales.La función devuelve una lista de 3 elementos, que consta de las 3 líneas de la espiral positiva y las 3 columnas de la espiral negativa.
El primer elemento está definido por
Jj"/\\"*hGd
.*hGd
es la cadena deG+1
espaciosj"/\\"*hGd
une esa cadena con"/\"
el delimitador. AlJ
principio guarda el valor resultante para uso futuro.El segundo elemento es
jP*G+*2dH*2\O
. Comenzamos con+*2dH
. Estos son dos espacios seguidos del carácter de entrada. Luego, repetimos esa secuenciaG
veces con*G
. Luego, eliminamos su carácter final conP
. Finalmente, rodeamos esta cadena con dosO
caracteres, conj ... *2\O
.El tercer elemento se genera con
_J
. Esto es simplemente el reverso de la primera línea.La última sección,
?jb?gQ\/>Q0msdCg_Q\\Q\O
selecciona entre tres posibilidades diferentes, positiva, negativa y cero. Las primeras condiciones si-entoncesQ
, la entrada. La segunda condición>Q0
, si la entrada es positiva.Si
Q
es cero,\O
el personajeO
, se imprime.Si
Q
no es cero, unimos el resultado del segundo ternario en las nuevas líneas y lo imprimimos conjb
. SiQ
es positivo, se unió a la lista e impreso esgQ\/
,g(Q,"/")
.Si
Q
es negativo, la lista unida e impresa esmsdCg_Q\\
. Comenzamos cong_Q\\
, que esg(-Q,"\")
. Luego transponemos las filas y columnas conC
.msd
convierte las tuplas de caracteres resultantes en cadenas, listas para unirse en líneas nuevas e impresas.fuente
Pitón 2, 118
Crea la doble hélice vertical a partir de una lista de cadenas y la transpone para obtener la horizontal. Estoy seguro de que podría mejorarse.
fuente
Java,
500488 bytesMi primer intento, y desafortunadamente es 10 * más largo que el líder actual :(. ¿Alguien tiene algún consejo (aparte de usar un idioma diferente)?
fuente
import System.*
o algo para guardar la escrituraSystem
cada vez?import static java.lang.System.*;
o podría guardar el flujo de salida estándar como una variable (aunque, no sé si guardaría u obstaculizaría en este caso, no lo he verificado).sc
variable ya que solo se llama una vez. Afeita 14 bytes.class M{public static void main(String[]a){int n=new Integer(new java.util.Scanner(System.in).next()),i=n;if(n>0){for(;i-->0;)o(" /\\");o("\no");for(i=n;i-->1;)o(" /");o(" o\n");for(i=0;i++<n;)o(" \\/");}else if(n<0){o(" o \n");for(i=0;i++<~n;)o("/ \\\n\\ /\n \\ \n");o("/ \\\n\\ /\n o \n");}else o("o\n");}static<T>void o(T s){System.out.print(s);}}
( 352 bytes ) Pruébelo en línea.n->{int i=n;if(n>0){for(;i-->0;)o(" /\\");o("\no");for(i=n;i-->1;)o(" /");o(" o\n");for(i=0;i++<n;)o(" \\/");}else if(n<0){o(" o \n");for(i=0;i++<~n;)o("/ \\\n\\ /\n \\ \n");o("/ \\\n\\ /\n o \n");}else o("o\n");};<T>void o(T s){System.out.print(s);}
Pruébelo en línea.Haskell, 156 bytes
Luego puede escribirlo como:
fuente
1<2
o algo así en lugar deTrue
y guardar un byte.C #,
242241238230222219 BytesEstimulado por el comentario de Martin , aquí está mi primer intento de algo como esto:
Más legible:
fuente
C #
199197196 bytesVersión sin golf:
La idea es construir la visualización horizontal a partir de la visualización vertical renderizando la matriz de caracteres transpuesta.
fuente
for(;m>0;--m)
afor(;m-->0;)
en ambos bucles"\n/ \\\n\\ /\n "
también podría acortarse según los métodos en mi respuesta, es decir@"..."
, usar , donde cada "\\" se convierte en "\" y cada "\ n" se convierte en una nueva línea realbool u
porvar u
otro byte completo :)Python 3, 118 bytes
Mi primer envío de código de golf, por lo que puede no ser del todo impresionante.
Solo usa el operador ternario ... if ... else ... de Python para separar los tres escenarios. Eso le da a una cadena hecha de repetir algunas cadenas más pequeñas un cierto número de veces para imprimir.
fuente
Julia, 229 bytes
Oh hombre, esto es cierto, manera demasiado grande. Es la respuesta más larga hasta ahora por un amplio margen. Probablemente podría ahorrar mucho devolviendo la cadena en lugar de imprimirla, o evitando el enfoque de matriz por completo. Experimentaré con eso más tarde.
Esto crea una función lambda que toma un solo entero e imprime la doble hélice con el formato adecuado. Para llamarlo, dale un nombre, por ejemplo
f=n->(...)
.Ungolfed + explicación:
Un par de ejemplos:
fuente
Python 3, 135 bytes
Pruébalo en línea aquí
fuente
Perl, 91
97La transposición resultó ser demasiado costosa al final.
Solución previa:
Ponme a prueba .
fuente
/^0/?O:etc
con$_?etc:O
$".="\23"^"\\ / \\ \\ / "x abs."O ";print/-/?$":/^0/?O:map{reverse$/,$"=~/(.).{$_}$/mg}0..2
Esquema, 379 bytes
Mi primer intento de codificar golf y, desafortunadamente, uno de los más largos. :(
Sin golfizar:
fuente
Java, 282
Mi primer enfoque, con nombres de variables particularmente agradables:
No tengo idea de por qué estoy haciendo esto. Debe ser algo recreativo.
fuente
Java, 317
Mi primer intento de golf de código.
fuente
Python 3, 165 bytes
Pruébelo en línea aquí .
fuente
Perl,
193197187180166163BPenalización de 1 byte para el interruptor de línea de comando -n. Correr con
echo 1|perl -M5.10.0 -n scratch.pl
:Con espacios en blanco:
fuente
-M5.10.0
no contribuya a su recuento de bytes?say
es útil para el código de golf ...PHP, 341
Versión sin golf
fuente
JAVA 377
384bytesfuente
C ++
269262258fuente
R,
228201Mi primer intento de código de golf. Creo que funciona pero no es sutil.
fuente
Groovy,
142134129125120118Finalmente atado con python 2!
fuente
Carbón ,
282422 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Imprima la parte superior
O
y deje el cursor un espacio hacia abajo y hacia la izquierda.Imprimir las cuerdas
/
,\
y\
y repita para el valor del número absoluto de la entrada.Retroceder sobre el último
\
.Reflexiona para crear el lado derecho de la hélice. Hago esto aquí porque de lo contrario
↗
no se analizaría sin ambigüedades.Sobrescriba el último
\
con unO
.Si la entrada fue positiva, gire el lienzo.
fuente
Lienzo ,
333230 bytesPruébalo aquí!
Explicación:
fuente
C ++, 352
No es la respuesta más corta, pero es la primera en C ++ hasta ahora :)
Aquí está en C ++ Shell con espacios en blanco para probar
fuente
perl 156
Intento bastante sencillo, mi segundo golf. Creo que las nuevas líneas cuentan como 1 byte, ¿verdad?
Ahora para descubrir cómo unir todos esos ternaries juntos. Tengo mucho margen de mejora con aquellos en
:'';
todas partes.fuente
C, 189 bytes
Con espacios en blanco y líneas nuevas:
Algunas notas sobre el enfoque:
fuente
Perl, 184 bytes
¡Pensé que esto sería mucho más corto! Probablemente hay algunas cosas simples que puedo hacer para guardar algunos bytes. ¡Han pasado cinco años desde que programé seriamente en Perl!
fuente
PHP, 155
fuente
J ,
67 59 5551 bytesPruébalo en línea!
fuente