Dada una lista con número, genera los rangos de esta manera:
Entrada: [0, 5, 0]
se convertiría [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
.
Esto es mapear un rango a través de la matriz, por lo que primero tenemos que crear el rango [0, 5]
, que es [0, 1, 2, 3, 4, 5]
. Después de eso, usamos 5
para crear el rango [5, 0]
. Agregado a nuestro rango anterior, esto nos da:
[0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
Observemos un caso de prueba con dos mismos dígitos uno al lado del otro:
[3, 5, 5, 3], ranges:
[3, 5] = 3, 4, 5
[5, 5] = 5 (actually [5, 5] due to overlapping)
[5, 3] = 5, 4, 3
Entonces esto nos daría [3, 4, 5, 5, 4, 3]
.
Algunos otros casos de prueba:
[1, 9] > [1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, -10] > [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]
[3, 0, 0, -3] > [3, 2, 1, 0, 0, -1, -2, -3]
[1, 3, 5, 7, 5, 3, 1, -1, -3] > [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3]
La entrada siempre tendrá al menos 2 enteros.
¡La respuesta más corta gana!
code-golf
array-manipulation
Lamaro
fuente
fuente
Respuestas:
05AB1E, 1 byte
Pruébalo en línea!
Cómo funciona
Es un incorporado.
fuente
Javascript,
999593 bytes46 bytes de descuento gracias @Neil .fuente
y<b?b-y:y-b||1
. Guarde otro byte usandoy>b||y-b&&-1
.y<b?-1:y>b
es mejor aún.JavaScript (SpiderMonkey 30+),
8176 bytesProbado en Firefox 44. Utiliza las increíbles capacidades de desestructuración de argumentos de ES6 y las comprensiones de matriz de ES7 (que lamentablemente se han eliminado de la especificación ES7).
fuente
[3, 0, 0, -3]
. Arreglé el RangeError y guardé 10 bytes pero todavía no funciona:([n,...a],z=[n])=>z.concat([for(i of a)for(j of[...Array((r=n<i)?i-n-1:n-i-1),0])i=r?++n:--n])
([n,...a])=>[n].concat([for(i of a)for(j of[...Array((r=n<i)?i-n:n-i)])i=r?++n:--n])
por supuesto.JavaScript (ES6) 66
72Una función recursiva que agrega valores repetidamente dentro de la matriz para llenar los espacios entre números cercanos
Prueba
fuente
C, 120 + 12 = 132 bytes
Llamada de ejemplo:
Prueba en vivo en ideone .
fuente
Python 2, 77 bytes
Pruébalo en línea
Gracias a Neil, DenkerAffe y Erwan por señalar las mejoras que me perdí
fuente
+1
es innecesario?lambda n:n[0:1]+sum([range(x,y,[1,-1][y+1<x])[1:]+[y]for(x,y)in zip(n,n[1:])],[])
? Guarda algunos bytes.[1,-1][y+1<x]
por2*(y>x)-1
(tampoco entiendo por qué lo usay<=x
y no simplementey<x
)n[0:1]
es equivalente an[:1]
.Perl, 47 bytes
Incluye +3 para
-p
(el código contiene$'
espacio y-
cuenta también)Dé la lista de números en STDIN:
fluctuating.pl
:La variable temporal y todos estos paréntesis se sienten subóptimos ...
fuente
$'
mencionó no está en el código ...Haskell,
6355 bytesEjemplo de uso:
g [3,5,5,3]
->[3,4,5,5,4,3]
.Es una modificación de mi respuesta a un desafío relacionado . Nuevamente, el trabajo principal se realiza concatenando la lista de
a
arriba hacia abajob-1
ya
hacia abajob+1
(donde una lista estará vacía) y una llamada recursiva. Para manejar ela==b
caso donde ambas listas están vacías, anteponemos[a|a==b]
que evalúa[a]
sia==b
y de lo[]
contrario.fuente
R,
868275 bytesguardó 4 bytes usando rep no rep.int (¡código de golf no rendimiento!) guardó otros 7 bytes usando coincidencia parcial incorporada al usar
$
(y colapsando la definición de función a 1 líneafuente
(y=...)
lugar de(y<-...)
también es válido, y un byte menos.Ruby,
11682 bytesMi primer golf.
Editar: Gracias manatwork por las increíbles sugerencias.
fuente
map
's bloque de código puede tomar la matriz como múltiples parámetros:->n{o,*m=n;o=[o];m.zip(n).map{|t,u|o+=u==t ?[u]:(u<t ?[*u+1..t]:[*t..u-1].reverse)};o}
. De lo contrario, bonito primer golf.[[u],[*u+1..t],[*t..u-1].reverse][t<=>u]
.Japt , 12 bytes
¡ Ahorró 16 bytes gracias a @ETHproductions !
Pruébelo en línea
fuente
Perl 6, 94 bytes
No estoy muy contento con esto ahora, probablemente tomaré otra oportunidad más tarde
fuente
PHP 5.4, 86 bytes
Está destinado a ser utilizado como un archivo incluido, que devuelve el resultado.
Los valores se pasan como parámetros de la línea de comandos.
No es exactamente bonito ni nada, pero hace el trabajo.
fuente
Python 3 , 76 bytes
Primer intento de una respuesta de Python. La idea básica es identificar repetidamente pares en la secuencia donde la diferencia es mayor que un paso e insertar un elemento adicional (y solo uno) para completar la secuencia en la dirección correcta. Repita hasta que todas las diferencias entre elementos consecutivos estén entre +1 y -1.
Pruébalo en línea!
fuente
Lua, 156 bytes
Una función que toma una matriz en parámetro y devuelve la matriz extendida.
Sin golfos y explicaciones
Para facilitar su uso, puede usar la siguiente función para imprimir la matriz devuelta por
f()
.Al probar este envío, puede llamarlo así:
fuente
Mathcad, 62 "bytes"
Como Mathcad utiliza una "pizarra" 2D y operadores especiales (por ejemplo, operador de suma, operador integral) y guarda en un formato XML, una hoja de trabajo real puede contener varios cientos (o más) caracteres. Para los propósitos de Code Golf, he tomado un "conteo de bytes" de Mathcad para que sea el número de caracteres u operadores que el usuario debe ingresar para crear la hoja de trabajo.
La conversión de la definición de la función a un programa directo, y la sustitución de la variable lst con un solo nombre de carácter, da un total de 62 "bytes". Con la función, usando un solo carácter en lugar del nombre completo, esto aumenta a 65 "bytes" para la definición y otros 4 "bytes" para cada llamada (suponiendo que la creación de la lista en sí misma no esté incluida en el byte general contar (Usar las tablas integradas de Mathcad es otra forma de ingresar la lista).
fuente
PHP, 144 bytes
Vista en despiece ordenado Llamada de entrada / función SalidaEs desordenado y grueso, y trataré de optimizarlo más tarde. Crea un a
range()
partir de cada par de pares de valores adyacentes, luego los une (despuéspop
del final del acumulado anteriorArray
).fuente
Perl6, 21
.join es la abreviatura de $ _. join
Prueba (rakudo)
Salida
fuente
Jalea , 10 bytes
Pruébalo en línea!
fuente
R , 74 bytes
Otra solución R
Pruébalo en línea!
fuente