전쟁은 평화입니다. 자유는 노예 제도입니다. 무지는 힘이다


69

George Orwell1984 년에 썼던 것처럼 :

전쟁은 평화입니다
자유는 노예 제도입니다
무지는 힘입니다

Orwell 인용문에서 여섯 가지 주요 단어 중 하나를 사용하여 그에 대응하는 프로그램이나 함수를 작성하십시오.

구체적으로 :

[input] -> [output]
war -> peace
peace -> war
freedom -> slavery
slavery -> freedom
ignorance -> strength
strength -> ignorance

다른 입력 / 출력 쌍이 필요하지 않습니다.

위와 같이 단어는 항상 소문자라고 가정해야합니다. 다른 방법으로는 단어는 항상 완전히 대문자한다고 가정 할 수있다 : WAR -> PEACE, PEACE -> WAR, 등

바이트 단위의 가장 짧은 코드가 이깁니다.


10
관련 :-)
xnor

2
@ 데니스 예. 어느 모든 소문자, 또는 모든 대문자입니다.
Calvin 's Hobbies

3
누구든지 이것을 사용하여 문자열을 더 많이 압축 할 수 있는지 모르지만 (Pip에서 점수를 향상 시키지는 못했지만)이 단어의 첫 글자 ( w p f s i)는 다른 단어에서 찾을 수 없습니다. 흥미로운 속성.
DLosc

13
이것은 doubleplusgood 도전입니다
Jojodmo

답변:


58

05AB1E , 30 바이트

05AB1ECP-1252를 사용합니다 .

“ignorance¤í‡î—™šÔÃÒry“#DIk1^è

온라인으로 사용해보십시오! 또는 테스트 스위트

설명

직접적인 접근

  • 끈을 밀어 ignorance strength war peace freedom slavery
  • 공간 분할
  • 목록에서 입력 색인을 가져옵니다.
  • 1로 인덱스 XOR
  • 해당 인덱스의 목록에서 요소를 가져옵니다.

42
모든 단어의 길이보다 14 바이트 짧습니다. 이 언어는 무엇입니까?
DJMcMayhem

65
>ignorance strength war peace freedom slavery 약 12 단계가 빠진 것 같은 느낌 의 줄을 누르십시오 !
Bob


10
"무지"외에 나머지 단어가 어디에서 왔는지 설명 할 수있는 사람이 있습니까?
Carcigenicate

36
05AB1E에는 각각 2 바이트로 표시되는 단어 사전이 내장되어 있습니다. github.com/Adriandmen/05AB1E/blob/master/dictionary.py
Robert Fraser

48

자바 스크립트 (ES6), 80 바이트

s=>'freedom,,war,,strength,,slavery,peace,ignorance'.split`,`[s.charCodeAt(1)%9]

작동 원리

우리는 각 단어의 두 번째 문자의 ASCII 코드를 기반으로 작은 조회 테이블을 사용하여 해당 색인을 반환합니다.

Word      | 2nd char. | ASCII code | MOD 9
----------+-----------+------------+------
war       | a         | 97         | 7
peace     | e         | 101        | 2
freedom   | r         | 114        | 6
slavery   | l         | 108        | 0
ignorance | g         | 103        | 4
strength  | t         | 116        | 8

부수적으로, 대소 문자를 혼합하면 war PEACE FREEDOM slavery IGNORANCE strength모듈로 6과 함께 사용 하면 완벽한 해시가됩니다.

테스트


2
멋진 접근 방식입니다. 그렇게 생각하지 않았을 것입니다.
Carcigenicate

아주 좋아요 나머지는 6, 7, 8로 구분되지 않으므로 9가 필요합니다.
ShreevatsaR

구분 기호를 사용 z하고 문자열을 압축 atob하면 8 바이트 가 절약됩니까?
Downgoat

@Downgoat 32-126 범위를 벗어난 문자에 대해 많은 이스케이프가 필요하지 않습니까?
Arnauld

를 사용 atob하면 대부분 유효한 자바 스크립트 인 문자열을 얻습니다. 결국`\`와 닫는 따옴표 만 이스케이프해야합니다. 이 사이트에 게시하기 어려울 수 있지만 답변이 무효화되지는 않습니다. smis의 펄 답변보기
edc65

32

젤리 , 24 바이트

“Ñ=ƘḊ¹ƥ¹Ƙ⁷ṅ8cøGị»Ḳµiɠ^1ị

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

작동 원리

먼저, 토큰

“Ñ=ƘḊ¹ƥ¹Ƙ⁷ṅ8cøGị»

문자열을 만들기 위해 Jelly의 사전에 색인화

strength war peace freedom slavery ignorance

이는 스트링 어레이를 수득 공간으로 분할

["strength", "war", "peace", "freedom", "slavery", "ignorance"]

µ 해당 문자열 배열을 인수로 사용하여 새로운 반환 체인 인 새로운 모나 딕 체인을 시작합니다.

ɠSTDIN에서 한 줄의 입력을 읽고 i이전 반환 값의 인덱스, 즉 생성 된 문자열 배열을 찾습니다.

이제 ^1해당 인덱스의 비트 XOR과 1 을 가져옵니다 . 심지어 인덱스의 경우 – 젤리 인덱스는 1 기반이며 모듈 식이므로 강도 는 인덱스 1 이고 무지 는 인덱스 6 / 0입니다 . 이는 인덱스를 증가시킵니다. 홀수 인덱스의 경우 감소합니다.

마지막으로, 체인의 인수에서 해당 인덱스의 문자열을 검색합니다.


16

수학, 84 바이트

(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")/#/.x->1/.y->1/.z->1&

설명

문자열이 더 많은 "산술"! 링크 된 답변에서와 같이, 이것은 Mathematica에서 문자열을 "곱셈"하여 평가되지 않은 상태로 두지 만 (할당되지 않은 두 변수를 곱하는 것과 유사 x*y) Mathematica는 나누기의 요인 취소와 같은 기본 단순화를 적용 한다는 사실을 기반으로합니다 .

그래서 우리의 제품으로 세 쌍을 저장하여 시작 x, y, z각각 함께 그들 모두를 곱 :

(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")

이것은 평가

"freedom" "ignorance" "peace" "slavery" "strength" "war"

(Mathematica는 자동으로 요인을 정렬하지만 순서는 신경 쓰지 않습니다.)

Mathematica는 인자를 취소하기 때문에이를 원하지 않는 단어를 제거하기 위해 입력으로 나눕니다 .../#. 예를 들어 입력이 "peace"끝나면 다음과 같이 끝납니다.

"freedom" "ignorance" "slavery" "strength" "war"

마지막으로, 우리는 각각의 대체함으로써, 우리가 관심이있어 쌍을 제거 x, yz과를 1. 다시 말하지만 Mathematica의 단순화 1*a는 항상 그렇습니다 a. 이 부분은 다음과 같이 수행됩니다.

/.x->1/.y->1/.z->1

좋은 점은 Mathematica가 곱셈을 알기 Orderless때문에 제품에서 인접 여부에 관계없이 두 가지 요소를 찾을 수 있다는 것입니다. 입력과 반대되는 단어 만 더 이상 제품에서 쌍을 이루지 않으므로 단어가 제거되지 않고 유일한 출력으로 유지됩니다.


아아, 잘 했어! 로 7 바이트를 잃습니다 WordList[][[<|"l"->14007,"t"->17083,"a"->25105,"r"->32106,"g"->33790,"e"->39048|>@#[[2]]]]&.
Greg Martin

@GregMartin 아, WordList좋습니다. 문자 목록을 입력으로 가져 와서 문자열을 반환하는 것은 다소 까다로운 것처럼 보입니다. ;) 즉, 4 바이트를 더 잘 사용할 수 있습니다 x[[7-Position[x={"war","slavery","ignorance","strength","freedom","peace"},#][[1,1]]]]&.
Martin Ender

나는 당신의 의견에 관심이 있지만, 나에게, 그것은 PP & CG가 승인 한 것 같은 것 같습니다 :)
Greg Martin

또한 <|#->#2&~MapThread~{x={"war","slavery","ignorance","strength","fre‌edom","peace"},Reverse@x}|>94 바이트
Greg Martin

13

Vim, 60 바이트

D3iwar freedom ignorance peace slavery strength <esc>2?<C-r>"
3wdwVp

온라인으로 사용해보십시오! 이전 버전과 호환되는 V 인터프리터에서.

물론 V로 전환한다면 보다 편리한 입력 방법을 사용하여 1 바이트절약 할 수 있습니다. 그러나 이것은 작은 차이이므로 골프가 아닌 버전을 사용하는 것이 좋습니다.

설명:

D                       " Delete this whole line
 3i...<esc>             " Insert the text three times
           2?           " Search backwards twice
             <C-r>"     " For the words we deleted
3w                      " Move three words forward
  dw                    " Delete a word
    V                   " Select this whole line
     p                  " And paste the word we deleted over it

10

C (GCC) , 120 (107) 바이트

f(long*s){long r[2]={0};strcpy(r,s);s=*r>>40?*r>>56?"\n":"":"CE";*r^=*s;r[1]^=69;puts(r);}

최대 포인터 남용! 리틀 엔디안 시스템과 64 비트 길이가 필요합니다.

코드에 인쇄 할 수없는 파일이 몇 개 있지만 복사 붙여 넣기는 여전히 작동합니다.

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


8

파이썬, 81 바이트

l='war peace freedom slavery ignorance strength'.split()
lambda s:l[l.index(s)^1]

또는 같은 길이 :

l='war slavery ignorance strength freedom peace'.split()
dict(zip(l,l[::-1])).get

전체 프로그램 대신 람다를 사용할 때 람바 외부의 변수 정의가 허용됩니까?
smls

1
@smls 예, 이 메타 토론을 참조하십시오 . 그렇지 않은 경우에도 l선택적 인수로 밀수 될 수 있습니다.
xnor

8

펄 6 , 61 바이트

인쇄 할 수없는 문자가 로 표시되는 경우 (StackExchange가 다른 문자를 제거하기 때문에) :

{first {s/^\w+<(\0*$//},["���ce","�������","���
����e"X~^$_]}

다음은 xxd16 진 덤프입니다.

00000000: 7b66 6972 7374 207b 732f 5e5c 772b 3c28  {first {s/^\w+<(
00000010: 5c30 2a24 2f2f 7d2c 5b22 0704 1363 6522  \0*$//},["...ce"
00000020: 2c22 151e 0413 011d 1422 2c22 1a13 1c0a  ,".......","....
00000030: 1c06 1a0b 6522 587e 5e24 5f5d 7d0a       ....e"X~^$_]}.

확장 버전 (인쇄 할 수없는 문자가 이스케이프 시퀀스로 대체되고 공백 및 주석이 추가됨) :

{    # A Lambda.
    first {                   # Return first element which:
        s/ ^ \w+ <( \0* $ //  #   after stripping \0 has only word characters left.
    },
    [                                                  # The array to search:
        "\x[7]\x[4]\x[13]ce",                          #   "war" xor "peace"
        "\x[15]\x[1e]\x[4]\x[13]\x[1]\x[1d]\x[14]",    #   "freedom" xor "slavery"
        "\x[1a]\x[13]\x[1c]\n\x[1c]\x[6]\x[1a]\x[b]e"  #   "ignorance" xor "strength"
        X~^ $_                                         #   each xor'ed with the input.
    ]
}

8

배쉬 , 100 87 86 78 바이트

a=peace;e=war;r=slavery;l=freedom;g=strength;t=ignorance;x=${1:1:1};echo ${!x}

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

각 단어의 두 번째 문자는 해당 단어를 고유하게 식별하므로 해당 문자를 변수 이름으로 사용합니다. 해당 변수의 값은 해당하는 다른 단어입니다.

예를 들어의 두 번째 문자는 peace입니다 e. 이에 해당하는 단어 peacewar입니다 e=war.

입력 문자열이 주어지면 해당 문자열의 두 번째 문자는 변수 이름으로 사용되어 bash의 간접 매개 변수 확장을 사용하여 원하는 해당 단어를 가져옵니다.


8

TI 기본, 103 84 77 바이트

한 줄로 줄이면 많은 바이트가 절약됩니다! 하하, 그 말이 얼마나 아이러니한지 ...

inString("EALRGT",sub(Ans,2,1
sub("WAR  PEACE FREEDOMSLAVERY STRENGTH IGNORANCE ",9Ans+1,4+Ans

7

, 63 바이트

62 바이트 + -p플래그.

$_=(slavery,freedom,ignorance,strength,war,peace)[(ord)%6+/h/]

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

ord입력 단어의 첫 문자의 문자 코드를 반환합니다.
이후에 %6, 우리는 :

-자유 => ord = 102 => % 6 = 0  
-노예 제도 => ord = 115 => % 6 = 1  
-무지 => ord = 105 => % 6 = 3  
-힘 => ord = 115 => % 6 = 1  
-전쟁 => ord = 119 => % 6 = 5  
-평화 => ord = 112 => % 6 = 4  

그래서 우리가 slavery하고 strength모두 반환 한 (둘 다 같은 문자로 시작 이후), 그리고 아무도 따라서 2를 반환하지 않습니다, 우리는 추가 1를 위해 strength(이 일치하는 유일한 단어이다 /h/), 우리는 0에서 인덱스에 매핑 된 각 단어가 5.


6

R, 86 87 92 바이트

익명의 기능과 변경 gsubsub몇 바이트. grep3 개 스트링지를 결정이 사용되고 입력하여 해당 캐릭터로부터 제거된다 sub.

function(v)sub(v,'',(l=c("warpeace","freedomslavery","ignorancestrength"))[grep(v,l)])

5

PHP, 70 바이트

<?=[ignorance,peace,slavery,strength,freedom,war][md5("^$argv[1]")%7];

5

Befunge, 89 88 바이트

<>_00g1v2+%7~%2~"slavery"0"war"0"freedom"0"ignorance"0"strength"0"peace"
 |p00:-<
@>:#,_

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

설명

실행 경로가 강조 표시된 소스 코드

*우리는 가능한 모든 출력 문자열을 스택으로 푸시하여 시작합니다. null로 종료됩니다. 이 시퀀스는 오른쪽에서 왼쪽으로 실행되므로 값이 출력 될 때 문자가 필요한 순서이기 때문에 값이 반대로 바뀝니다.
*그런 다음 stdin에서 처음 두 문자를 읽습니다. 입력 문자열을 식별하는 데 필요한 전부입니다. 첫 번째 문자 mod 2의 ASCII 값과 두 번째 문자 mod 7의 ASCII 값을 취하면 2에서 7 사이의 고유 숫자를 얻습니다.

Input         ASCII      %2 %7   Sum
[fr]eedom     102 114    0  2    2
[pe]ace       112 101    0  3    3
[sl]avery     115 108    1  3    4
[st]rength    115 116    1  4    5
[ig]norance   105 103    1  5    6
[wa]r         119 97     1  6    7

*이 숫자는 스택의 문자열 목록에 대한 일종의 인덱스로 사용될 수 있습니다. 우리는 반복적으로 인덱스를 감소시키고 (처음으로 2 씩), 반복 할 때마다 sequence에서 문자열 하나를 지 웁니다 >_.
*인덱스가 0에 도달하면 스택 맨 위에 올바른 출력 문자열이 남으므로 간단한 문자열 출력 시퀀스를 사용하여 결과를 stdout에 씁니다.


2
내가 사용하는 같은 :-<@>:#"스마일"여기 :)
토비아스 Kienzler

5

파이크, 29 바이트

.d⻌૽ɦڷࠛ⯤dci@1.^iR@

여기 사용해보십시오!

.d⻌૽ɦڷࠛ⯤           -     "war peace freedom slavery ignorance strength"
         dc         -     ^.split(" ")
           i        -    i=^
            @       -   ^.find(input)
             1.^    -  ^ xor 1
                iR@ - input[^]

5

C, 93

@ Arnauld의 답변은 C로 포팅되었습니다.

#define F(w)(char*[]){"freedom",0,"war",0,"strength",0,"slavery","peace","ignorance"}[w[1]%9]

4

C (gcc) , 113108 바이트

f(char*s){char*t="5WAR\0+PEACE\09FREEDOM\0'SLAVERY\0;IGNORANCE\0%STRENGTH";while(strcmp(s,++t));puts(t+*--t-47);}

\0스코어링 목적으로 모든 인스턴스를 실제 NUL 바이트로 대체 할 수 있습니다.

t+*--t-47정의되지 않은 동작입니다. 다른 컴파일러에서는 작동하지 않을 수 있습니다.

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


4

자바 스크립트 (ES6), 71 78

Arnauld의 답변보다 너무 지루하지만 짧습니다.

이제로 인코딩을 추가했습니다 btoa. 인코딩 된 문자열에는 자바 스크립트 문자열의 유효한 문자 인 경우 에도이 사이트에 게시 할 수없는 4 바이트가 있습니다. 그래서 나는 16 진수 이스케이프 형식을 사용했습니다 \xHH. 이 이스케이프 각각은 1 바이트로 계산됩니다.

인코딩 된 문자열은 strength0ignorance0peace0war0slavery0freedom

x=>(w=btoa`²ÚÞ\x9e\x0baÒ('¢¶§qí)y§\x1eÓ\x06«ÒÉZ½êòÑúÞyÚ&`.split(0))[w.indexOf(x)^1]

이것은 82이고 대소 문자를 구분하지 않습니다

x=>',,strength,,slavery,war,,,ignorance,peace,freedom'.split`,`[parseInt(x,36)%15]

테스트

F=
x=>(w=btoa`²ÚÞ\x9e\x0baÒ('¢¶§qí)y§\x1eÓ\x06«ÒÉZ½êòÑúÞyÚ&`.split(0))[w.indexOf(x)^1]

;['freedom','slavery','war','peace','ignorance','strength']
.forEach(w=>console.log(w + ' -> ' + F(w)))


3

CJam, 52 (ASCII 만 해당)

"/.|Mv
DO'y    EK{ {:nBct'Pt}d4sE"144b26b'af+'j/_ra#1^=

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

참고 : 공백으로 보이는 것은 탭 문자 ( "EK {"앞뒤에 하나씩)입니다.

설명:

"+"부분은 기본 변환을 사용하여 "slaveryjfreedomjwarjpeacejignorancejstrength"문자열을 압축 해제합니다.
문자열 (문자 코드 배열로 처리됨) → (기본 144) 숫자 → (기본 26) 숫자 배열 → (각각에 'a'추가 숫자) 문자열

'j/    split around 'j' characters
_      duplicate the resulting word array
ra     read the input and wrap in array
#      find the index of the input in the word array
1^     XOR with 1
=      get the word at the new index

3

> <> (물고기), 84 78 바이트

0i~ia%.
v'raw'
>ol?!;
^'htgnerts'
^'yrevals'

^'ecnarongi'
^'ecaep'
^'modeerf'

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

우리는 왼쪽 상단에서 수영을 시작합니다. 먼저 스택에 0을로드합니다. 그런 다음 첫 번째 입력 문자 i( ~)를 읽고 , 버리고 ( ), 두 번째 문자 ( i)를 읽고, ASCII 값 modulo 10 ( a%)을 줄입니다. 이것은 a, e, r, l, g, t를 각각 7, 1, 4, 8, 3, 6으로 매핑합니다.이 숫자를 N이라고하겠습니다 .. 스택에서 두 개의 값 (N과 0)을 팝하고 N 행, 문자 0

점프 후, 물고기는 명령을 실행하기 전에 한 번의 틱을 진행하므로 첫 번째 문자를 무시하고 줄 N을 가로 질러 수영하여 해당 단어를 스택에로드합니다. 마지막으로 2 번 줄로 이동하여 전체 스택을 출력하고 종료합니다.

  • 이전에 사용한 멋진 코드 자체 수정 대신 점프를 사용하여 6 바이트를 절약했습니다. 오 잘

3

자바 스크립트, 78 바이트

w=>(a="war slavery ignorance strength freedom peace".split` `)[5-a.indexOf(w)]

이것은 내 파이썬 답변 의 일종의 포트입니다 . 각 단어가 상대방과 반대 위치에있는 문자열에 단어를 저장합니다. 주어진 단어의 색인을 찾아서 그 색인을 w끝에서 가져와 결과를 반환합니다.

테스트 스 니펫 :

f = w=>(a="war slavery ignorance strength freedom peace".split` `)[5-a.indexOf(w)]

console.log(f("peace"))
console.log(f("ignorance"))
console.log(f("war"))


2

Pari / GP, 86 바이트

Pari / GP는 대화식 인터프리터이므로 출력을 위해 "print"-cmd가 필요하지 않습니다. 그러나 Try-It_Online-utility에는 "print"-cmd가 필요하므로 이것을 "footer"로 분리했습니다.
우리는 "객체 기능"을 정의합니다 (문자 O는 저에게 Orwell 기능을 생각 나게합니다.

x.O=s=[war,freedom,ignorance,strength,slavery,peace];for(k=1,6,if(x==s[k],i=7-k));s[i]

그 후 전화

print(war.O)   \\ input to Pari/GP with the O-rwell-member of "war"
       peace   \\ output by Pari/GP

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

(Pari / GP에서 여기에 주어진 토큰은 문자열이 아니라 유효한 변수 이름입니다!


2

스택, 70 바이트

@x'war
strength
freedom
slavery
ignorance
peace'LF split:x index\rev\#

여기 사용해보십시오! 스택에서 입력을 받고 스택에서 출력을 남깁니다. 예를 들면 다음과 같습니다.

'war'

@x'war
strength
freedom
slavery
ignorance
peace'LF split:x index\rev\#

out

이 코드는 설명이 필요 없습니다. 모든 테스트 사례를 실행하도록 약간 수정했습니다.

('war' 'slavery' 'ignorance')
{x:'war
strength
freedom
slavery
ignorance
peace'LF split:x index\rev\#x\,}"!
disp

1
무엇을 'LF합니까?
Downgoat

1
@Downgoat 글쎄, @x변수를 설정하고 '...'문자열이며 LF줄 바꿈 변수입니다
Conor O'Brien

1
아 알다시피 함수 인수가 함수 이름 앞에 오는가?
Downgoat

1
@ Downgoat 정확하게. 스택 기반은 스택 기반입니다.
코너 O'Brien

1
yay 지금 나는 그런 명백한 사실을 깨닫지 못한 것에 대해 바보처럼 느낀다 : |
Downgoat

2

줄프, 35 바이트

.γG"ΞΠΞ¦ΞpΞsΞΈΞ3I"-5 iγ

인쇄 할 수없는 항목이 많이 있습니다. 별다른 효과는 없지만 16 진수 덤프는 다음과 같습니다.

00000000: 2ece b347 22ce 9e07 cea0 c28e ce9e 07c2  ...G"...........
00000010: 8ac2 a6ce 9e06 c28e 70ce 9e07 73c2 8fce  ........p...s...
00000020: 9e06 ce88 c280 ce9e 0133 4922 052d 3520  .........3I".-5
00000030: 69ce b3                                  i..

온라인 링크는 다음과 같습니다.

기본적으로 코드는 다음과 같습니다.

.γG"..."♣-5 iγ
  G"..."♣        split uncompressed string on spaces
 γ               set gamma to this
            iγ   index of the input in gamma
.γ       -5      and get 5 - this from gamma

2

실제로 56 바이트

' "war peace freedom slavery ignorance strength"s;)í1^@E

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

불행히도 압축 내장 기능이 없으면 문자열을 압축하지 않고 수동으로 압축을 해제하는 것이 더 짧습니다.

설명:

' "war peace freedom slavery ignorance strength"s;)í1^@E
' "war peace freedom slavery ignorance strength"s         split the string on spaces
                                                 ;)       make a copy, push it to the bottom of the stack
                                                   í      index of input in list
                                                    1^    XOR with 1
                                                      @E  that element in the list

2

하스켈, 104111 바이트

data O=WAR|FREEDOM|IGNORANCE|PEACE|SLAVERY|STRENGTH deriving(Show,Enum)
f s=toEnum$mod(3+fromEnum s)6::O

생각:

  • 키워드가 3 개의 위치에 있도록 키워드를 열거하십시오.
  • 키워드를 가져 와서 위치를 가져 fromEnum오고 오른쪽으로 3 단계 이동 (모듈러스 6) 한 다음 키워드로 다시 전환
  • ::O형식 유추는 몇 가지 문제가 있기 때문에 필요하다. 주는 f서명하는 것은 f :: O -> O같은 효과를 가지고 있지만 그 짧은없는 것입니다.

편집하다:

대체

f s=toEnum$mod(3+fromEnum s)6

으로, ~에 의하여

f=toEnum.(`mod`6).(+3).fromEnum

@Laikoni에게 감사합니다.


2
점 전체 표기법을 사용하는 f것이 더 짧습니다.f s=toEnum$mod(3+fromEnum s)6
Laikoni

2

Dyalog APL , 66 바이트

다음 중 하나입니다.

'slavery' 'freedom' 'ignorance' 'strength' 'war' 'peace'⊃⍨6|⎕UCS⊃⍞이 방법을 사용 합니다 ( ⎕IO←0많은 시스템에서 기본값이 필요함 ).

'strength' 'freedom' 'war' 'peace' 'slavery' 'ignorance'(⍳⊃(⌽⊣))⊂⍞ 조회를 수행 한 후 반전 된 목록에서 해당 요소를 선택합니다.


2

Qbasic, 138 99 바이트

D$="ignorancefreedom  peace    strength slavery  war      ":INPUT A$:?MID$(D$+D$,INSTR(D$,A$)+27,9)

D$만트라의 왼쪽에서 모든 단어를 저장 한 다음 오른쪽의 모든 단어를 저장합니다. 각 단어는 단어 당 정확히 9 자까지 공백으로 채워집니다. D$그런 다음 자체에 추가됩니다.

그런 다음 instr사용자가 입력 한 단어의 색인을 찾는 데 사용됩니다. 만트라의 다른 부분은 항상 문자열에 정확히 9 * 3 위치 더 저장되므로 9자를 사용하여 해당 위치에서 시작하는 하위 문자열을 인쇄합니다.


2

SmileBASIC, 92 바이트

A$="PEACE
E$="WAR
R$="SLAVERY
L$="FREEDOM
G$="STRENGTH
T$="IGNORANCE
INPUT I$?VAR(I$[1]+"$")

2

파이썬 , 80 바이트

어떻게 든 xnor을 능가했다!

이것은 명명되지 않은 람다 함수이며 결과를 반환합니다.

lambda w,a="war slavery ignorance strength freedom peace".split():a[~a.index(w)]

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

단어 목록은 각각 상대방과 반대 위치에 있도록 배열됩니다. 단어가 주어지면 w단어 목록에서 색인을 찾은 다음 비트 단위로 NOT ( ~)합니다. 이것은 모든 비트를 뒤집습니다 n => -n-1. 파이썬의 음의 색인으로 인해 목록에서 반대 색인을 얻습니다.

의도하지 않은 보너스의 일종으로,이 기능에 반대되는 단어 목록을 두 번째 인수로 전달할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.