Escriba un programa o función que tome un entero positivo (a través de stdin, línea de comando o función arg) e imprima o devuelva una cadena de esos muchos triángulos pequeños en mosaico, alternando en qué dirección apuntan:
/\
/__\
Este único triángulo es la salida si la entrada es 1
.
Si la entrada es 2
, la salida es
____
/\ /
/__\/
Si la entrada es 3
, la salida es
____
/\ /\
/__\/__\
Si la entrada es 4
, la salida es
________
/\ /\ /
/__\/__\/
Y así. Su programa debe admitir entradas de hasta 2 16 - 1 = 65535.
Detalles
- El triángulo más a la izquierda siempre apunta hacia arriba.
- Puede haber espacios finales pero puede que no haya espacios iniciales innecesarios.
- Puede haber una nueva línea final opcional.
- Tenga en cuenta que para
1
la salida tiene dos líneas de largo, pero por lo demás son tres. Esto es requerido. - La presentación más corta en bytes gana.
SQL,
182175173187 bytesNo es que este sea el más corto, pero aún así es divertido tratar de minimizar sql;) lol Lo hice en Oracle 11, sin embargo, estos deberían ser SQL básico. [editar] como se señaló, no apliqué la regla when input = 1, solo se muestran 2 líneas. no puedo pensar en una mejor manera de hacerlo, sin embargo, ahorré un par de bytes modificando la lógica v;) agregar 2 por adelantado ahorra un par de bytes al no tener que repetirlo más tarde [/ edit]
[edit1] eliminó algunos espacios innecesarios [/ edit1] [edit2] cambió &&i a solo & i. Corta 2 caracteres, pero obliga al usuario a ingresar el número de triángulos dos veces ...: ¡PI se dio cuenta de que mis "buenos hábitos de codificación" usando && costaban 2 bytes! ¡¡El horror!! [/ edit2]
Explicación (nota: uso && 1 en esta explicación, por lo que solo aparece una vez, el & 1 anterior ahorra espacio en el código, pero aparece varias veces;))
Salida
fuente
from
? Si es así, eso te ahorrará un byte.Python 2,
8988878583 con nombre / 81 sin nombre(Gracias a @orlp por un byte y a @xnor por otros tres)
Esta es una función que toma un int
n
y devuelve los triángulos como una cadena usando el enfoque fila por fila.por ejemplo,
print f(10)
daPara la primera fila, en lugar de
(n>1)*
usar1%n*
, ya que1%n
es 0 sin == 1
y 1 sin > 1
.fuente
" /\\ "
en" /\ "
."\n".join()
3 elementos, incluso si la lista se usa para eliminar condicionalmente el primer elemento. ¿Quizás algo asíb*(x+"\n")+y+"\n"+z
es más corto?JavaScript (ES6),
101109Demasiado tiempo
Explicación
Usando la flecha gorda para la definición de la función. Además, no hay
{}
bloque: el cuerpo de la función es una única expresión que es el valor de retorno.f=(a,b,c)=>expr
es equivalente aDentro de una sola expresión no puede usar declaraciones como
if
ovar
, pero?:
funcionan bien en lugar deif else
w
es el segundo parámetro (no utilizado) a la funciónz
Podemos reescribir la
f
función comoPrueba en la consola Firefox / FireBug
Salida
fuente
w
n=>(n>1?' '+'____'.repeat(n/2)+'\n':'')+' /\\ '.repeat(n).slice(0,n*2+2-n%2)+'\n'+'/__\\'.repeat(n).slice(0,n*2+1+n%2)
119 (deliberadamente sin usar cadenas de plantillas, etc. para que coincida con su respuesta).CJam,
555351 bytesIntenté portar mi respuesta de Python y resultó ser más corta que las otras CJams.
Enlace permanente .
fuente
Haskell
155153139131 BytesEncontré un enfoque ligeramente diferente que resultó ser más corto que mi método original. Mi intento original se conserva a continuación. Como antes, los consejos de golf son apreciados.
Gracias a Nimi por los consejos de golf.
Intento anterior
197179 Bytesfuente
(mod n 2)==0
eseven n
o uso mejorodd n
y cambie elthen
yelse
parte.concat.take(div n 2).repeat
estake(4*div n 2).cycle
porque todos los elementos de la lista son de longitud 4. Asigne nombres cortos a funciones con nombres largos, por ejemploz=zipWith
, luego usez
. Puedes patear algunos espacios...repeat""else[...
.foldr z["","",""]
esfoldr1 z
, porque la lista para doblar nunca está vacía. En lugar deall(==' ')
usted puede usar==" "
(<- dos espacios intermedios), porque se usa para eliminar la línea vacía en caso de n = 1 y aquí la primera línea es" "
. La primera definición det
puede escribirse en una sola línea:t n|odd...
.CJam,
7368636260 bytesEsto definitivamente necesita algo de golf ...
Pruébalo aquí.
Explicación
fuente
Julia, 115 bytes
Esto crea una función sin nombre que acepta un número entero e imprime los triángulos. Para llamarlo, dale un nombre, por ejemplo
f=n->(...)
.Ungolfed + explicación:
Salida de ejemplo:
Estoy bastante triste porque esto es tan largo. Estoy seguro de que hay muchas oportunidades de golf, pero no están claras para mí en este momento. ¡Avíseme si tiene alguna sugerencia o si desea alguna explicación adicional!
fuente
CJam,
68 6260 bytesHasta donde puedo ver, este es un enfoque completamente diferente al de la otra solución de CJam. Esto se puede jugar mucho al golf.
Pruébalo en línea aquí
fuente
C # 190
Sin golf
fuente
while
bucle, sino usar unfor
bucle. En este caso, puede guardar 2 bytes incluyendo la definición dem
en la inicialización del bucle for y,b=!b
en el último caso, como se llame. También puede ahorrar ahorrando reemplazandostring
ybool
convar
. Tampoco necesita el "()" alrededor de lasn>1
cláusulas, y en las+=
cláusula puede usar el circuito no corto en&
lugar de&&
que no haya efectos secundarios o desreferencias para salir mal. Finalmente,1>0
es más corto quetrue
;)C #,
257183bytesEditar: Gracias a los consejos de @VisualMelon, ahorré 74 bytes.
Sé que está lejos de ser el mejor lenguaje para jugar golf, pero estoy interesado principalmente en aprender sobre los diversos matices de C #, en lugar de ganar la competencia. Esto es básicamente un puerto de esta respuesta Pyth.
Estoy pensando que los bucles for podrían jugar más, pero no estoy muy seguro de cómo, dadas las declaraciones terciarias incrustadas en ellos.
Ejemplo (1, 2, 3, 10):
Sin golf:
fuente
s+=
es tu amigo. De hecho, estás para bucles se puede hacer un poco más compacto. La alegría / horror de los operadores++
y--
significa que puede hacer la mayor parte del trabajo en la verificación condicionalfor(i=0;i++<=t;)
(esto verifica sii
es menor o igual quet
luego la incrementa). Haría bien en definir elint i
exterior del bucle for, y reutilizarlo, y dado que puede garantizar quei
nunca será negativo,i%2==0
puede intercambiarse pori%2<1
. Con estos cambios, se alcanza fácilmente una puntuación inferior a 200bytes.Enumerable
generalmente requiere unausing System.Linq
directiva, y creo que generalmente se pretende que tales cláusulas estén incluidas. Sin embargo , en este caso, el único LINQ puede ser reemplazado por elvar s=" "+string.Join("____",new string[1+t/2])+n;
que no contiene LINQ, y es más corto que el código actual;) Une muchas cadenas nulas junto con lo que realmente nos importa, "____" (el 1 + t / 2 porque necesitamos otra cadena nula para que quepa otro "____" antes). La variablen
se declara como "\ r \ n".Console.Write
lugar deConsole.WriteLine
Java, 185
Explicación
fuente
C # -
151146141138Inspirado por la respuesta de @ bacchusbeale
Sin golf
fuente
new String
es nueva para mí! Parece que se ha perdido sut=""
versión de golf, aunque una mejor opción sería inicializart
como "\ n". Puede guardar un par de bytes añadiendo at
donde le da la vueltab
, ahorrando el "{}" en el bucle for:t+=(b=!b)?"/":"__\\"
.t
antess
y agregart
a la cadena en lugar de"\n"
;)Ir,
156144Sin golf:
El único truco real aquí (y ni siquiera es bueno) es usar 3 acumuladores para poder condensar la solución en 1 bucle.
El código se puede ejecutar aquí: http://play.golang.org/p/urEO1kIjKv
fuente
c += `__\`
lugar deif i<n{c+="_"}
> <> (Fish) ,
215183156 bytesEditar: Notepad ++ me estaba dando 5 bytes adicionales debido a CR, por lo que el recuento modificado en consecuencia
Un poco más golfizado, pero es mi primer programa de pesca hasta ahora> _ <El requisito de no tener una primera línea en blanco para 1 triángulo duplicó el tamaño del programa.
Puede probar en http://fishlanguage.com/ (Int en la pila inicial para la longitud)
Explicación:
fuente
perl
109108106Creo que esto está bien para mi primer golf, utilicé la sección de Vynce para la primera línea, con el resto de mi código para superar el problema de la nueva línea con 1 triángulo.
Ahora para ver si puedo acortarlo :)
Editar : espacios en blanco
Edición 2 : reemplazado
"\n"
por$/
fuente
C89, 150
Una versión sin golf:
La salida:
La pila se desborda si entro
65535
(¡pero no si compilas con ella-O3
!), Pero en teoría debería funcionar ;-)editar: el programa ahora cumple el requisito de que solo se emitan dos líneas si
1
se pasa al programa editar 2: usar enint*
lugar dechar*
fuente
main
comomain(c,v)**v;
si eso funcionara.c
on
como una variable global, por lo que no tiene que pasarle ese parámetror()
. No creo que su respuesta cumplaNote that for 1 the output is two lines long but otherwise it's three. This is required.
error: expected declaration specifiers before ‘*’ token main(c,v)**v;{
n
oc
más corta tampoco.int**
?C ++ stdlib, 194 bytes
Programa de prueba:
fuente
Bash,
166127125119105 bytesEn una función:
Con algunas presentaciones:
Puede renderizar (si tiene figlet instalado):
Guardar 2 caracteres si la entrada de la variable en lugar de
$1
: 103En el bucle:
Renderizará (aproximadamente) lo mismo:
fuente
Carbón , 27 bytes (sin competencia)
Sin competencia porque el lenguaje es posterior al desafío.
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Genere una lista de bits alternos de longitud
n
y repítalos.Dibuja
____
sin mover el cursor.En el primer y cada dos triángulos, dibuja el
/
lado izquierdo .Dibuja el
\
lado sin mover el cursor.En el segundo y cada dos triángulos, dibuja el
\
lado izquierdo nuevamente para mover el cursor.En el segundo y cada dos triángulos, dibuja el
/
lado derecho , sin mover el cursor.fuente
PowerShell ,
11695 bytesMuchas gracias a Mazzy y ASCII-Only por guardar 21 bytes.
Pruébalo en línea!
No permitir una línea vacía para n = 1 consumió como
1410 bytes. Esta solución esbastante mortalahora mucho más inteligente con una cantidad mínima de código repetido. El redondeo bancario sigue siendo el verdadero demonio.fuente
C, 368 bytes
Es más si cuenta las
#include
declaraciones, pero se compiló en gcc, aunque con advertencias, sin ellas. Sé que no es el más corto de lejos, pero todavía me gusta que lo hice en C.fuente
#define p(c)printf(c)
es más corta que su función. Puede omitir los tipos de retorno en las funciones (por defecto sonint
). También puede definir la función en unC89
estilo como estemain(c,v)char**v;{}
. Esa es la abreviatura deint main(int c, char** v){}
Perl (simple)
131125120primer pase bastante sencillo:
oh quien necesita int explícito?
fuente
Prólogo, 126 bytes
Invocar como
$3
.Más legible:
Ejemplo:
fuente
C #: 1 línea LINQ, 198 bytes
fuente
Retina , 88 bytes (sin competencia)
Sin competencia porque el lenguaje es posterior al desafío.
Pruébalo en línea! Explicación:
Reemplace la entrada con un par de triángulos.
Multiplica los triángulos por la entrada original.
Divide los triángulos por 2.
Retire el medio triángulo sobrante.
Elimine la primera línea si ahora está en blanco.
fuente
Perl 6 , 83 bytes
Pruébalo en línea!
Bloque de código anónimo que toma un número y devuelve una cadena.
fuente
C (gcc) ,
117115bytes-2 gracias a ceilingcat.
Todos esos paréntesis sugieren que algo menos torpe es seguramente posible.
Pruébalo en línea!
fuente
05AB1E , 37 bytes
Pruébelo en línea o verifique las primeras 10 salidas .
Explicación:
fuente
Java 11, 122 bytes
Pruébalo en línea.
Explicación:
fuente