Wojna to pokój. Wolność jest niewolnictwem. Ignorancja jest siłą

69

Jak pisał George Orwell w 1984 roku :

Wojna to pokój
Wolność to niewola
Niewiedza to siła

Napisz program lub funkcję, która pobierze jedno z sześciu głównych słów z cytatu Orwella i wyświetli swój odpowiednik.

Konkretnie:

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

Żadne inne pary wejścia / wyjścia nie są wymagane.

Powinieneś założyć, że słowa są zawsze w pełni małe, jak powyżej. Alternatywnie, można założyć, że słowa są zawsze w pełni wielkie litery: WAR -> PEACE, PEACE -> WAR, itd.

Najkrótszy kod w bajtach wygrywa.

Hobby Calvina
źródło
10
Powiązane :-)
xnor
2
@Dennis Tak. Albo wszystko jest pisane małymi literami, albo wszystko jest pisane wielkimi literami.
Calvin's Hobbies,
3
Nie wiem, czy ktoś może tego użyć do ściśnięcia swoich ciągów (nie poprawiło to mojego wyniku w Pipie), ale początkowych liter tych słów ( w p f s i) nie ma nigdzie indziej w żadnym z tych słów. Intrygująca właściwość.
DLosc
13
To wyzwanie typu
doubleplusgood
3
Prawie nikt nie lubi tej książki. Jest pełen kłamstw! Smutny.
Peter A. Schneider

Odpowiedzi:

58

05AB1E , 30 bajtów

05AB1E używa CP-1252 .

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

Wypróbuj online! lub jako pakiet testowy

Wyjaśnienie

Proste podejście

  • Popchnij sznurek ignorance strength war peace freedom slavery
  • Podziel na spacje
  • Pobierz indeks danych wejściowych z listy
  • XOR indeks z 1
  • Uzyskaj element na liście pod tym indeksem
Emigna
źródło
42
14 bajtów krótszych niż długość wszystkich słów. Co to w ogóle za ten język?
DJMcMayhem
65
> Popchnij sznurekignorance strength war peace freedom slavery Czuję, że brakuje mi kilkunastu kroków!
Bob
10
Czy ktoś może wyjaśnić, skąd wzięła się reszta słów oprócz „ignorancji”?
Carcigenicate,
36
05AB1E ma wbudowany słownik słów, które są reprezentowane przez 2 bajty każdy: github.com/Adriandmen/05AB1E/blob/master/dictionary.py
Robert Fraser
48

JavaScript (ES6), 80 bajtów

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

Jak to działa

Używamy małej tabeli przeglądowej opartej na kodzie ASCII drugiego znaku każdego słowa, zwracając indeks jego odpowiednika.

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

Na marginesie, jeśli dopuszczono mieszaną wielkość liter, użycie war PEACE FREEDOM slavery IGNORANCE strengthmodulo 6 doprowadziłoby do idealnego skrótu.

Test

Arnauld
źródło
2
To fajne podejście. Nigdy by o tym nie pomyślał.
Carcigenicate,
Bardzo dobrze. Pozostałe nie są różne dla 6, 7, 8, więc potrzebujesz 9.
ShreevatsaR
Używasz separatora, za następnie kompresujesz ciąg atobzapisując 8 bajtów?
Downgoat,
@Downgoat Czy nie wymagałoby to dużo ucieczki dla postaci spoza zakresu 32-126?
Arnauld,
za pomocą atobotrzymujesz ciąg, który jest w większości prawidłowy javascript - ostatecznie musisz uciec tylko `\` i zamykający cytat. Opublikowanie go na tej stronie może być trudne, ale nie unieważnia to odpowiedzi. Zobacz odpowiedź perla napisaną przez smis
edc65,
32

Galaretka , 24 bajty

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

Wypróbuj online!

Jak to działa

Najpierw token

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

indeksuje do słownika Jelly, aby utworzyć ciąg

strength war peace freedom slavery ignorance

który dzieli się na spacje, aby uzyskać tablicę ciągów

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

µ rozpoczyna nowy, monadyczny łańcuch, z argumentem tej tablicy łańcuchów, który jest również bieżącą wartością zwracaną.

ɠodczytuje jeden wiersz danych wejściowych ze STDIN i iznajduje swój indeks poprzedniej wartości zwracanej, tj. wygenerowaną tablicę łańcuchów.

Teraz ^1bierze bitową XOR tego indeksu i 1 . Nawet dla indeksów - należy pamiętać, że indeksy są Jelly 1 opartych i modułowe, więc siła ma indeks 1 i ignorancja ma indeks 6 / 0 - to zwiększa indeks; w przypadku wskaźników nieparzystych zmniejsza je.

Na koniec pobiera ciąg o tym indeksie z argumentu łańcucha.

Dennis
źródło
16

Mathematica, 84 bajty

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

Wyjaśnienie

Więcej „arytmetyki” ze sznurkami! Podobnie jak w połączonej odpowiedzi, opiera się to na tym, że można „pomnożyć” ciągi w Mathematica, co pozostawi je bez oceny (podobnie jak pomnożenie dwóch nieprzypisanych zmiennych x*y), ale Mathematica zastosuje podstawowe uproszczenia, takie jak czynniki anulujące w podziale.

Więc zaczynamy przechowując trzy pary jako produktów x, y, zodpowiednio i pomnożyć je wszystkie razem:

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

To ocenia na

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

(Mathematica automatycznie sortuje czynniki, ale nie dbamy o porządek.)

Dzielimy to przez dane wejściowe, aby usunąć słowo, którego nie chcemy .../#, ponieważ Mathematica anuluje czynniki. Na przykład, jeśli dane wejściowe "peace"byłyby zakończone:

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

Wreszcie pozbędziemy par nie jesteśmy zainteresowani, zastępując każdego x, yi zz 1. Ponownie, uproszczenie Mathematiki jest w tym 1*azawsze ważne a. Ta część składa się z:

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

Zaletą jest to, że Mathematica wie, że mnożenie jest Orderlesstak, że znajdzie to dwa czynniki niezależnie od tego, czy sąsiadują one z produktem, czy nie. Tylko słowo przeciwne do danych wejściowych nie jest już sparowane w produkcie, więc nie można go usunąć i pozostaje ono jedynym wyjściem.

Martin Ender
źródło
Argh, więc dobrze zrobione! Tracę o 7 bajtów WordList[][[<|"l"->14007,"t"->17083,"a"->25105,"r"->32106,"g"->33790,"e"->39048|>@#[[2]]]]&.
Greg Martin
@GregMartin Oh, WordListjest fajny. Przyjmowanie listy znaków jako danych wejściowych i zwracanie ciągu wydaje się jednak nieco podejrzane. ;) To powiedziawszy, możesz zrobić 4 bajty lepiej x[[7-Position[x={"war","slavery","ignorance","strength","freedom","peace"},#][[1,1]]]]&.
Martin Ender
Będę zainteresowany twoją opinią, ale dla mnie wydaje się, że podejrzana PP i CG jest podejrzana :)
Greg Martin
także <|#->#2&~MapThread~{x={"war","slavery","ignorance","strength","fre‌edom","peace"},Reverse@x}|>dla 94 bajtów
Greg Martin
13

Vim, 60 bajtów

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

Wypróbuj online! w kompatybilnym wstecz tłumaczu V.

Oczywiście, gdybyśmy przeszli na V, moglibyśmy zaoszczędzić jeden bajt , używając wygodniejszej metody wprowadzania. Ale ponieważ jest to tak niewielka różnica, wolałbym używać wersji innej niż golfowa.

Wyjaśnienie:

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
DJMcMayhem
źródło
10

C (gcc) , 120 107 bajtów

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

Maksymalne nadużycie wskaźnika! Wymaga maszyny little-endian i 64-bitowej długości.

Kod zawiera kilka niedrukowalnych elementów, ale kopiowanie i wklejanie powinno nadal działać.

Wypróbuj online!

Dennis
źródło
8

Python, 81 bajtów

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

Lub o tej samej długości:

l='war slavery ignorance strength freedom peace'.split()
dict(zip(l,l[::-1])).get
xnor
źródło
Czy definicje zmiennych poza lamba są dozwolone, gdy używa się lambda zamiast pełnego programu?
smls,
1
@smls Tak, zobacz tę meta dyskusję . Zauważ, że nawet w innym przypadku można by było przemycić ljako opcjonalny argument.
xnor
8

Perl 6 , 61 bajtów

W przypadku znaków niedrukowalnych pokazanych jako (ponieważ StackExchange usuwa je inaczej):

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

Oto xxdzrzut heksowy:

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~^$_]}.

Wersja rozszerzona (znaki niedrukowalne zastąpione sekwencjami ucieczki oraz dodane białe znaki i komentarze):

{    # 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.
    ]
}
smls
źródło
8

Bash , 100 87 86 78 bajtów

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

Wypróbuj online!

Druga litera każdego słowa jednoznacznie identyfikuje to słowo, dlatego używam tego znaku jako nazwy zmiennej; wartość tej zmiennej jest odpowiadającym innym słowem.

Na przykład druga litera peaceto e, a słowo odpowiadające peaceto war, więc ustawiłem e=war.

Biorąc pod uwagę ciąg wejściowy, drugi znak tego ciągu jest używany jako nazwa zmiennej do pobrania pożądanego odpowiedniego słowa, przy użyciu pośredniej interpretacji parametrów bash.

Mitchell Spector
źródło
8

TI-Basic, 103 84 77 bajtów

Zmniejszenie do jednej linijki pozwoliło zaoszczędzić wiele bajtów! Haha, jak ironiczne było to stwierdzenie ...

inString("EALRGT",sub(Ans,2,1
sub("WAR  PEACE FREEDOMSLAVERY STRENGTH IGNORANCE ",9Ans+1,4+Ans
Timtech
źródło
7

Perl , 63 bajty

62 bajty + -pflaga.

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

Wypróbuj online!

ordzwraca kod znakowy pierwszego znaku słowa wejściowego.
Po tym %6mamy:

- wolność => ord = 102 =>% 6 = 0  
- niewolnictwo => ord = 115 =>% 6 = 1  
- ignorancja => ord = 105 =>% 6 = 3  
- siła => ord = 115 =>% 6 = 1  
- war => ord = 119 =>% 6 = 5  
- pokój => ord = 112 =>% 6 = 4  

Więc mamy slaveryi strengthzarówno powrocie 1 (ponieważ oba zaczynają się tą samą literą), a żaden powrocie 2. Stąd dodamy 1do strength(to jedyne słowo, które będzie pasować /h/), a my mamy każde słowo mapowane do indeksu od 0 do 5

Dada
źródło
6

R, 86 87 92 bajtów

Zmieniono na nienazwanej funkcji i gsubdo subkilku bajtów. W grepokreśla, które z 3 łańcuchów stosuje się, a wejście jest usuwany z tego łańcucha z sub.

function(v)sub(v,'',(l=c("warpeace","freedomslavery","ignorancestrength"))[grep(v,l)])
MickyT
źródło
5

PHP, 70 bajtów

<?=[ignorance,peace,slavery,strength,freedom,war][md5("^$argv[1]")%7];
użytkownik63956
źródło
5

Befunge, 89 88 bajtów

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

Wypróbuj online!

Wyjaśnienie

Kod źródłowy z podświetlonymi ścieżkami wykonania

*Zaczynamy od wypchnięcia wszystkich możliwych ciągów wyjściowych na stos, zakończonych zerem. Ta sekwencja jest wykonywana od prawej do lewej, więc wartości są wypychane w odwrotnej kolejności, ponieważ w takiej kolejności postacie będą potrzebne, gdy zostaną ostatecznie wyświetlone.
*Następnie odczytujemy pierwsze dwa znaki ze standardowego wejścia, co jest wszystkim, czego potrzebujemy do zidentyfikowania ciągu wejściowego. Jeśli weźmiemy wartość ASCII pierwszej litery mod 2, plus drugiej litery mod 7, otrzymamy unikalny numer z zakresu od 2 do 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

*Liczbę tę można następnie wykorzystać jako rodzaj indeksu na liście ciągów na stosie. Iteracyjnie zmniejszamy indeks (po raz pierwszy o 2) i dla każdej iteracji usuwamy jeden ciąg ze stosu z sekwencją >_.
*Gdy indeks osiągnie zero, zostaje nam prawidłowy ciąg wyjściowy na górze stosu, więc używamy prostej sekwencji wyjściowej ciągu, aby zapisać wynik na standardowe wyjście.

James Holderness
źródło
2
Lubię tutaj używać :-<i @>:#„emotikonów” :)
Tobias Kienzler
5

Pyke, 29 bajtów

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

Wypróbuj tutaj!

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

C, 93

@ Odpowiedź Arnaulda przeniesiona do C.

#define F(w)(char*[]){"freedom",0,"war",0,"strength",0,"slavery","peace","ignorance"}[w[1]%9]
edc65
źródło
4

C (gcc) , 113 108 bajtów

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

Wszystkie wystąpienia \0mogą być zastąpione rzeczywistymi bajtami NUL dla celów oceny.

t+*--t-47jest niezdefiniowanym zachowaniem; to może / nie będzie działać z innymi kompilatorami.

Wypróbuj online!

Dennis
źródło
4

JavaScript (ES6), 71 78

O wiele nudniej niż odpowiedź Arnaulda, ale też krótsza.

Teraz dodałem kodowanie za pomocą btoa. W zakodowanym ciągu są 4 bajty, których nie mogę opublikować na tej stronie, nawet jeśli są to prawidłowe znaki w ciągu javascript. Więc użyłem ucieczki heksowej w formularzu \xHH. Każda z tych ucieczek jest liczona jako 1 bajt.

Zakodowany ciąg to strength0ignorance0peace0war0slavery0freedom

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

Ten ma 82 lata i nie uwzględnia wielkości liter

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

Test

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

edc65
źródło
3

CJam, 52 (tylko ASCII)

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

Wypróbuj online

Uwaga: znakami spacji są znaki tabulacji (jeden przed i jeden po „EK {”)

Wyjaśnienie:

Część do „+” dekompresuje ciąg „niewolnictwo”, używając konwersji podstawowej:
ciąg (traktowany jako tablica kodów znaków) → (podstawa 144) liczba → (podstawa 26) tablica liczb → (dodając „a” do każdego liczba) ciąg

'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
aditsu
źródło
3

> <> (Ryba), 84 78 bajtów

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

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

Wypróbuj online!

Zaczynamy pływać od lewego górnego rogu, kierując się w prawo. Najpierw ładujemy stos za pomocą 0. Następnie czytamy pierwszą literę input ( i), odrzucamy ją ( ~), czytamy drugą literę ( i) i zmniejszamy jej wartość ASCII modulo 10 ( a%). Odwzorowuje to odpowiednio a, e, r, l, g it na 7, 1, 4, 8, 3 i 6 - nazwijmy ten numer N. .wyskakuje dwie wartości ze stosu - N i 0 - i przeskakuje do linia N, znak 0.

Po skoku ryba wykonuje jeden tik przed wykonaniem instrukcji, więc ignoruje pierwszy znak i płynie przez linię N, która ładuje odpowiednie słowo na stos. Na koniec przechodzimy do linii 2, która wypisuje cały stos i kończy działanie.

  • Zaoszczędziłem sześć bajtów, używając skoku, zamiast fajnej samokodyfikacji kodu, której użyłem wcześniej. No cóż.
Nick Matteo
źródło
3

JavaScript, 78 bajtów

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

Jest to rodzaj portu mojej odpowiedzi w języku Python . Przechowujemy słowa w ciągu, w którym każde znajduje się w przeciwnej pozycji niż jego odpowiednik. Znajdujemy indeks danego słowa wi pobieramy go od końca, aby zwrócić wynik.

Fragment testowy:

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

FlipTack
źródło
2

Pari / GP, 86 bajtów

Pari / GP jest interaktywnym tłumaczem, nie potrzebujemy „print” -cmd do wydruku; jednak narzędzie Try-It_Online potrzebuje „print” -cmd, więc oddzieliłem to do „stopki”.
Definiujemy „funkcję obiektu” (litera O przypomina mi pięknie funkcję Orwella ... ;-)):

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

Następnie zadzwoń

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

Wypróbuj online!

(Zauważ, że w Pari / GP podane tutaj tokeny nie są łańcuchami, lecz legalnymi nazwami zmiennych! Do zmiennych tych nigdy nie należy przypisywać żadnej wartości)

Gottfried Helms
źródło
2

Skumulowane, 70 bajtów

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

Wypróbuj tutaj! Pobiera dane wejściowe na stosie i pozostawia dane wyjściowe na stosie. Na przykład:

'war'

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

out

Ten kod jest dość zrozumiały. Nieznacznie zmodyfikowany, aby uruchomić wszystkie przypadki testowe:

('war' 'slavery' 'ignorance')
{x:'war
strength
freedom
slavery
ignorance
peace'LF split:x index\rev\#x\,}"!
disp
Conor O'Brien
źródło
1
Co ma 'LFzrobić?
Downgoat,
1
@Downgoat Cóż, @xustawia zmienną, '...'jest ciągiem i LFjest zmienną linefeed
Conor O'Brien
1
Ach, rozumiem, więc argument funkcji pojawia się przed nazwą funkcji?
Downgoat,
1
@Downgoat Dokładnie. Stacked jest oparty na stosach.
Conor O'Brien
1
teraz czuję się głupio, nie zdając sobie sprawy z tak oczywistego faktu: |
Downgoat,
2

Jolf, 35 bajtów

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

Istnieje wiele niedrukowalnych materiałów. Oto zrzut heksowy, choć niewiele zdziała:

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

Oto link online.

Zasadniczo kod wygląda następująco:

.γ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
Conor O'Brien
źródło
2

Właściwie 56 bajtów

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

Wypróbuj online!

Niestety, bez wbudowanych kompresji, krócej jest nie kompresować łańcucha i ręcznie go dekompresować.

Wyjaśnienie:

' "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
Mego
źródło
2

Haskell, 104 111 bajtów

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

Pomysł:

  • Wymień słowa kluczowe, tak aby ich odpowiednik znajdował się w odległości 3 pozycji
  • Weź słowo kluczowe, ustal jego pozycję fromEnum, przesuń 3 kroki w prawo (moduł 6) i przekonwertuj z powrotem na słowo kluczowe
  • Jest ::Oto konieczne, ponieważ wnioskowanie typu ma pewne problemy. Podanie fpodpisu f :: O -> Omiałoby ten sam efekt, ale nie jest takie krótkie.

Edytować:

Zastąpiony

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

przez

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

dzięki @Laikoni.

użytkownik3389669
źródło
2
Używanie notacji punktowej fjest krótsze:f s=toEnum$mod(3+fromEnum s)6
Laikoni,
2

Dyalog APL , 66 bajtów

Albo jeden z tych:

'slavery' 'freedom' 'ignorance' 'strength' 'war' 'peace'⊃⍨6|⎕UCS⊃⍞używa tej metody (wymaga ⎕IO←0ustawień domyślnych w wielu systemach).

'strength' 'freedom' 'war' 'peace' 'slavery' 'ignorance'(⍳⊃(⌽⊣))⊂⍞ wykonuje wyszukiwanie, a następnie wybiera odpowiedni element z odwróconej listy.

Adám
źródło
2

Qbasic, 138 99 bajtów

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

D$przechowuje wszystkie słowa z lewej strony mantry, a następnie wszystkie słowa z prawej strony. Każde słowo jest wypełnione spacjami do dokładnie 9 liter na słowo. D$następnie dołącza się do siebie.

Następnie instrsłuży do znalezienia indeksu słowa wprowadzonego przez użytkownika. Druga część mantry jest zawsze przechowywana dokładnie 9 * 3 pozycji dalej w łańcuchu, więc drukujemy podłańcuch zaczynając od tej pozycji, przyjmując 9 znaków.

Steenbergh
źródło
2

SmileBASIC, 92 bajty

A$="PEACE
E$="WAR
R$="SLAVERY
L$="FREEDOM
G$="STRENGTH
T$="IGNORANCE
INPUT I$?VAR(I$[1]+"$")
12Me21
źródło
2

Python , 80 bajtów

W jakiś sposób wygrał z Xnorem!

Jest to nienazwana funkcja lambda, która zwraca wynik.

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

Wypróbuj online!

Lista słów jest ułożona w taki sposób, że każde z nich znajduje się w przeciwnej pozycji do swojego odpowiednika. Biorąc pod uwagę słowo w, znajdujemy jego indeks na liście słów, a następnie bitowo NIE ( ~). Odwraca to wszystkie bity, które są obliczane n => -n-1. Z powodu ujemnego indeksowania Pythona uzyskuje przeciwny indeks na liście.

Jako rodzaj niezamierzonej premii, możesz przekazać dowolną listę wyrazów przeciwieństw do tej funkcji jako drugi argument.

FlipTack
źródło