알파벳 교체


48

이 도전에서, 당신은 알파벳을 "반전 시키거나"로 바꿀 것 a-z입니다 z-a. 이것을 일반적으로 Atbash 사이퍼라고합니다.

이 변환은 출력을 외국어처럼 보이게하므로 코드는 가능한 짧아야합니다.


abcdefghijklmnopqrstuvwxyz
zyxwvutsrqponmlkjihgfedcba

Programming Puzzles & Code Golf
Kiltiznnrmt Kfaaovh & Xlwv Tlou

Hello, World!
Svool, Dliow!

사양

  • 입력은 여러 줄을 포함 할 수 있으며 ASCII 전용입니다.
  • 어떤 추가 공백은 출력에 추가되지해야한다
  • 사례 보존 해야 합니다

리더 보드


이것은 이므로 바이트 단위의 가장 짧은 코드가 승리합니다.


24
정당화를위한 +1 "이 변환으로 결과물이 외국어처럼 보이기 때문에 코드는 가능한 짧아야합니다."
고양이

11
일부 퀴즈 : 이것은 성경만큼 오래된 것으로 알려진 암호 인 Atbash 입니다.
Jacob

6
"이 변환으로 출력이 외국어처럼 보이기 때문에 코드는 가능한 짧아야합니다." 어떤 논리입니까? 귀하의 설명이 외국어로 작성된 것처럼 많은 물음표를 제기하기 때문에이 질문에 대한 귀하의 답변은 이해하기 쉬운 자연 언어로되어 있어야하며 약간의 자세한 설명이 필요합니다.
Bart

Kiltiznnrmt Kfaaovh & Xlwv Tlou는 "사소한 프로그래밍 및 코드 볼링"을위한 새로운 사이트가되어야합니다.
Erik the Outgolfer

추가 공백을 허용하지 않는 이유는 무엇입니까? 따라서 항상 새로운 줄 바꿈이있는 일부 언어에서는 불가능합니다. 나는 도전에 무언가를 추가하는 것을 볼 수 없습니다.
Esolanging 과일

답변:


11

Pyth, 8 바이트

XXzG)rG1

@xnor는 @FryAmTheEggman의 Pyth 답변에 대한이 간단한 접근 방식을 제안한 다음 Pyth로 번역했습니다.

이것은 X두 개의 인수 만 주어질 때 (번역) 의 편리한 동작을 사용합니다 : 두 번째 인수에서 반대의 두 번째 인수로 변환합니다. 먼저 소문자 알파벳 ( 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 2019 년

1
SE의 구문 강조는 esolangs를 싫어합니다.
Cyoce

@Cyoce 아마도 시간이 없을 것입니다. 이 사이트에 몇 개의 언어가 있는지 CJam은 아마도 자체 수정이 아니며 꽤 명확한 구조를 가지고 있기 때문에 아마도 더 쉬운 것 중 하나 일 것입니다. ///와 같은 자체 수정 언어에 구문 강조 표시를 추가하려고합니다.
Esolanging 과일

@ Challenger5 afaik, 구문 강조는 Google의 prettify를 사용하므로 다양한 esolang을 지원해야합니다.
Martin Ender

11

자바 스크립트 (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.

엄청나게 긴 재산 이름을 저주하십시오.


1
JS의 엄청나게 긴 속성 이름을 언급하면 ​​+1입니다. 내가 가장 좋아하는 것은 여전히 ​​악명 높은document.getElementById
Cyoce

2
@Cyoce document.getElementsByClassNameFirefox 또는 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 정말 운이 좋으니까, 거의 내 대답을 무효화했습니다 :)
Adnan

참고로 Retina 0.7.2부터 할 수 있습니다 \T`lL`RlRL.
Martin Ender

9

피스, 10 9

uXGr;H)2z

새로운 기능으로 바이트를 저장 해준 Jakube에게 감사드립니다 ;!

테스트 스위트

빠른 설명 : 수치 0과 1을 수행 할 수있는 동작을 통해 입력을 시작 줄이는 것은 하나와 소문자 알파벳 번역하다 r...0거나 r...1하는 파이썬 상하부 함수는 각각 적용된 다음 역.


1
새로운 기능으로 인해 9 바이트 (하루 전날조차도) :uXGr;H)2z
Jakube

5
설명을 추가 할 수 있습니까?
TanMath

1
X알파벳과 대문자를 함께 사용할 수 없습니까 ?
xnor

1
@xnor XXzG)rG1? 작동하는 것 같습니다.
lirtosiast

또는 소문자와 대문자 알파벳의 X를 연결 한 다음 대소 문자를 바꿉니 까? 실제로는 아마도 더 길 것입니다.
xnor

6

줄리아, 74 61 47 바이트

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

문자열을 받아들이고 문자열을 반환하는 람다 함수입니다. 호출하려면 변수에 지정하십시오.

정규식을 사용하여 각 문자를 일치시키고 각 문자를 31의 XOR에 해당하는 ASCII 문자 인 -4의 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;
}

업데이트 : 변수 이름이 단축되었습니다.


프로그래밍 퍼즐과 코드 골프 스택 교환에 오신 것을 환영합니다! 이것은 매우 좋은 접근 방법입니다. 모든 변수 (를 포함하여 temp)를 정확히 한 문자 길이 로 만들어 골프를 더 많이 벌 수 있습니다 .
wizzwizz4

아 맞아! 나는 이걸 regolf 할 것이다
Danwakeem

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

apt, 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을 사용하는 좋은 아이디어 (내가 빌린 ...)
Luis Mendo

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 바이트 아닌가요?
Downgoat

@ 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+ 년 된 대답을 오는 습관을 조금 만들고 있습니다 ...
Giuseppe

4

진지하게, 31 바이트 (비경쟁)

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

육각 덤프 :

a3a3962bbba352a396522bbc2c603bbda1755744be452858305758604dee6a

온라인으로 사용해보십시오

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

방금 사양에 추가 공백이 없다고 말했지만 심각하게 출력에서 ​​후행 줄 바꿈을 억제하는 방법이 없으므로 심각하게 해결책이 없습니다.


1
무슨 ESACREPPUesacrewol뜻입니까?
Downgoat

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

2
뒤집힌 대문자 알파벳이 뒤집힌 소문자 알파벳 앞에
추가됨

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가 𝔼𝕊 ∞라고 생각 할까?
Downgoat

1
아니요, 𝔼𝕊𝕄𝕚𝕟에 대한 보완 적이지만 다른 언어로 저장하기로 결정했습니다.
Mama Fun Roll

IIRC 칠판 굵은 글씨 2가 있습니다.
Conor O'Brien

@ ՊՓԼՃՐՊՃՈԲՍԼ ESMax (doublestruck)라고합니다.
mbomb007

3

CJam, 21 바이트

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

최적의 솔루션이 아닙니다 ... 아직 ... 온라인으로 사용해보십시오

항목을 그룹화하지 않고 설명하기가 어렵 기 때문에 여기에 일반적인 설명이 있습니다. 입력을 받고 대문자 알파벳을 두 번 소문자로 두 번 밀고 주위를 회전하며 대문자와 소문자 문자열을 결합하고 1을 반대로하고 음역을 사용합니다 (Retina 답변과 유사).


이것이 후행 줄 바꿈을 출력합니까?
LegionMammal978

@ LegionMammal978 aditsu가 스택 출력 방법을 변경하지 않는 한 안됩니다.
GamrCorps

@ LegionMammal978 나는하지 않습니다.
Martin Ender


3

PostgreSQL, 118125 바이트

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

파이썬 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()))

(소르 타) 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.
Trang Oul

@TrangOul 정말? 그것은 목록 이해입니다 그래서 나는 그것이 목록이 필요하다고 생각하거나 당신이 얻을 수 generator object <genexpr> at...있지만, 나는 그것을 테스트 할 것이다
cat

@TrangOul Nevermind, 나는 무언가를 배웠습니다, 감사합니다!
고양이

반복 가능한 [ str값 포함 ]은 join()기능에 전달 될 수 있습니다 .
Trang Oul

2

파이썬, 61 바이트

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

익명의 기능. 글자로, ETHproductions의 Javascript answer 와 유사하게 4를 추가 한 다음 마지막 5 비트를 뒤집어 비트 표현에 대한 반전 작업을 수행합니다 .


방금 똑같은 것을 haha
sagiksp

2

하스켈, 119104 바이트

@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및 " sghci 7.10.2 "에 대한 "모호한 유형 변수"오류와 함께로드되지 않지만 f[]=""대신 이 문제를 쉽게 해결할 수 있습니다 f[]=[].
nimi

고마워요! GHC에서 직접 실행되지 않기 때문에 실제로 "let"없이 유효한지 궁금합니다.
솜털 귀가

2

펄 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.나는 펄에 대해 아무것도 모른다. 그래서 내가 잘못하고 있는가? 어떻게하면 되나요?
Downgoat

@ Doᴡɴɢᴏᴀᴛ를 당신은이 작성된 말한다 발견시 펄 6 당신은 Freenode의 종류에 #의 perl6에 갈 수m: my &swap = {S:g/\w/{chr $/.ord+4+^31}/}; say swap ('a'..'z').join
브래드 길버트는 b2gills

아 괜찮아, 분명히 읽을 수 없어 : P
Downgoat

@ Doᴡɴɢᴏᴀᴛ 난 당신이 Freenode의의 # perl6에서 테스트 할 수있는 노트 추가
브래드 길버트는 b2gills

2

자바, 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 바이트 )
Kevin 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 bytes )
Kevin Cruijssen

1
또한함으로써 괄호에 대한 필요성을 부정하는 계산을 다시 정렬 할 수 있습니다 @KevinCruijssen 90-(c-65)-c+65+90 122-(‌​c-97)-c+97+122바이트 각을 절약 할 수.
Zavada

2

유닉스 쉘 + tr + printf, 35 바이트

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

여기 당신은 tr의 정식 답변입니다. 나는 질문에 표준 대답없이 알파벳 이동 음역 할 수있는 방법을 생각 그럴 필요 ansliterate 알파벳을?

tr 자체만으로는 "Hello, World!" 프로그래밍 언어가 아니기 때문에 대답을 비경쟁으로 표시했습니다 [1] .

[1] : 편집 : 실제로 Unix 쉘 은 언어이고 tr은 표준 라이브러리 입니다. 이것을 알아내는 데 도움을 준 Downgoat와 Digital Trauma에게 감사드립니다.


3
쉘 또는 bash를 언어로 주장하고 일반적인 유틸리티 ( trcoreutils에 있음)를 표준 라이브러리 로 주장하는 것이 좋습니다. 내 답변의 수많은 참조 ;-)
Digital Trauma

1
그러나 작동하지 않습니다 : tr: range-endpoints of 'Z-A' are in reverse collating sequence order. 나는 당신이 뭔가를해야하고 배신으로 tr A-Za-z $(printf %s {Z..A} {z..a})대체 해야한다고 생각합니다$( )
Digital Trauma

@DigitalTrauma는 아니지만 모든 사람이 시스템에 printf를 가지고 있습니다.
user48538

7
난 당신이 꽤 힘든 시간이없는 유닉스 시스템을 찾을 수있을 거라고 생각 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두 번째 ismember호출 에서 수행합니다 . 이 모든 코드를 단축,하지만 프로그램 결과 때문에 모두 필요 dispinput.

이것은 다음을 제공합니다.

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

펄 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

1

파이썬 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.