O objetivo é, tendo tomado uma string como entrada, duplicar cada letra latina e "alternar" sua caixa (ou seja, maiúsculas se tornam minúsculas e vice-versa).
Exemplos de entradas e saídas:
Input Output
bad bBaAdD
Nice NniIcCeE
T e S t Tt eE Ss tT
s E t sS Ee tT
1!1!1st! 1!1!1sStT!
n00b nN00bB
(e.g.) (eE.gG.)
H3l|@! Hh3lL|@!
A entrada consiste em símbolos ASCII imprimíveis.
Você não deve duplicar letras não latinas, números, caracteres especiais.
Respostas:
Geléia, 5 bytes
Experimente online!
Como funciona
fonte
Python,
5654 bytesTeste em Ideone .
fonte
*
tem precedência mais alta do que+
, portanto, afeta apenas oc
caso com swap.JavaScript ES6,
70686664 bytesGuardado 2 bytes graças a @Kevin Lau - não Kenny
Guardado 2 bytes graças a @ Cᴏɴᴏʀ O'Bʀɪᴇɴ
Explicação
Isso usa realmente um hacky:
qual não-destruído é:
Basicamente,
l < "a"
verifica se o ponto de código da letra é menor que o ponto de código dea
(portanto, sendo uma letra maiúscula). Se for, fará oto + Low + erCase
que se tornoul['toLowerCase']()
e torna o personagem em minúsculas.`
As aspas permitem a formatação de strings; portanto, você pode pensar em:as:
"to" + (l<"a" ? "Low" : "Upp") + "erCase"
que gera a função a ser chamada (coloque a string em maiúsculas ou minúsculas). Colocamos isso entre colchetes, o[ ... ]
que nos permite acessar uma propriedade que recebe seu nome como uma string. Isso retorna a função apropriada e depois a chamamos.fonte
/[A-Z]/gi
é um regex mais curto: 3to${l<"a"?"Lower":"Upper"}Case
parato${l<"a"?"Low":"Upp"}erCase
l[`to${l<"a"?"Low":"Upp"}erCase`]()
Eu acho que temos uma nova definição de mal.Ruby,
3733 (30 +-p
sinalizador) bytesswapcase
para o resgate! Tipo de. -4 bytes de @Lynn.fonte
gsub(/[a-z]/i){$&+$&.swapcase}
mais op
sinalizador é de 31 bytes.p
bandeira é(space)-p
conhecida como 3 bytes.C,
63bytes 60Usa o fato de que
'a' XOR 32 == 'A'
etc.Três bytes salvos graças ao FryAmTheEggman.
fonte
s++
na últimaputchar
(&&putchar(32^*s++)
) para salvar um byte&&
por*
, não é?&&
funciona o comportamento em curto-circuito.f(char*s){isalpha(putchar(*s))&&putchar(32^*s);*s&&f(1+s);}
recursivo?f(char*s){*s&&f(1+s,isalpha(putchar(*s))&&putchar(32^*s));}
recursivo?CJam, 11 bytes
Teste aqui.
Explicação
fonte
Pitão , 7 bytes
Conjunto de teste .
fonte
Python 3.5,
6056 bytes:Um programa completo. Vai tentar jogar mais golfe.
Experimente Online! (Ideona)
fonte
Haskell, 73 bytes
fonte
Queijo Cheddar ,
118104 bytesPrimeira resposta Cheddar real !!! Isso é muito menos climático do que eu pensava que seria ...; _;
Funciona com a versão 1.0.0-beta.9 , não concorrente.
Como você pode ver, eu não projetei o cheddar para jogar golfe: /
Ungolfed:
Uso:
Atualização: 14/07/16 Eu terminei os ternários, diminuindo para 84 bytes
Cheddar, 84 bytes
funciona a partir da versão v1.0.0-beta.14
fonte
Retina,
282721 bytesEssas são abas, não espaços.
Experimente online
Obrigado pelas sugestões a todos.
fonte
[A-Za-z]
->i`[A-Z]
_
. Vou usar as guias para poder testar todos os casos de teste de uma só vez.C,
8780Passe uma string como entrada
f()
e a saída será gravada em STDOUT. A sequência não é modificada.fonte
sed, 30 bytes
Código de 29 bytes + parâmetro de 1 byte
-r
Uso:
fonte
J,
3129 bytesExplicação
fonte
Haskell,
121, 101, 85,82fonte
isLower
é mais curto que o construto comelem
, por 5 bytes a mais.>>=
éconcatMap
(ouconcat.map
) com argumentos invertidas:f n = n >>= (\x->if isAlpha x then[x,r x]else[x])
. Você pode ficar sem ponto e omitir o nome da função e substituir a definição def
por(>>= \x->if isAlpha x then[x,r x]else[x])
.otherwise
você pode usar qualquer expressão que avalieTrue
, por exemplo1<2
. Você pode substituir oif .. then .. else
com uma compreensão da lista:\x->[x]++[g x|isAlpha x]
. Ah, e há um erro: o segundotoUpper
emg
deve ser atoLower
.[x]++
éx:
.Perl, 36 bytes (35 +
-n
sinalizador)(
-p
tag necessária)(-2 bytes graças a @Dom Hasting)
Breve explicação:
ord
retorna o valor numérico de um caractere.ord(any lower case) >= 97
Eord(any upper case) <= 90)
.Correr com :
fonte
/i
ou o seu regexp corresponderá a vários pontos de código entre as letras.Ruby,
31 + 1 = 3230 + 1 = 31 bytesCom a
-p
bandeira, corraAproveita o fato de que
swapcase!
retornaránil
com qualquer coisa, exceto uma letra ASCII, que se traduz em uma sequência vazia quando retornada dogsub
bloco. @Jordan salvou um byte capturando o caractere anterior em um look-behind.fonte
//
e usar$`[-1]
é inteligente.gsub(/(?<=(.))/){$1.swapcase!}
. Mesmo conceito básico, no entanto, fique à vontade para usá-lo..swapcase!
. (Quer dizer, remover o!
.)R,
1911871681569899 bytes99 bytes devido a melhorias no Giuseppe e no MickyT .
fonte
readline()
pode ser usado, mas vai custar um bytescan
trabalhará com entrada dada entre aspas (como é frequentemente o caso para os argumentos de linha de comando em outros idiomas)05AB1E , 7 bytes
Código:
Explicação:
Usa a codificação CP-1252 . Experimente online!
fonte
Pyke,
86 bytesExperimente aqui!
fonte
V , 21 bytes
Experimente online!
Demasiados bytes ...
fonte
Na verdade, 8 bytes
Experimente online!
Explicação:
fonte
MATL,
119 bytesExperimente Online
Explicação
fonte
Perl,
282221 bytes (20 +-p
sinalizador)fonte
$"
vez de' '
, mas eu não testei.Stax ,
76 bytesObrigado a @recursive por um byte salvo!
Execute e depure-o em staxlang.xyz! (o link é para a versão descompactada)
Descompactado (7 bytes):
Explicação:
fonte
u
vez de:g
. Ele obterá todos os elementos exclusivos de uma matriz, exatamente o que você deseja neste caso. Fora isso, isso parece bem jogado.123
. Pode ser necessário alterar o formato de todas as entradas (ou seja, citá-las). O link também está quebrado. Você precisa substituirm=11
porm=2
. Há um botão de pós-geração de PPCG no staxlang.xyz, portanto você pode querer usá-lo.Python, 59 bytes
Editado para corrigir caracteres não alfabéticos repetidos
fonte
Julia, 40 bytes
Experimente online!
fonte
not s is (list comprehension)
ok Julia ...PHP 4.1, 57 bytes
Este código pressupõe o acesso através de um servidor web (Apache, por exemplo), usando a configuração padrão.
Você pode passar a cadeia por enviar a chave
S
por qualquer meio (POST
,GET
,COOKIE
,SESSION
...).fonte
C #,
8271 bytesC # lambda onde estão a entrada e a saída
string
. Experimente online .11 bytes graças ao truque @Lynn.
fonte
Lisp comum (Lispworks), 262 bytes
ungolfed:
Uso:
fonte