your shift key is broken. wheNever you type two lines, the cApitaL
LetteRs in them get swappeD. you must write a program to fiX THIS!
Descrição
A entrada é de duas strings s1
e tem o s2
mesmo comprimento. Cada um deles conterá apenas ASCII imprimível e terá pelo menos um caractere. Você pode inseri-las como duas strings, uma matriz de duas strings ou uma única string com s1
e s2
separadas por uma guia ou nova linha.
A saída é a seguinte:
Para cada caractere
c
ems1
:Se o caractere não for uma letra, produza-o inalterado.
Caso contrário, se
c
houver uma letra:Encontre o caractere correspondente (aquele no mesmo índice) em
s2
.Se for uma letra maiúscula, a saída será
c
capitalizada.Se for uma letra minúscula, imprima
c
em minúscula.Caso contrário, a saída
c
não será alterada.
Em seguida, faça a mesma coisa, exceto com
s1
es2
alternado.
Essencialmente, todas as letras nas s1
quais o caractere correspondente s2
é maiúsculo devem ser colocadas em maiúsculas e todas as letras s1
com uma letra minúscula no mesmo índice em s2
devem se tornar minúsculas (e vice-versa).
Casos de teste
Entrada:
ABCDEfghijKlMnOpqrstuvwxyz
aaaaaaaaaaaaaaaa----------
Saída:
abcdefghijklmnopqrstuvwxyz
AAAAAaaaaaAaAaAa----------
Entrada:
PRogrammiNG puzZLes & CODe golf
SdlkhkfaladlKsdlalksdg7ldklDgsl
Saída:
Programming Puzzles & Code Golf
SDlkhkfalADlksdLAlksdg7LDkldgsl
Entrada:
AAAbbb111
Cc2Dd3Ee4
Saída:
AaABbb111
CC2dd3Ee4
Respostas:
Pitão,
1918 bytesIsso define uma função y que aceita e retorna uma lista de strings.
Verifique todos os casos de teste de uma vez no Pyth Compiler / Executor .
Graças a @Jakube por jogar fora um byte.
Como funciona
fonte
CJam, 25 bytes
Essa é uma função anônima que exibe uma matriz de seqüências de caracteres da pilha e deixa uma em troca.
Nos navegadores suportados, você pode verificar todos os casos de teste ao mesmo tempo no interpretador CJam .
Casos de teste
Código
Entrada
Saída
Como funciona
fonte
C, 126 bytes
Esta é a minha primeira tentativa de um código de golfe, sempre. Deixe-me saber se fiz algo errado.
Estou usando operações bit a bit para executar a alternância
Golfe:
Ungolfed:
editar: substituído && por *
fonte
SQL (PostGreSQL), 427 bytes
Apesar do tamanho enorme, isso acabou sendo um pouco menor do que eu esperava. Eu não tinha certeza de que seria capaz de fazê-lo para ser honesto. Eu suspeito que ainda há muito a ser feito :)
Formatado e comentado
Execução de teste
fonte
Julia, 140 bytes
Isso cria uma função que aceita duas strings e retorna uma tupla de strings. Nada de inteligente está acontecendo aqui; simplesmente definimos uma função interna que implementa diretamente o algoritmo na especificação e a chamamos duas vezes.
Ungolfed:
fonte
JavaScript ES6,
128108 bytesJavaScript
toUpperCase()
etoLowerCase()
ocupa muitos bytes, masString.fromCharCode()
é ainda mais longofonte
s2
não é uma letra e o caractere correspondentes1
está em maiúsculas. Nesse caso,c
ins1
deve ser retornado inalterado.Mathematica,
173169155 bytesEsta é uma função que pega uma matriz de duas strings, por exemplo,
{"Foo","bAR"}
e gera uma matriz de duas strings. Un-espacialmente comprimindo-la, reescrevendo o esquemaf@x
comof[x]
onde quer que apareça, ampliando as abreviaturas Notation (f=0>1
akaFalse
,t=!f
akaTrue
,c=Characters
eu=ToUpperCaseQ
), e un-substituindo UpperCaseQ [#] com#==u@#
(este personagem é igual a sua versão uppercased), é:Interface: o trailing
&
torna isso uma função. Seu argumento é inserido como o "#" nas duas instâncias de/@ #
. Por exemplo,f=0>1; ... & [{"AAAbbb111", "Cc2Dd3Ee4"}]
produz a saída{AaABbb111,CC2dd3Ee4}
.Processamento: Contado normalmente fora em ordem:
MapThread[...]
é uma lista de duas listas de caracteres. StringJoin é aplicado a cada uma dessas duas listas de caracteres para produzir uma lista de duas seqüências, a saída.MapThread[#[#2]&, ... , 2]
atua em uma matriz de duas listas de elementos 2 por n. A primeira lista é uma matriz de 2 por n de funções. A segunda lista é uma matriz de caracteres 2 por nCharacters /@ #
, as listas de caracteres nas duas seqüências de entrada. Funciona na profundidade 2, ou seja, nas funções e nos caracteres individuais.Reverse[...]
troca as duas sublistas de funções para que o MapThread aplique as funções da segunda sequência à primeira e vice-versa.{ ... } &
é uma função anônima aplicada a cada uma das duas seqüências de entrada.{LetterQ[#], UpperCaseQ[#]} & /@ Characters[#]
divide uma string em uma lista de caracteres e substitui cada caractere por duas listas de elementos. Nessas duas listas de elementos, o primeiro elemento éTrue
se o caractere é uma letra eFalse
, do mesmo modo, o segundo elemento indica se o caractere está em maiúsculas.UpperCaseQ[]
não pode retornar verdadeiro se não receber uma carta./. {{False, _} -> (# &), {True, True} -> ToUpperCase, {True, False} -> ToLowerCase}
substitui essas duas listas de elementos por funções. (A expansão das abreviaçõest
ef
ocorre antes da tentativa de correspondência.) Se uma lista de dois elementos tiverFalse
como primeiro elemento, ela será substituída pela função(# &)
, a função de identidade. (Os parênteses são necessários, caso contrário, a seta se liga mais firmemente que o e comercial.) Caso contrário, a lista de dois elementos começa comTrue
, o caractere era uma letra e produzimos as funçõesToUpperCase
eToLowerCase
correspondentes ao seu caso. (A verificação deste últimoFalse
é desnecessária, de fato{_,_}->ToLowerCase
funcionaria, capturando qualquer coisa que ainda não tivesse sido substituída, mas isso não seria mais curto e mais obscuro.)O único desafio foi descobrir uma maneira sucinta de compactar uma matriz bidimensional de funções em uma matriz de argumentos.
Edit: Obrigado a @Martin Büttner por capturar barras invertidas de corte / colar "úteis", as
1>0
e1<0
abreviações, e também pela orientação para contar o comprimento em bytes, não em caracteres (sejam eles :-))Edit2: Mais agradecimentos a @Martin Büttner por apontar que poluir o espaço para nome global é um golfe aceitável, lembrando-me de um aplicativo de função de caractere e sugerindo substituir as duas funções em maiúsculas por uma abreviação de um e usar o outro para emular o outro (salvar quatro caracteres). (Eu acho que ele já fez isso antes. :-))
fonte
f@g
vez def[g]
(em todo o seu código). Também tenho certeza de que você não precisa de um bloco. Apenas faça(f=0>1;t=!f;c=Characters;StringJoin/@...)&
. Isso polui o espaço para nome global, mas estamos totalmente bem com isso ao jogar golfe. Além disso, não contei, mas você pode salvar bytes armazenandoToUpperCase
em uma variável (u
digamos) e substituindoUpperCaseQ@#
por#==u@#
.Python 3, 131 bytes
A função retorna seqüências de caracteres em uma tupla
fonte
Erlang, 157 bytes
Fecha as duas seqüências de caracteres (na verdade, listas) em uma lista de tuplas de dois caracteres e mapeia cada caractere para o caso apropriado usando uma compreensão de lista.
fonte
Python 2, 101 bytes
Uma função anônima que pega duas cadeias e retorna as cadeias de saída em uma lista. Eu marquei isso como Python 2 porque o Python 3 não permite
I,I[::-1]
ficar sozinho no final assim.fonte
Python, 126 bytes
A função
f
retorna seqüências de caracteres em uma tuplafonte
C, 181 bytes
Ocorreu um problema ao encurtar os nomes das bibliotecas padrão de uma maneira interessante (# defini-los exige 11 caracteres de sobrecarga). Usa recursão principal e variáveis globais x e y como argumentos.
main (<zero-zero>, argv) = chama main (0, {argv [1], argv [2]}), depois imprime uma nova linha e depois chama main (0, {argv [2], argv [1]})
main (0, {x, y}) = se x é o final de string, retorne 0, caso contrário, imprima o caso correto do primeiro caractere de xe chame main (0, {x + 1, y + 1}).
Execute com as duas cadeias como argumentos.
fonte
C -
164153 bytes - GCCgcc prog.c
./a.out AfdgF a2dfsd
Será atualizado se eu conseguir baixar o wc -c. Funciona muito bem, na verdade
fonte
F #, 211 caracteres
poderia ser melhor ...
fonte
Matlab, 140
Ungolfed:
Exemplo:
fonte
C, 164 bytes
Praticamente implementando o algoritmo, conforme descrito no problema. Toma 2 strings como parâmetros de entrada.
Ungolfed:
fonte
Ruby, 102
Pega as seqüências originais, emparelha as letras em matrizes. Se eles são inferiores / máximo ou máximo / inferior, troque em ambos. Em seguida, transponha as matrizes de volta para nossa matriz ordenada.
Isso requer uma nova linha à direita na entrada.
fonte
Perl 5.10+,
10199 bytes96 bytes + 3 bytes para os sinalizadores da linha de comando
p00
. Usa uma única string delimitada por nova linha como entrada:Ou você pode inserir a entrada em STDIN:
Quebrado:
fonte
Primeira tentativa em scala, 138 caracteres
f é uma função que pega as duas cadeias de entrada e executa o trabalho, com uma função local, usada duas vezes, para alterar o caso das cadeias.
O mesmo código, com recuo e apenas alguns nomes mais legíveis:
fonte
Gelatina , 13 bytes
Um link monádico que aceita e retorna listas de duas "strings" (listas de caracteres no Jelly).
Experimente online!
fonte
Python 2 , 97 bytes
Experimente online!
fonte
Tcl , 194 bytes
Experimente online!
fonte
Haskell ,
10991 bytesObrigado a @Laikoni por 16 bytes!
Experimente online!
fonte