アルファベットを入れ替える


48

この課題では、アルファベットを「逆にする」か、で交換a-zz-aます。これは、一般にAtbashサイファーと呼ばれます。

この変換により、出力は外国語のように見えるため、コードはできるだけ短くする必要があります。


abcdefghijklmnopqrstuvwxyz
zyxwvutsrqponmlkjihgfedcba

Programming Puzzles & Code Golf
Kiltiznnrmt Kfaaovh & Xlwv Tlou

Hello, World!
Svool, Dliow!

仕様

  • 入力には複数の行が含まれる場合があり、ASCIIのみになります
  • いかなる 追加の空白が出力に追加すべきではありません
  • 大文字と小文字を区別する必要あります

リーダーボード


これはので、バイト単位の最短コードが勝ちます


24
正当化のための

11
雑学:これはAtbashで、聖書と同じくらい古い暗号です。
ジェイコブ

6
「この変換により、出力が外国語のように見えるため、コードはできるだけ短くする必要があります。」それはどんな論理ですか?? あなたの説明は、外国語で書かれているのと同じくらい多くの疑問符を持っているので、この質問への答えは分かりやすい自然言語である必要があり、ある程度の冗長性は高く評価されます。
バート

Kiltiznnrmt KfaaovhとXlwv Tlouは、「Programming Trivials&Code Bowling」の新しいサイトになります...
Erik the Outgolfer

追加の空白を許可しないのはなぜですか?これにより、常に末尾に改行がある言語では不可能になります。チャレンジに何かを追加しているのが見えません。
エソランジングフルーツ

回答:


11

Pyth、8バイト

XXzG)rG1

@xnorは@FryAmTheEggmanのPythの回答でこの簡単なアプローチを提案し、それをPythに翻訳しました。

これは、X2つの引数のみが指定された場合に(translate)の便利な動作を使用します。2番目の引数から反転した2番目の引数に変換します。これは、最初に小文字のアルファベット(G)で行い、次に大文字で行いますG


16

C、59バイト

Cを再び表示してすみませんが、ここでCの関数だけを見るのは少しがっかりしました。OPは使用可能な製品を探していたという印象を受けました。

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

Ubuntu 14.04で簡単にコンパイル:

cc swalpha.c

結果の実行可能ファイルは、stdinから任意の数の行を読み取り、結果をstdoutに書き込みます。

XORトリックに関する他の多くのポスターに感謝します。


11

CJam、17バイト

GamrCorpsが彼のCJamソリューションをゴルフするのを手伝いたかったのですが、結果が大きく異なったため、別の回答をすることにしました。

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

オンラインでお試しください。

説明

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
まあ、あなたが助けようとしてくれてうれしいです!それが私が作ろうとしていた解決策であり、XORを理解できなかった。良くやった!
GamrCorps

1
SEの構文強調表示は、エソランを嫌います。
チョイス

@Cyoce彼らはおそらく時間がない。このサイトにある言語の数を考えてください。とは言っても、CJamはおそらく簡単なものの1つです。CJamは自己修正型ではなく、かなり明確な構造を持っているからです。///のような自己修正言語に構文強調表示を追加してみてください。
エソランジングフルーツ

@ Challenger5 afaik、構文の強調表示はGoogleのprettifyを使用するだけで、さまざまなエソランのサポートを追加する必要があります。
マーティンエンダー

11

JavaScript(ES6)、69 67バイト

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

私の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.

信じられないほど長いプロパティ名、JS ...


1
JSの耐え難いほど長いプロパティ名に言及するための+1。私のお気に入りはまだ悪名高いdocument.getElementById
チョイス

2
@Cyoce Try document.getElementsByClassNameまたは、FirefoxとChromeではdocument.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
Ismael Miguel

これは、67バイトではなく66バイトであるようです
-Downgoat

@Doᴡɴɢᴏᴀᴛあなたはそれについて正しいです、ありがとう!
ETHproductions

ゴルフコードの最後に閉じブラケットが欠けているようです。
starbeamrainbowlabs

10

網膜17 14 13バイト

コード:

\T`w`_dZ-Az-a

説明:

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

これはいくつかの魔法のことを行い、タスクを完了します。

ここで試してみてください


2
私が最近追加した幸運を\。不幸なことに、私はまだ文字の文字クラスを追加したり、文字クラスを反転したりすることができなかったのです。
マーティンエンダー

@MartinBüttner本当に幸運なことに、私の答えはほとんど無効になりました:)
アドナン

参考までに、Retina 0.7.2の時点でできます\T`lL`RlRL
マーティンエンダー

9

Pyth、10 9

uXGr;H)2z

新しい機能でバイトを保存してくれたJakubeに感謝します;

テストスイート

簡単に説明:実行されるべき数字0および1上の入力で動作を開始減らすのいずれかと小文字のアルファベット変換でr...0又はr...1それぞれのpythonから下部および上部の機能であるが、それに適用され、その後、逆転しました。


1
新機能(1日前でもないため)による9バイト:uXGr;H)2z
ジャクベ

5
説明を追加できますか?
-TanMath

1
Xアルファベットを使用してから大文字のアルファベットを使用することはできませんか?
xnor

1
@xnor XXzG)rG1?それはうまくいくようです。
リルトシアスト

または、小文字のアルファベットと大文字のアルファベットでXを連結してから、大文字と小文字を入れ替えますか?実際にはおそらくもっと長いでしょう。
-xnor

6

ジュリア、74 61 47バイト

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

これは、文字列を受け入れて文字列を返すラムダ関数です。呼び出すには、変数に割り当てます。

正規表現を使用して各文字を照合し、各文字を31のXORに対応するASCII文字で置き換えます。


うわー、これは非常にエレガントです。廃止の警告が表示される$ので、更新することをお勧めします。で関数を使用できることを知りませんでしたreplace
niczky12

5

C、150 129バイト

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

この関数はcharをintに変換し、印刷する前にintに適切なオフセットを追加するだけです。最短ではないことは知っていますが、Cの実装は見当たりませんでした。

使用例

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

更新:変数名を短縮しました。


プログラミングパズルとCode Golf Stack Exchangeへようこそ!これは非常に良いアプローチです。すべての変数(を含むtemp)を正確に1文字にすることで、よりゴルフを楽しむことができます。
wizzwizz4

ああ、あなたは正しい!これを再確認します
ダンワケム

1
あなたは私の挑戦に行くことができると思いますか?あなたの椅子を分析
-wizzwizz4

1
はい、ヘッダーなしで動作します。コンパイルして実行されるため、コンパイラー警告@ edc65が表示されますが、不正とは見なされませんが、実際の使用では常にヘッダーを含める必要があります。
-Danwakeem

1
107バイト: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バイト

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

オンラインでお試しください!

使い方

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

このためにXORを使用するという素晴らしいアイデア(私が借りた...)
ルイスメンドー

5

C、64

所定の場所で文字列を変更するvoid関数。

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

テスト:イデオン


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

@CoolGuy正しいが、関数内のグローバルは好きではない...それは私だけだ
-edc65

これは64バイトではないですか?
ダウンゴート

Doᴡɴɢᴏᴀᴛ@はい、それは感謝..です
edc65は、

5

R、69 61バイト

余分なバイトを削除してくれた@Giuseppeに感謝します。

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

前のバージョン:

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

これは匿名関数です。使用法:

> 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))rawコンバージョンの代わりに、あなたcatも同様に取り除くことができます。私はゴルフを来て、それを習慣のビットを作ってるんだ1+あなたの歳の答えを...
ジュゼッペ

4

真剣に、31バイト(非競合)

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

六角ダンプ:

a3a3962bbba352a396522bbc2c603bbda1755744be452858305758604dee6a

オンラインで試す

説明:

úúû+╗                             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.)

私はちょうど追加の空白はないと言っているのに気付きましたが、シリアスリー出力の末尾の改行を抑制する方法はないため、深刻な解決策はありません。


1
どういうESACREPPUesacrewol意味ですか?
ダウンゴート

3
@Doᴡɴɢᴏᴀᴛ大文字反転小文字反転
ママファンロール

2
反転した小文字のアルファベットの前に反転した大文字のアルファベット
-quintopia

4

ルビー、40バイト

新しい解決策:ここにある他の投稿のいくつかから魔法をひっくり返すことを盗みました:

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

ルビー、55 46バイト

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

@manatworkのおかげで9バイトオフ


テスト走行:

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


3

𝔼𝕊𝕄𝕚𝕟2、12文字/ 26バイト(非競合)

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

Try it here (Firefox only).

チャレンジが投稿された後に音訳機能が追加されました。

説明

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

𝔼𝕊𝕄𝕚𝕟2は𝔼𝕊∞と呼ばれると思いましたか?
ダウンゴート

1
いいえ、私はそれをsaveの補完的な(しかし異なる)言語に保存することにしました。
ママファンロール

IIRCあり黒板大胆2
コナー・オブライエン

@ՊՓԼՃՐՊՃՈԲՍԼESMax(二重線で)と呼びます。
mbomb007

3

CJam、21バイト

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

最適なソリューションではありません...まだ... オンラインで試してください

物事をグループ化せずに説明するのは難しいので、ここに一般的な説明があります:入力を取得し、大文字のアルファベットを2回、小文字を2回押し、物事を回転させ、大文字と小文字の文字列を組み合わせ、1つを逆にし、音訳を使用します(Retinaの回答と同様)。


これは末尾の改行を出力しますか?
LegionMammal978

@ LegionMammal978 aditsuがスタックの出力方法を変更しない限り、そうすべきではありません。
GamrCorps

@ LegionMammal978しません。
マーティンエンダー


3

PostgreSQL、118 125バイト

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

出力:

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

入力: SELECT text'...'s


編集:

テーブルとして入力:

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

SqlFiddleDemo

出力:

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

ちょっとlad2025、これは118より短いと思いますが、私はカウント規則の専門家ではありません
-t-clausen.dk

2

Pythonの3、195の 169 168 166バイト

-2バイトの@TrangOulに感謝します!

以前はゴルフをすることができたとは思わなかったのですか?

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

Ideoneでお試しください!


1
[]から最も外側の部分を削除すると、2バイト節約できますjoin
トランオウル

@TrangOul本当に?私はそれはあなたが得る他のリストまたはにする必要があると思ったので、それはリスト内包だgenerator object <genexpr> at...が、私はそれをテストします

@TrangOul Nevermind、私は何かを学んだ、ありがとう!

反復可能な[ str値を含む]をjoin()関数に渡すことができます。
トランオウル

2

Python、61バイト

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

匿名関数。文字については、ETHproductionsのJavascript answerと同様に、4を追加して最後の5ビットを反転することにより、ビット表現の反転操作を行います


ただ、まったく同じことを書きました(笑)
sagiksp

2

Haskell、119 104バイト

@nimiのおかげで15バイト節約されました。

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

使用法:

f "abcdefghijklmnopqrstuvwxyz"
"zyxwvutsrqponmlkjihgfedcba"

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

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

説明

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

私はHaskellには初めてです...関数型プログラミングに...そしてこのサイトには、この質問に対する(多くの)より良い答えがあることを知っていますが、私は我慢してください。


ゴルフのヒント:a)使用する必要はありませんlet。から直接開始しc=fromEnumます。とを使用(155-c x)(219-c x)ます。c)Trueはに置き換えることができます1<2。-関数cおよびs(ghci 7.10.2)の「ambigious type variable」エラーでコードのロードに失敗しますが、これはのf[]=""代わりに簡単に修正できますf[]=[]
-nimi

おかげで、実際にはGHC上で直接実行されないため、「let」なしで有効かどうか疑問に思っていました。
ふわふわの耳

2

Perl 6、28バイト

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

使用法:

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

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

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

これを実行するとWarning: Use of "ord" without parentheses is ambiguous at (eval 8)[/System/Library/Perl/5.18/perl5db.pl:732] line 2.、perlについて何も知らないので、何か間違ったことをしていますか?これをどのように実行しますか?
ダウンゴート

Doᴡɴɢᴏᴀᴛ@あなたはそれが、これはで書かれていると言うに気付いた場合はPerl 6あなたはfreenodeのとタイプに#Perl6のに行くことができますm: my &swap = {S:g/\w/{chr $/.ord+4+^31}/}; say swap ('a'..'z').join
ブラッド・ギルバートがb2gills

ああ大丈夫、どうやら私は読むことができません:P
Downgoat

@Doᴡɴɢᴏᴀᴛfreenodeの#perl6でテストできるというメモを追加しました
Brad Gilbert b2gills

2

Java、136バイト

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

使用例:

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

おそらく、バイトサイズの点で最悪の一般的に使用される言語です。



私はこれが約1.5年前に投稿されたことを知っていますが、次のような非常に多くのことをゴルフすることができます: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バイト
ケビンCruijssen

またはさらに短く: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バイト
ケビンクルーッセン

1
また、作ることによって、括弧の必要性を否定するために計算を並べ替えることができます@KevinCruijssen 90-(c-65)-c+65+90 122-(‌​c-97)-c+97+122バイトごとに保存します、。
ザヴァダ

2

Unixシェル+ tr + printf、35バイト

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

ここに、trの正解があります。アルファベットを文字変換する質問は、trをアルファベット文字に変換する標準的な答えなしでどうすればいいと思いましたか?

tr自体は、「Hello、World!」も実行しません。そして、それ自体はプログラミング言語ではないので、私は答えを非競合としてマークしました[1]

[1]:編集:実際、Unixシェルは言語であり、trは標準ライブラリです。DowngoatとDigital Traumaに感謝します。


3
シェルまたはbashを言語として主張し、一般的なユーティリティ(trcoreutilsにあります)を標準ライブラリとして主張するのは良いことだと思います。私の答えの無数を参照してください;-)
デジタル外傷

1
しかし、それは機能しません:tr: range-endpoints of 'Z-A' are in reverse collating sequence order。私はあなたが次のようなことをしなければならないと思いますtr A-Za-z $(printf %s {Z..A} {z..a})(そして$( )バックティックに置き換えます)
デジタル外傷

@DigitalTraumaがすべての人が自分のシステムにprintfを持っているわけではありません。
user48538

7
私はあなたが非常に難しい時間がないUnixシステム見つける必要があるだろうと思うprintfすべての後に、 - そのPOSIXで指定します。また、bashに組み込まれていることもあり、最近では非常に普及しています。とにかく、全員のシステムに何かを事前にインストールしておくことは、コードゴルフの前提条件ではありません。誰もがシステムにCJamを持っているわけではありません;-)
Digital Trauma

1
間のスペース}{必要とされるが-それ以外の拡張は次のようになりZz Zy Zx ... Za Yz ... Aa
デジタルトラウマ


1

MATL、21 28バイト

このチャレンジよりも前のバージョン6.0.0を使用します。コードはOctaveで実行されます。

jttk2Y2mXK)o31Z~4-cK(

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

説明

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

古いアプローチ、28バイト

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

1

MATLAB、61バイト

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

私はf=@ismember、範囲a=65:90を変数にし32+aて、2回目のismember呼び出しで試しました。これはすべてコードを短縮しましたが、プログラムになるため、dispとの両方が必要になりinputます。

これは与える:

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

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

1

Brachylog、66バイト

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

ここでは組み込みの欠如が本当に痛いので、古き良きASCIIコードの計算に頼らなければなりません。

述語brachylog_mainは、入力として文字コード文字列を期待し、出力を期待しません。例えばbrachylog_main(`Hello, World!`,_).

説明

_                                                                  § 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バイト

他のみんなが匿名関数をやっているので:

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

(ヒントを@ b2gillsに感謝します)

他の投稿の一部と同じビット反転ブードゥーを使用します。バイトカウントに変数/関数宣言を含めるかどうかわからなかったので、念のために行いました。それなしでは、このソリューションはわずか34バイトです。

使用法:

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

*.trans(…)短くするために使用できます。
ブラッドギルバートb2gills 16

1

Python 3、164 159バイト

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.