DEPRIPANDO O ESTÁDIO! [fechadas]


8

VOCÊ SERÁ DIVERTIDO, QUE CONTINUA DE IMPERMEÁVEIS COMO CII CHARACTORES.

VOCÊ CONHECE A RESTRIÇÃO DO RENDIMENTO DE MUDANÇAS (UNIFORME, 50% DE CUMPRIR O UPPercAse), prefere utilizar o mesmo e muito mais.

é isso aí.

(desculpe pela pontuação, foi pelo conceito da pergunta)

Versão legível:

Você receberá uma sequência que consiste em caracteres ASCII imprimíveis.

Você percorre a string e altera as letras aleatórias (uniformes, com 50% de chance de maiúsculas) para maiúsculas e todo o resto para minúsculas.

é isso aí.

exemplos

iNpuT => pOssiBle oUtPUt
Programming puzzles and Code Golf => pRogRaMMiNg pUzzlEs aNd coDe goLf
dErpity deRp derP => deRpiTy dErp DerP
CAAAPSLOOOCK => cAAapslOoocK
_#$^&^&* => _#$^&^&*

2
O que significa "aleatoriamente" exatamente? Pode haver duas letras maiúsculas consecutivas (seus casos de teste não possuem essas configurações)? Eu diria que esta questão está subespecificada em seu estado atual, mas não vou votar ainda. Por favor, especifique essas duas coisas.
HyperNeutrino 07/04

O tempo% 2 é permitido para pseudo-aleatoriedade?
fənɛtɪk

@ fəˈnɛtɪk Certo (se for uniforme) #
Matthew Roh

2
você diz ASCII imprimível, mas seus casos de teste incluem apenas caracteres alfabéticos. O programa deve ser capaz de lidar com caracteres não alfabéticos ou podemos esperar que a entrada seja puramente alfabética?
MildlyMilquetoast

5
Penso que a maioria das respostas existentes também pressupõe que a decisão é independente para cada letra, mas isso não está em nenhum ponto da questão. No momento eu acho que seria tecnicamente ser compatível com a especificação de escrever algo ao longo das linhas de (pseudo-código)s=>rand()%2?s.upper():s.lower()
Peter Taylor

Respostas:


10

C - 65 bytes

Muito bom para um idioma convencional!

main(c){while((c=getchar())>0)putchar(isalpha(c)?c^rand()&32:c);}

Usa XOR para virar aleatoriamente o bit em 0x20para cada caractere alfabético. Programa assume conjunto de caracteres ASCII e isso EOF < 0.

Amostra executada em sua própria fonte!

$ main < main.c
MaIN(c){WhILe((C=GETChAr())>0)pUtCHaR(iSALpha(C)?C^rANd()&32:C);}

Muito derpy.


1
"Muito bom para um idioma convencional!" - C é surpreendentemente bom para jogar golfe.
Steadybox

7

JavaScript, 87 bytes

function(s){return s.replace(/./g,c=>Math.random()<.5?c.toLowerCase():c.toUpperCase())}

68 bytes no ES6:

f=
s=>s.replace(/./g,c=>c[`to${Math.random()<.5?`Low`:`Upp`}erCase`]())
<input oninput=o.textContent=f(this.value)><pre id=o>


o segundo código funciona, mas o primeiro: Untaught SyntaxError: token inesperado (
Felo Vilches 8/17/17

@FeloVilches Você precisa usá-lo em um contexto de expressão para que ele funcione; caso contrário, o mecanismo tenta analisá-lo como uma declaração de função.
911 Neil

Pode ser reduzido usando ES6.
CalculadoraFeline

@CalculatorFeline Para 68 bytes, sem dúvida?
Neil

5

Gelatina , 6 bytes

,ŒsXµ€

Experimente online!

Quão?

A caixa inferior de todos os caracteres da entrada e, em seguida, a maiúscula cada uma com 50% de probabilidade é o mesmo que escolher um dos caracteres originais e o caractere de caixa trocada com probabilidade igual ...

,ŒsXµ€ - Main link: string s
    µ  - monadic chain separation
     € - for each char c in s
,      -     pair c with
 Œs    -     swapped case of c
   X   -     choose a random item from the list (of the two chars)
       - implicit print

Ohh Interpretação inteligente do desafio.
Matthew Roh

A propósito: isso é uniforme?
Matthew Roh

@SIGSEGV Se por "uniforme", você quer dizer que cada caractere tem 50% de chance de ser cada caso, então sim - Xé implementado usando o Python random.choice, portanto, quando apresentado com uma lista de 2 caracteres, ele escolhe cada um com 50% de probabilidade - cada caractere na entrada produz essa lista (caracteres não alfabéticos serão uma lista de 2 caracteres iguais, mas isso não importa se a interpretação de "uniforme" acima estiver correta).
Jonathan Allan

Aqui está um exemplo de listas separadas de feed de linha das quais um caractere de cada um seria escolhido.
Jonathan Allan

5

PowerShell , 64 60 bytes

-join([char[]]"$args".ToLower()|%{"$_".ToUpper(),$_|random})

Experimente online! (verifique se "desativar cache de saída" está marcado se você deseja resultados aleatórios)

Tradução exata do desafio. Pega a sequência de entrada, ToLower()s it, converte-a em uma charmatriz, passa por cada caractere |%{...}e seleciona aleatoriamente entre o caractere existente ou a variante maiúscula. Depois, -jointodos eles se juntam novamente em uma única sequência. Isso funciona porque ToUppere ToLowerafetam apenas caracteres alfabéticos, deixando pontuação e afins inalterado.

(Dennis corrigiu a lista de alias no TIO para que Randomnão tentasse o Linux, randommas alias corretamente Get-Randomcomo um comando do PowerShell, como deveria. Obrigado, Dennis!)


4

MATL , 13 12 bytes

"@ktXkhlZr&h

Experimente no MATL Online

Explicação

        % Implicitly grab input as a string
"       % For each character...
  k     % Convert to lowercase
  tXk   % Make a copy and convert to uppercase
  h     % Horizontally concatenate these two characters
  lZr   % Randomly select one of them
  &h    % Horizontal concatenate the entire stack
        % Implicit end of for loop and implicit display

4

Japonês , 10 bytes

®m"uv"gMq2

Experimente online!

Explicação

Portanto, isso é um truque brega, mas funciona. Em JavaScript, você pode fazer algo como

x[`to${Math.random()<.5?"Upp":"Low"}erCase`]()

converter aleatoriamente xpara maiúsculas ou minúsculas. No Japt, as funções equivalentes são upara toUpperCasee vpara toLowerCase. Mas no Japt não há maneira direta de obter um valor calculado da propriedade (x[expression] em JavaScript).

Um dos meus recursos favoritos do Japt é que, se você possui uma função composta por uma única chamada de método (por exemplo mX{Xq}, ou .m(X=>X.q())em JS), pode deixar de fora tudo, exceto o nome do método, por exemplo mq. O compilador transforma isso em uma seqüência de caracteres que é passada para a chamada de método original ( .m("q")) e o método transforma isso de volta em uma função. Portanto, não há diferença entre mqem"q" ; ambos produzem a mesma saída.

Agora, onde eu estava indo com isso: enquanto não podemos chamar diretamente um método aleatório em uma corda, que pode chamar mnaquela corda com um nome de método aleatório. Então, para a explicação:

®m"uv"gMq2
®           // Replace each char in the input by this function:
 m          //   Replace each char in this char by this function:
      g     //     the char at index
       Mq2  //       random integer in [0,2)
  "uv"      //     in "uv".
            //   This randomly calls either .u() or .v() on the char.
            // Implicit: output result of last expression

Não Mqpadrão para 2? Ou foi adicionado recentemente?
Oliver

@obarakon Eu acho que foi mais recente. Uma pesquisa rápida no GitHub diz que era 5 de maio
ETHproductions





2

Japonês , 12 10 bytes

£M¬?Xv :Xu

Explicação:

£M¬?Xv :Xu
£             // Iterate through the input. X becomes the iterative item
 M¬           // Return a random number, 0 or 1
    ?         // If 1:
     Xv       //   X becomes lowercase
        :     // Else:
         Xu   //   X becomes uppercase 

Experimente online!


1

05AB1E , 8 bytes

vyDš‚.RJ

Experimente online!

Explicação

v          # for each char y in input
 yDš‚      # pair lower-case y with upper-case y
     .R    # pick one at random
       J   # join to string


1

CJam , 14 bytes

qel{2mr{eu}&}%

Experimente online!

Explicação

q               e# Read the input
 el             e# Make it lowercase
   {            e# For each character in it
    2mr         e#  Randomly choose 0 or 1
       {eu}&    e#  If 1, make the character uppercase
            }%  e# (end of block)

1

MATL , 12 11 bytes

1 byte removido usando a idéia de Jonathan Allan de mudar diretamente de caso.

"@rEk?Yo]&h

Experimente o MATL online!

Explicação

"         % Implicit input. For each
  @       %   Push current char
  r       %   Random number uniformly distributed on (0,1)
  Ek      %   Duplicate, floor: gives 0 or 1 with the same probability
  ?       %   If nonzero
    Yo    %     Change case. Leaves non-letters unaffected
  ]       %   End
  &h      %   Horizontally concatenate evverything so far
          % Implicit end and display

1

Pitão, 5 bytes

srLO2

Suíte de teste

srLO2
srLO2Q    Variable introduction
  L  Q    Map over the input
 r        Set the case of each character to 
   O2     Random number from [0, 1]. 0 means lowercase, 1 means uppercase.
s         Concatenate

1

Befunge , 136 bytes

>~:0`!#@_:"@"`!#v_:"Z"`!#v_:"`"`!#v_:"z"`!#v_,
^,<    <        <                 <
 >?<                     <             -*84<
  >84*+^

Experimente online!

Há muito espaço em branco que eu acho que é possível se livrar. Befunge não tem como descobrir o que é uma letra e o que não é, então é isso que estou fazendo na primeira linha.


Esse snippet é uma maneira mais rápida de verificar se o valor superior da pilha é uma letra - envia um 0 se for e um 1 se não for. É muito mais curto para "e" condições juntos, multiplicando-os em vez de usar um monte de if encaminhamento para o mesmo lugar
MildlyMilquetoast

Eu não entendo como isso funciona. Quando o executo, ele sempre me dá um 0 e não aceita nenhuma entrada.

Desculpe, nesse programa, você coloca o valor entre as primeiras aspas. Em retrospecto, essa é uma maneira realmente idiota de fazer isso. Deve ser bem fácil alterar os três primeiros caracteres para um~
MildlyMilquetoast 10/17/17

0

Bater , 64 bytes

primeira tentativa

a=$(shuf -e -n 13 {A..Z}|tr -d "\n");b=${a,,};tr $b $a <<<${1,,}

Experimente online!

embaralha letras maiúsculas, leva os 13 primeiros, remove novas linhas e salva em $ a. $ b mantém $ a em minúsculas. A entrada é definida como minúscula em $ {1 ,,} e passada como um heredoc para tr que substitui cada ocorrência de $ b por $ a

Isso é um tanto pouco convincente, porque a mesma letra é sempre maiúscula.


0

JavaScript + HTML, 115 bytes

<input oninput="this.value=this.value.toLowerCase().split('').map(v=>Math.random()<.5?v.toUpperCase():v).join('')">


0

Bash, 162 bytes

a=$1
b=1
c="echo $a|head -c$b|tail -c1"
while(($b<=${#a}))
do
r=$[RANDOM%2]
if [ $r = 1 ]
then d=$(eval $c);echo -n ${d^}
else echo -n $(eval $c)
fi
b=$[b+1]
done

Bastante auto-explicativo. Pega a entrada da linha de comando arg, grava no stdout.

Corra como derpifier.sh "Derp this"

Cara, assim que começo a aplicar as dicas, o código diminui rapidamente.


0

Swift - muitos bytes ( 176 167)

uppercased(), lowercased(), arc4random_uniform()Realmente matar a pontuação, além de me ter de adicionar uma função desde Swift não tem nenhum método padrão de entrada!

import Foundation
func g(x:String){var result="";for i in x.characters{let e=String(i);result+=(arc4random_uniform(2)>0 ?e.uppercased():e.lowercased())};print(result)}

Função com uso: print(g(x: "Your String Here"))

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.