Crie um programa para gatos, também conhecido como programa que recebe uma entrada e a imprime.
... Exceto que o programa retirará aleatoriamente os caracteres da sua entrada e os imprimirá.
Cada caractere na entrada deve ter probabilidades geralmente iguais para serem removidas com o programa, porém, como é difícil fazer isso, as probabilidades para cada caractere podem variar em 10%, no máximo.
Seu programa deve receber a entrada, remover aleatoriamente caracteres da entrada e imprimir essa versão novamente. (Você pode imprimir com novas linhas à direita ou outros caracteres, caso o seu idioma precise imprimir novas linhas.)
Se a entrada foi BOOOWL
, ela não deve remover todos os O com uma chance igual: cada caractere (não único) deve ser considerado; portanto, em vez de cada O combinado ter uma chance de 1/5 (por exemplo), cada O deve ter 1 / 5 chance, então, em vez de haver uma chance de 1/5 BWL
, deve haver uma chance de 1/5 BOWL
, BOOWL
.
A entrada é restrita a STDIN ou equivalente mais próximo.
Cada personagem deve ter no mínimo 10% e no máximo 30% de chance de ser removido.
As probabilidades de cada personagem devem ser calculadas individualmente.
Você pode usar qualquer componente do seu idioma que suporte ações aleatórias, sejam elas funções ou qualquer outra coisa.
A saída deve ser através de STDOUT ou o equivalente mais próximo. Se o seu idioma tiver STDOUT, não faça saída de nenhuma outra maneira. Se o seu idioma não puder gerar seqüências de caracteres como texto, use o equivalente mais próximo (a saída da matriz de caracteres de C está OK aqui).
Isso é código de golfe. O programa mais curto vence.
BOWL OF SOUP
todos poderãoO
ser excluídos de uma só vez?Output must be through STDOUT, as a text. Do not output a character array.
<- Eu tenho uma linguagem que permite a saída de uma matriz de caracteres (ela é achatada antes da saída). Isso não é permitido? E linguagens como C, onde uma string é basicamente uma matriz de caracteres?Respostas:
Japonês
-f
, 2 bytesO
-f
sinalizador "executa o programa em cada elemento na primeira entrada, produzindo uma matriz daqueles que retornam um valor verdadeiro".5ö
retorna um número aleatório entre 0 (inclusive) e 5 (exclusivo). Como o JavaScript, 0 é falso no Japt.Tente
fonte
-f
, no título.Python 3 , 63 bytes
Experimente online!
Python 2 ,
6765 bytesExperimente online!
Cada personagem tem 20% de chance de ser derrubado.
Abordagem diferente, mesmo comprimento:
Experimente online!
fonte
Create a cat program, a.k.a a program that takes an input and prints it.
Carvão , 4 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Você pode usar qualquer número de
4
para10
obter chances25%
da10%
respectivamente.fonte
Befunge-98 (PyFunge) , 11 bytes
Experimente online!
Cada personagem tem 25% de chance de ser removido. Esta decisão é tomada nas três
?
instruções.?
define o contador do programa para uma das quatro direções, com igual probabilidade. Nesse caso, as teclas up e down retornam para a mesma instrução, para que possamos ignorá-las como opções.Existem duas maneiras de sair da floresta dep2=1/2 oportunidade de produzir. A possibilidade de produzir, se a partir da direita p3=1/2∗1+1/2∗p2=3/4 . Portanto, depois de ler um caracter, pulamos para a direita
?
s: à direita (saída) e à esquerda (sem saída). Esta situação é simétrica, por isso, se a partir do meio?
, existe uma?
é?
para determinar se a saída deve ou não.fonte
Oitava , 23 bytes
Gera uma matriz do mesmo tamanho que a entrada (cadeias de caracteres em Octave são matrizes de caracteres), verifica cada um dos números aleatórios se é maior que
0.2
e depois usa a indexação lógica para extrair os caracteres nas posições correspondentes.Experimente online!
fonte
Geléia ,
95 bytesExperimente online!
Uma mônada que pega uma sequência Jelly como argumento e retorna a sequência Jelly processada. Quando usado como um programa completo, imprime implicitamente a saída. Cada personagem tem 20% de chance de ser removido.
Explicação
fonte
Japonês , 3 bytes
Cada personagem tem 1 em 5 de chance de ser removido. O
5
pode ser alterado para qualquer coisa entre4
&9
, inclusive, ouA
para10
alterar as probabilidades.Tente
fonte
Wolfram Language (Mathematica) , 24 bytes
Experimente online!
Leva uma lista de caracteres como entrada. Cada personagem tem uma
.2
chance de ser removido.fonte
05AB1E ,
54 bytes-1 byte graças a @Grimy .
Experimente online ou execute o mesmo programa 10 vezes .
Cada personagem tem uma mudança de 25% de ser descartado.
Explicação:
≠
também poderia ser_
(==0
).fonte
5L
pode ser₄
para -1 (altera a chance de 20% para 25%, o que ainda é aceitável).MATL , 9 bytes
Exaplanação:
Experimente online!
fonte
Pitão ,
85 bytesExperimente online!
Versão anterior, 8 bytes:
Experimente online!
fonte
Q
gerará um erro se a entrada não for do tipo python. Erros, por exemplo, de[1
oua/b
.Q
,w
ez
funcionará apenas para entrada de linha única, portanto a melhor opção provavelmente seriaj.z
Cubix , 20 bytes
Experimente online!
Mais do que eu esperava, uma vez que tinha um número de no-ops das quais não consigo me livrar. A chance de largar um personagem é de 25%. Presumo que esteja tudo bem.
Assista correr
Breve explicação:
A|A
isso inicializa a pilha, Input all, reflete novamente, Input all (apenas um EOI -1);?
pop para a pilha, teste para EOI (-1)._?@
se negativo, reflita novamente no teste e termine na parada$D
pule\
para dentro do regulador de direção aleatório.o
saída e depois de volta para o loop, a pessoa perde oo
caminho e vai direto para o loop.fonte
APL (dzaima / APL) ,
109 bytes SBCSFunção de prefixo tácito anônimo. Cada personagem tem exatamente 20% de chance de ser removido.
Experimente online!
5¨
zero para cada caractere?
intervalo inteiro aleatório 1–5 para cada caractere4≥
Máscara booleana para números inteiros menores ou iguais a 4⊢⌿⍨
filtrar o argumento usando essa máscarafonte
Retina , 15 bytes
Experimente online! Explicação:
Processe cada personagem individualmente.
Realize uma substituição aleatoriamente. A primeira substituição exclui o personagem, enquanto os outros três o deixam inalterado, dando a
25%
chance de excluir o personagem. Isso pode ser diminuído conforme necessário, acrescentando pares adicionais de novas linhas.fonte
R ,
3223 bytesExperimente online!
Uma função que recebe um vetor de caractere como entrada e retorna um vetor de caractere processado. Cada personagem tem 20% de chance de ser removido.
Agradecemos a @Roland e @Giueseppe por ajudar a economizar 7 bytes, e a @JDL por mais 2!
fonte
function(x)x[!rbinom(x,1,0.2)]
function(x)x[rf(x,1,1)>1]
,;df(1,1,1)
é sobre o0.16
que faz o truque.rt(x,3)>1
(cerca de 20% de chance)<1
, mas obrigado! Outros 2 salvos.T-SQL 2012, 83 bytes
Passando pela entrada da direita para a esquerda, removendo 0 ou 1 caractere.
25% de chance de cada personagem ser removido.
Explicação:
Experimente online
fonte
STR
, vou ter que lembrar disso. Não tenho certeza se é justo pegar o seu (não contado)DECLARE
no seu código (contado); mas mudar isso custaria apenas 1 byte, já que você pode eliminar o extraSET
comDECLARE @ INT=len(@i)
J , 10 bytes
Experimente online!
Semelhante à resposta de Adam no APL, embora eu realmente tenha escrito antes de olhar para a dele.
6.. $~ #
Pegue o comprimento da entrada#
e modele$~
o número 6 em uma lista longa.?@
Trate cada seis da lista como um dado e role?
-o.>5
O dado é menor que 5 (os valores possíveis são 0..5)? Use esse resultado booleano para criar uma máscara de bit.#~
Filtre a entrada com essa máscara.fonte
Perl 5
-p
, 18 bytesExperimente online!
Cada personagem tem 20% de chance de ser descartado.
fonte
Javascript,
464451 bytes+7 bytes devido ao requisito STDOUT adicionado
-2 bytes obrigado a Birjolaxew
resposta original: 44 bytes sem o requisito STDOUT
fonte
f=
reduz para 44 bytes. Você também pode entrada / saída como uma matriz, o que deve economizar bastante.join``
significa isso ? Não pode encontrá-lo na especificação (porque eu realmente não sei o que é)join("")
mdn revelent page
Scala ,
514630 bytesExperimente online!
PS. Como em muitas outras soluções, a probabilidade de deixar cair o carvão é de 20%.
Atualizar:
-5 bytes usando String em vez de Option [String] no flatMap
30 bytes usando filtro
fonte
scala.math.random
paramath.random
e0.2
para.2
. Bom truque usando ^ assim.C # (compilador interativo do Visual C #) , 71 bytes
Experimente online!
fonte
new Random().Next(5)
diretamente possível?new Random().Next(5)
, tudo o que você terá é toda a entrada ou nada.new Random()
, o valor inicial padrão é Environment.TickCount, que aumenta a cada milissegundo. Se todos eles forem criados no mesmo tick de milissegundo, todos terão a mesma semente. A resposta está usando apenas uma única instância do Random e, quando é chamada, atualiza o valor interno da propagação - portanto, toda vez que Next () é chamado, ele cria um valor de saída diferente. No entanto, o .Net Core usa um RNG singleton para gerar a semente, por isso não tem esse problemaSTDIN
, masrestricted to STDIN or closest equivalent
argumentos de função podem ser o equivalente mais próximo, mas eu não vou fazer issoPHP ,
4342 bytesExperimente online!
Cada personagem tem 20% de chance de ser removido.
fonte
C (gcc) , 50 bytes
Este programa tem 20% de chance de deixar uma carta. Infelizmente, o gerador de números aleatórios não é propagado, então você obtém a mesma sequência em cada execução. Basicamente, o único truque é inverter o caractere de entrada para interromper o loop no EOF.
Experimente online!
C (gcc) ,
6459 bytesObrigado ao ceilingcat pelos -5 bytes.
Se você deseja que o RNG seja semeado em cada execução.
Experimente online!
fonte
main()
para envios do Code Golf, também pode definir uma função arbitrária que faz o que é necessário. Então você pode escreverf(c){...}
.Lua ,
6968 bytesExperimente online!
Meio simples, mas parece ser a versão mais curta: itere sobre stdin char por char (com
io.lines
… esse nome é enganoso) e, em seguida, com base no valor aleatório, imprime uma string vazia ou (por exemplo, nada).fonte
Java
Sem finalização: 82 bytes
Terminando (TIO): 105 bytes
fonte
s->s.filter(c->Math.random()<.2)
também será.Input is restricted to STDIN or closest equivalent.
eOutput must be through STDOUT or the closest equivalent. If your language does have STDOUT, do not output in any other way.
Portanto, não, essa resposta não é válidaZsh ,
5341 bytes-12 , graças a GammaFunction
41 bytes: experimente online!
Converte a entrada em uma matriz de caracteres e tenta imprimir cada elemento
c
, a menos que seja comido pela((RANDOM%4))
avaliação como falso!53 bytes: experimente online!
Uma iteração mais direta, mas detalhada, sobre o comprimento da string.
fonte
\c
, eu não teria lembrado disso! Ainda há algumas otimizações a serem feitas ...RANDOM
e conversão de matrizZsh , 50 bytes
Experimente online!
Semelhante à resposta do RobLogic, mas seguindo os requisitos de entrada mais de perto, e funciona para entradas com barras invertidas.
"$(<&0)"
em vez de"<&0"
ou$(<&0)
porque o primeiro não funciona em substituições e o segundo come novas linhas. Os-nE
sinalizadores são necessários para impedir que as barras invertidas sejam analisadas como seqüências de escape e para impedir a inserção de novas linhas.echo -nE
fonte
MathGolf , 5 bytes
Experimente online!
Explicação
Cada caractere será repetido 0 ou 1 vezes, dependendo do valor aleatório. Como o valor esperado após a raiz quadrada é alterado, há uma probabilidade de 25% de que cada caractere seja removido.
Alternativa de 5 bytes
Filtre os caracteres por um número aleatório em [0, 4]. Devido a como a filtragem funciona, tenho que descartar o caractere real no loop de filtro, que adiciona 1 byte.
fonte
GFortran , 120 bytes
Não é tão ruim assim, se usarmos a
RAN()
função obsoleta , que é pseudo- aleatória, ou seja, você obtém a mesma sequência a cada vez. A maneira correta de gerar números aleatórios no GFortran é comCALL RANDOM_SEED()
eCALL RANDOM_NUMBER(R)
mas são muitos bytes!Experimente online!
fonte
Oracle SQL, 133 bytes
Ele trabalha com a suposição de que os dados de entrada são armazenados em uma tabela t (x), por exemplo
fonte