Para o desafio de hoje, você deve escrever um programa ou função que alterne o caso de uma string. No entanto, você deve ignorar caracteres não alfabéticos. Isso significa que todo caractere alfabético deve ter um caso diferente do caractere alfabético anterior e seguinte. Isso é um pouco mais complexo do que colocar em maiúsculas todas as outras letras, por exemplo. Se você usar uma string como
hello world
e converter todos os outros caracteres para maiúsculas, você receberá:
hElLo wOrLd
Como você pode ver, a minúscula o
é seguida por uma minúscula w
. Isto é inválido. Em vez disso, você deve ignorar o espaço, fornecendo-nos este resultado:
hElLo WoRlD
Todos os caracteres não alfabéticos devem ser iguais. A saída pode começar com maiúsculas ou minúsculas, desde que alternadamente. Isso significa que o seguinte também seria uma saída aceitável:
HeLlO wOrLd
Seu programa deve funcionar independentemente do caso da entrada.
A string de entrada sempre conterá apenas ASCII imprimível , para que você não precise se preocupar com caracteres não imprimíveis, novas linhas ou unicode. Seu envio pode ser um programa completo ou uma função, e você pode receber e enviar as informações em qualquer formato razoável. Por exemplo, argumentos da função / valor de retorno, STDIN / STDOUT, leitura / gravação de um arquivo, etc.
Exemplos:
ASCII -> AsCiI
42 -> 42
#include <iostream> -> #InClUdE <iOsTrEaM>
LEAVE_my_symbols#!#&^%_ALONE!!! -> lEaVe_My_SyMbOlS#!#&^%_aLoNe!!!
PPCG Rocks!!! For realz. -> PpCg RoCkS!!! fOr ReAlZ.
This example will start with lowercase -> tHiS eXaMpLe WiLl StArT wItH lOwErCaSe
This example will start with uppercase -> ThIs ExAmPlE wIlL sTaRt WiTh UpPeRcAsE
A1B2 -> A1b2
Como se trata de código-golfe , as brechas padrão se aplicam e a resposta mais curta em bytes vence!
cowsay
Respostas:
JavaScript (ES6),
6663 bytesComeça com maiúsculas.
Casos de teste
Mostrar snippet de código
fonte
s=!s
truque?s
é a string de entrada,!s
primeiro é avaliada comofalse
(a menos que a string de entrada esteja vazia; nesse caso, ela seria avaliada comotrue
- mas uma string vazia não gerará nenhuma correspondência). Depois disso, ele se torna uma operação booleana padrão, alternando entrefalse
etrue
. Além disso, não nos importamos de perder o conteúdos
deste momento, porque ele já estava sendo usado para alimentar.replace()
."A[I"
falharia.05AB1E ,
118 bytesCódigo:
Usa a codificação 05AB1E . Experimente online!
Explicação:
fonte
lvy¾Fš}Da½J
é exatamente o que você já tinha ._.Oh-Five-Ay-Bee-One-Eee
, eu não sou um homem criativo.GNU Sed, 33
A pontuação inclui +1 para
-r
sinalizar para sed.Experimente online .
fonte
Gelatina , 13 bytes
Experimente online!
Como funciona
fonte
Japonês ,
1614 bytesExperimente online!
Explicação
fonte
,
. A menos que seja um número (ou seja[12]
), Japt sabe que são itens diferentes. Eu acredito que você pode remover o&1
também._m"uv"gT°
Agradável. Eu estava prestes a sugerir isso.Python 3 ,
8676686663 bytes-2 bytes graças a DJMcMayhem
-3 bytes graças a Cyoce
Experimente online! ou Experimente todos os casos de teste
fonte
print(end=(2*i).title()[x])
?Alice , 18 bytes
Experimente online!
Explicação
Este programa segue um modelo menos conhecido para programas de tamanho ímpar que são executados inteiramente no modo ordinal. A versão linearizada deste código é:
Explicação do código:
Sem usar
l
na duplicata, a pilha depoisN
seria["helloworld", "helloworld"]
. Eu suspeito fortemente que isso seja um bug.fonte
C (tcc) ,
605756 bytesGraças ao DigitalTrauma por observar o bit 5, é a única diferença para maiúsculas / minúsculas ASCII.
Agradecimentos especiais ao zch por jogar fora mais três bytes.
Economize mais um byte da ideia do RJHunter
Experimente online!
fonte
strdup()
obter ponteiros para ler / escrever memória no código do driver de teste.*s&~32|++l%2<<5
para salvar 3 bytes.&~33
por&95
para salvar mais um byte.Java 8, 99 bytes
Explicação:
Experimente aqui.
fonte
(c+"").matches("[A-Za-z]")
ouCharacter.isLetter(c)
salvar bytes.c>64&c<91|c>96&c<123
entanto. E como eu uso deint
qualquer maneira para as partesCharacter.toUpperCase(...)
eCharacter.toLowerCase(...)
golfed (estes:(char)(c&~32)
e(char)(c|32)
), duvido que poderia torná-lo mais curto com qualquer uma dessas.a->{String r="";int i=0,f=32;for(int c:a)r+=(char)(c>64&c<91|c>96&c<123?(f=~f):c);return r;}
??Ruby,
57554741 bytesA contagem de bytes inclui dois bytes para opções de linha de comando.
Execute-o por exemplo assim:
$ ruby -p0 alternate_case.rb <<< "some input"
Com a
p0
opção, toda a entrada é consumida de uma só vez, e o global mágico$.
é incrementado para 1. Isso é posteriormente alternado entre 0 e 1 e usado para manter o estado.Trabalha com entrada multilinha; Experimente online!
Agradecemos a Ventero pela contribuição incrível - verifique os comentários para obter detalhes.
fonte
$.
auto-incrementos com cadagets
chamada, um programa completo com a-p
bandeira teria sido mais curto ...1&$.+=1
permite que você solte os parênteses. E para a integralidade amor, há um outro inteiro mundial - é, infelizmente, apenas só de leitura:$$
.-p0
faz com que o intérprete leia todas as entradas disponíveis de uma só vez - para que seu código seja chamado apenas uma vez, permitindo que você o use livremente$.
. Combinando isso ao fato de quegsub
implicitamente opera como$_.gsub!
ao especificar,-p
um programa completo é significativamente menor: 48 caracteres paragsub(/[a-z]/i){[$&.upcase,$&.downcase][1&$.+=1]}
e 2 para op0
sinalizador.-p0
, você pode salvar mais alguns caracteres na maneira como você$.
alterna: Como agora é garantido1
que o seu código seja invocado, você pode simplesmente usá-lo$.^=1
./\p{L}/
(categoria Unicode Letter ) é um caractere menor que/[a-z|/i
.Braquilog , 25 bytes
Experimente online!
Isso é longo e lento.
Explicação
fonte
MATL ,
1615 bytesExperimente online! Ou verifique todos os casos de teste .
Explicação
Considere a entrada 'olá mundo'
"
fonte
Perl 6 ,
3230 bytesTente
Tente
Expandido:
fonte
q / kdb +,
514238 bytesSolução:
Exemplo:
Notas:
fonte
V ,
17, 13 bytesExperimente online!
Ou Verifique todos os casos de teste!
HeXdUmP:
Explicação:
Isso usa um regex compactado ️, portanto, antes de explicá-lo, vamos expandir o regex:
O
VU
converte tudo para maiúsculas. Então, executamos o seguinte:Resposta antiga / mais interessante:
fonte
PHP, 71 bytes
Experimente online!
fonte
CJam ,
2624 bytesExperimente online!
Explicação
fonte
Pitão, 11 bytes
Experimente aqui
Explicação
fonte
PowerShell, 86 bytes
A entrada é uma
[char[]]
matriz.Comentários no código para explicação
fonte
Haskell,
10583 +24 + 1 byte do separador =1088688 BytesA função é
(1#)
, inicia em minúsculas. Experimente online!O triste é que isso é mais longo que as respostas Java e C #.Obrigado a Ørjan Johansen por salvar 22 bytes ao mesclar três linhas em uma!fonte
f#(x:y)|isLetter x=([toUpper,toLower]!!f)x:(1-f)#y|1>0=x:f#y
1#
que não conta como uma função anônima. No meu entendimento, deve-se conseguir vincular uma função anônima a um identificador, mas, por exemplof=1#
, não funcionará. Em vez disso, você precisa da seção(1#)
para +2 bytes. Isso também é afirmado implicitamente em nossas diretrizes da comunidade para jogar golfe em Haskell , embora talvez essas devam ser adaptadas para mencionar explicitamente esse caso.Planilhas Google, 264 bytes
É uma grande bagunça, mas é um pouco mais fácil se você expandir:
A pseudo-lógica funcionaria assim:
fonte
Perl 5 , 24 bytes
23 bytes + 1 byte para
-p
.Obrigado a @Dada por -2 bytes.
Experimente online!
fonte
\pl
em vez de[a-z]
a 2 bytes tho :)[a-z]
!). Se você quer saber, vem do perlrecharclass ;) #Retina , 46 bytes
Experimente online! Inclui casos de teste.
fonte
C 64 bytes
Aproveita a codificação ascii, onde as letras maiúsculas e minúsculas são deslocadas em 0x20.
fonte
char
e*s
Retina , 32 bytes
Experimente online!
Primeiro converte a entrada em maiúscula e, em seguida, agrupa a entrada em correspondências que contêm até duas letras maiúsculas. O único momento em que ele conterá apenas uma letra é se a última letra não tiver um par. Em seguida, minúscula a primeira letra de cada uma dessas correspondências.
O
01
segundo estágio se traduz aproximadamente em: não altere o comportamento desse estágio com base no número da partida, mas aplique as alterações apenas ao primeiro caractere de cada partida.fonte
PHP 5, 54 bytes
fonte
C #, 100 bytes
fonte
Groovy, 79 bytes
fonte
Python 3 , 192 bytes
Experimente online!
fonte
Convexo , 16 bytes
Experimente online!
Porta convexa da resposta do @Business Cat .
fonte