Dadas duas cadeias de letras, transfira o padrão de maiúsculas de cada cadeia para a outra. Menos bytes ganha.
Input: CodeGolf xxPPCGxx
Output: coDEGOlf XxppCgxx
- Ambas as strings terão o mesmo comprimento e não serão vazias, com apenas letras
a..z
eA..Z
. - Você pode emitir as duas seqüências resultantes em qualquer ordem em relação às entradas.
- Você pode representar um par de cadeias como uma cadeia com um separador de caracteres únicos que não seja a letra para entrada e / ou saída.
- Você pode representar uma string como uma lista de caracteres ou de um caractere, mas não como uma sequência de valores de pontos de código, a menos que sejam simplesmente strings no seu idioma.
- Sua entrada e saída podem representar cadeias de caracteres de maneira diferente.
Casos de teste:
CodeGolf xxPPCGxx -> coDEGOlf XxppCgxx
lower UPPER -> LOWER upper
MiXeD lower -> mixed LoWeR
A A -> A A
ABcd EfGh -> AbCd EFgh
array[i++%n]+=...;
?array[t=i++%n]=array[t]+...;
funciona bem; earray[i%n]+=...;i++;
funciona bem também, mas usari++
ou++i
com um módulo e+=
anexar a uma linha em uma matriz não funciona. Aqui um Java 10 TIO como exemplo para ver o problema. Isso é um bug (ou recurso: S) no Java 10 JDK ou no compilador Java 10 TIO?String
paravar
.C (gcc) ,
86585553 bytesExperimente online!
fonte
f(S,Z)char*S,*Z;{for(int d;d=(*Z^*S)&32,*Z++^=d;)*S++^=d;}
c(a,s,e)char*a,*s;{for(;*s++^=e=(*s^*a)&32;)*a++^=e;}
(53 bytes)Geléia , 9 bytes
Experimente online!
Como funciona
fonte
APL (Dyalog Classic) ,
1312 bytesExperimente online!
entrada e saída é uma matriz de caracteres 2 × N
⎕a
é o alfabeto inglês maiúsculo'ABC...Z'
∊∘⎕a
retorna uma matriz booleana indicando quais letras na entrada estão em maiúsculas819⌶
converte seu argumento da direita em maiúsculas ou minúsculas, dependendo do argumento da esquerda booleana ("819" é leetspeak para "BIG")819⌶¨⍨
faz isso para cada¨
caractere ( ), trocando (⍨
) os argumentos⊖
significa reverter verticalmente; um⊖
atua como argumento à esquerda819⌶
e o outro é a ação finalfonte
"819" is leetspeak for "BIG"
... A sério? Essa é a explicação real do porquê de 819? 0_oPitão , 10 bytes
Experimente aqui!
Explicação e truques de Pyth
rVV_mmrIk1
- programa completo. A entrada é obtida de STDIN como uma lista de duas cadeias e a saída é gravada em STDOUT como uma lista de duas listas de caracteres.mm
- Para cada caractere em cada uma das strings:Ik
- Verifique se é invariável em ...r...1
- ... Convertendo para maiúsculas. Rendimentos True para caracteres maiúsculos e False para caracteres minúsculos._
- Inverta essa lista.VV
- Vetorize duas vezes a seguinte função nas duas listas:r
- Converta para maiúsculas se o valor forTrue
(também conhecido como1
), ou então converta para minúsculas.Esta submissão abusos o fato de que
r0
er1
são a letras minúsculas e maiúsculas funções em Pyth, e nós usamos valores de verdade (os valores obtidos, verificando se cada personagem é maiúscula, inverteu) dandoTrue
para maiúsculas eFalse
em minúsculas. O fato de os booleanos serem subclasses de números inteiros no Python é muito útil para a abordagem que esta resposta está usando. Portar as abordagens de Dennis e Jonathan's Jelly resultou em mais de 18 bytes, por isso estou muito feliz com os truques específicos de Pyth usados aqui.fonte
MATL , 11 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Haskell , 78 bytes
Experimente online!
fonte
isUpper x
pode serx<'a'
.J ,
36 3127 bytes-9 bytes graças ao FrownyFrog!
Experimente online!
A solução anterior foi:
J ,
3631 bytes-5 bytes graças ao FrownyFrog!
Experimente online!
Como funciona:
fonte
[:
pode ser 0 e o(22 b.)
pode serXOR
.&.(3&u:)
salva 1 byte."
e$
? Obrigado!,:
, existem 2 linhas no lado esquerdo. Precisamos,"(1)
mas"$
também funciona, porque significa"1 _
.$ b.0
dá a classificação de $ (monádico, diádico esquerdo, diádico direito).R ,
118 94 7572 bytesExperimente online!
Deve haver uma maneira muito mais golfista.-43 bytes graças a Giuseppe, que me indicou a solução MATL de Luis Mendo. O link TIO contém uma solução de função para a mesma contagem de bytes.Bônus: A saída é um vetor nomeado cujos nomes são as seqüências de entrada originais!
fonte
a<-
pois não usa ema
nenhum outro lugar.código de máquina x86-64, 14 bytes
É possível chamar de C (convenção de chamada x86-64 SysV) com este protótipo:
Uma versão de comprimento explícito com comprimento
rcx
é do mesmo tamanho.void casexchg(char *rdi, char *rsi, int dummy, size_t len);
Isso usa o mesmo algo de troca de bits que as respostas C e Java: se as duas letras são o mesmo caso, nenhuma delas precisa mudar. Se for o caso oposto, ambos precisam mudar.
Use XOR para diferenciar o bit de maiúsculas e minúsculas das duas seqüências.
mask = (a XOR b) AND 0x20
é 0 para o mesmo ou 0x20 para diferente.a ^= mask; b ^= mask
letras maiúsculas de minúsculas ambas as letras se elas eram o caso oposto. (Como os códigos de letras ASCII para superior e inferior diferem apenas no bit 5.)Listagem NASM (de
nasm -felf64 -l/dev/stdout
). Usecut -b 26- <casexchg.lst >casexchg.lst
para transformar isso de volta em algo que você pode montar.A
loop
instrução lenta também tem 2 bytes, o mesmo que um curtojcc
.scasb
ainda é a melhor maneira de incrementarrdi
com uma instrução de um byte. Eu acho que poderíamosxor al, [rdi]
/stosb
. Esse seria o mesmo tamanho, mas provavelmente mais rápido para oloop
caso (a memória src + store é mais barata que a memória dst + reload). E ainda definiria o ZF adequadamente para o caso de comprimento implícito!Experimente online! com um _start que chama argv [1], argv [2] e usa sys_write no resultado
fonte
k , 14 bytes
Experimente online! Entrada / saída é uma lista de duas strings.
fonte
Python 3 , 83 bytes
Experimente online!
-3 bytes graças ao Sr. Xcoder
-3 bytes graças ao Chas Brown
fonte
Haskell , 78 bytes
Experimente online!
fonte
QBasic, 133 bytes
Pega as duas cadeias separadas por vírgula e gera os resultados separados por nova linha. Usa o algoritmo de manipulação de bits da resposta de Dennis's Jelly . Fora isso, o principal truque de golfe aqui é que a primeira sequência de resultados é impressa diretamente, um caractere de cada vez, um pouco mais curto do que salvar as duas seqüências de resultados em variáveis e imprimi-las fora do loop.
fonte
JavaScript,
777473 bytesMostrar snippet de código
Pega uma matriz de matrizes de caracteres, gera uma matriz de matrizes de caracteres.
-1 byte ( @Arnauld ):
c>'Z'
→c>{}
fonte
c>{}
.Retina , 75 bytes
Experimente online! Explicação: As novas linhas são usadas como marcadores para determinar quanto da cadeia foi processada. O regex tenta corresponder contra letras maiúsculas ou com falha em qualquer caractere. Se uma letra maiúscula foi correspondida, o outro caractere é maiúsculo, caso contrário, é minúsculo e vice-versa, enquanto as novas linhas são avançadas para o próximo caractere.
fonte
Python 3 ,
7675 bytesExperimente online!
Produz o resultado como uma sequência com um separador de caractere único.
Thx para Jonathon Allan por 1 byte.
fonte
(y>'Z')*32
->ord(y)&32
Assembly (nasm, x64, Linux) , 25 bytes (fonte de 123 bytes)
Bytes hexadecimais:
O ponto de entrada da função é em
a
, com as cadeias passadas usandoRDI
eRSI
.Experimente online!
fonte
and al,32
é de apenas 2 bytes, usando a codificação AL, imm8 especial que a maioria das instruções da ALU possui. Você pode exigir o comprimento da string no RCX e usá-loloop
. Eu diria que você deveria,test ah,ah
porque é mais eficiente do queor
ter o mesmo comprimento, mas é mais longo na fonte ASM, de modo que o idioma velho e duro tem mérito no golfe de código fonte: PGelatina , 13 bytes
Experimente online!
Também 13:
=ŒuṚ×32ạŒlO$Ọ
(ou=ŒuṚæ«5ạŒlO$Ọ
)fonte
Carvão , 17 bytes
Experimente online! Link é a versão detalhada do código. Recebe a entrada como uma matriz de duas seqüências. Explicação:
fonte
F #, 120 bytes
Bugger.
Experimente online!
A função
g
usa as duas strings como parâmetros.Seq.fold2
aplica uma função com um acumulador (a
) a cada elemento (x
ey
) nas cadeias. Inicialmente,a
é uma sequência vazia e adiciona o caractere convertido a cada iteração.b
é a função principal. Ele primeiro convertef
em relação as
e depois convertes
em relação af
. Em seguida, ele retorna uma tupla com os dois valores.fonte
Prolog (SWI) , 121 bytes
Experimente online!
fonte
Ruby ,
7469 bytesExperimente online!
Entrada e saída são matrizes de caracteres, portanto, o rodapé faz as transformações das cadeias para frente e para trás.
Ainda não tenho certeza se essa é uma boa abordagem para o problema, mas esse desafio definitivamente parece um cenário de uso agradável para o
swapcase
método.fonte
PHP 4.1.2 , 40 bytes
Substitua o par de aspas pelo byte A0 (em ISO-8859-1 ou Windows-1252, este é o NBSP) para obter a contagem de bytes mostrada e execute a partir de um navegador da Web (ou da linha de comando), fornecendo as strings como os argumentos da string de consulta (ou variáveis de ambiente)
a
eb
.Nesta versão do PHP, register_globals está ativado por padrão, portanto, as strings serão atribuídas automaticamente às variáveis
$a
e$b
. Aumente o valor2e5
(200000), se necessário.PHP 7.1 ou superior, 58 bytes
Execute na linha de comando, usando
php -r 'code here' string1 string2
:O valor
3e5
(300000) é escolhido para exceder (MAX_ARG_STRLEN * 2 + 1) na maioria dos sistemas Linux (especificamente, x86 e outras arquiteturas para as quais PAGE_SIZE é 4096 e MAX_ARG_STRLEN é, portanto, 131072), para evitar problemas com qualquer sequência de entrada possível. Aumente se necessário.Experimente online!
fonte
Stax , 10 bytes
Execute e depure
Aqui está uma representação não destruída do mesmo programa para mostrar como ele funciona.
Execute este
fonte
Cristal , 108 bytes
Experimente online!
Como funciona?
fonte