Tugas
Encode string yang seluruhnya terdiri dari huruf besar ( A-Z
) hanya menggunakan nol dan yang, menggunakan skema favorit Anda sendiri. Tapi aturannya tidak sesederhana itu!
Aturan
- Program / fungsi Anda harus menangani dengan benar setiap string input dengan panjang 8 .
- Hasilnya harus memiliki panjang yang sama untuk semua input.
- Hasilnya harus berbeda untuk input yang berbeda.
- Hasilnya harus sesingkat mungkin.
- Hasilnya harus nol-satu seimbang (memiliki jumlah yang mirip dengan nol). Mereka tidak harus sama (yaitu seimbang sempurna), tetapi skor Anda akan dikenakan sanksi untuk itu.
Anda tidak harus menyediakan program / fungsi yang menerjemahkan sandi Anda.
Masukan dan keluaran
- Anda dapat memutuskan untuk menerima serangkaian 26 karakter ASCII yang dapat dicetak dan bukan
A-Z
. - Anda dapat memutuskan untuk mengeluarkan pasangan karakter ASCII yang dapat dicetak dan bukan
0
dan1
. - Anda tidak diizinkan untuk mengeluarkan bilangan bulat alih-alih string bit, karena mungkin memiliki nol di depan dan tidak jelas apakah Anda benar-benar memenuhi aturan 2.
- Jika Anda memutuskan untuk menyimpang dari default (
A-Z
input dan01
output), Anda harus menentukan set karakter input / output dalam kiriman Anda.
Mencetak gol
- Skor dasar: Ukuran kode, atau 1 jika program Anda kosong.
- Hukuman
- Hukuman panjang: dikalikan
1.5 ** (encoded length - 42)
- Tidak ada bonus untuk menjadi lebih pendek; 42 adalah panjang minimal untuk penyandian string 8-panjang yang seimbang dengan ukuran alfabet 26.
- Hukuman karena tidak seimbang: gandakan
2 ** max(abs(ones - zeros) for every valid input of length 8)
, di manaones
danzeros
adalah jumlah 1 dan 0 dalam setiap output, masing-masing. - Kiriman Anda harus menunjukkan contoh kasus terburuk (input / output) atau penjelasan teoritis tentang nilai penalti.
- Hukuman panjang: dikalikan
- Skor terendah menang.
Contoh Pengiriman
Hipotesis esolang, 0 Bytes, Skor 74733.8906
Berikut ini adalah esolang hipotetis, di mana program kosong mencetak semua kode ASCII karakter input dalam biner.
Misalnya, jika Anda memberikan AAAAAAAA
input, program akan mencetak 1000001
8 kali berturut-turut, yaitu 10000011000001100000110000011000001100000110000011000001
.
Input alfabet dipilih menjadi CEFGIJKLMNQRSTUVXYZabcdefh
. Dengan cara ini, semua karakter dikonversikan ke tujuh digit dalam biner, dan jumlah nol-satu berbeda hanya dengan satu per karakter (mereka semua memiliki tiga 1 dan empat 0 atau sebaliknya ketika dikonversi ke biner).
Panjang output selalu 56, dan ketidakseimbangan kasus terburuk terjadi pada input seperti CCCCCCCC
, di mana nol muncul 8 kali lebih banyak daripada yang.
Oleh karena itu, skor pengajuan ini adalah 1.5 ** (56 - 42) * 2 ** 8 == 74733.8906
.
sumber
Jawaban:
Stax , 11 byte, 0 penalti, Skor 11
Program ini digunakan
[0-9A-P]
untuk input dan[01]
untuk output.Jalankan dan debug secara online - klik tombol run untuk memulai. Empat kasus uji pertama berjalan dalam milidetik. Kelima dalam hitungan detik. Keenam dalam milenia.
Representasi ascii yang sesuai dari program ini adalah ini.
Ini sangat bergantung pada
|N
instruksi, yang mendapatkan permutasi array selanjutnya.Semua output adalah permutasi dari string awal. Ini memiliki 21 nol dan 21 yang. Karena itu, semua output adalah 42 karakter, dan sangat seimbang.
sumber
Jelly , 19 byte
Cobalah online!
Penjelasan
sumber
Pyth,
201914 byte, Max Diff: 0, Panjang: 64, Nilai:149636.5528142154.7251104745.5869Cobalah online!
Menggunakan huruf kecil (
[a-z]
) bukan huruf besar. Dapat menggunakan huruf besar dengan menggantiG
denganrG1
, dengan biaya 2 byte.Saya bisa menerjemahkan jawaban Python 3 HyperNeutrino untuk skor yang lebih baik, tetapi terus terang, saya ingin jawaban yang benar-benar berfungsi.
sumber
Python 2 ,
779645 byte, Max (Diff) = 0, Panjang = 48, Nilai = 7346,95Cobalah online!
Angka ajaib
4lnk28t9vtqgfrpfda9uyfrjhcjwjvno6aec2nwegi0g4mnublc05dher8fjm4s5gh55lu87a4itmc74t6tozcsfdbxkg82frwljy0wam1jht98g2j0bma021v5d48pwq0fklv0n1ltrxft1fpk5gt5mx5fj4p2mjqqpvcylt1xayxf1iwdmyoxgfvl7oui1oo6147bm9rqpqut9ns8hhjc77t3pqy48otovrsm1t4mmleumspkuef66ma1vi0l4mtkwaeeizuvvds9fro3vhc0mrn6ox17rdpk7xw747qf28934u5jci5q1qj81i7dyf7rf0x7hb19xm93xhxsgh4w8ifs6fhynsddbo9j938ewfvhjlbpiz50n5hanmno6c89blyx50e89z7vjq2ho2r2u2wwyu4q18kv4fi1nhmfbgjbnkdayr5kblaped4fo5u97bi9a67d89irxa0r9cinmnohfgjmh5fhkcr33
(dalam basis 36), atau setara desimalnya382136276621246556626597379364678993894472503063952720559883124988542417847157286833446006767955087631166943136913765901237281892296575754126024183763829277879554548743231384272055945084065681774297483130020386641869860456147616177702938121538230311395513497506285733567467605871232294046704309941152721616618474501854355102646152223338484615876165254236449912858255665248186687952137487016925761633237335983620006273901509768720506129789443353730706676483647298576692613113269388239830925662977837917272690235355742330377154505179476767457756888107428475384947712227312747517748632498691058764154580934614231152483398774630508576533263098942260213967880819240793990219283490212843120923539516962682466148372296338428497778127570401190309339992457562121354271
, mengkodekan semua 252 permutasi dari 50
s dan 51
s.Algoritma pertama mengkonversi
A-Z
menjadi0-25
dan memperlakukannya sebagai nomor basis-26, kemudian tambahkan56*252**4
.Kemudian, nomor tersebut dikonversi ke nomor basis-252 5-digit, dan gantikan dengan permutasi yang sesuai dari 5
0
s dan 51
s.Setelah itu, hapus 2 bit pertama, yang dijamin
01
. Kemudian kita telah menyandikan string ke string 48-bit, yang terdiri dari 240
detik dan 241
detik.sumber
7346.953125
).JavaScript (ES8), skor 22186.623779296875
Untuk input panjang yang sama, selalu menghasilkan 3,5 * nol dan yang, sehingga hanya membayar penalti 1,5 ** 14. Karakter yang didukung:
'+-.3569:<GKMNSUVYZ\cefijlqrtx
.sumber
Jelly , 16 byte
Menggunakan
+,-./0123456789:;<=>?@ABCD
input dan mengembalikan daftar angka dan angka nol.Upaya ini untuk membangun daftar 538.257.874.440 kombinasi dalam memori, jadi Anda akan memerlukan sejumlah besar RAM untuk menjalankannya seperti ...
Cobalah online! (dapat diuji; panjang input 3, panjang output 18)
Bagaimana itu bekerja
sumber
Python 3 ,
985135 byte, Max Diff 0, Panjang 42, skor 135Cobalah online!
Atas perkenan Bubbler
Kode tidak dikunci:
Karena pendekatan lain tampaknya tidak efisien, saya sudah mencoba membuat yang optimal waktu. Ini clealy O (N) dalam N bit encoding, yang merupakan O-optimal besar.
Petunjuk: coba pikirkan segitiga Pascal untuk yang satu ini ( diagram ini mengungkapkannya)
Output sampel:
Waktu pelaksanaan: <0,013 dtk (kira-kira konstan untuk semua input)
sumber
Perl 5 , 55 byte, maks. Diff 0, panjang 42, skor
5655Ini berfungsi tetapi akan memakan waktu lama tapi bisa dilakukan (
ZZZZZZZZ
butuh 2,5 hari di komputer saya). Memori tidak masalah.Digunakan
A-Z
sebagai input dan1
danA
sebagai karakter penyandian. Mereka selalu seimbang sempurna. Melewati26^7 = 8031810176
kombinasi seimbang pertama yang mewakili string yang lebih pendek dari 8 karakter, tapi tidak apa-apa karena ada538257874440
tersedia dan saya menggunakan208827064575
dan208827064575 + 8031810176 < 538257874440
.Namun sebenarnya "menghitung" hingga kombinasi target yang akan memakan waktu sangat lama. Itu sebabnya di tautan TIO saya hanya menggunakan string input yang terlalu pendek (yang juga didukung) untuk menunjukkan bahwa output sudah benar. Akan bekerja hingga sedikit lebih banyak daripada
AAAAAA
sebelum TIO habis.ZZZZZZZZ
harus sekitar26^3 = 17576
kali lebih lambat.Cobalah online!
Dekoder hampir sama:
Cobalah online!
sumber
> <> , 75 byte, Max Diff 0, Panjang 42, skor 75
Cobalah online!
Peringatan yang adil, ini akan memakan waktu yang sangat sangat sangat lama untuk diselesaikan bahkan untuk
AAAAAAAA
kasus sepele . Berjalan melalui setiap representasi biner dari penghitung sampai (nomor 26 representasi dari input) ke nomor biner dengan 211
detik tercapai. Jika Anda ingin menguji program ini, Anda dapat menggantiab+
pada baris ketiga dengan1
yang akan mengembalikan nomor biner ke-n dengan hanya satu1
, Coba online!sumber
Python 3 , 75 byte, Max Diff 0, Panjang 42, Skor 112
Cobalah online!
Ini hanya berfungsi secara teori karena keterbatasan memori. Ada
538257874440
nol nol satu string panjang 42 dan208827064575
input yang mungkin seimbang , sehingga beberapa output yang mungkin tidak akan digunakan.-37 byte berkat @recursive
sumber
int(s,26)
untuk nilai indeks Anda daripadasum(...)
jika Anda mengubah set karakter input Anda.[0-9A-P]
, bukan? Di mesin saya,int("123ABC",26) == 12855114
C ++, 146 Bytes, 42 maxlength, 0 unbalance, skor 146
Berfungsi untuk 26 char yang terus-menerus, tetapi peringatan itu menjalankan waktu yang tidak dapat diterima
sumber
#include<algorithm>
dengan#import<regex>
.