Tenemos muchos ejes horizontales para los números, pero sinceramente creo que son un poco aburridos. Su tarea hoy es construirme una porción de un eje diagonal entre dos enteros distintos no negativos dados como entrada.
¿Cómo construir un eje diagonal?
Tomemos un ejemplo, con la entrada
0, 5
. Nuestro eje debería verse así:0 0 1 2 3 4 4 5 5
Sin embargo, nuestro eje debería verse bien para los números que también tienen más dígitos. Si la entrada es, por ejemplo
0, 14
, el nuevo eje debe ser:0 0 1 2 3 4 4 5 5 6 6 7 7 8 9 9 10 11 12 13 14
La idea es que el primer dígito del siguiente número en el eje siempre debe colocarse exactamente después del último dígito del número anterior. Para comprender la idea aún mejor, aquí hay otro ejemplo con
997, 1004
:997 998 999 1000 1001 1002 1003 1004
Reglas
Puede suponer que la entrada está en orden ascendente o descendente (puede elegir entre
5,3
y3,5
).También puede suponer que la diferencia entre los dos enteros es inferior a 100.
Es posible que tenga una nueva línea inicial o un espacio inicial consistente (en cada línea). Los espacios finales / líneas nuevas también están bien.
Puede tomar entrada y proporcionar salida por cualquier medio estándar .
Este es el código de golf , por lo que gana el código más corto en bytes en cada idioma.
Otros casos de prueba
1, 10
:1 2 3 4 4 5 5 6 6 7 7 8 9 9 10
95, 103
:95 96 97 98 99 100 101 102 103
999999, 1000009
:999999 1000000 1000001 1000002 1000003 1000004 1000005 1000006 1000007 1000008 1000009
Respuestas:
05AB1E ,
876 bytes¡Gracias a Magic Octopus Urn por guardar un byte!
De alguna manera funciona, pero sinceramente no tengo idea de por qué.
Código
Utiliza la codificación 05AB1E . Pruébalo en línea!
Explicación
fuente
.O = pop a,b push connected_overlap(b) (deprecated)
- Oh, supongo?.O
es extremadamente defectuoso y está en desuso durante más de un año, así que no tengo idea de qué funciona y qué no. Podría jurar que lo necesitabaÎ
, pero eso de repente ya no parece ser el caso (?). ¡Gracias! :)Î
se necesitaba reducir el número máximo de espacios iniciales a 1.Python 2 , 43 bytes
Utiliza la pestaña vertical para hacer el efecto de escalera. La forma en que
\v
se representa depende de la consola, por lo que puede no funcionar en todas partes (como TIO).fuente
\x0b
en tu código para guardar un byte?\\v
y reemplazado con el\x0B
que aparece unVT
personaje en su lugar para la puntuación, puede publicar un hexdump reversible (xxd
o algo) o simplemente afirmar que: "\v
es una pestaña vertical literal", creo que sería justo. ¡Espero que ayude!Carbón ,
98 bytesPruébalo en línea!
El enlace es a la versión detallada del código. Entrada en orden ascendente.
fuente
R,
706961 bytesFunción que toma la variable inicial y final como argumentos. Recorre la secuencia e imprime cada elemento, antepuesto con suficientes espacios.
F
comienza comoFALSE=0
, y durante cada iteración, se le agrega la cantidad de caracteres para ese valor.F
decide la cantidad de espacios impresos.Pruébalo en línea!
-8 bytes gracias a @Giuseppe
fuente
scan()
dos veces se puede reducir a 67 bytesfor(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}
.F=0;for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}
(71 bytes)nchar
.\n
por una nueva línea real también funciona, y aparentemente no cuesta dos bytes.cat
, pero no podía pensar con claridad y resolverlo por alguna razón.C #,
908985 bytesGuardado 1 byte gracias a @LiefdeWen.
Guardado 4 bytes gracias a @auhmaan.
Pruébalo en línea!
Versión completa / formateada:
fuente
i<=e
toe>i
i
y reutilizando els
lugarPython 2 ,
5854 bytesPruébalo en línea!
fuente
Mathematica, 59, bytes
entrada
-3 bytes @JungHwanMin
problema con 0 solucionado (ver comentarios para más detalles)
gracias a @ngenisis
fuente
Spacings -> 0
si desea que esto sea exacto para los caracteres.Grid[(DiagonalMatrix@Range[1+##]/. 0->""+1)-1,Spacings->0]&
es la forma más corta que pude encontrar para solucionar esos problemasJalea , 9 bytes
Pruébalo en línea!
fuente
Mathematica, 48 bytes
Como hay tantas respuestas, pensé que esta debería incluirse
entrada
salida
fuente
C,
1661349582 BytesNueva respuesta
Solo como una función, no como un programa completo.
¡Gracias a Falken por ayudar a eliminar 13 Bytes (y arreglar un problema técnico)!
¡Gracias a Steph Hen por ayudar a eliminar 12 Bytes!
¡Gracias a Zacharý por su ayuda para eliminar 1 Byte!
Viejas respuestas
Se deshizo de int antes de main y cambió const char * v [] a char ** v y se deshizo de return 0;
Esta es mi primera vez jugando al golf y quería probar algo en C. No estoy seguro si formateé esto correctamente, ¡pero me divertí mucho haciéndolo!
Explicación
Uso
fuente
argc
y lasargv
variables de una letra.int s=0
bucle for, como enfor(int s=0;a<=b;a++)
.int i=s;while(i--)
lugar defor(int i=0;i<s;i++)
para el bucle interno ahorrará dos bytes.C ++,
167165 bytes-2 bytes gracias a Zacharý
fuente
int m=0,i=l,j
al primerfor
bucle para guardar un byte? 2. ¿Se puede cambiarr+=t;r+=10
ar+=t+10
? 3. Le gané a alguien, yay.r+=t+=10
pero nor+=t+10
, me dio un errorr+=t+=10
funciona? ¿No afectaría esot.size()
?++i
a lastd::to_string(i)
questd::to_string(i++)
salvar un byte más?APL (Dyalog) ,
2524 bytes-1 gracias a Zacharý .
Asume
⎕IO←0
para el conteo basado en cero. Toma el límite inferior como argumento izquierdo y el límite superior como argumento derecho.Pruébalo en línea!
(
...)
aplique la siguiente función tácita entre los argumentos:-
restar el límite superior inferior del límite superior1-
restar eso de uno (es decir, 1 + ∆)⊣+∘⍳
límite inferior izquierdo más los enteros 0 a través de ese⍕¨
formatear (stringify) cada{
...}
aplique lo siguiente anónimo en eso (representado por ⍵):≢¨
longitud de cada (número)+\
suma acumulativa-
negar⍵↑⍨¨
para cada número en cadena, tome esa cantidad de caracteres del final (almohadillas con espacios)↑
mezclar la lista de cadenas en la matriz de caracteresfuente
+-⍨
ser--
?Retina ,
8178 bytesPruébalo en línea! Toma la entrada como una lista separada por nueva línea de dos enteros. Editar: ahorré 3 bytes al robar el código de expansión de rango de mi respuesta a ¿Compartimos el clúster principal? Explicación:
Convierta ambas entradas a unario.
Mientras que los dos últimos elementos (a, b) de la lista difieren en más de 1, reemplácelos con (a, a + 1, b). Esto expande la lista de una tupla a un rango.
Convertir de nuevo a decimal por duplicado.
Convierta la copia duplicada en espacios.
Suma acumulativamente los espacios de cada línea a la siguiente.
fuente
Pyth ,
1413 bytesPruébalo en línea!
fuente
LOGOTIPO , 53 bytes
No hay "¡Pruébelo en línea!" enlace porque todos los intérpretes de LOGO en línea no admiten la lista de plantillas.
Esa es una lista de plantillas (equivalente a la función lambda en otros idiomas).
Uso:
(
apply
llama a la función)imprimirá
Nota:
Esto usa la tortuga
ycor
(coordenada Y) para almacenar la cantidad de espacios necesarios para escribir, por lo tanto:window
debe ejecutarse siycor
es demasiado grande para que la tortuga se salga de la pantalla. Descripción delwindow
comando: aif the turtle is asked to move past the boundary of the graphics window, it will move off screen.
diferencia de la configuración predeterminadawrap
, queif the turtle is asked to move past the boundary of the FMSLogo screen window, it will "wrap around" and reappear at the opposite edge of the window.
Explicación:
fuente
05AB1E , 8 bytes
Pruébalo en línea!
-2 gracias a Adnan .
fuente
vy
porʒ
ygF
porv
salvar 2 bytes.ʒ
truco todavía se usara ...JavaScript (ES8),
696762 bytesToma la entrada como enteros, en orden ascendente, utilizando la sintaxis de curry. Devuelve una matriz de cadenas.
Intentalo
fuente
Japt , 12 bytes
Toma la entrada en cualquier orden y siempre devuelve los números en orden ascendente, como una matriz de líneas.
Pruébalo en línea! con la
-R
bandera para unir la matriz con nuevas líneas.Explicación
Entrada implícita de
U
yV
.Cree un rango inclusivo
[U, V]
y asigne cada valor a ...Los valores anteriores al actual (
¯Y
), unidos a una cadena (¬
) y rellenados con espacios (ç
).Más el número actual. La matriz resultante se emite implícitamente.
fuente
Python 2 ,
65 63 6261 bytes-2 bytes Gracias a @Mr. Xcoder:
exec
no necesita llaves-1 adiós gracias a @ Zacharý:
print s*' '
asprint' '*s
Pruébalo en línea!
fuente
m,n=input();s=0;exec(n-m+1)*"print s*' '+`m`;s+=len(`m`);m+=1;"
es suficienteprint s*' '
aprint' '*s
ahorrar un byte.JavaScript, 57 bytes
fuente
y=>g=(x,s='')=>y<x?s:s+'\n'+g(x+1,s.replace(/./g,' ')+x)
Llamada con currying con los números enteros invierten:f(103)(95)
.x=>y=>g=(s='')=>y<x?s:s+'\n'+g(s.replace(/./g,' ')+x++)
llamar comof(x)(y)()
.Python 2,
6059 bytes-1 byte gracias a Mr.Xcoder por definir mi s = 0 como una variable opcional en mi función.
Pruébalo en línea!
Creo que es posible transferir esto a una versión lambda, pero no sé cómo. También creo que hay algún tipo de mapeo entre los espacios y la longitud del número actual, pero esto aún no lo descubrí. Así que creo que todavía hay margen de mejora.
Lo que hice fue crear un rango desde el límite inferior
l
al límite superioru
imprimiendo cada línea con un espacio multiplicado por un números
. Estoy aumentando el multiplicador con la longitud del número actual.fuente
Python 2,
787779 bytesPruébalo en línea!
f(A, B)
imprimirá la porción del eje entre A y B inclusive.¡La primera vez que contesto un desafío!
Utiliza y abusa de los backticks de Python 2 para contar el número de espacios que debe agregar antes del número.
-1 byte gracias a Mr.Xcoder
+2 porque olvidé un
+1
fuente
sum(len(`j`)) for
puede convertirse ensum(len(`j`)for
-1 bytesrange(a,b)
conrange(a,b+1)
, porque Python tiene rangos semi inclusivos.C (gcc) ,
4138 bytes-3 bytes Gracias solo a ASCII
Funciona en RedHat6, accesible a través de PuTTY
Pruébalo en línea!
fuente
more
en ese archivoV , 16 bytes
Pruébalo en línea!
Sería mucho más fácil si pudiera aceptarlo,
start
end - start
pero creo que eso está cambiando demasiado el desafío.Esto toma el número inicial como entrada en el búfer y el número final como argumento. Realmente crea la escalera de
start
astart + end
y luego elimina todo después del número final.fuente
MATL , 11 bytes
Pruébalo en línea!
Explicación
Esto funciona generando una cadena para cada número y concatenando con una copia negada lógicamente de la cadena anterior. Por lo tanto, char 0 se antepone 0 tantas veces como la longitud de la cadena anterior. Char 0 se muestra como un espacio, y cada cadena se muestra en una línea diferente
fuente
Swift 4 , 115 bytes
Creo que nadie habría publicado una solución Swift de todos modos ...
Pruébalo en línea!
fuente
Perl, 19 bytes
Nota:
\x0b
se cuenta como un byte.Junto con otros, pensé que usar los movimientos del cursor sería la ruta más corta, esto significa que no funciona en TIO:
Uso
fuente
1..
hace allí, ya que te dan dos enteros.1..
¿no estaba leyendo completamente las especificaciones, eso ya está arreglado! En cuanto a probarlo en línea, dado que la salida contiene la pestaña vertical, no se procesa como se esperaba. Tratando de ver si puedo encontrar un procesador que admita caracteres de control ... ¡Si no, ese podría ser mi nuevo proyecto!Japt ,
109 bytes¡Pruébelo en línea! Devuelve una matriz de líneas;
-R
bandera incluida para unirse en nuevas líneas para facilitar la visualización.Explicación
Versión anterior, 10 bytes:
¡Pruébelo en línea!
fuente
D,
133127126125121119 bytesSe tomaron gelatina y APL.
Pruébalo en línea!
Si está bien con los resultados dependientes de la consola (se sale del mismo principio que la respuesta C de Giacomos) aquí hay uno para
7271 bytes:¿Cómo? (Solo trucos específicos D)
f(T)(T a,T b,T s=0)
El sistema de plantillas de D puede inferir tiposfor(T j;j++<s;)
Los enteros por defecto son0
.' '.write;a.writeln
D te permite llamarfun(arg)
comoarg.fun
(una de las pocas cosas de golf que D tiene)a.text.length
Igual que el anterior, y D también le permite llamar a un método sin parámetros como si fuera una propiedad (text
es la conversión a cadena)fuente
Java 8, 79 bytes
Pruébalo en línea!
fuente
(a,b)->
ab->a->
. (Y podría guardar tres bytes más yendo a Java 10 y cambiandoString
avar
). Pruébelo en línea.