Todos nós sempre ouvimos o idioma "percorrer a matriz" para significar "mapear a função sobre a matriz a seguir". No entanto, eu preciso fazê-lo (agora!), Então quero que você execute a matriz.
Como eu corro?
Imagine que há um bando selvagem de lobos atrás de você
Percorrer uma matriz é como percorrer uma, exceto que você pode pular os elementos. Sim, às vezes é confuso, mas (geralmente) funciona. "Quais elementos foram ignorados?", Você pode perguntar. Bem, isso é feito aleatoriamente. Vamos percorrer a matriz!
- Let
e
Ser o elemento atual. - Vamos
random
gerar uma flutuação aleatória[0,1)
. E serandom() < 0.5
você for para o próximo elemento e depois para a etapa 1. (Você pode gerar um número por outros meios, desde que seja uma chance (idealmente) igual de pular e permanecer. Por exemplo, você pode escolher um elemento conjunto de dois membros e execute a ação com base no resultado.) - Caso contrário, você executar a função
f
noe
.
Objetivo
Dado um array / lista / string como um A
e um número K
, percorra o array, adicionando K
a cada membro acessado. Saída / retorno desta matriz. A
conterá apenas números inteiros não negativos e K
sempre serão números inteiros não negativos. Este é um código de golfe , portanto o programa mais curto em bytes vence.
Casos de teste (exemplos)
K, A => possible K'
[1, 2, 3, 4], 0 => [1, 2, 3, 4]
[1, 2, 3, 4], 1 => [1, 3, 3, 5]
[0, 0, 0, 0], 2 => [2, 0, 0, 2]
fonte
[0,1)
erro de digitação? 2 mais para onde ir ...x
tal que0 ≤ x < 1
.Respostas:
Pitão, 7
Experimente aqui
Usa uma escolha aleatória em vez de comparação de ponto flutuante, mas deve ser indistinguível.
Expansão:
Usando ponto flutuante:
Experimente aqui
fonte
Clojure,
4137 bytesBateu alguns bytes multiplicando por 0 ou 1 e soltando o "se". Crédito para a maioria dos outros remetentes!
fonte
for
é mais curto do quemap
, veja minha resposta para referência :) Além disso, evita ter uma função anônima interna, portanto, em vez de iniciar o código,(fn[a k]
você pode usar#(
.Geléia,
987 bytesA partir
8
de7
graças a @FryAmTheEggman .Experimente online!
Explicação
fonte
MATL , 11 bytes
Usa números aleatórios de ponto flutuante.
Experimente online!
Explicação
fonte
Japonês, 6 bytes
Teste-o
Explicação
Entrada implícita de matriz
U
e número inteiroV
. Mapeie (®
) sobre a matriz e, para cada elemento, adicioneV
multiplicado porMq
, que gera aleatoriamente um0
ou1
. Saída implícita da matriz resultante.fonte
Ruby, 28 bytes
fonte
Julia,
332927 bytesEsta é uma função anônima que aceita uma matriz com uma função anônima interna que aceita um número inteiro e retorna uma matriz. Para chamá-lo, atribua-o a uma variável e chame como
f(x)(k)
.Geramos uma matriz com o mesmo comprimento que a matriz de entrada composta por zeros e aqueles escolhidos aleatoriamente com igual probabilidade. Nós multiplicamos isso pelo número inteiro de entrada e o adicionamos à matriz de entrada.
Experimente online!
Economizou 2 bytes graças a Dennis!
fonte
Python 2,
6058 bytesEste programa acabou realmente simples. Não há muitos truques de golfe lá, além do óbvio "
from module import*
", usando um lambda em vez de uma função regular e a falta geral de espaço em branco. Fora isso, é realmente bastante idiomático. Se eu estivesse escrevendo isso de verdade, provavelmente faria de uma maneira muito semelhante:Ou talvez algo mais chique:
Mas isso é o suficiente para mostrar :)
Esta é a versão antiga de 60 bytes de quando era necessário usar um float para aleatoriedade:
Para cada elemento da lista, adicione
k*(random()<.5)
. Os booleanos Python são avaliados como 0 e 1, portanto, adiciona 0 a qualquer elemento cuja condição não seja verdadeira.Os
random.random()
retornos do Python flutuam[0, 1)
, então eu não precisava me preocupar com isso.fonte
e+choice([0,k])
JavaScript (ES6), 38 bytes
fonte
PowerShell v2 +, 34 bytes
Pega entrada
$a
e$k
, a matriz e o int respectivamente. Em seguida, passamos pela matriz e cada iteração de loop gera o elemento atual mais os$k
tempos(random 2)
que serão executadosGet-Random -Maximum 2
(ou seja, a0
ou a1
). Tudo isso é deixado no pipeline e a saída é implícita.fonte
CJam, 10 bytes
Espera a matriz e o número no topo da pilha nessa ordem e os substitui pela nova matriz.
Teste aqui.
fonte
php 71 bytes
fonte
k (12 bytes)
por exemplo
De maneira mais geral, onde
f
pode ser passado como argumento para 16 caracterespor exemplo
fonte
Python 3
15211098 bytesEsta é a minha primeira solução de código de golfe, então não conheço nenhum truque. Eu testei isso usando uma função principal com casos de teste. O tamanho do arquivo é apenas essa função.
Obrigado a @ Cᴏɴᴏʀ O'Bʀɪᴇɴ pelo conselho sobre a remoção de espaços em branco. Elogios adicionais a @undergroundmonorail por conselhos que salvaram 12 bytes.
fonte
import *
,a(x, y)
,x[ptr]=z+y
, etc. Você também pode substituir os 4 espaços com um único espaçox[ptr]=z+y
na mesma linhaif random()>0.5
para salvar 3 bytes de espaço em branco. No python 2,0.5
pode-se escrever.5
para salvar um byte, mas não sei se isso é verdade no python 3. Se você renomearptr
para,p
você salvará 6 bytes ao todo. Além disso, você está no Windows? O Windows armazena novas linhas como dois bytes, mas como o python não se importa se a nova linha é de um ou dois bytes, você pode contá-la como 1, tornando sua solução atual apenas 103 bytes. A propósito, bem-vindo ao PPCG :) #Clojure, 32 bytes
Obrigado David pela
rand-int
ideia, definitivamente mais curto que aif(>(rand)0.5)
abordagem. Aquifor
batemap
.fonte
Oitava, 28 bytes
Amostra executada em ideone .
fonte
05AB1E , 10 bytes
Código:
Experimente online! .
fonte
Java, 84 bytes
Ungolfed
Notas
return A;
. O tipo de retorno precisaria ser alterado deint[]
paravoid
. No entanto, isso não salva bytes adicionais, pois é necessário um espaço adicional entrevoid
er
.Versão mais curta (conforme mencionado na nota), 75 bytes
Resultado
fonte
Mathcad, bytes
Ainda não há uma contagem formal de bytes como protocolo de contagem do Mathcad a ser decidido.
fonte
Java
1081078582 bytes14 bytes salvos graças a @TimmyD
fonte
main
,String[]
,int[]
, e salvar mais alguns bytes, alterandonextFloat()>0.5
anext(1)==0
.new java.util.Random().nextFloat()
paraMath.random()
, pois é muito mais curto.s
, apenas oi
método tem tipo de retorno,void
mas você está tentando retornarint[]
. Também há um ponto e vírgula ausente depoisreturn s
.Perl 5 , 30 + 1 (-a) = 31 bytes
Experimente online!
fonte