Tausche das Alphabet aus


48

In dieser Herausforderung werden Sie „Umkehren“ das Alphabet oder Swapping sein a-zmit z-a. Dies ist allgemein als Atbash- Chiffre bekannt.

Da durch diese Umwandlung die Ausgabe wie eine Fremdsprache aussieht, muss Ihr Code so kurz wie möglich sein.


Beispiele

abcdefghijklmnopqrstuvwxyz
zyxwvutsrqponmlkjihgfedcba

Programming Puzzles & Code Golf
Kiltiznnrmt Kfaaovh & Xlwv Tlou

Hello, World!
Svool, Dliow!

Spezifikation

  • Die Eingabe kann mehrere Zeilen enthalten und nur ASCII-Zeichen enthalten
  • Der Ausgabe sollte kein zusätzliches Leerzeichen hinzugefügt werden
  • Koffer muss aufbewahrt werden

Bestenliste


Das ist also gewinnt der kürzeste Code in Bytes


24
+1 für die Begründung "Da die Ausgabe durch diese Umwandlung wie eine Fremdsprache aussieht, muss Ihr Code so kurz wie möglich sein."
Katze

11
Einige Kleinigkeiten: Dies ist Atbash , eine bekannte Chiffre, die so alt ist wie die Bibel.
Jacob

6
"Da durch diese Umwandlung die Ausgabe wie eine Fremdsprache aussieht, muss Ihr Code so kurz wie möglich sein." Was ist das für eine Logik? Da Ihre Beschreibung ungefähr so ​​viele Fragezeichen aufwirft, als ob sie in einer Fremdsprache geschrieben wäre, sollte Ihre Antwort auf diese Frage in verständlicher natürlicher Sprache sein, und eine gewisse Ausführlichkeit wird geschätzt.
Bart

Kiltiznnrmt Kfaaovh & Xlwv Tlou sollte die neue Seite für "Programming Trivials & Code Bowling" sein ...
Erik the Outgolfer

Warum erlauben Sie kein zusätzliches Leerzeichen? Das macht es in einigen Sprachen unmöglich, dass immer ein Zeilenumbruch folgt. Ich kann nicht sehen, dass es der Herausforderung etwas hinzufügt.
Esolanging Fruit

Antworten:


11

Pyth, 8 Bytes

XXzG)rG1

@xnor schlug diesen einfacheren Ansatz für @ FryAmTheEggmans Pyth-Antwort vor, dann übersetzte ich ihn in Pyth.

Hierbei wird das praktische Verhalten von X(translate) verwendet, wenn nur zwei Argumente angegeben werden: Es wird vom zweiten Argument in das umgekehrte zweite Argument übersetzt. Wir tun dies zuerst mit dem Kleinbuchstaben ( G) und dann mit Großbuchstaben G.


16

C 59 Bytes

Es tut mir leid, dass ich C wieder aufrief, aber ich war etwas enttäuscht, dass hier nur C- Funktionen angezeigt wurden. Ich hatte den Eindruck, dass OP ein brauchbares Produkt suchte.

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

Kompiliert auf Ubuntu 14.04 mit einem einfachen:

cc swalpha.c

Die resultierende ausführbare Datei liest eine beliebige Anzahl von Zeilen aus stdin und schreibt das Ergebnis in stdout.

Vielen Dank an so viele andere Poster für den XOR-Trick.


11

CJam, 17 Bytes

Ich wollte GamrCorps beim Golfspielen seiner CJam-Lösung unterstützen, aber das Ergebnis war so unterschiedlich, dass ich mich entschied, eine separate Antwort zu geben.

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

Probieren Sie es online aus.

Erläuterung

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.

4
Nun, ich bin froh, dass du versucht hast zu helfen! Das ist die Lösung, die ich machen wollte, ich konnte die XOR einfach nicht herausfinden. Gute Arbeit!
GamrCorps

1
Die Syntax-Hervorhebung von SE hasst esolangs.
Cyoce

@Cyoce Sie haben wahrscheinlich keine Zeit; angegeben, wie viele Sprachen auf dieser Website sind. Das heißt, CJam ist wahrscheinlich eines der einfacheren, da es sich nicht selbst modifiziert und eine ziemlich klare Struktur hat. Ich würde gerne sehen, wie sie versuchen, einer sich selbst modifizierenden Sprache wie /// Syntax-Hervorhebungen hinzuzufügen.
Esolanging Fruit

@ Challenger5 afaik, die Syntax-Hervorhebung benutzt nur Googles Prettify, Unterstützung für verschiedene Esolangs müsste dort hinzugefügt werden.
Martin Ender

11

JavaScript (ES6), 69 bis 67 Byte

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

Verwendet die gleiche Strategie wie meine Japt-Antwort :

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.

Verfluche deine unglaublich langen Eigentumsnamen, JS ...


1
+1 für die Erwähnung der unerträglich langen Eigentumsnamen von JS. Mein Favorit ist immer noch der berüchtigtedocument.getElementById
Cyoce

2
@Cyoce Versuchen Sie, document.getElementsByClassNameoder, auf Firefox und Chrome,document.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
Ismael Miguel

Dies scheint nur 66 Bytes zu sein, nicht 67
Downgoat

@ Doᴡɴɢᴏᴀᴛ Da hast du recht, danke!
ETHproductions

Anscheinend fehlt Ihnen eine schließende Klammer am Ende des Golf-Codes.
Starbeamrainbowlabs

10

Retina , 17 14 13 Bytes

Code:

\T`w`_dZ-Az-a

Erläuterung:

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

Dies erledigt einige magische Dinge und schließt die Aufgabe ab.

Probieren Sie es hier aus .


2
Zum Glück habe ich kürzlich hinzugefügt \. Leider bin ich noch nicht dazu gekommen, Zeichenklassen für Buchstaben und umgekehrte Zeichenklassen hinzuzufügen.
Martin Ender

@ MartinBüttner Sehr glücklich, dass meine Antwort fast ungültig wurde :)
Adnan

Als Referenz können Sie ab Retina 0.7.2 dies tun \T`lL`RlRL.
Martin Ender

9

Pyth, 10 9

uXGr;H)2z

Vielen Dank an Jakube für das Speichern eines Bytes mit dem neuen Feature von ;!

Test Suite

Eine kurze Erläuterung: Die Verringerung der Eingangs über die Zahlen 0 und 1. Der Betrieb beginnen durchzuführen ist , die Kleinbuchstaben übersetzen entweder mit r...0oder r...1welche die unteren und oberen Funktionen aus Python bzw. aufgebracht, und dann umgekehrt.


1
9 Bytes aufgrund einer neuen Funktion (nicht einmal einen Tag alt):uXGr;H)2z
Jakube

5
Können Sie eine Erklärung hinzufügen?
TanMath

1
Kannst du nicht Xmit dem Alphabet und dann mit dem großgeschriebenen Alphabet verwenden?
3.

1
@xnor XXzG)rG1? Das scheint zu funktionieren.
Lirtosiast

Oder wird X in Klein- und Großbuchstaben verkettet und dann die Groß- / Kleinschreibung vertauscht? Das ist wahrscheinlich länger.
xnor

6

Julia, 74 61 47 Bytes

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

Dies ist eine Lambda-Funktion, die eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.

Wir vergleichen jeden Buchstaben mit einem regulären Ausdruck und ersetzen jeden Buchstaben durch das ASCII-Zeichen, das 31 XOR dem ASCII-Code für den Buchstaben minus 4 entspricht.


Wow, das ist sehr elegant. Ich erhalte eine Warnung vor Verfall, $daher möchten Sie diese möglicherweise auf den neuesten Stand bringen . Ich wusste nicht, dass Sie eine Funktion in verwenden können 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]);}}

Diese Funktion konvertiert nur char in int und fügt dem int vor dem Drucken den entsprechenden Offset hinzu. Ich weiß, dass es nicht die kürzeste ist, aber ich habe keine C-Implementierung gesehen.

Anwendungsbeispiel

#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: Ein Variablenname wurde gekürzt.


Willkommen beim Programmieren von Rätseln und beim Code Golf Stack Exchange! Dies ist ein sehr guter Ansatz. Es könnte mehr Golf gespielt werden, indem alle Variablen (einschließlich temp) genau ein Zeichen lang gemacht werden.
wizzwizz4

Ahh du hast recht! Ich werde diesen einen
regolf

1
Glaubst du, du könntest meine Herausforderung annehmen? Analysieren Sie Ihren Stuhl
wizzwizz4

1
Ja, es wird funktionieren, ohne dass die Überschriften angezeigt werden. Es wird nur eine Compiler-Warnung ausgegeben.
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

Probieren Sie es online!

Wie es funktioniert

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

Schöne Idee (die ich ausgeliehen habe ...), XOR dafür zu verwenden
Luis Mendo

5

C 64

Eine Void-Funktion, mit der die Zeichenfolge geändert wird.

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

Test: ideone


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

@CoolGuy richtig, aber ich mag das globale in einer Funktion nicht ... es ist nur ich
edc65

Sind das nicht 64 Bytes?
Downgoat

@ Doᴡɴɢᴏᴀᴛ ja, es ist .. danke ..
edc65

5

R 69 61 Bytes

Vielen Dank an @ Giuseppe für das Abschneiden einiger zusätzlicher Bytes:

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

Vorherige Version:

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

Dies ist eine anonyme Funktion. Verwendungszweck:

> 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))anstelle der rawKonvertierungen, und Sie können die auch loswerden cat. Ich mache es mir zur Gewohnheit, Golf zu spielen. Antworten von mehr als einem Jahr ...
Giuseppe

4

Im Ernst, 31 Bytes (nicht konkurrierend)

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

Hex Dump:

a3a3962bbba352a396522bbc2c603bbda1755744be452858305758604dee6a

Probieren Sie es 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.)

Ich habe gerade festgestellt, dass die Spezifikation kein zusätzliches Leerzeichen enthält, aber es gibt keine Möglichkeit, nachgestellte Zeilenumbrüche in der seriösen Ausgabe zu unterdrücken, sodass es keine seriöse Lösung gibt.


1
Was heißt ESACREPPUesacrewoldas?
Downgoat

3
@ Doᴡɴɢᴏᴀᴛ UPPERCASE umgekehrt LOWERCASE umgekehrt
Mama Fun Roll

2
das umgekehrte Großbuchstaben vor dem umgekehrten Kleinbuchstaben
Quintopia

4

Ruby, 40 Bytes

Neue Lösung: Stola das bisschen Flipping Magic von einigen der anderen Beiträge hier:

->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*''}

Dank @manatwork 9 Bytes weniger


Testlauf:

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


3

𝔼𝕊𝕄𝕚𝕟 2, 12 Zeichen / 26 Byte (nicht wettbewerbsfähig)

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

Try it here (Firefox only).

Transliterate-Funktion hinzugefügt, nachdem die Herausforderung veröffentlicht wurde.

Erläuterung

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

Ich dachte, 𝔼𝕊𝕄𝕚𝕟 2 würde 𝔼𝕊 𝔼𝕊 heißen?
Downgoat

1
Nein, ich habe beschlossen, das für eine ergänzende (aber andere) Sprache für 𝔼𝕊𝕄𝕚𝕟 zu speichern.
Mama Fun Roll

IIRC Es gibt eine Tafel fett 2.
Conor O'Brien

@ ՊՓԼՃՐՊՃՈԲՍԼ Nenne es ESMax (im Doppelpack).
mbomb007

3

CJam, 21 Bytes

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

Noch keine optimale Lösung ... Probieren Sie es online aus

Es ist schwer zu erklären, ohne Dinge zu gruppieren, daher hier eine allgemeine Erklärung: Erhält Eingaben, drückt Großbuchstaben zweimal und Kleinbuchstaben zweimal, dreht Dinge, kombiniert Groß- und Kleinbuchstaben, kehrt eine um und verwendet Transliteration (ähnlich der Retina-Antwort).


Gibt dies eine nachgestellte Newline aus?
LegionMammal978

@ LegionMammal978 Es sollte nicht sein, es sei denn, aditsu hat geändert, wie der Stack ausgegeben wird.
GamrCorps

@ LegionMammal978 habe ich nicht.
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

Ausgabe:

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

Eingang: SELECT text'...'s


BEARBEITEN:

Eingabe als Tabelle:

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

SqlFiddleDemo

Ausgabe:

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

Hey lad2025, ich denke, das ist kürzer als 118, aber ich bin kein Experte in den
Zählregeln

2

Python 3, 195 169 168 166 Bytes

Danke an @TrangOul für -2 Bytes!

Wie habe ich nicht gesehen, dass ich das schon mal hätte spielen können?

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

Probieren Sie es auf Ideone!


1
Sie können durch das Entfernen der äußersten 2 Bytes speichern []aus join.
Trang Oul

@TrangOul wirklich? Es ist ein Listenverständnis, also dachte ich, es muss eine Liste sein, sonst bekommst du es generator object <genexpr> at..., aber ich werde es testen
Katze

@TrangOul Nevermind, ich habe etwas gelernt, danke!
Katze

Jedes iterable [mit strWerten] kann an join()function übergeben werden.
Trang Oul


2

Haskell, 119 104 Bytes

Dank @nimi 15 Byte gespeichert.

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

Verwendungszweck:

f "abcdefghijklmnopqrstuvwxyz"
"zyxwvutsrqponmlkjihgfedcba"

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

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

Erläuterung

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

Ich bin neu in Haskell ... in der funktionalen Programmierung ... und in der Site, und ich weiß, dass es (viele) bessere Antworten auf diese Frage gibt, aber ich kann es nicht lassen.


Einige Golftipps: a) Keine Verwendung erforderlich let. Beginnen Sie direkt mit c=fromEnum. Verwenden Sie (155-c x)und (219-c x). c) Truekann ersetzt werden durch 1<2. - Der Code kann für mich nicht mit dem Fehler "Ambigious Type Variable" für Funktionen cund s(ghci 7.10.2) geladen werden, aber dies kann einfach mit f[]=""statt behoben werden f[]=[].
nimi

Danke !, ich habe mich gefragt, ob es ohne "let" gültig ist, da es nicht direkt auf GHC läuft.
flauschige Ohren

2

Perl 6 , 28 Bytes

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

Verwendungszweck:

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

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

say swap ('a'..'z').join
# zyxwvutsrqponmlkjihgfedcba

Wenn ich das hier starte, heißt es: Warning: Use of "ord" without parentheses is ambiguous at (eval 8)[/System/Library/Perl/5.18/perl5db.pl:732] line 2.Ich weiß nichts über Perl, mache ich also etwas falsch? Wie würde ich das machen?
Downgoat

@ Doᴡɴɢᴏᴀᴛ Wenn Sie bemerken, dass dies in Perl 6 steht, können Sie auf freenode zu # perl6 gehen undm: my &swap = {S:g/\w/{chr $/.ord+4+^31}/}; say swap ('a'..'z').join
Brad Gilbert b2gills

Ah okay, anscheinend kann ich nicht lesen: P
Downgoat

@ Doᴡɴɢᴏᴀᴛ Ich habe einen Hinweis hinzugefügt, dass Sie es auf # perl6 auf freenode testen können
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);}}

Anwendungsbeispiel:

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

In Bezug auf die Bytegröße wahrscheinlich die am schlechtesten verwendete Sprache.



Ich weiß, dass dies vor etwa 1,5 Jahren gepostet wurde, aber Sie können so einiges 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);}
golfen

Oder noch kürzer: 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 Sie können die Berechnungen auch neu anordnen, um die Notwendigkeit von Klammern zu beseitigen, indem Sie 90-(c-65)in -c+65+90 und 122-(‌​c-97)in setzen -c+97+122, wodurch jeweils ein Byte gespeichert wird.
Zavada

2

Unix-Shell + tr + printf, 35 Bytes

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

Hier sind Sie, eine kanonische Antwort in tr. Ich dachte , wie könnte eine Frage ohne Antwort kanonischer das Alphabet gehen transkribieren zu tr ansliterate das Alphabet?

tr alleine macht noch nicht mal ein "Hallo Welt!" und als solche ist es keine Programmiersprache, deshalb habe ich die Antwort als nicht konkurrierend markiert [1] .

[1]: Bearbeiten: Tatsächlich ist die Unix-Shell die Sprache und tr die Standardbibliothek . Vielen Dank an Downgoat und Digital Trauma, die mir geholfen haben, dies herauszufinden.


3
Ich denke, es ist in Ordnung, Shell oder Bash als Sprache und allgemeine Dienstprogramme ( trin Coreutils) als Standardbibliothek zu beanspruchen . Siehe unzählige meiner Antworten ;-)
Digital Trauma

1
Aber es funktioniert nicht: tr: range-endpoints of 'Z-A' are in reverse collating sequence order. Ich denke, Sie müssen etwas tun tr A-Za-z $(printf %s {Z..A} {z..a})(und durch $( )Backticks ersetzen )
Digital Trauma

@DigitalTrauma, aber nicht jeder hat printf auf seinem System.
User48538

7
Ich denke , man müßte eine ziemlich harte Zeit ein Unix - System zu finden , das nicht über printf- immerhin sein durch Posix angegeben . Es ist auch eine eingebaute Bash, die heutzutage ziemlich allgegenwärtig ist. Unabhängig davon, dass auf jedem System etwas vorinstalliert ist, ist keine Voraussetzung für Code-Golf - nicht jeder hat CJam auf seinem System ;-)
Digital Trauma

1
Der Abstand zwischen }und {wird benötigt - sonst wird die Erweiterung zu etwas ähnlichemZz Zy Zx ... Za Yz ... Aa
Digitales Trauma


1

MATL , 21 28 Bytes

Verwendet Version 6.0.0 , die älter als diese Herausforderung ist. Der Code läuft in Octave.

jttk2Y2mXK)o31Z~4-cK(

Beispiel

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

Erläuterung

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

Alter Ansatz, 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),'']

Ich habe versucht f=@ismember, den Bereich a=65:90variabel zu machen und 32+aim zweiten ismemberAufruf zu tun. All dies verkürzte den Code, würde aber zu einem Programm führen und somit sowohl dispund erfordern input.

Das gibt:

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&

Der Mangel an eingebauten Funktionen tut hier wirklich weh, daher müssen wir auf gute alte ASCII-Coderechnungen zurückgreifen.

Das Prädikat brachylog_mainerwartet eine Zeichenkette als Eingabe und keine Ausgabe, zbrachylog_main(`Hello, World!`,_).

Erläuterung

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

Da alle anderen anonymen Funktionen ausführen:

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

(Danke @ b2gills für den Tipp)

Verwendet dasselbe Bit, das Voodoo umdreht wie einige der anderen Posts. Ich war mir nicht sicher, ob ich die Variablen- / Funktionsdeklaration in die Byteanzahl aufnehmen sollte, also tat ich es nur für den Fall. Ohne es ist diese Lösung nur 34 Bytes.

Verwendungszweck:

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

Sie können verwenden *.trans(…), um es kürzer zu machen.
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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.