Alfabeyi Değiştir


48

Bu meydan okuma olarak, alfabe "ters" ya da takas olacak a-zolan z-a. Bu genellikle Atbash şifresi olarak bilinir .

Bu dönüşüm çıktının yabancı dil gibi görünmesini sağladığından, kodunuzun mümkün olduğu kadar kısa olması gerekir.


Örnekler

abcdefghijklmnopqrstuvwxyz
zyxwvutsrqponmlkjihgfedcba

Programming Puzzles & Code Golf
Kiltiznnrmt Kfaaovh & Xlwv Tlou

Hello, World!
Svool, Dliow!

Şartname

  • Giriş birden çok satır içerebilir ve yalnızca ASCII olacaktır
  • Hiçbir ek boşluk çıkışı eklenmelidir
  • Vaka gerekir korunacak

Liderler Sıralaması


Bu , bayt cinsinden en kısa kod kazanır.


24
Gerekçe için +1 "Bu dönüşüm çıktının yabancı dil gibi görünmesini sağladığından, kodunuzun mümkün olduğunca kısa olması gerekir."
kedi,

11
Bazı ıvır zıvır şeyler : Bu Atbash , İncil kadar eski bir şifre.
Jacob

6
"Bu dönüşüm çıktının yabancı dil gibi görünmesini sağladığından, kodunuzun mümkün olduğu kadar kısa olması gerekir." Bu nasıl bir mantık?? Açıklamanız, yabancı bir dilde yazılmış gibi soru işaretlerini artırdığı için, bu soruya vereceğiniz cevabın anlaşılır bir doğal dilde olması ve bazı ayrıntıların anlaşılması gerekir.
Bart

Kiltiznnrmt Kfaaovh & Xlwv Tlou "Trivials & Kod Bowling Programlama" için yeni bir site ... olmalı
Erik Outgolfer

Neden ek boşluklara izin vermiyorsun? Bu, her zaman sonunda yeni bir hatları olan bazı dillerde imkansız hale gelir. Mücadeleye bir şey kattığını göremiyorum.
Esolanging Fruit

Yanıtlar:


11

Pyth, 8 bayt

XXzG)rG1

@xnor, @ FryAmTheEggman'ın Pyth cevabına bu basit yaklaşımı önerdi, ben de Pyth'e tercüme ettim.

Bu Xsadece iki argüman verildiğinde kullanışlı olan (translate) davranışını kullanır : ikinci argümandan ters ikinci argümana çevirir. Bunu önce küçük harfli ( G), sonra büyük harfle yaparız G.


16

C, 59 bayt

C'yi tekrar gündeme getirdiğim için üzgünüm ama burada sadece C işlevlerini görmekten biraz hayal kırıklığına uğradım . OP'nin kullanılabilir bir ürün aradığı izlenimi altındaydım.

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

Ubuntu 14.04'te basit bir şekilde derlendi:

cc swalpha.c

Sonuçta elde edilen çalıştırılabilir dosya stdin'den herhangi bir sayıda satır okur ve sonucu stdout'a yazar.

XOR numarası için diğer birçok afişe teşekkür ederiz.


11

CJam, 17 bayt

GamrCorps'a CJam çözümünü golf etmesine yardım etmek istedim, ancak sonuç o kadar farklı oldu ki ayrı bir cevap vermeye karar verdim.

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

Çevrimiçi deneyin.

açıklama

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
Yardım etmeye çalıştığına sevindim! Yapmaya çalıştığım çözüm buydu, XOR'u çözemedim. İyi iş!
GamrCorps,

1
SE'nin sözdizimi, esolanglardan nefret ediyor.
Cyoce

@Cyoce Muhtemelen vakti yok; Bu sitede kaç tane dil olduğu göz önüne alındığında. Bununla birlikte, CJam muhtemelen kendini değiştirmeyen ve oldukça açık bir yapıya sahip olduğu için en kolaylarından biri. Onları /// gibi kendi kendini değiştiren bir dile sözdizimi vurgulama eklemeye çalıştıklarını görmek isterim.
Esolanging Fruit,

@ Challenger5 afaik, sözdizimi vurgulayan sadece Google'ın güzelliğini kullanır, orada çeşitli esolanların desteklenmesi gerekirdi.
Martin Ender

11

JavaScript (ES6), 69 67 bayt

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

Japt cevabımla aynı stratejiyi kullanır :

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.

İnanılmaz derecede uzun mülk isimlerinize lanet olsun, JS ...


1
JS'nin şaşırtıcı derecede uzun mülk isimlerinden bahsetmek için +1. Benim favorim hala document.getElementById
rezildir

2
@Cyoce document.getElementsByClassNameFirefox ve Chrome'da deneyin ya dadocument.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
Ismael Ismael

Bu sadece 66 bayt gibi görünmüyor - 67
Downgoat

@ Doᴡɴɢᴏᴀᴛ Haklısın, teşekkürler!
ETHProductions

Golf kodunun sonunda bir kapanış dirseği eksik gibi görünüyor.
starbeamrainbowlabs

10

Retina , 17 14 13 bayt

Kod:

\T`w`_dZ-Az-a

Açıklama:

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

Bu, bazı sihirli şeyler yapar ve görevi tamamlar.

Burada dene .


2
Son zamanlarda eklediğim için şanslıyım \. Şanssızsınız ki, harfler ve karakter sınıfları için henüz karakter sınıfları eklemeye başlayamadım.
Martin Ender

@ MartinBüttner Gerçekten çok şanslı, cevabımı neredeyse geçersiz kıldı :)
Adnan

Referans için, Retina 0.7.2'den itibaren yapabilecekleriniz \T`lL`RlRL.
Martin Ender

9

Pyth, 10 9

uXGr;H)2z

Yeni özelliği ile bir bayt tasarrufu için Jakube teşekkürler ;!

Test odası

Hızlı bir açıklama: olarak 0 ve 1, gerçekleştirilecek işlemi üzerinden giriş başlayarak azaltmak ise küçük alfabe çevirmek ya r...0ya da r...1hangi piton göre sırasıyla uygulanmış ve daha sonra ters alt ve üst işlevlerdir.


1
Yeni bir özellik nedeniyle 9 bayt (bir gün bile eski değil):uXGr;H)2z
Jakube,

5
Bir açıklama ekleyebilir misiniz?
TanMath

1
Alfabeyle Xsonra da büyük harfle kullanılamaz mı?
xnor

1
@xnor XXzG)rG1? Bu iş gibi görünüyor.
lirtosiast,

Ya da belki küçük harf ve büyük harf alfabe üzerinde birleştirilmiş, sonra büyük / küçük harf değişimi yapabilir misiniz? Aslında, muhtemelen daha uzun.
xnor

6

Julia, 74 61 47 bayt

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

Bu, bir dizgeyi kabul eden ve bir dize döndüren bir lambda işlevidir. Aramak için değişkene atayın.

Düzenli bir ifade kullanarak her harfi eşleştiririz ve her harfi, eksi 4 olan 31 XOR ASCII koduna karşılık gelen ASCII karakteriyle değiştiririz.


Vay, bu çok zarif. Bunun $için güncelleme uyarısı alıyorum, böylece güncellemek isteyebilirsiniz . İşlevini kullanabileceğinizi bilmiyordum replace.
niczky12

5

C, 150 129 Bayt

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

Bu işlev sadece char'i int'ye dönüştürür ve yazdırmadan önce int'ye uygun ofseti ekler. Bunun en kısa olmadığını biliyorum ama bir C uygulaması görmedim.

Örnek kullanım

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

GÜNCELLEME: değişken adını kısalttı.


Programlama Bulmacaları ve Kod Golf Yığın Değişimine Hoş Geldiniz! Bu çok iyi bir yaklaşım. Tüm değişkenler (dahil temp) tam olarak bir karakter uzunluğunda tutularak daha fazla golf oynayabilir .
wizzwizz4

Ahh haklısın! Bunu regolf edeceğim
Danwakeem

1
Benim meydan okumama devam edebileceğini düşünüyor musun? Sandalyenizi analiz edin
wizzwizz4

1
Evet, başlıklar olmadan çalışacaktır, sadece bir derleyici uyarısı alırsınız @ edc65 Derlediğim ve çalıştırdığı için aldatma olarak kabul edilmeyeceğini düşündüm ama gerçek dünya kullanımında her zaman başlıkları içermelisiniz.
Danwakeem

1
107 bayt: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 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

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

Bunun için XOR kullanmak güzel bir fikir (ki ödünç aldım ...)
Luis Mendo

5

C, 64

Dize yerinde değişiklik yapan geçersiz bir işlev.

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 doğru, ama bir fonksiyonun içindeki global hoşuma gitmiyor ... sadece benim
edc65

Bu 64 bayt değil mi?
Downgoat

@ Doᴡɴɢᴏᴀᴛ evet öyle .. teşekkürler ..
edc65

5

R, 69 61 bayt

Bazı ekstra baytları tıraş ettiğin için @Giuseppe'e teşekkürler :

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

Önceki versiyon:

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

Bu anonim bir işlevdir. Kullanımı:

> 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))rawdönüşümleri yerine , ve ondan da kurtulabilirsiniz cat. Ben senin 1 + yıl eski cevapları golf gelip bir alışkanlık yapıyorum ...
Giuseppe

4

Cidden, 31 bayt (rekabet etmeyen)

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

Hex Dump:

a3a3962bbba352a396522bbc2c603bbda1755744be452858305758604dee6a

Çevrimiçi Deneyin

MTA Dergisi:

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

Spesifikasyonun ek boşluk olmadığını söylediğini fark ettim, ancak cidden çıktıda yeni satırları bastırmanın bir yolu yok, bu yüzden Cidden çözüm yok.


1
Ne ESACREPPUesacrewoldemek istiyorsun?
Downgoat

3
UPPERCASE ters çevrildi LOWERCASE ters çevrildi
Mama Fun Roll

2
ters büyük harfli alfabe ters küçük harfli alfabe hazır
quintopia

4

Yakut, 40 bayt

Yeni çözüm: Buradaki diğer yayınların bazılarından sihir saygısızlığını çaldı:

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

Ruby, 55 46 bayt

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

@ Manatwork sayesinde 9 byte kapalı


test sürüşü:

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

3

Jolf, 15 bayt

~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

Test paketi veya kendi girişinizle deneyin


Bunun için kelime "harf çevirisi", FYI.
bir

3

𝔼𝕊𝕄𝕚𝕟 2, 12 karakter / 26 bayt (rekabetçi olmayan)

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

Try it here (Firefox only).

Mücadelenin yayınlanmasından sonra transliterat fonksiyonu eklendi.

açıklama

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

𝔼𝕊𝕄𝕚𝕟 2'nin “∞” olarak adlandırılacağını düşündüm.
Downgoat

1
Hayır, onu 𝔼𝕊𝕄𝕚𝕟 için tamamlayıcı (ama farklı) bir dil için kaydetmeye karar verdim.
Mama Fun Roll

IIRC Kalın bir kara tahta 2 var.
Conor O'Brien,

@ ESMax olarak adlandırın (çift çekiciyle).
mbomb007

3

CJam, 21 bayt

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

Optimal bir çözüm değil ... henüz ... Çevrimiçi deneyin

Nesneleri gruplamadan açıklamak zor, işte genel bir açıklama: girdi alır, büyük harfli alfabeyi iki kez iter ve küçük harf iki kez döndürür, şeyleri döndürür, büyük harf ve küçük harf dizelerini birleştirir, birini ters çevirir ve harf çevirisi kullanır (Retina cevabına benzer şekilde).


Bu sonuçta yeni bir satır mı çıkıyor?
LegionMammal978 0

@ LegionMammal978 Aditsu yığının çıkış şeklini değiştirmediyse olmaz.
GamrCorps

@ LegionMammal978 Yapmıyorum.
Martin Ender


3

PostgreSQL, 118 125 bayt

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

Çıktı:

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

Giriş: SELECT text'...'s


DÜZENLE:

Tablo olarak giriş:

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

SqlFiddleDemo

Çıktı:

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

Hey lad2025, bunun 118'den kısa olduğunu düşünüyorum, ama sayma kuralları konusunda uzman değilim
t-clausen.dk

2

Python 3, 195 169 168 166 bayt

-2 baytlık @TrangOul 'a teşekkürler !

Bunu daha önce golf oynayabileceğimi nasıl görmedim?

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'da dene!


1
Sen en dışta çıkararak 2 bayt kaydedebilirsiniz []dan join.
Trang Oul,

@TrangOul gerçekten mi? Bu bir liste anlayışı, bu yüzden bir liste olması gerektiğini düşündüm ya da başka bir şey generator object <genexpr> at...
Cat

@TrangOul Nevermind, bir şey öğrendim, teşekkürler!
kedi,

Herhangi bir yinelenebilir [içeren strdeğerler] join()fonksiyona geçirilebilir .
Trang Oul


2

Haskell, 119 104 bayt

@Nimi sayesinde 15 bayt kaydedildi.

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

Kullanımı:

f "abcdefghijklmnopqrstuvwxyz"
"zyxwvutsrqponmlkjihgfedcba"

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

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

açıklama

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'e ... işlevsel programlamaya ... ve siteye yeniyim ve bu soruya daha iyi cevaplar olduğunu biliyorum, ama yanımda.


Bazı golf püf noktaları: a) Kullanmaya gerek yok let. İle doğrudan başlayın c=fromEnum. Kullanım (155-c x)ve (219-c x). c) Trueile değiştirilebilir 1<2. - Kod işlevleri için "kuşkulu tip değişkeni" hatası ile benim için yüklenmemesi cve s(GHCi 7.10.2), ancak bu kolayca ile sabitlenebilir f[]=""yerine f[]=[].
nimi

Teşekkürler !, doğrudan GHC'de çalışmadığı için "izin vermeden" geçerli olup olmadığını merak ediyordum.
kabarık kulaklar,

2

Perl 6 , 28 bayt

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

Kullanımı:

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

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

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

Bunu çalıştırdığımda şunu yazıyor: Warning: Use of "ord" without parentheses is ambiguous at (eval 8)[/System/Library/Perl/5.18/perl5db.pl:732] line 2.perl hakkında hiçbir şey bilmiyorum bu yüzden yanlış bir şey yapıyorum? Bunu nasıl yönetebilirim?
Downgoat

@ Doᴡɴɢᴏᴀᴛ Eğer bunun Perl 6'da yazıldığını fark ederseniz, freenode üzerinde # perl6'ya gidebilir ve yazabilirsinizm: my &swap = {S:g/\w/{chr $/.ord+4+^31}/}; say swap ('a'..'z').join
Brad Gilbert b2gills 5:16

Ah tamam, görünüşe göre okuyamıyorum: P
Downgoat

@ Doᴡɴɢᴏᴀᴛ freenode üzerindeki # perl6 üzerinde test edebileceğiniz bir not ekledim
Brad Gilbert b2gills 5:16

2

Java, 136 bayt

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

Örnek kullanım:

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

Muhtemelen bayt büyüklüğü bakımından en kötü kullanılan dil.



Bunun yaklaşık 1,5 yıl önce gönderildiğini biliyorum, ancak bunun gibi birkaç şeyle golf oynayabilirsiniz: 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 bayt )
Kevin Cruijssen

Veya daha kısa: 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 bayt )
Kevin Cruijssen

1
Ayrıca yaparak parantez ihtiyacını etkisiz hale getirmesine hesaplamaları yeniden düzenleyebilirsiniz @KevinCruijssen 90-(c-65)içine -c+65+90 ve 122-(‌​c-97)içine -c+97+122bir bayt her kazandırır,.
Zavada

2

Unix kabuğu + tr + printf, 35 bayt

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

İşte, tr içinde kanonik bir cevap. Bir soru için kanonik cevabı olmayan alfabe gitmek karşılıklarına nasıl düşündü tr ansliterate alfabe?

tr kendi başına bile "Merhaba, Dünya!" ve bu nedenle bir programlama dili değil, bu yüzden cevabı rakipsiz olarak işaretledim [1] .

[1]: Düzenleme: Aslında, Unix kabuğu dil, tr ise standart kütüphanedir . Downgoat ve Digital Trauma'ya bu durumu fark etmeme yardımcı oldukları için teşekkür ederiz.


3
Bir dil olarak kabuk veya trkısırlık ve standart kütüphane olarak ortak yardımcı programların ( coreutils'te olduğunu) iddia etmenin iyi olduğunu düşünüyorum . Cevaplarımın sayısız olduğuna bakın ;-)
Digital Trauma,

1
Ama çalışmıyor: tr: range-endpoints of 'Z-A' are in reverse collating sequence order. Bence bir şeyler yapmak zorundasınız tr A-Za-z $(printf %s {Z..A} {z..a})(ve $( )sırt çarkları ile değiştirin )
Digital Trauma

@ DigitalTrauma ama herkesin sistemi üzerinde baskı yok.
user48538

7
Bence çok zor bir zaman sahip olmayan bir Unix sistemini bulmakta düşünüyorum printfsonuçta - onun Posix tarafından belirtilen . Ayrıca, bugünlerde oldukça yaygın olan bashta yerleşik bir yapı. Ne olursa olsun, sahip şey herkesin sistemde önceden yüklenmiş için ön koşul değildir kod golf - herkes kendi sisteminde ya ;-) üzerinde CJam sahiptir
Dijital Travma

1
Aradaki }ve {Zz Zy Zx ... Za Yz ... Aa
Digital Trauma,


1

MATL , 21 28 bayt

Bu zorluktan daha eski olan 6.0.0 sürümünü kullanır . Kod Octave'de çalışır.

jttk2Y2mXK)o31Z~4-cK(

Örnek

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

açıklama

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

Eski yaklaşım, 28 bayt

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

1

MATLAB, 61 bayt

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

Denedim f=@ismemberve aralık a=65:90bir değişken yapıp 32+aikinci ismemberaramada yaptım . Bütün bu kodu kısaltılmış ancak bir programın neden olacaktır ve böylece hem ihtiyaç dispve input.

Bu verir:

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

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

1

Brachylog , 66 bayt

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

Yerleşiklerin eksikliği burada gerçekten acı veriyor, bu yüzden eski ASCII kod hesaplamalarına başvurmak zorundayız.

Yüklem brachylog_mainörneğin girdi ve hiçbir çıkış gibi bir karakter kodları dize bekliyorbrachylog_main(`Hello, World!`,_).

açıklama

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

Diğer herkes anonim işlevler yapıyor:

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

(Bahşiş için teşekkürler @ b2gills)

Diğer yazıların bazıları ile aynı bit saygısız vudu kullanır. Değişken / işlev bildirimini bayt sayımına dahil edip etmeyeceğimden emin değildim, bu yüzden tam olarak yaptım. Onsuz bu çözüm sadece 34 bayttır.

Kullanımı:

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

Daha *.trans(…)kısa yapmak için kullanabilirsiniz .
Brad Gilbert b2gills

1

Python 3, 164 159 bayt

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.