A tarefa
Sua tarefa é criar um programa ou uma função que, dada uma entrada, produza o texto de entrada com letras aleatórias maiúsculas, mantendo as letras maiúsculas já maiúsculas.
Toda combinação de maiúsculas e minúsculas deve ser possível. Por exemplo, se a entrada foi abc
, deve haver uma probabilidade não nula de saída de qualquer uma das seguintes combinações: abc
, Abc
, aBc
, abC
, ABc
, AbC
, aBC
ou ABC
.
Entrada
Sua entrada é uma sequência que contém qualquer número de caracteres ASCII imprimíveis, por exemplo Hello World
. As saídas para que a entrada incluem HeLLo WoRlD
, HElLO WOrld
etc.
Pontuação
Isso é código-golfe, então a resposta mais curta em cada idioma vence!
Japonês , 6 bytes
Teste online!
Explicação
fonte
Python 2 ,
6665 bytesExperimente online!
fonte
C,
4746 bytesObrigado a @ l4m2 por salvar um byte!
Experimente online!
Seriam 42 bytes, se for possível supor que
{|}~
não apareçam na entrada:Experimente online!
fonte
srand(1)
no início do programa, portanto, em cada execução, a sequência de valores retornada porrand()
será a mesma).f(char*s){for(;*s++-=(*s-'a'<26&rand())*32;);}
por algum compilador (def.-funsigned-char
) trabalho'a'
para97u
obras e nem exige a-funsigned-char
bandeira.'a'
(o que ésigned int
, nãounsigned char
) de*s
(o que éunsigned char
),*s
é promovido para, esigned int
nãounsigned int
, portanto, valores negativos são possíveis e a comparação não funciona como pretendido.Gelatina , 5 bytes
Outro bytes a poeira graças a dylnan.
Experimente online!
Explicação
fonte
ŒṘ
mais frequentemente para ver como as coisas são representados sob o capôPerl 5 , 23 bytes
Código de 22 bytes + 1 para
-p
.Experimente online!
fonte
JavaScript (ES6), 56 bytes
Se a aleatoriedade uniforme não for necessária, podemos salvar 6 bytes usando o tempo atual como fonte de aleatoriedade:
Isso tende a maiúsculas ou a deixar todas as letras de uma só vez.
fonte
AbC
porque o tempo não muda tão rápidoR , 66 bytes
Experimente online!
Outra resposta R.
fonte
for
loop! Agradável.Excel VBA,
747164 bytesARandomize
chamada sempre torna a saída aleatória cara no VBA :(Função de janela imediata VBE anônima que leva a entrada do intervalo
[A1]
e sai para a janela imediata VBE. Produz umaUCase
saída de 50% (em média) d.fonte
Randomize:
e alterandoRnd
com[RAND()>.5]
. Ou apenas ignore. :)[Rand()]
chamada é apenas psuedo-random e tem um período de aproximadamente 10 ^ 13, tornando-a funcionalmente idêntica à chamada unRandomize
dRnd
; de fato, os dois usam a mesma semente (que aRandomize
chamada define usando atimer
função saída).Randomize
chamada e passar a usarRnd>.5
Carvão ,
87 bytesExperimente online! Link é a versão detalhada do código. Explicação:
fonte
Ruby, 40 bytes
Função Lambda que aceita uma string. Guardado 1 byte graças a Arnauld. Economizou 5 bytes graças ao Snack.
fonte
<1
vez de==1
?<s>
tag, por exemplo, " Ruby, <s> 46 </s> 40 bytes ". Claro que não é necessário.APL + WIN, 37 bytes
Solicita a entrada na tela, identifica letras minúsculas e as converte aleatoriamente em maiúsculas.
fonte
R ,
8988 bytessuperado por djhurio!
Experimente online!
Este programa pega cada caractere e, com probabilidade 1/2, o converte para maiúsculas ou o deixa em paz. É possível ajustar essa probabilidade jogando com diferentes valores de
df
e0
.rt
extrai da distribuição t do aluno, que tem mediana 0 com qualquer grau de liberdade (eu selecionei1
porque é o menor número possível).fonte
05AB1E ,
65 bytesObrigado Adnan por -1 byte
Experimente online!
Explicação
Método retirado da resposta de totallyhuman
fonte
ε„luΩ.V
foi minha tentativa, boa!Ruby, 39 bytes
->s{s.gsub(/./){[$&,$&.upcase].sample}}
Em grande parte inspirado na resposta do nome de exibição . (Não pude comentar para sugerir esta versão de um byte-less por falta de reputação, desculpe nome de exibição )
fonte
Swift 4, 86 bytes
fonte
Java 8, 46 bytes
Este lambda é de
IntStream
aIntStream
(fluxos de pontos de código).Experimente Online
Distribuição de capitalização
A capitalização de uma letra costumava ser a condição bastante sensata que
Math.random()<.5
, satisfeita na metade do tempo. Com a condição atual deMath.random()>0
(que economiza um byte), a capitalização ocorre virtualmente toda vez, o que torna um programa de teste meio inútil. Mas satisfaz o requisito de aleatoriedade.Agradecimentos
fonte
z
. Eu poderia jogar com uma qualificação.Funky , 55 bytes
Experimente online!
Graças às vírgulas opcionais, é um byte mais curto para fazer
0s.upper
na definição da tabela, o que significa quemath.random
ele escolherá aleatoriamente um1
ou outro2
do que fazermath.random(0,1)
no aleatório e não possuir o0
.fonte
R ,
60 59 58 57 5663 bytesExperimente online!
Abordagem diferente das outras duas respostas R aqui e aqui . Melhorado e corrigido graças a Giuseppe!
fonte
90
como[
, mas corrige este lo para +7 bytes que ainda Golfier é que a resposta de djhurioOuroboros , 25 bytes
Experimente aqui
A única parte sofisticada é o fluxo de controle
.b*)
,. Vamos falar sobre o resto primeiro.Em seguida, retornamos ao início da linha. O fluxo de controle envolve mudar onde está o final da linha; se for movido para a esquerda do IP, a execução será encerrada. Portanto:
Quando o código é positivo,
)
é um no-op, já que o final da linha é o mais correto possível. Mas quando todos os personagens foram lidos,i
dá-1
. Em seguida, movemos o final dos-11
caracteres de código para a direita - ou seja, 11 caracteres para a esquerda. São necessárias algumas iterações, mas, eventualmente, o IP já passou do final do código e o programa é interrompido.fonte
MATL ,
1211 bytesExperimente online!
Guardado 1 byte graças a @LuisMendo
fonte
Braquilog , 5 bytes
Experimente online!
Explicação
fonte
Alice ,
1715 bytesAgradecemos a Leo por salvar 2 bytes.
Experimente online!
Explicação
Essa é a estrutura usual para programas amplamente lineares que operam inteiramente no modo Ordinal.
Tentei fazer isso inteiramente no modo Cardinal, mas determinar se algo é uma letra apenas com base no código de caracteres provavelmente levaria mais bytes.
fonte
Wolfram Language (Mathematica) ,
524944 bytesExperimente online!
Usa a forma de operador
StringReplace
: fornecendo uma regra (ou uma lista de regras), mas nenhuma string fornece uma função que aplica essa regra a qualquer string fornecida como entrada.Poderíamos ter um desempenho muito melhor (
RandomChoice@{#,Capitalize@#}&/@#&
são 34 bytes) se decidíssemos usar como entrada (e produzir como saída) uma lista de caracteres, que as pessoas às vezes argumentam que estão bem no Mathematica, porque é o único tipo de string existente em outros idiomas. Mas isso não é divertido.-5 bytes graças a M. Stern
fonte
Capitalize
Random
está obsoleta você poderia economizar mais quatro bytes através da implementação de seu próprioRandomChoice
:StringReplace[c_/;Random[]<.5:>Capitalize@c]
,Random
a trabalhar em um ponto, mas esqueci o/;
que estava tentando fazer em umaIf
declaração. Obrigado!Pitão,
1076 bytesEconomizou 3 bytes graças a ovs e 1 graças a Steven H.
Experimente online
Explicação
fonte
r1d
=rd1
, permitindo que você introduza implicitamente outro byte de saída.PHP,
63.53 bytesConseguiu reduzir o código com 10 bytes (parcialmente) seguindo a sugestão de Titus.
fonte
$a
. Tente emwhile(~$a=$argn[$i++])
vez deforeach
(execute como tubo).PowerShell ,
5756 bytesExperimente online!
-1 byte graças ao briantist
Pega a entrada como uma string, lança explicitamente a
$args
matriz em uma string, lança como umachar
matriz e, em seguida, alimenta os caracteres por um loop. A cada iteração, 50-50 produzimos o caractere como ele é$_
ou o convertemos para maiúsculas"$_".ToUpper()
(esse é o("$_"|% *per)
lixo). É escolhido obtendo umRandom
número inteiro e modificando-o2
.Esses caracteres são deixados no pipeline e
-join
reunidos novamente em uma única sequência, que é deixada no pipeline e a saída é implícita.fonte
"$_".ToUpper()
para("$_"|% *per)
: - /Julia , 35 bytes
Experimente online!
Ainda é muito fácil de ler como humano. Em Julia rand (A) retorna um elemento aleatório de A.
fonte
Rebol , 61 bytes
Teste:
fonte
Gelatina , 16 bytes
Experimente online!
Explicação
Não consegui fazer isso funcionar em uma única linha. Eu também não sei porque, mas
2ḶXø³L¤Ð¡
dá a lista[None,1,0,..,1]
com0
s e1
s escolhidos aleatoriamente. EsseNone
é o motivoḊ
do primeiro link.fonte