Seperti yang ditulis George Orwell pada 1984 :
Perang adalah kedamaian
Kebebasan adalah perbudakan
Ketidaktahuan adalah kekuatan
Tulislah sebuah program atau fungsi yang menggunakan salah satu dari enam kata utama dari kutipan Orwell dan menampilkan rekannya.
Secara khusus:
[input] -> [output]
war -> peace
peace -> war
freedom -> slavery
slavery -> freedom
ignorance -> strength
strength -> ignorance
Tidak ada pasangan input / output lain yang diperlukan.
Anda harus menganggap kata-kata selalu huruf kecil sepenuhnya, seperti di atas. Atau, Anda mungkin menganggap kata-kata yang selalu penuh huruf besar: WAR -> PEACE
, PEACE -> WAR
, dll
Kode terpendek dalam byte menang.
code-golf
string
kolmogorov-complexity
Hobi Calvin
sumber
sumber
w p f s i
) tidak ditemukan di tempat lain dalam kata-kata itu. Properti yang menarik.Jawaban:
05AB1E , 30 byte
05AB1E menggunakan CP-1252 .
Cobalah online! atau sebagai Test suite
Penjelasan
Pendekatan lurus ke depan
ignorance strength war peace freedom slavery
sumber
ignorance strength war peace freedom slavery
Aku merasa seperti kehilangan sekitar selusin langkah di sana!JavaScript (ES6), 80 byte
Bagaimana itu bekerja
Kami menggunakan tabel pencarian kecil berdasarkan kode ASCII dari karakter ke-2 dari setiap kata, mengembalikan indeks rekannya.
Sebagai catatan tambahan, jika case campuran diizinkan, menggunakan
war PEACE FREEDOM slavery IGNORANCE strength
dengan modulo 6 akan menghasilkan hash yang sempurna.Uji
Tampilkan cuplikan kode
sumber
z
dan kemudian mengompresi string denganatob
menghemat 8 byte?atob
Anda mendapatkan string yang sebagian besar javascript valid - akhirnya Anda hanya perlu melarikan diri `` dan kutipan penutup. Mungkin sulit untuk mempostingnya di situs ini, tetapi itu tidak membatalkan jawaban. Lihat jawaban perl oleh smisJelly , 24 byte
Cobalah online!
Bagaimana itu bekerja
Pertama, token
mengindeks ke kamus Jelly untuk membuat string
yang
Ḳ
terbagi pada spasi untuk menghasilkan array stringµ
memulai rantai monadik baru, dengan array string sebagai argumennya, yang juga merupakan nilai pengembalian saat ini.ɠ
membaca satu baris input dari STDIN, dani
menemukan indeksnya dari nilai pengembalian sebelumnya, yaitu, array string yang dihasilkan.Sekarang,
^1
ambil bitor XOR dari indeks itu dan 1 . Untuk indeks bahkan - ingat bahwa Jelly indeks adalah 1 berbasis dan modular, sehingga kekuatan memiliki indeks 1 dan kebodohan memiliki index 6 / 0 - ini akan menambahkan indeks; untuk indeks ganjil, itu menurunkan mereka.Akhirnya,
ị
ambil string di indeks itu dari argumen rantai.sumber
Mathematica, 84 byte
Penjelasan
Lebih banyak "aritmatika" dengan string! Seperti dalam jawaban yang ditautkan, ini didasarkan pada fakta bahwa Anda dapat "melipatgandakan" string dalam Mathematica yang akan membuat mereka tidak dievaluasi (mirip dengan mengalikan dua variabel yang tidak ditugaskan
x*y
), tetapi bahwa Mathematica akan menerapkan penyederhanaan dasar, seperti membatalkan faktor dalam suatu divisi.Jadi kita mulai dengan menyimpan tiga pasang sebagai produk dalam
x
,y
,z
, masing-masing dan kalikan mereka semua bersama-sama:Ini mengevaluasi ke
(Mathematica secara otomatis mengurutkan faktor, tetapi kami tidak peduli dengan urutannya.)
Kami membaginya dengan input untuk menghapus kata yang tidak kita inginkan
.../#
, karena Mathematica membatalkan faktor-faktornya. Misal jika inputnya"peace"
kita akan berakhir dengan:Akhirnya, kita menyingkirkan pasangan yang tidak kita minati, dengan mengganti masing-masing pasangan
x
,y
danz
dengan1
. Sekali lagi, penyederhanaan Mathematica1*a
selalu muncula
. Bagian ini dilakukan dengan:Yang menyenangkan adalah bahwa Mathematica tahu bahwa perkalian adalah
Orderless
jadi ini akan menemukan dua faktor terlepas dari apakah mereka berdekatan dalam produk atau tidak. Hanya kata yang berseberangan dengan input yang tidak lagi dipasangkan dalam produk, sehingga satu tidak akan dihapus dan tetap sebagai output tunggal.sumber
WordList[][[<|"l"->14007,"t"->17083,"a"->25105,"r"->32106,"g"->33790,"e"->39048|>@#[[2]]]]&
.WordList
bagus. Mengambil daftar karakter sebagai input dan mengembalikan string tampaknya agak cerdik. ;) Yang mengatakan, Anda dapat melakukan 4 byte lebih baik denganx[[7-Position[x={"war","slavery","ignorance","strength","freedom","peace"},#][[1,1]]]]&
.<|#->#2&~MapThread~{x={"war","slavery","ignorance","strength","freedom","peace"},Reverse@x}|>
untuk 94 byteVim, 60 byte
Cobalah online! di penerjemah V yang kompatibel.
Tentu saja, jika kita beralih ke V kita bisa menghemat satu byte dengan menggunakan metode input yang lebih nyaman. Tapi karena ini adalah perbedaan kecil saya lebih suka menggunakan versi non-golf.
Penjelasan:
sumber
C (gcc) ,
120107 bytePenyalahgunaan pointer maksimum! Membutuhkan mesin little-endian dan panjang 64-bit.
Kode ini berisi beberapa yang tidak dapat diinstal, tetapi penyalinan salinan masih berfungsi.
Cobalah online!
sumber
Python, 81 byte
Atau, panjang yang sama:
sumber
l
sebagai argumen opsional.Perl 6 , 61 byte
Dengan karakter yang tidak diinginkan ditampilkan sebagai (karena StackExchange menghapus mereka sebaliknya):
Berikut ini
xxd
hex dump:Versi yang diperluas (karakter yang tidak dicetak diganti dengan urutan pelarian, dan spasi & komentar ditambahkan):
sumber
Bash ,
100878678 byteCobalah online!
Huruf ke-2 dari setiap kata secara unik mengidentifikasi kata itu, jadi saya menggunakan karakter itu sebagai nama variabel; nilai variabel itu adalah kata lain yang sesuai.
Misalnya, huruf ke-2
peace
adalahe
, dan kata yang sesuaipeace
adalahwar
, jadi saya ature=war
.Diberikan string input, karakter ke-2 dari string itu digunakan sebagai nama variabel untuk menarik kata terkait yang diinginkan, menggunakan ekspansi parameter tidak langsung bash.
sumber
TI-Basic,
1038477 byteMengurangi menjadi satu-baris menghemat banyak byte!Haha, betapa ironisnya pernyataan itu ...sumber
Perl , 63 byte
62 byte +
-p
flag.Cobalah online!
ord
mengembalikan kode karakter pertama karakter input kata.Setelah itu
%6
, kami memiliki:Jadi kami memiliki
slavery
danstrength
keduanya mengembalikan 1 (karena keduanya dimulai dengan huruf yang sama), dan tidak ada yang kembali 2. Oleh karena itu, kami menambahkan1
untukstrength
(itu satu-satunya kata yang akan cocok/h/
), dan kami memiliki setiap kata yang dipetakan ke indeks dari 0 hingga 5.sumber
R, 86
8792BytesBerubah ke fungsi yang tidak disebutkan namanya dan
gsub
untuksub
selama beberapa byte. Thegrep
menentukan dari 3 senar digunakan dan masukan akan dihapus dari string dengansub
.sumber
PHP, 70 byte
sumber
Befunge,
8988 byteCobalah online!
Penjelasan
Kami mulai dengan mendorong semua string keluaran yang mungkin ke tumpukan, null dihentikan. Urutan ini dieksekusi dari kanan ke kiri sehingga nilainya didorong terbalik, karena itulah urutan karakter yang akan diperlukan ketika mereka akhirnya menghasilkan.
Kami kemudian membaca dua karakter pertama dari stdin, yang kita butuhkan untuk mengidentifikasi string input. Jika kita mengambil nilai ASCII dari huruf pertama mod 2, ditambah huruf kedua mod 7, kita mendapatkan nomor unik di kisaran 2 hingga 7.
Nomor ini kemudian dapat digunakan sebagai semacam indeks ke dalam daftar string pada tumpukan. Kami secara iteratif menurunkan indeks (pertama kali oleh 2), dan untuk setiap iterasi kami menghapus satu string dari tumpukan dengan urutan
>_
.Setelah indeks mencapai nol, kita pergi dengan string output yang benar di bagian atas tumpukan, jadi kami menggunakan urutan output string sederhana untuk menulis hasilnya ke stdout.
sumber
:-<
dan@>:#
"smiley" di sini :)Pyke, 29 byte
Coba di sini!
sumber
C, 93
@Arnauld menjawab porting ke C
sumber
C (gcc) ,
113108 byteSemua instance dari
\0
dapat diganti dengan byte NUL aktual untuk tujuan penilaian.t+*--t-47
adalah perilaku yang tidak terdefinisi; ini mungkin / tidak akan bekerja dengan kompiler lain.Cobalah online!
sumber
JavaScript (ES6), 71
78Jauh lebih membosankan daripada jawaban Arnauld, tetapi lebih pendek juga.
Sekarang saya menambahkan encoding dengan
btoa
. Dalam string yang disandikan ada 4 byte yang saya tidak bisa posting ke situs ini, bahkan jika mereka karakter yang valid dalam string javascript. Jadi saya menggunakan hex melarikan diri dalam formulir\xHH
. Masing-masing lolos ini dihitung sebagai 1 byte.String yang disandikan adalah
strength0ignorance0peace0war0slavery0freedom
Yang ini 82 dan case-sensitive
Uji
sumber
CJam, 52 (hanya ASCII)
Cobalah online
Catatan: yang tampak seperti spasi adalah karakter tab (satu sebelum dan satu setelah "EK {")
Penjelasan:
Bagian hingga "+" mendekompresi string "slaveryjfreedomjwarjpeacejignorancejstrength", menggunakan konversi basis:
string (diperlakukan sebagai larik kode karakter) → (basis 144) angka → (basis 26) array angka → (menambahkan 'a' untuk masing-masing angka) string
sumber
> <> (Ikan),
8478 byteCobalah online!
Kami mulai berenang dari kiri atas, menuju kanan. Pertama-tama kita memuat tumpukan dengan angka 0. Kemudian kita membaca huruf input pertama (
i
), membuangnya (~
), membaca huruf kedua (i
), dan mengurangi nilai ASCII modulo 10 (a%
). Ini memetakan a, e, r, l, g, dan t ke 7, 1, 4, 8, 3, dan 6, masing-masing — sebut saja angka ini N..
mengeluarkan dua nilai dari tumpukan — N dan 0 — dan melompat ke baris N, karakter 0.Setelah melompat, ikan menghasilkan satu centang sebelum menjalankan instruksi, sehingga mengabaikan karakter pertama dan berenang melintasi garis N, yang memuat kata yang sesuai ke tumpukan. Akhirnya kita pergi ke baris 2, yang menampilkan seluruh tumpukan dan keluar.
sumber
JavaScript, 78 byte
Ini adalah semacam port jawaban Python saya . Kami menyimpan kata-kata dalam string di mana masing-masing berada di posisi yang berlawanan dengan rekannya. Kami menemukan indeks kata yang diberikan
w
, dan mendapatkan indeks itu dari akhir, untuk mengembalikan hasilnya.Cuplikan uji:
sumber
Pari / GP, 86 Byte
Pari / GP adalah interpreter interaktif, kita tidak perlu "print" -cmd untuk output; namun, utilitas Try-It_Online membutuhkan "print" -cmd jadi saya pisahkan ini ke "footer".
Kami mendefinisikan "objek-fungsi" (huruf O mengingatkan saya pada fungsi Orwell ... ;-)):
Setelah itu, teleponlah
Cobalah online!
(Perhatikan, bahwa dalam Pari / GP token yang diberikan di sini bukan string tetapi nama variabel hukum! Variabel-variabel itu seharusnya tidak pernah memiliki nilai apa pun yang ditetapkan untuk)
sumber
Ditumpuk, 70 byte
Coba di sini! Mengambil input pada stack dan meninggalkan output pada stack. Sebagai contoh:
Kode ini cukup jelas. Sedikit dimodifikasi untuk menjalankan semua kasus uji:
sumber
'LF
harus dilakukan@x
menetapkan variabel,'...'
adalah string, danLF
merupakan variabel linefeedJolf, 35 byte
Ada banyak hal yang tidak patut. Ini hexdump, meskipun tidak banyak manfaatnya:
Ini tautan online.
Pada dasarnya, kode ini terlihat seperti:
sumber
Sebenarnya , 56 byte
Cobalah online!
Sayangnya, tanpa builtin kompresi, lebih pendek untuk tidak memampatkan string dan secara manual mendekompresnya.
Penjelasan:
sumber
Haskell, 104
111bytesIde:
fromEnum
, gerakkan 3 langkah ke kanan (modulus 6) dan konversikan kembali ke kata kunci::O
diperlukan karena inferensi tipe memiliki beberapa masalah. Memberif
tanda tanganf :: O -> O
akan memiliki efek yang sama tetapi tidak sesingkat itu.Sunting:
Diganti
oleh
terima kasih kepada @Laikoni.
sumber
f
lebih pendek:f s=toEnum$mod(3+fromEnum s)6
Dyalog APL , 66 byte
Salah satu dari ini:
'slavery' 'freedom' 'ignorance' 'strength' 'war' 'peace'⊃⍨6|⎕UCS⊃⍞
menggunakan metode ini (mengharuskan⎕IO←0
yang default pada banyak sistem).'strength' 'freedom' 'war' 'peace' 'slavery' 'ignorance'(⍳⊃(⌽⊣))⊂⍞
melakukan pencarian, lalu mengambil elemen yang sesuai dari daftar terbalik.sumber
Qbasic,
13899 byteD$
menyimpan semua kata dari sisi kiri mantra, lalu semua kata dari sisi kanan. Setiap kata diisi dengan spasi hingga tepat 9 huruf per kata.D$
kemudian ditambahkan ke dirinya sendiri.Kemudian
instr
digunakan untuk menemukan indeks kata yang dimasukkan oleh pengguna. Bagian lain dari mantra selalu disimpan tepat 9 * 3 posisi lebih jauh dalam string, jadi kami mencetak substring mulai dari posisi itu, mengambil 9 karakter.sumber
SmileBASIC, 92 byte
sumber
Python , 80 byte
Entah bagaimana mengungguli xnor!
Ini adalah fungsi lambda yang tidak disebutkan namanya, yang mengembalikan hasilnya.
Cobalah online!
Daftar kata diatur sedemikian rupa sehingga masing-masing berada pada posisi yang berlawanan dengan rekannya. Diberikan kata
w
, kami menemukan indeksnya di daftar kata, dan kemudian bitwise TIDAK (~
) itu. Ini membalik semua bit, yang dihitungn => -n-1
. Karena pengindeksan negatif Python, mendapatkan indeks yang berlawanan dalam daftar.Sebagai semacam bonus yang tidak disengaja, Anda dapat memberikan daftar kata yang bertentangan dengan fungsi ini sebagai argumen kedua.
sumber