Su tarea hoy es aplicar una onda a una serie de números. Una onda se ve así: [1, 0, -1, 0, 1, 0, -1, 0, 1...]
aplicarla a una matriz dada significa sumar los primeros elementos, los segundos elementos, etc.
Más precisamente:
Su programa o función recibirá una variedad de enteros. Debe imprimir o devolver una matriz de igual tamaño 1
agregada al primer, quinto, noveno, etc. elemento de la matriz original, -1
agregada al tercer, séptimo, 11.º, etc. elemento de la matriz original y el resto de los elementos. debe dejarse intacto.
Se garantiza que la matriz de entrada tenga al menos un elemento.
Casos de prueba:
Input | Output
[0] | [1]
[-1] | [0]
[-4, 3, 0, 1, 7, 9, 8, -2, 11, -88] | [-3, 3, -1, 1, 8, 9, 7, -2, 12, -88]
[0, 0, 0, 0, 0] | [1 ,0 ,-1 ,0 ,1]
[1, 1] | [2, 1]
Este es el código de golf , ¡el código más corto gana!
Respuestas:
Jalea , 5 bytes
Pruébalo en línea!
Cómo funciona
fuente
1, 2, 3 ...
o1, 0, -1, 0 ...
?LOGOTIPO , 18 bytes
No hay un "¡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:
(
invoke
llama a la función,pr
imprime el resultado)impresiones
[-3 3 -1 1 8 9 7 -2 12 -88]
.Explicación (ya bastante comprensible):
fuente
Haskell , 26 bytes
Pruébalo en línea! (ejecuta todos los casos de prueba)
Explicación:
fuente
JavaScript (ES6), 28 bytes
El cálculo es así:
El último bit aprovecha el hecho de que en JS, un número negativo cuando se modula conservará su signo negativo (es decir
-5 % 3 -> -2
, en lugar de1
como sería en Python).fuente
Mathematica,
262322 bytesPruébalo en línea!(Matemáticas)
Nota: El enlace TIO es para la versión de 23 bytes, la versión de 22 bytes no es compatible con matemáticas.
fuente
Python 2 , 40 bytes
Pruébalo en línea!
fuente
MATL ,
118 bytes¡Pruébalo en MATL Online!
Explicación
fuente
+
en la explicaciónJalea , 16 bytes
Pruébalo en línea!
heh estoy seguro de que esto es demasiado largo
Editar
Sé que es posible una solución de 5 bytes, pero mi wifi parece estar empezando a interrumpirme, así que jugaré golf mañana. Si alguien publica la solución Jelly corta antes de que pueda jugar golf, está bien para mí; Solo mantendré esto aquí como referencia de
lo mal que estoy en Jelly jajajaotra forma de hacerlo. Quiero decir, podría mirar el enlace que Phoenix publicó en los comentarios, pero como todavía estoy aprendiendo, no quiero mirar la solución hasta que lo haya descubierto yo mismo. Esto podría costarme reputación, pero el aprendizaje es para lo que estoy aquí :)))fuente
R ,
2924 bytesPruébalo en línea!
fuente
Python 2 ,
5042 bytes¡Guardado 8 bytes gracias a @Sisyphus!
Pruébalo en línea!
53 bytes
Pruébalo en línea!
fuente
lambda l:map(sum,zip(l,[1,0,-1,0]*len(l)))
para Python 2Haskell , 26 bytes
@Mego me ganó a esta solución
Pruébalo en línea!
Esto es en lo que Haskell es genial. Esto declara una función sin puntos que comprime la entrada con una lista infinita.
Haskell , 56 bytes
Aquí hay una solución que usa números complejos. No es muy competitivo debido a la importación, pero sin embargo es bastante bueno.
Pruébalo en línea!
fuente
Mathematica, 19 bytes
Explicación
Nota:
i=1
aparece fuera de la función, lo cual está bien según este meta consenso .fuente
i
tiene un valor diferente de 1)J, 12 bytes
Pruébalo en línea!
Debido a que el operador de forma de J se
$
llena cíclicamente, cuando le damos forma a la longitud#
de la entrada, hace exactamente lo que queremos, y simplemente podemos agregarlo a la entrada]
fuente
C ++,
93858363 bytes-8 bytes, gracias a esta respuesta , descubrí que los parámetros lambda pueden ser
auto
y puede pasar con el parámetro correcto, funcionará-2 bytes gracias a Nevay
-2 bytes gracias a Zacharý
Eliminé la
vector
inclusión. Deberá pasar como argumento a un contenedor que respete las siguientes condiciones:size
sin argumentosLos contenedores STL que respetan las siguientes condiciones son
array
,vector
,string
,map
,unordered_map
, y tal vez otrosSi la salida mediante la modificación de argumentos no está permitida, entonces:
C ++,
112110 bytesfuente
j%4
para guardar 2 bytes.j%4
.Pari / GP , 30 bytes
Pruébalo en línea!
fuente
Dyalog APL, 13 bytes
Pruébalo en línea!
¿Cómo?
1 0 ¯1 0
- la matriz [1, 0, -1, 0]⍴⍨≢
- remodelar a la longitud de la entrada, cíclica⊢+
- suma vectorizada con la entradafuente
Perl 6 , 28 bytes
Pruébalo en línea!
1+0i, * × i ... *
produce una lista infinita de los números1, i, -1, -i
repetidos en un ciclo. Esos números se comprimen con suma (Z+
) con la lista de entrada ($_
), y luego se extraen los componentes reales de los números complejos resultantes (».re
).fuente
D, 56 bytes
Pruébalo en línea!
Este es un puerto de la respuesta C ++ de HatsuPointerKun , ¡así que no te olvides de ellos!
fuente
Japt ,
1110 bytesAprovecha el ajuste de índice de Japt.
Pruébalo
Explicación
Entrada implícita de la matriz
U
.Mapa sobre la matriz.
Al elemento actual agregue ...
El elemento en el índice actual (
E
) ...En la matriz
[1,0,-1,0]
.fuente
En realidad , 11 bytes
Pruébalo en línea!(ejecuta todos los casos de prueba)
Explicación:
fuente
Pyth , 11 bytes
Pruébalo en línea!
fuente
.e+b@[1Z_1Z
ss
cone
por -1..e+be^.j)k
no parecía funcionar cuando lo probé.CJam , 15 bytes
Pruébalo en línea!
fuente
Math.JS , 34 bytes
Explicado
Pruébalo en línea!
fuente
8 ,
9663 bytesCódigo
Este código deja la matriz resultante en TOS
Uso y ejemplos
Explicación
Usamos cos (x) para obtener la secuencia correcta [1,0, -1,0]. El índice de cada elemento de matriz se multiplica por 90 grados y luego se pasa a la función cos () para obtener el "factor de onda" deseado que se agregará al elemento correspondiente.
fuente
C # (.NET Core) , 50 bytes
Pruébalo en línea!
Utiliza una lambda simple. Modifica la matriz original y devuelve el resultado mediante referencia.
fuente
05AB1E , 16 bytes
Pruébalo en línea!
3L2.SR0¸«
es lo más corto que se me ocurresin(x % 4)
en 05AB1E.fuente
Rubí , 38 bytes.
Pruébalo en línea!
fuente