Intercambia el alfabeto


48

En este desafío, estará "invirtiendo" el alfabeto o intercambiando a-zcon z-a. Esto se conoce comúnmente como el cifrado Atbash .

Debido a que esta transformación hace que la salida se vea como un idioma extranjero, su código deberá ser lo más breve posible.


Ejemplos

abcdefghijklmnopqrstuvwxyz
zyxwvutsrqponmlkjihgfedcba

Programming Puzzles & Code Golf
Kiltiznnrmt Kfaaovh & Xlwv Tlou

Hello, World!
Svool, Dliow!

Especificación

  • La entrada puede contener varias líneas y será solo ASCII
  • Sin adicional de espacio en blanco, debe añadirse a la salida
  • El caso debe ser preservado

Tabla de clasificación


Este es el por lo que el código más corto en bytes gana


24
+1 para la justificación "Debido a que esta transformación hace que la salida se vea como un idioma extranjero, su código deberá ser lo más breve posible".
gato el

11
Algunas curiosidades: este es Atbash , una cifra conocida tan antigua como la Biblia.
Jacob

66
"Debido a que esta transformación hace que la salida se vea como un idioma extranjero, su código deberá ser lo más breve posible". ¿¿Qué tipo de lógica es esa?? Debido a que su descripción plantea tantos signos de interrogación como si estuviera escrita en algún idioma extranjero, su respuesta a esta pregunta debe estar en un lenguaje natural inteligible y se aprecia cierta verbosidad.
Bart

Kiltiznnrmt Kfaaovh & Xlwv Tlou debería ser el nuevo sitio para "Programación de triviales y bolos de código" ...
Erik the Outgolfer

¿Por qué no permite espacios en blanco adicionales? Eso hace que sea imposible en algunos idiomas que siempre tienen una nueva línea final. No puedo ver que agregue nada al desafío.
Esolanging Fruit

Respuestas:


11

Pyth, 8 bytes

XXzG)rG1

@xnor sugirió este enfoque más simple en la respuesta Pyth de @ FryAmTheEggman, luego lo traduje a Pyth.

Utiliza el práctico comportamiento de X(traducir) cuando se le dan solo dos argumentos: traduce del segundo argumento al segundo argumento invertido. Hacemos esto primero con el alfabeto en minúsculas ( G), y luego con mayúsculas G.


16

C, 59 bytes

Perdón por mencionar C nuevamente, pero me decepcionó un poco ver solo las funciones C aquí. Tenía la impresión de que OP estaba buscando un producto utilizable.

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

Compilado en Ubuntu 14.04 con un simple:

cc swalpha.c

El ejecutable resultante lee cualquier número de líneas desde stdin y escribe el resultado en stdout.

Gracias a muchos de los otros carteles por el truco XOR.


11

CJam, 17 bytes

Quería ayudar a GamrCorps a desarrollar su solución CJam, pero el resultado terminó tan diferente que decidí hacer una respuesta por separado.

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

Pruébalo en línea.

Explicación

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.

44
¡Bien, me alegro de que trataras de ayudar! Esa es la solución que estaba tratando de hacer, simplemente no podía entender el XOR. ¡Buen trabajo!
GamrCorps

1
El resaltado de sintaxis de SE odia esolangs.
Cyoce

@Cyoce Probablemente no tengan tiempo; dado cuántos idiomas hay en este sitio. Dicho esto, CJam es probablemente uno de los más fáciles, ya que no se auto modifica y tiene una estructura bastante clara. Me gustaría ver que intenten agregar resaltado de sintaxis a un lenguaje de modificación automática como ///.
Esolanging Fruit

@ Challenger5 afaik, el resaltado de sintaxis solo usa el prettify de Google, hay que agregar soporte para varios esolangs allí.
Martin Ender

11

JavaScript (ES6), 69 67 bytes

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

Utiliza la misma estrategia que mi respuesta de 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.

Maldice tus nombres de propiedad increíblemente largos, JS ...


1
+1 por mencionar los nombres de propiedad insoportablemente largos de JS. Mi favorito sigue siendo el infamedocument.getElementById
Cyoce

2
@Cyoce Probar document.getElementsByClassNameo, en Firefox y Chrome,document.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
Ismael Miguel

Esto parece ser solo 66 bytes, no 67
Downgoat

@ Doᴡɴɢᴏᴀᴛ Tienes razón en eso, ¡gracias!
ETHproductions

Parece que le falta un corchete de cierre al final del código de golf.
starbeamrainbowlabs

10

Retina , 17 14 13 bytes

Código:

\T`w`_dZ-Az-a

Explicación:

\             # 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

Esto hace algunas cosas mágicas y completa la tarea.

Probarlo aquí .


2
Suerte que agregué recientemente \. Desafortunadamente, todavía no pude agregar clases de caracteres para letras y clases de caracteres invertidas.
Martin Ender

@ MartinBüttner Muy afortunado, eso casi invalida mi respuesta :)
Adnan

Como referencia, a partir de Retina 0.7.2 podría hacer \T`lL`RlRL.
Martin Ender

9

Pyth, 10 9

uXGr;H)2z

¡Gracias a Jakube por guardar un byte con la nueva característica de ;!

Banco de pruebas

Una explicación rápida: reducir comenzando con la entrada sobre los números 0 y 1. La operación a realizar es traducir el alfabeto en minúsculas con cualquiera r...0o r...1cuáles son las funciones inferior y superior de python, respectivamente, aplicadas a él y luego revertidas.


1
9 bytes debido a una nueva función (ni siquiera un día de antigüedad):uXGr;H)2z
Jakube

55
¿Puedes agregar una explicación?
TanMath

1
¿No puedes usar Xcon el alfabeto y luego con el alfabeto en mayúscula?
xnor

1
@xnor XXzG)rG1? Eso parece funcionar.
lirtosiast el

O, ¿quizás X en los alfabetos en minúsculas y mayúsculas se concatenan, luego intercambian mayúsculas y minúsculas? Eso es probablemente más largo, en realidad.
xnor

6

Julia, 74 61 47 bytes

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

Esta es una función lambda que acepta una cadena y devuelve una cadena. Para llamarlo, asígnelo a una variable.

Emparejamos cada letra usando una expresión regular y reemplazamos cada letra con el carácter ASCII correspondiente a 31 XOR el código ASCII para la letra, menos 4.


Wow, esto es muy elegante. Recibo una advertencia de desaprobación por $lo que es posible que desee actualizar eso . No sabía que puedes usar una función en replace.
niczky12

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]);}}

Esta función simplemente convierte char a int y agrega el desplazamiento apropiado al int antes de imprimir. Sé que no es el más corto, pero no vi una implementación en C.

Ejemplo 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;
}

ACTUALIZACIÓN: acortado un nombre de variable.


¡Bienvenido a Programming Puzzles y Code Golf Stack Exchange! Este es un muy buen enfoque. Se podría jugar más al golf haciendo que todas las variables (incluida temp) tengan exactamente un carácter de largo.
wizzwizz4

Ahh tienes razon! Regolf este
Danwakeem

1
¿Crees que podrías probar mi desafío? Analice su silla
wizzwizz4

1
Sí, funcionará sin los encabezados, solo obtienes un aviso de compilación @ edc65, pensé, ya que compila y ejecuta no se consideraría trampa, pero en el uso del mundo real siempre debes incluir los encabezados.
Danwakeem

1
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

Japt, 23 22 bytes

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

Pruébalo en línea!

Cómo 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

Buena idea (que tomé prestada ...) para usar XOR para esto
Luis Mendo

5

C, 64

Una función nula que modifica la cadena en su lugar.

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

Prueba: ideone


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

@CoolGuy bien, pero no me gusta lo global dentro de una función ... soy solo yo
edc65

¿No son estos 64 bytes?
Downgoat

@ Doᴡɴɢᴏᴀᴛ sí, es ... gracias ...
edc65

5

R, 69 61 bytes

Gracias a @Giuseppe por eliminar algunos bytes adicionales:

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

Versión previa:

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

Esta es una función 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.

1
intToUtf8(c(122:97,90:65))en lugar de las rawconversiones, y también puedes deshacerte de ellas cat. Tengo la costumbre de venir al golf con respuestas de más de 1 año ...
Giuseppe

4

En serio, 31 bytes (no competitivos)

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

Hex Dump:

a3a3962bbba352a396522bbc2c603bbda1755744be452858305758604dee6a

Pruébalo en línea

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.)

Acabo de darme cuenta de que la especificación dice que no hay espacios en blanco adicionales, pero no hay forma de suprimir las nuevas líneas finales en la salida de Gravemente, por lo que no hay una solución seria.


1
Que ESACREPPUesacrewolsignifica
Downgoat

3
@ Doᴡɴɢᴏᴀᴛ MAYÚSCULA invertida MINÚSCULA invertida
Mama Fun Roll

2
el alfabeto en mayúscula invertido
antepuso al

4

Rubí, 40 bytes.

Nueva solución: robó ese poco de magia de algunas de las otras publicaciones aquí:

->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 descuento gracias a @manatwork


prueba de funcionamiento:

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


3

𝔼𝕊𝕄𝕚𝕟 2, 12 caracteres / 26 bytes (no competitivo)

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

Try it here (Firefox only).

Se agregó la función transliterar después de que se publicó el desafío.

Explicación

ïĪ(ᶐ+ᶛ,ᶐᴙ+ᶛᴙ // implicit: ï=input
ïĪ(           // transliterate ï...
   ᶐ+ᶛ,       // from uppercase+lowercase alphabet...
       ᶐᴙ+ᶛᴙ  // ... to reversed uppercase+reversed lowercase alphabet
              // implicit output

Pensé que 𝔼𝕊𝕄𝕚𝕟 2 iba a llamarse 𝔼𝕊 ∞?
Downgoat

1
No, decidí guardar eso para un lenguaje complementario (pero diferente) para 𝔼𝕊𝕄𝕚𝕟.
Mama Fun Roll

IIRC Hay una pizarra en negrita 2.
Conor O'Brien

@ ՊՓԼՃՐՊՃՈԲՍԼ Llámalo ESMax (en doble cara).
mbomb007

3

CJam, 21 bytes

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

No es una solución óptima ... todavía ... Pruébelo en línea

Es difícil de explicar sin agrupar cosas, por lo que aquí hay una explicación general: obtiene información, empuja el alfabeto en mayúscula dos veces y en minúscula dos veces, gira las cosas, combina cadenas en mayúscula y minúscula, invierte una y usa transliteración (similar a la respuesta Retina).


¿Esto genera una nueva línea final?
LegionMammal978

@ LegionMammal978 No debería, a menos que aditsu cambie la forma en que se genera la pila.
GamrCorps

@ LegionMammal978 no lo hago.
Martin Ender


3

PostgreSQL, 118125 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

Salida:

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

Entrada: SELECT text'...'s


EDITAR:

Entrada como tabla:

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

SqlFiddleDemo

Salida:

╔══════════════════════════════════╦═════════════════════════════════╗
║                s                 ║            translate            ║
╠══════════════════════════════════╬═════════════════════════════════╣
║ Hello, World!                    ║ Svool, Dliow!                   ║
║ Programming Puzzles & Code Golf  ║ Kiltiznnrmt Kfaaovh & Xlwv Tlou ║
║ abcdefghijklmnopqrstuvwxyz       ║ zyxwvutsrqponmlkjihgfedcba      ║
╚══════════════════════════════════╩═════════════════════════════════╝

Hey lad2025, creo que esto es más corta que 118, pero no soy un experto en las reglas de conteo
t-clausen.dk

2

Python 3, 195 169 168 166 bytes

¡Gracias a @TrangOul por -2 bytes!

¿Cómo no vi que podría haber jugado golf 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()))

(algo así) sin golfista:

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()
))

Pruébalo en Ideone!


1
Puede guardar 2 bytes quitando el más externo []de join.
Trang Oul

@TrangOul realmente? Es una comprensión de la lista, así que pensé que tenía que ser una lista o de lo contrario generator object <genexpr> at..., pero lo probaré
cat

@TrangOul No importa, aprendí algo, ¡gracias!
gato

Cualquier iterable [que contenga strvalores] se puede pasar a la join()función.
Trang Oul

2

Python, 61 bytes

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

Una función anónima. En letras, realiza la operación de inversión en la representación de bits agregando 4 y luego volteando los últimos cinco bits, similar a la respuesta Javascript de ETHproductions .


Acabo de escribir exactamente lo mismo jaja
sagiksp

2

Haskell, 119104 bytes

Guardado 15 bytes gracias 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!"

Explicación

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

Soy nuevo en Haskell ... en la programación funcional ... y en el sitio, y sé que hay (muchas) mejores respuestas a esta pregunta, pero tengan paciencia conmigo.


Algunos consejos de golf: a) no es necesario usar let. Comience directamente con c=fromEnum. Uso (155-c x)y (219-c x). c) Truepuede ser reemplazado por 1<2. - El código no se carga para mí con el error de "variable de tipo ambiguo" para funciones cy s(ghci 7.10.2), pero esto se puede solucionar fácilmente en f[]=""lugar de f[]=[].
nimi

¡Gracias !, me preguntaba si era válido sin "let", ya que no se ejecuta directamente en GHC.
orejas esponjosas

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

Cuando ejecuto esto dice: Warning: Use of "ord" without parentheses is ambiguous at (eval 8)[/System/Library/Perl/5.18/perl5db.pl:732] line 2.No sé nada sobre Perl, ¿estoy haciendo algo mal? ¿Cómo ejecutaría esto?
Downgoat

@ Doᴡɴɢᴏᴀᴛ Si notas que dice que esto está escrito en Perl 6 , puedes ir a # perl6 en freenode y escribirm: my &swap = {S:g/\w/{chr $/.ord+4+^31}/}; say swap ('a'..'z').join
Brad Gilbert b2gills

Ah bien, aparentemente no puedo leer: P
Downgoat

@ Doᴡɴɢᴏᴀᴛ agregué una nota de que puedes probarlo en # perl6 en 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);}}

Ejemplo 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"
  }
}

Probablemente el peor lenguaje comúnmente utilizado en términos de tamaño de byte.



Sé que esto se publicó hace aproximadamente un año y medio, pero puedes jugar al golf varias cosas 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

O incluso más corto: 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

1
@KevinCruijssen También puede reorganizar los cálculos para negar la necesidad de paréntesis, al hacer 90-(c-65)en -c+65+90 y 122-(‌​c-97)en -c+97+122, lo que ahorra un byte cada uno.
Zavada

2

Unix shell + tr + printf, 35 bytes

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

Aquí tienes una respuesta canónica en tr. Pensé cómo podría una pregunta a transcribir el alfabeto ir sin una respuesta canónica a tr ansliterate el alfabeto?

tr por sí mismo ni siquiera hace un "¡Hola, mundo!" y como tal no es un lenguaje de programación, entonces marqué la respuesta como no competitiva [1] .

[1]: Editar: en realidad, Unix shell es el lenguaje y tr es la biblioteca estándar . Gracias a Downgoat y Digital Trauma por ayudarme a detectar esto.


3
Creo que está bien reclamar shell o bash como lenguaje, y utilidades comunes ( trestá en coreutils) como la biblioteca estándar. Ver innumerables de mis respuestas ;-)
Digital Trauma

1
Pero no funciona: tr: range-endpoints of 'Z-A' are in reverse collating sequence order. Creo que tienes que hacer algo como tr A-Za-z $(printf %s {Z..A} {z..a})(y reemplazar $( )con backticks)
Digital Trauma

@DigitalTrauma pero no todos tienen printf en su sistema.
user48538

77
Creo que sería bastante difícil encontrar un sistema Unix que no tenga printf, después de todo, está especificado por Posix . También es una compilación en bash que es bastante omnipresente en estos días. De todos modos, tener algo preinstalado en el sistema de todos no es un requisito previo para el golf de código : tampoco todos tienen CJam en su sistema ;-)
Digital Trauma

1
Se requiere el espacio entre }y {, de lo contrario, la expansión se convierte en algo así comoZz Zy Zx ... Za Yz ... Aa
Digital Trauma el


1

MATL , 21 28 bytes

Utiliza la versión 6.0.0 , que es anterior a este desafío. El código se ejecuta en Octave.

jttk2Y2mXK)o31Z~4-cK(

Ejemplo

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

Explicación

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

Enfoque antiguo, 28 bytes

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

1

MATLAB, 61 bytes

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

Lo intenté f=@ismember, y haciendo que el rango sea a=65:90una variable y lo hago 32+aen la segunda ismemberllamada. Todo esto acortó el código, pero resultaría en un programa y por lo tanto requeriría ambos dispy input.

Esto da:

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

ans('Programming Puzzles & Code Golf')
ans =
Kiltiznnrmt Kfaaovh & Xlwv Tlou

1

Brachylog , 66 bytes

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

La falta de funciones integradas realmente duele aquí, por lo que tenemos que recurrir a buenos cálculos de códigos ASCII.

El predicado brachylog_mainespera una cadena de códigos de caracteres como entrada y sin salida, p. Ej.brachylog_main(`Hello, World!`,_).

Explicación

_                                                                  § 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    

1

Perl 6, 40 39 bytes

Como todos los demás están haciendo funciones anónimas:

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

(Gracias @ b2gills por el consejo)

Utiliza el mismo vudú que algunas de las otras publicaciones. No estaba seguro de incluir la declaración de variable / función en el recuento de bytes, así que lo hice por si acaso. Sin ella, esta solución tiene solo 34 bytes.

Uso:

> f "zyxwvutsrqponmlkjihgfedcba"
abcdefghijklmnopqrstuvwxyz
> f "Kiltiznnrmt Kfaaovh & Xlwv Tlou"
Programming Puzzles & Code Golf
> f "Svool, Dliow!"
Hello, World!

Puedes usar *.trans(…)para hacerlo más corto.
Brad Gilbert b2gills

1

Python 3, 164159 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.