Troque o alfabeto

48

Neste desafio, você vai ser "reverter" o alfabeto ou trocar a-zcom z-a. Isso é comumente conhecido como o código Atbash .

Como essa transformação faz com que a saída pareça um idioma estrangeiro, seu código precisará ser o mais curto possível.


Exemplos

abcdefghijklmnopqrstuvwxyz
zyxwvutsrqponmlkjihgfedcba

Programming Puzzles & Code Golf
Kiltiznnrmt Kfaaovh & Xlwv Tlou

Hello, World!
Svool, Dliow!

Especificação

  • A entrada pode conter várias linhas e será somente ASCII
  • Nenhum espaço em branco adicional deve ser adicionado à saída
  • O caso deve ser preservado

Entre os melhores


Este é o então o código mais curto em bytes ganha

Downgoat
fonte
24
+1 para a justificativa "Como essa transformação faz com que a saída pareça um idioma estrangeiro, seu código precisará ser o mais curto possível".
cat
11
Algumas curiosidades: este é o Atbash , uma cifra conhecida tão antiga quanto a Bíblia.
Jacob
6
"Como essa transformação faz com que a saída pareça um idioma estrangeiro, seu código precisará ser o mais curto possível". Que tipo de lógica é esta?? Como sua descrição gera tantos pontos de interrogação como se tivesse sido escrita em alguma língua estrangeira, sua resposta a essa pergunta deve estar em linguagem natural inteligível e é apreciada alguma verbosidade.
Bart
Kiltiznnrmt Kfaaovh & Xlwv Tlou deve ser o novo site para "Programação de trivialidades e boliche de código" ...
#
Por que você não permite espaços em branco adicionais? Isso torna impossível em alguns idiomas que sempre têm uma nova linha à direita. Não vejo isso acrescentando nada ao desafio.
Esolanging Fruit

Respostas:

11

Pitão, 8 bytes

XXzG)rG1

@xnor sugeriu essa abordagem mais simples na resposta Pyth de @ FryAmTheEggman, depois a traduzi para Pyth.

Isso usa o comportamento prático de X(translate) quando são fornecidos apenas dois argumentos: ele traduz do segundo argumento para o segundo argumento invertido. Fazemos isso primeiro com o alfabeto minúsculo ( G) e depois com maiúsculas G.

lirtosiast
fonte
16

C, 59 bytes

Desculpe por trazer C novamente, mas fiquei um pouco decepcionado ao ver apenas as funções C aqui. Fiquei com a impressão de que o OP estava procurando um produto utilizável.

main(c){while(~(c=getchar()))putchar(isalpha(c)?c+4^31:c);}

Compilado no Ubuntu 14.04 com um simples:

cc swalpha.c

O executável resultante lê qualquer número de linhas de stdin e grava o resultado em stdout.

Obrigado a muitos outros pôsteres pelo truque do XOR.

Ruud Helderman
fonte
11

CJam, 17 bytes

Eu queria ajudar a GamrCorps a desenvolver sua solução CJam, mas o resultado foi tão diferente que decidi fazer uma resposta separada.

q'[,_el^_W%32f^er

Experimente online.

Explicação

q     e# Read all input.
'[,   e# Get a character range from the null byte up to and including "Z".
_el   e# Duplicate and convert to lowercase.
^     e# Symmetric set difference. Due to the lowercase operation only letters will not
      e# appear in both sets, and so we get a string with all uppercase letters followed
      e# by all lowercase letters, i.e "ABC...XYZabc...xyz".
_W%   e# Duplicate and reverse. Gives: "zyx...cbaZYX...CBA".
32f^  e# Take each character XOR 32 which swaps the case, so now we have:
      e#                               "ZYX...CBAzyx...cba"
er    e# Transliterate: substitute each character in the first string with the correspoding
      e# character in the second string.
Martin Ender
fonte
4
Bem, estou feliz que você estava tentando ajudar! Essa é a solução que eu estava tentando fazer, simplesmente não conseguia descobrir o XOR. Bom trabalho!
GamrCorps
11
O destaque da sintaxe do SE odeia esolangs.
Cyoce 5/01/16
@Cyoce Eles provavelmente não têm tempo; dado quantos idiomas existem neste site. Dito isto, o CJam é provavelmente um dos mais fáceis, pois não é auto-modificável e tem uma estrutura bastante clara. Eu gostaria que eles tentassem adicionar realce de sintaxe a uma linguagem auto-modificável como ///.
Esolanging Fruit
@ Challenger5 afaik, o destaque da sintaxe usa apenas o prettify do Google; o suporte a vários esolangs teria que ser adicionado lá.
Martin Ender
11

JavaScript (ES6), 69 67 bytes

x=>x.replace(/[A-Z]/gi,c=>String.fromCharCode(c.charCodeAt()+4^31))

Usa a mesma estratégia da minha resposta Japt :

x=>x.replace(/[A-Z]/gi,C=>   // Replace each letter C with
 String.fromCharCode(        //  the character with char code
  C.charCodeAt()+4^31))      //   the char code of C, plus 4, with the last 5 bits flipped.

Amaldiçoe seus nomes de propriedades incrivelmente longos, JS ...

ETHproductions
fonte
11
+1 por mencionar nomes de propriedades terrivelmente longos de JS. O meu favorito ainda é o infamedocument.getElementById
Cyoce
2
@Cyoce Experimente document.getElementsByClassNameou, no Firefox e Chrome, #document.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
Ismael Miguel
Este parece ser apenas 66 bytes não 67
Downgoat
@ Doᴡɴɢᴏᴀᴛ Você está certo sobre isso, obrigado!
ETHproductions
Parece que você está perdendo um colchete no final do código do golfe.
starbeamrainbowlabs
10

Retina , 17 14 13 bytes

Código:

\T`w`_dZ-Az-a

Explicação:

\             # This suppresses the trailing linefeed
 T            # Switches to transliterate mode
  `w          # w is short for _0-9A-Za-z
    `_d       # d is short for 0-9
       Z-Az-a # Z-Az-a

Isso faz algumas coisas mágicas e completa a tarefa.

Experimente aqui .

Adnan
fonte
2
Sorte sua que eu adicionei recentemente \. Infelizmente, não consegui adicionar classes de caracteres para letras e classes de caracteres invertidas ainda.
Martin Ender
@ MartinBüttner muita sorte, que quase invalidado minha resposta :)
Adnan
Para referência, a partir da Retina 0.7.2, você poderia fazer \T`lL`RlRL.
Martin Ender
9

Pitão, 10 9

uXGr;H)2z

Agradecemos a Jakube por salvar um byte com o novo recurso do ;!

Suíte de teste

Uma explicação rápida: reduza começando com a entrada sobre os números 0 e 1. A operação a ser executada é converter o alfabeto em minúsculas com uma r...0ou r...1quais são as funções inferior e superior do python, respectivamente, aplicadas a ele e depois revertidas.

FryAmTheEggman
fonte
11
9 bytes devido a um novo recurso (nem um dia):uXGr;H)2z
Jakube
5
Você pode adicionar uma explicação?
TanMath
11
Você não pode usar Xcom o alfabeto e depois com o alfabeto maiúsculo?
Xnor
11
@xnor XXzG)rG1? Isso parece funcionar.
lirtosiast
Ou talvez o X nos alfabetos minúsculo e maiúsculo concatenou e depois trocou de maiúsculas e minúsculas? Provavelmente é mais longo, na verdade.
Xnor
6

Julia, 74 61 47 bytes

s->replace(s,r"[a-z]"i,t->Char(31$Int(t[1])-4))

Esta é uma função lambda que aceita uma string e retorna uma string. Para chamá-lo, atribua-o a uma variável.

Combinamos cada letra usando uma expressão regular e substituímos cada letra pelo caractere ASCII correspondente a 31 XOR o código ASCII da letra, menos 4.

Alex A.
fonte
Uau, isso é muito elegante. Recebo um aviso de descontinuação para $que você possa atualizar isso para . Não sabia que você pode usar uma função no replace.
precisa saber é o seguinte
5

C, 150 129 bytes

void rev(char*s){int i,t;for(i=0;i<strlen(s);i++){t=s[i]+25;t=t<116?180-t:244-t;isalpha(s[i])?printf("%c",t):printf("%c",s[i]);}}

Essa função apenas converte char para int e adiciona o deslocamento apropriado ao int antes da impressão. Eu sei que não é o mais curto, mas não vi uma implementação em C.

Exemplo de uso

#include<stdio.h>
#include<string.h>
#include<ctype.h>

void rev(char*s){int i,temp;for(i=0;i<strlen(s);i++){temp=s[i]+25;temp=temp<116?180-temp:244-temp;isalpha(s[i])?printf("%c",temp):printf("%c",s[i]);}}


int main(){
   char *s = "hello, there";
   rev(s);
   return 0;
}

UPDATE: reduziu o nome de uma variável.

Danwakeem
fonte
Bem-vindo à Programação de quebra-cabeças e troca de pilha de código Golf! Essa é uma abordagem muito boa. Pode-se jogar mais, tornando todas as variáveis ​​(inclusive temp) exatamente com um caractere.
Wizzwizz4
Ahh, você está certo! Vou regolfar este
Danwakeem
11
Você acha que poderia tentar meu desafio? Analise sua cadeira
wizzwizz4
11
Sim, ele funcionará sem os cabeçalhos. Você recebe um aviso do compilador @ edc65. Imaginei que, uma vez que compila e executa, não seria considerado trapaça, mas no uso no mundo real, você sempre deve incluir os cabeçalhos.
Danwakeem 4/01/16
11
107 bytes:i,t;r(char*s){for(;i<strlen(s);i++){t=s[i]+25;t=t<116?180-t:244-t;isalpha(s[i])?putchar(t):putchar(s[i]);}}
Spikatrix
5

Japonês, 23 22 bytes

Ur"[A-Za-z]"_c +4^31 d

Experimente online!

Como funciona

Ur"[A-Za-z]"_  // Take the input and replace each letter with:
 c +4          //  Take its char code and add 4. This results in
               //  the string      "ABC...XYZabc...xyz"
               //  becoming        "EFG...\]^efg...|}~".
 ^31           //  XOR the result by 31. This flips its last five 5 bits.
               //  We now have     "ZYX...CBAzyx...cba".
 d             //  Convert back from a char code.
               // Implicit: output last expression
ETHproductions
fonte
Boa idéia (que eu emprestado ...) para usar XOR para este
Luis Mendo
5

C, 64

Uma função nula que modifica a string no lugar.

t(char*p){for(int c;c=*p;)*p++=c>64&c<91|c>96&c<123?(c^31)-4:c;}

Teste: ideone

edc65
fonte
11
c;t(char*p){for(;c=*p;)*p++=c>64&c<91|c>96&c<123?(c^31)-4:c;}
Spikatrix
@CoolGuy certo, mas eu não gosto global dentro de uma função ... é só me
edc65
Isso não é de 64 bytes?
Downgoat
@ Doᴡɴɢᴏᴀᴛ sim é .. obrigado ..
edc65
5

R, 69 61 bytes

Agradecemos a @ Giuseppe por remover alguns bytes extras:

function(s)cat(chartr("a-zA-Z",intToUtf8(c(122:97,90:65)),s))

Versão anterior:

function(s)cat(chartr("a-zA-Z",rawToChar(as.raw(c(122:97,90:65))),s))

Esta é uma função anônima. Uso:

> f=function(s)cat(chartr("a-zA-Z",rawToChar(as.raw(c(122:97,90:65))),s))
> f("Hello, World!")
Svool, Dliow!
> f("Programming Puzzles & Code Golf")
Kiltiznnrmt Kfaaovh & Xlwv Tlou
> f("This is
+ a multiline
+ example.")
Gsrh rh
z nfogrormv
vcznkov.
plannapus
fonte
11
intToUtf8(c(122:97,90:65))em vez das rawconversões, e você também pode se livrar catdelas. Eu estou fazendo um pouco de um hábito de vir de golfe 1+ ano velhas respostas de vocês ...
Giuseppe
4

Sério, 31 bytes (não concorrente)

úúû+╗úRúûR+╝,`;╜íuWD╛E(X0WX`Mεj

Hex Dump:

a3a3962bbba352a396522bbc2c603bbda1755744be452858305758604dee6a

Experimente Online

Expl:

úúû+╗                             Put UPPERCASElowercase in reg0
     úRúûR+╝                      Put ESACREPPUesacrewol in reg1
            ,                     Fetch input.
             `             `Mεj   Map over the characters in string as list, joining result
              ;╜íu                Find 1-index of character in UPPERCASElowercase
                  W     0WX       If it is positive (present): 
                   D              Convert back to 0-index
                    ╛E            Look it up in ESACREPPUesacrewol
                      (X          Delete the original character.
                                  (Else just leave the original character unchanged.)

Acabei de perceber que as especificações dizem que não há espaço em branco adicional, mas não há como suprimir novas linhas à saída do Seriously, portanto, não há uma solução seriamente.

quintopia
fonte
11
O que ESACREPPUesacrewolsignifica isso ?
Downgoat
3
@ Doᴡɴɢᴏᴀᴛ MAIÚSCULAS invertidas LOWERCASE invertidas
Mama Fun Roll
2
o alfabeto em maiúsculas colocado no início do alfabeto em minúsculas invertida revertida
quintopia
4

Ruby, 40 bytes

Nova solução: roubou esse pouco lançando mágica de alguns dos outros posts aqui:

->s{s.gsub(/[a-z]/i){($&.ord+4^31).chr}}

Ruby, 55 46 bytes

->s{s.tr'a-zA-Z',[*?A..?Z,*?a..?z].reverse*''}

9 bytes de desconto graças a @manatwork


execução de teste:

->s{s.gsub(/[a-z]/i){($&.ord+4^31).chr}}["Kiltiznnrmt Kfaaovh & Xlwv Tlou"]
=> "Programming Puzzles & Code Golf"
daniero
fonte
3

Jolf, 15 bytes

~Ai+plpu+_pl_pu
~A              I don't know what to call this, besides "dictionary replace"
  i              the input
   +plpu         previous dictionary: lower + upper alphabet
        +_p1_pu  new dictionary: reversed lower + reversed upper

Conjunto de teste ou tente com sua própria entrada

Conor O'Brien
fonte
A palavra para isso é "transliteração", para sua informação.
a spaghetto
3

𝔼𝕊𝕄𝕚𝕟 2, 12 caracteres / 26 bytes (não competitivo)

ïĪ(ᶐ+ᶛ,ᶐᴙ+ᶛᴙ

Try it here (Firefox only).

Adicionada função transliterada após o lançamento do desafio.

Explicação

ïĪ(ᶐ+ᶛ,ᶐᴙ+ᶛᴙ // implicit: ï=input
ïĪ(           // transliterate ï...
   ᶐ+ᶛ,       // from uppercase+lowercase alphabet...
       ᶐᴙ+ᶛᴙ  // ... to reversed uppercase+reversed lowercase alphabet
              // implicit output
Mama Fun Roll
fonte
Eu pensei que 𝔼𝕊𝕄𝕚𝕟 2 seria chamado 𝔼𝕊 ∞?
Downgoat
11
Não, decidi guardar isso para um idioma complementar (mas diferente) para 𝔼𝕊𝕄𝕚𝕟.
Mama Fun Roll
IIRC Existe um quadro-negro em negrito 2.
Conor O'Brien
@ ՊՓԼՃՐՊՃՈԲՍԼ Chame-o de ESMax (em duplo golpe).
mbomb007
3

CJam, 21 bytes

q'[,65>__el_@+W%@@+er

Ainda não é uma solução ideal ... Experimente online

É difícil de explicar sem agrupar as coisas, então aqui está uma explicação geral: obtém entrada, empurra o alfabeto maiúsculo e minúsculo duas vezes, gira as coisas ao redor, combina cadeias maiúsculas e minúsculas, inverte uma e usa transliteração (semelhante à resposta da Retina).

GamrCorps
fonte
Isso gera uma nova linha à direita?
precisa saber é o seguinte
@ LegionMammal978 Não deveria, a menos que o aditsu alterasse a saída da pilha.
GamrCorps
@ LegionMammal978 eu não.
Martin Ender
3

PostgreSQL, 118 125 bytes

SELECT s,TRANSLATE(s,t||UPPER(t),REVERSE(t)||REVERSE(UPPER(t)))
FROM(SELECT text'Programming Puzzles & Code Golf's,text'abcdefghijklmnopqrstuvwxyz't)r

SqlFiddleDemo

Resultado:

╔══════════════════════════════════╦═════════════════════════════════╗
║                s                 ║            translate            ║
╠══════════════════════════════════╬═════════════════════════════════╣
║ Programming Puzzles & Code Golf  ║ Kiltiznnrmt Kfaaovh & Xlwv Tlou ║
╚══════════════════════════════════╩═════════════════════════════════╝

Entrada: SELECT text'...'s


EDITAR:

Entrada como tabela:

SELECT s,TRANSLATE(s,t||UPPER(t),REVERSE(t)||REVERSE(UPPER(t)))
FROM i,(SELECT text'abcdefghijklmnopqrstuvwxyz't)r
GROUP BY s,t

SqlFiddleDemo

Resultado:

╔══════════════════════════════════╦═════════════════════════════════╗
║                s                 ║            translate            ║
╠══════════════════════════════════╬═════════════════════════════════╣
║ Hello, World!                    ║ Svool, Dliow!                   ║
║ Programming Puzzles & Code Golf  ║ Kiltiznnrmt Kfaaovh & Xlwv Tlou ║
║ abcdefghijklmnopqrstuvwxyz       ║ zyxwvutsrqponmlkjihgfedcba      ║
╚══════════════════════════════════╩═════════════════════════════════╝
lad2025
fonte
Hey lad2025, penso que este é menor do que 118, mas não sou especialista nas regras de contagem
t-clausen.dk
2

Python 3, 195 169 168 166 bytes

Graças a @TrangOul por -2 bytes!

Como eu não vi que eu poderia ter jogado isso antes?

x=__import__('string').ascii_letters;y,z=x[26:],x[:26];a,b=y[::-1],z[::-1];print(''.join(b[z.index(i)]if i in b else a[y.index(i)]if i in a else i for i in input()))

(sorta) ungolfed:

x = __import__('string').ascii_letters;
y, z = x[26: ], x[: 26];
a, b = y[::-1], z[::-1];
print(''.join(b[z.index(i)]
    if i in b
    else a[y.index(i)]
    if i in a
    else i
    for i in input()
))

Experimente no Ideone!

gato
fonte
11
Você pode salvar 2 bytes removendo o mais externo []de join.
Trang Oul
@TrangOul realmente? É uma compreensão da lista, então eu pensei que ele precisa ser uma lista ou então você começa generator object <genexpr> at..., mas vou testá-lo
gato
@TrangOul Nevermind, eu aprendi alguma coisa, obrigado!
gato
Qualquer iterável [contendo strvalores] pode ser passado para a join()função.
precisa saber é o seguinte
2

Python, 61 bytes

lambda x:''.join([c,chr(ord(c)+4^31)][c.isalpha()]for c in x)

Uma função anônima. Nas letras, faz a operação de reversão na representação de bits adicionando 4 e depois invertendo os últimos cinco bits, semelhante à resposta Javascript da ETHproductions .

xnor
fonte
Assim escreveu exatamente a mesma coisa haha
sagiksp
2

Haskell, 119 104 bytes

Economizou 15 bytes graças a @nimi.

c=fromEnum;s=toEnum;f[]="";f(x:y)|64<c x&&c x<91=s(155-c x):f y|96<c x&&c x<123=s(219-c x):f y|0<1=x:f y

Uso:

f "abcdefghijklmnopqrstuvwxyz"
"zyxwvutsrqponmlkjihgfedcba"

f "Programming Puzzles & Code Golf"
"Kiltiznnrmt Kfaaovh & Xlwv Tlou"

f "Hello, World!"
"Svool, Dliow!"

Explicação

let c=fromEnum;s=toEnum;--wrap names for later use, fromEnum gets ascii code from char, toEnum gets char from ascii code
f[]=[];                 --feed empty list (of chars in this case), get empty list
f(x:y)                  --feed a list, separate the first element and...
|64<c x&&c x<91=        --if its an uppercase char (using ascii code range)...
s(c x*(-1)+155)         --  inverse its ascii code value, move it to the range of uppercase and get the new char
                        --  (like rotating half turn a ruler by the side and then sliding it to the space it previously occupied)
:f y                    --  feed the rest of the list and stick the new char in front of the result
|96<c x&&c x<123=       --if its a lowercase char (using ascii code range)...
s(c x*(-1)+219)         --  inverse its ascii code value, move it to the range of lowercase and get the new char
:f y                    --  feed the rest of the list and stick the new char in front of the result
|True=x:f y             --otherwise feed the rest of the list and stick the char in front of the result

Eu sou novo em Haskell ... em programação funcional ... e no site, e sei que existem (muitas) respostas melhores para essa pergunta, mas tenha paciência comigo.

orelhas fofas
fonte
Algumas dicas de golfe: a) não há necessidade de usar let. Comece diretamente com c=fromEnum. Use (155-c x)e (219-c x). c) Truepode ser substituído por 1<2. - O código falha ao carregar para mim o erro "variável do tipo ambigioso" para funções ce s(ghci 7.10.2), mas isso pode ser facilmente corrigido com, em f[]=""vez de f[]=[].
N
Obrigado !, eu estava realmente me perguntando se era válido sem "let", pois não é executado diretamente no GHC.
orelhas fofas
2

Perl 6 , 28 bytes

{S:g/\w/{chr $/.ord+4+^31}/}

Uso:

# give it a lexical name
my &swap = {  }

say swap 'Programming Puzzles & Code Golf';
# Kiltiznnrmt Kfaaovh & Xlwv Tlou

say swap ('a'..'z').join
# zyxwvutsrqponmlkjihgfedcba
Brad Gilbert b2gills
fonte
Quando executo isso, ele diz: Warning: Use of "ord" without parentheses is ambiguous at (eval 8)[/System/Library/Perl/5.18/perl5db.pl:732] line 2.Não sei nada sobre perl, então estou fazendo algo errado? Como eu correria isso?
Downgoat
@ Doᴡɴɢᴏᴀᴛ Se você notar que diz que este é escrito em Perl 6 Você pode ir a # perl6 na freenode e tipom: my &swap = {S:g/\w/{chr $/.ord+4+^31}/}; say swap ('a'..'z').join
Brad Gilbert b2gills
Ah, tudo bem, aparentemente eu não sei ler: P
Downgoat 5/02/16
@ Doᴡɴɢᴏᴀᴛ acrescentei uma nota que você pode testá-lo em # perl6 na freenode
Brad Gilbert b2gills
2

Java, 136 bytes

void x(String i){for(char c:i.toCharArray()){if(Character.isLetter(c))c=c<91?(char)(90-(c-65)):(char)(122-(c-97));System.out.print(c);}}

Exemplo de uso:

class Test {
  static void x(String i){for(char c:i.toCharArray()){if(Character.isLetter(c))c=c<91?(char)(90-(c-65)):(char)(122-(c-97));System.out.print(c);}}
  public static void main(String[] args) {
    x("Programming Puzzles & Code Golf");
    // produces "Kiltiznnrmt Kfaaovh & Xlwv Tlou"
  }
}

Provavelmente o pior idioma comumente usado em termos de tamanho de bytes.

Sean
fonte
Eu sei que isso foi publicado há cerca de um ano e meio, mas você pode jogar golfe em algumas coisas como esta: void x(String i){for(Character c:i.toCharArray())System.out.print(c.isLetter(c)?(char)(c<91?90-(c-65):122-(c-97)):c);}( 118 bytes )
Kevin Cruijssen
Ou ainda mais curto: void y(String i){for(int c:i.getBytes())System.out.print((char)(c>65&c<91|c>96&c<123?c<91?90-(c-65):122-(c-97):c));}( 116 bytes )
Kevin Cruijssen
11
@KevinCruijssen Você também pode reorganizar os cálculos para negar a necessidade de parênteses, fazendo 90-(c-65)em -c+65+90 e 122-(‌​c-97)em -c+97+122, o que economiza um byte cada.
Zavada
2

Shell Unix + tr + printf, 35 bytes

tr A-Za-z `printf %s {Z..A} {z..a}`

Aqui está você, uma resposta canônica em tr. Eu pensei como poderia uma questão de transliteração do movimento alfabeto sem uma resposta canônica para tr ansliterate o alfabeto?

O tr por si só nem faz um "Olá, mundo!" e como tal não é uma linguagem de programação, marquei a resposta como não-competitiva [1] .

[1]: Edit: Na verdade, o shell Unix é a linguagem e tr é a biblioteca padrão . Agradeço ao Downgoat e ao Digital Trauma por me ajudarem a descobrir isso.

user48538
fonte
3
Eu acho que é bom reivindicar shell ou bash como uma linguagem e utilitários comuns ( trestá no coreutils) como a biblioteca padrão. Veja inúmeras das minhas respostas ;-)
Digital Trauma
11
Mas ele não funciona: tr: range-endpoints of 'Z-A' are in reverse collating sequence order. Eu acho que você tem que fazer algo assim tr A-Za-z $(printf %s {Z..A} {z..a})(e substituir $( )com acentos graves)
Digital Trauma
@DigitalTrauma, mas nem todo mundo tem printf em seu sistema.
user48538
7
Eu acho que você teria muita dificuldade em encontrar um sistema Unix que não possui printf- afinal, é especificado pelo Posix . Também é um builtin no bash que é bastante onipresente nos dias de hoje. Independentemente disso, ter algo pré-instalado no sistema de todos não é um pré-requisito para o código-golf - nem todos têm CJam em seu sistema, quer ;-)
Digital Trauma
11
O espaço entre }e {é necessário - caso contrário, a expansão se tornará algo parecido comZz Zy Zx ... Za Yz ... Aa
Digital Trauma
2

05AB1E , 5 bytes [não concorrente]

žnžo‡

Usa o conjunto de caracteres CP-1252 .

Experimente online!

Explicação:

žn    - Push [A-Za-z]
  žo  - Push [Z-Az-a]
    ‡ - Transliterate.
George Gibson
fonte
Por que isso não é competitivo?
Esolanging Fruit
1

MATL , 21 28 bytes

Usa a versão 6.0.0 , que é anterior a esse desafio. O código é executado em oitava.

jttk2Y2mXK)o31Z~4-cK(

Exemplo

>> matl
 > jttk2Y2mXK)o31Z~4-cK(
 >
> Hello, World!
Svool, Dliow!

Explicação

j             % input string
t             % duplicate
tk            % duplicate and convert to lowercase
2Y2           % string 'abc...xyz'
m             % "ismember" function: produces logical index of letter positions
XK            % copy to clipboard K
)             % index into string to get its letters
o31Z~4-       % bitwise XOR with 31 and subtract 4
c             % convert to char
K             % paste logical index from clipboard K
(             % put back modified letters into original string

Abordagem antiga, 28 bytes

j1Y2!tkh"t@2#m@0v27b-)wXK)K(
Luis Mendo
fonte
1

MATLAB, 61 bytes

@(x)[abs(-x+ismember(x,65:90)*155+ismember(x,97:122)*219),'']

Eu tentei f=@ismember, e tornando o intervalo a=65:90uma variável e o faço 32+ana segunda ismemberchamada. Tudo isso encurtou o código, mas resultaria em um programa e, portanto, exigem tanto dispe input.

Isto dá:

ans('Hello, World!')
ans =
Svool, Dliow!

ans('Programming Puzzles & Code Golf')
ans =
Kiltiznnrmt Kfaaovh & Xlwv Tlou
Stewie Griffin
fonte
1

Braquilog , 66 bytes

_|hH(:64>:91<,77-H+78=X;H:96>:123<,109-H+110=X;HX),[X]:"~c"w,?b:0&

A falta de built-ins realmente dói aqui, então temos que recorrer a bons cálculos antigos de códigos ASCII.

O predicado brachylog_mainespera que uma sequência de códigos de caracteres seja entrada e não saída, por exemplobrachylog_main(`Hello, World!`,_).

Explicação

_                                                                  § If the input is empty,
                                                                   § return true
                                                                   §
 |                                                                 § Else
                                                                   §
  hH(                                            ),[X]:"~c"w       § Print variable X which
                                                                   § depends on the head of
                                                                   § the input as a char code
                                                                   §
                                                            ,?b:0& § Recursive call on the
                                                                   § tail of the input
                                                                   §
     :64>:91<,77-H+78=X                                            § If H is capital, X =
                                                                   § 77 - H + 78
                       ;                                           § Else if H is non-cap, X=
                        H:96>:123<,109-H+110=X                     § 109 - H + 110
                                              ;                    § Else (not a letter)
                                               HX                  § H = X    
Fatalizar
fonte
1

Perl 6, 40 39 bytes

Como todo mundo está executando funções anônimas:

my &f=*.trans(/\w/=>{chr $/.ord+4+^31})

(Obrigado @ b2gills pela dica)

Usa o mesmo trecho de vodu que alguns dos outros posts. Eu não tinha certeza se incluiria a declaração de variável / função na contagem de bytes, por isso fiz apenas por precaução. Sem ela, esta solução tem apenas 34 bytes.

Uso:

> f "zyxwvutsrqponmlkjihgfedcba"
abcdefghijklmnopqrstuvwxyz
> f "Kiltiznnrmt Kfaaovh & Xlwv Tlou"
Programming Puzzles & Code Golf
> f "Svool, Dliow!"
Hello, World!
Teclas de atalho
fonte
Você pode usar *.trans(…)para torná-lo mais curto.
Brad Gilbert b2gills
1

Python 3, 164 159 bytes

def f(t,a="abcdefghijklmnopqrstuvwxyz",b=""):
 for c in t:u=64<ord(c)<91;c=c.lower();c=a[::-1][a.index(c)] if c in a else c;b+=c.upper() if u else c
 return b
Argenis García
fonte