Estou navegando neste site há um tempo, mas recentemente fiquei realmente interessado em experimentar alguns dos desafios. Eu pretendia tentar alguns dos tópicos existentes sobre golfe com código, mas ontem não tinha acesso à Internet há algum tempo e, nesse meio tempo, pensei em meu próprio desafio.
Sua tarefa é criar um programa ou função que utilize uma matriz de a
números flutuantes e um número inteiro e n
, em seguida, defina cada valor na a
média dos dois ao lado, n
vezes. Quando usado repetidamente com valores crescentes de n
, isso gera um movimento semelhante a uma onda:
Específicos:
- Se houver apenas um item
a
ou sen
for 0 ou menos, o programa retornará a matriz original. - As entradas e saídas podem estar no formato que você desejar, desde que elas estejam visivelmente separadas.
Para cada etapa:
- O primeiro item em
a
deve se tornar a média de si mesmo e o próximo item. - O último item em
a
deve se tornar a média de si mesmo e o item anterior. - Qualquer outro item
a
deve se tornar a média do item anterior e do próximo item. - Certifique-se de calcular a matriz da etapa anterior e não a atual!
Casos de teste: NOTA: Suas entradas / saídas não precisam estar neste formato!
[0, 0, 1, 0, 0], 1 -> [0, 0.5, 0, 0.5, 0]
[0, 0, 1, 0, 0], 2 -> [0.25, 0, 0.5, 0, 0.25]
[0, 0, 1, 0, 0], 0 -> [0, 0, 1, 0, 0]
[0, 0, 1, 0, 0], -39 -> [0, 0, 1, 0, 0]
[0, 16, 32, 16, 0], 1 -> [8, 16, 16, 16, 8]
[0, 1, 2, 3, 4, 5], 1 -> [0.5, 1, 2, 3, 4, 4.5]
[0, 64], 1 -> [32, 32]
[0], 482 -> [0]
[32, 32, 32, 16, 64, 16, 32, 32, 32], 4 -> [33, 27, 40, 22, 44, 22, 40, 27, 33]
Isso é código-golfe , então a resposta mais curta em bytes vence. O vencedor será escolhido em uma semana (em 1º de agosto). Boa sorte!
Edit: Parabéns ao vencedor, @issacg , com incríveis 18 bytes!
fonte
n
não fornecidos ea
não fornecidos - eles não acrescentam muito.n
deve ser de 4, não 5.Respostas:
Pitão,
46bytesEsse código espera entrada no formulário
iterations, [wave1, wave2, wave3 ...]
, como visto no primeiro link abaixo.Demonstração. Equipamento de teste.
O programa funciona aplicando o código dentro da
u
função reduzir ( ) à lista de entrada, quantas vezes o número de iterações.Vou demonstrar a função de propagação de ondas na lista
[0, 1, 2, 3, 4, 5]
, que está emG
:+hGG
precedeG
o primeiro elemento deG
, formando[0, 0, 1, 2, 3, 4, 5]
.t+GeG
anexaG
o último elemento deG
e remove seu primeiro elemento, formando[1, 2, 3, 4, 5, 5]
.sV
O primeiro forma pares das listas, fornecendo[[0, 1], [0, 2], [1, 3], [2, 4], [3, 5], [4, 5]]
o elemento final da primeira lista truncado. Então, os pares são somados vias
função, dando[1, 2, 4, 6, 8, 9]
.cR2
usa divisão de ponto flutuante para dividir todos os números por 2, dando o resultado desejado[0.5, 1.0, 2.0, 3.0, 4.0, 4.5]
,.fonte
Boneco de neve 1.0.0 , 219 caracteres
Com quebras de linha para "legibilidade":
Versão não-golfada / não-minificada:
Formato de E / S de amostra:
fonte
Pitão -
2524 bytesUsa enumerar, reduzir para fazer iterações.
Experimente online aqui .
fonte
Raquete,
164145 bytesUngolfed
Observe que você pode precisar da
#lang racket
linha para executar isso.fonte
R, 109 bytes
Isso cria uma função sem nome que aceita um vetor e um número inteiro e retorna um vetor. A abordagem aqui é tratar a entrada como uma série temporal univariada e aplicar um filtro de convolução linear.
Ungolfed + explicação:
Exemplos:
fonte
Haskell, 76 caracteres
O truque é adicionar o primeiro número ao início da lista e o último ao final da lista, em vez de lidar com as condições de contorno.
Testes:
fonte
if then else
, ou seja,c
tornaa#n|n<1=a|1<2=iterate f a!!n
-s
se e torna - sex!y=(x+y)/2
(e é chamado...zipWith(!)(x:a)...
).c
um operador infix, dizer#
:a#n|n<1=a|1<2=iterate f a!!n
. Chame assim[0, 0, 1, 0, 0] # 2
.CJam,
2322 bytesExperimente online
A entrada está no formato de lista CJam, por exemplo, para o último exemplo:
A saída também é uma lista CJam:
A abordagem básica é que, em cada etapa, o vetor é deslocado uma posição para a esquerda e uma posição para a direita. Cada um dos dois vetores é preenchido com o primeiro / último elemento e, em seguida, a média dos dois vetores é calculada.
Explicação:
fonte
Java, 181 bytes
Aqui está a versão do golfe:
Ungolfed:
Tentei reduzir o máximo possível as atribuições e condicionais com o Java. Melhorias são bem-vindas, é claro.
fonte
JavaScript (ES6),
15313267 caracteresVolto à minha primeira resposta seis meses depois e o que faço? Golf fora de 50%, é isso. ;)
Esta versão se autodefine repetidamente até que
n
seja menor que 1, diminuindon
1 a cada vez.Uma solução não recursiva (
15113078 caracteres):Ungolfed: (desatualizado)
Recursivo:
Não recursivo:
fonte
if(n<2)return b;return s(b,n-1)
pode ser reduzido parareturn n<2?b:s(b,n-1)
Java, 203 bytes
Tentando meu primeiro put com Java. Dicas de melhoria são bem-vindas :)
Bonito impresso:
fonte
for
loop externo para a instrução de incremento do loop? Gostafor(i=0;i<n;b[0]=...,b[s-1]=...,a=...,++i)for(...)b[j]=...;
? Então você deve conseguir se livrar do aparelho.++i
um do outro por vírgulas em vez de ponto e vírgula). Experimente. :)f(a;b;c){d;e;}
deve ser completamente idêntico aof{a;b;}{d;e;c;}
e, portanto, também af(a;b;e,c)d;
. No entanto, com seu código reorganizado que não funciona mais, porque você não pode mover ofor
interior para o outrofor
, acho que tudo isso não importa mais. ;)Python 2, 98 bytes
Adotou a abordagem direta, usada
exec
para evitar o uso de um loop while. Eu acho que existe uma maneira melhor de fazer a lógica para descobrir posições de casos especiais, mas isso funciona por enquanto. A entrada deve ser formatada como[list], times
.Ungolfed:
fonte
Mathematica, 81 bytes
Tenho a sensação de que poderia jogar mais, se eu descobrisse uma maneira melhor de lidar com a condição de positividade.
Vale ressaltar: o Mathematica oferece várias soluções embutidas em potencial em sua gama de funções de processamento de lista e filtro, além de
CellularAutomaton
. Eu escolhiNest[... ListConvolve ...]
porque era a maneira mais fácil de resolver as distorções no final da lista, mas outros ângulos podem ser mais curtos.fonte
Matlab, 109
Exemplos:
fonte
Scala,
195 caracteres (186 com saída lenta, ie187 caracteresStream
)provavelmente não ideal, mapeamento
sliding(3)
é muito útil nesse caso.testes:
fonte
q (27 caracteres)
Exemplos
fonte
R, 93 bytes
Como uma função sem nome
Expandido
Testes
fonte
Japt,
3937 bytes (não concorrente)Essa resposta não é competitiva porque o idioma é mais novo que o desafio. Eu só queria ver o quão bem minha linguagem do golfe poderia aguentar meu primeiro desafio.
Experimente online!
fonte
C ++ 14, 158 bytes
Requer entrada para ser um contêiner
value_type==double
, comovector<double>
.Ungolfed:
fonte
Raquete 223 bytes
Ungolfed:
Teste:
Saída:
fonte
Gelatina , 14 bytes
Experimente online!
Programa completo.
fonte
C # (compilador interativo do Visual C #) ,
160144 bytesUsa boa e velha recursão.
Experimente online!
fonte