Sua tarefa hoje é aplicar uma onda a uma matriz de números. Uma onda se parece com isso: [1, 0, -1, 0, 1, 0, -1, 0, 1...]
aplicá-la a uma determinada matriz significa somar os primeiros elementos, os segundos elementos etc.
Mais precisamente:
Seu programa ou função receberá uma matriz de números inteiros. Ele deve imprimir ou retornar uma matriz de tamanho igual, 1
adicionada ao 1º, 5º, 9º, etc. elemento da matriz original, -1
adicionada ao 3º, 7º, 11º, etc. elemento da matriz original e o restante dos elementos deve ser deixado intocado.
A matriz de entrada é garantida para ter pelo menos um elemento.
Casos de teste:
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 é o código-golfe , o código mais curto vence!
code-golf
array-manipulation
Pavel
fonte
fonte
Respostas:
Geléia , 5 bytes
Experimente online!
Como funciona
fonte
1, 2, 3 ...
ou1, 0, -1, 0 ...
?LOGO , 18 bytes
Não há "Experimente online!" link porque todos os intérpretes on-line do LOGO não oferecem suporte à lista de modelos.
Essa é uma lista de modelos (equivalente à função lambda em outros idiomas).
Uso:
(
invoke
chama a função,pr
imprime o resultado)impressões
[-3 3 -1 1 8 9 7 -2 12 -88]
.Explicação (já bastante compreensível):
fonte
Haskell , 26 bytes
Experimente online! (executa todos os casos de teste)
Explicação:
fonte
JavaScript (ES6), 28 bytes
O cálculo é assim:
O último bit aproveitando o fato de que em JS, um número negativo quando modulado retém seu sinal negativo (ou seja
-5 % 3 -> -2
, em vez de1
como seria em Python).fonte
Mathematica,
262322 bytesExperimente online!(Matemática)
Nota: O link TIO é para a versão de 23 bytes, a versão de 22 bytes não é compatível com matemática.
fonte
Python 2 , 40 bytes
Experimente online!
fonte
MATL ,
118 bytesExperimente no MATL Online!
Explicação
fonte
+
a explicação #Gelatina , 16 bytes
Experimente online!
heh, tenho certeza que isso é muito longo
Editar
Eu sei que uma solução de 5 bytes é possível, mas meu wifi parece estar começando a me impedir, então jogarei amanhã. Se alguém postar a pequena solução Jelly antes que eu possa jogar isso, tudo bem para mim; Vou manter isso aqui para referência sobre o
quão ruim eu sou em Jelly,outra maneira de fazê-lo. Quero dizer, eu poderia apenas olhar para o link que Phoenix postou nos comentários, mas como ainda estou aprendendo, não quero olhar para a solução até que eu tenha descoberto. Isso pode me custar reputação, mas o aprendizado é para isso que estou aqui :)))fonte
R ,
2924 bytesExperimente online!
fonte
Python 2 ,
5042 bytesEconomizou 8 bytes graças a @Sisyphus!
Experimente online!
53 bytes
Experimente online!
fonte
lambda l:map(sum,zip(l,[1,0,-1,0]*len(l)))
para Python 2Haskell , 26 bytes
@Mego me derrotou nesta solução
Experimente online!
É nisso que Haskell é ótimo. Isso declara uma função sem ponto que fecha a entrada com uma lista infinita.
Haskell , 56 bytes
Aqui está uma solução que usa números complexos. Não é muito competitivo por causa da importação, mas nunca é menos legal.
Experimente online!
fonte
Mathematica, 19 bytes
Explicação
Nota:
i=1
aparece fora da função, o que é aceitável para este meta consenso .fonte
i
tiver um valor diferente de 1)J, 12 bytes
Experimente online!
Como o operador de forma de J
$
preenche ciclicamente, quando o modelamos no comprimento#
da entrada, ele faz exatamente o que queremos, e podemos apenas adicioná-lo à entrada]
fonte
C ++,
93858363 bytes-8 bytes, graças a esta resposta , descobri que os parâmetros lambda podem ser
auto
e você pode passar com o parâmetro correto, ele funcionará-2 bytes graças a Nevay
-2 bytes graças a Zacharý
Eu removi a
vector
inclusão. Você precisará passar como argumento para o contêiner wa que respeite as seguintes condições:size
sem argumentosContainers STL que respeitem as seguintes condições forem
array
,vector
,string
,map
,unordered_map
, e talvez outrosSe a saída modificando argumentos não for permitida, então:
C ++,
112110 bytesfonte
j%4
para salvar 2 bytes.j%4
.Pari / GP , 30 bytes
Experimente online!
fonte
Dyalog APL, 13 bytes
Experimente online!
Quão?
1 0 ¯1 0
- a matriz [1, 0, -1, 0]⍴⍨≢
- remodelar para o comprimento da entrada, cíclico⊢+
- soma vetorializada com a entradafonte
Perl 6 , 28 bytes
Experimente online!
1+0i, * × i ... *
produz uma lista infinita dos números1, i, -1, -i
repetidos em um ciclo. Esses números são compactados com adição (Z+
) com a lista de entrada ($_
) e, em seguida, os componentes reais dos números complexos resultantes são extraídos (».re
).fonte
D, 56 bytes
Experimente online!
Esta é uma porta da resposta C ++ de HatsuPointerKun , por isso não as esqueça!
fonte
Japt ,
1110 bytesAproveita o empacotamento de índice do Japt.
Teste-o
Explicação
Entrada implícita da matriz
U
.Mapa sobre a matriz.
Para o elemento atual, adicione ...
O elemento no índice atual (
E
) ...Na matriz
[1,0,-1,0]
.fonte
Na verdade , 11 bytes
Experimente online! (executa todos os casos de teste)
Explicação:
fonte
Pyth, 11 bytes
Try it online!
fonte
.e+b@[1Z_1Z
ss
withe
for -1..e+be^.j)k
didn't seem to work when I tried it.CJam, 15 bytes
Try it online!
fonte
Math.JS, 34 bytes
Explained
Try it Online!
fonte
8th,
9663 bytesCode
This code leaves resulting array on TOS
Usage and examples
Explanation
We use cos(x) in order get the right sequence [1,0,-1,0]. Each array element's index is multiplied by 90 degrees and then it is passed to cos() function to get the desired "wave factor" to be added to the corresponding item.
fonte
C# (.NET Core), 50 bytes
Try it online!
Uses a simple lambda. Modifies the original array and returns the output through reference.
fonte
05AB1E, 16 bytes
Try it online!
3L2.SR0¸«
is the shortest thing I can think of forsin(x % 4)
in 05AB1E.fonte
Ruby, 38 bytes
Try it online!
fonte