Keluarkan urutan biner ini dengan panjang 1160:
-++-+--++-++-+--+--++-+--+--++-+--++-++-+-++--++-+---+-++-+--+--++++--+--++-+--++-++----++-++-+-++--++-+-+---++-+--++-++-+--++-+--+---+-++-+--++-++-+--+--++-++-+--++-+--+++-+-+----+++-+--+--+++---++-++-+--+--+++--+-+-+--+-+++-++-+--+--++-+--++-++-+--+--++--+++---+++-+---++-+--++--+-+--+-+++-+--++-++-+--++-+--+--++-+--++--+-++-+-+--+-+-++-+--++-+--+--++-+-+-++-+-+-++---+-+--++++--+---++-+-++-+--++-+--+--++-+--++++--+---+-++++--+--++-++-+--++-+--+--++-+--++-++-+--++-+--+--++-++-+----+++-+--++--+++---+-++-+--+-++---+-++-++-+--+--++--++++-+--+--+--++++--+--+++---++-++-+--++--+-+--+--++-++-+--+--+-+++-++-+--+--++--+-++-++-+--+--+--++-++-+--+++---++-+--++-++---+++---++-++----+++--+-++-+--+--++-+--++-++-+-++--++--++----+++-++--++----++-+++--++---+++----+-+-++-++-++-+-+----+++--++-+--++-++-+--+--+--++-+--++-++-+--++--+-+--+-+-+-++++---+-+-++--+--+-+-+-++-+-+++--+-+--+--+-+++--+-+++---++-+--+--++-++--++---++-+-++--++-+---+-++-+--+-++--++-+--++-+--+-+++-+--++--+-+-+++--+-+--++-++-+--+--+-++---+-++-+-++--++-+--+++-+----++--+-++-+-++--++-+--++-+-++--++-+---+-++-+--+++----+-+-++--++-+--++-++-++-+--+--+--++++---++---+-+-++-+-+++--+-++--+-+--+-+-++---+++-++
Urutannya
Urutan terbatas ini terstruktur dengan ketat dengan cara yang saya harap memberikan metode unik untuk kompresi. Itu muncul dari masalah perbedaan Erd, yang ditampilkan dalam tantangan sebelumnya .
Memperlakukan istilah sebagai +1 dan -1, ini adalah urutan perbedaan panjang maksimal 2, yang berarti bahwa:
Untuk setiap ukuran langkah positif
d
, jika Anda mengambild
istilah setiap th (dimulai dengand
istilah th), jumlah running dari urutan yang dihasilkan tetap antara -2 dan 2 inklusif.
Jika Anda berpikir masing-masing +
berarti satu langkah ke kanan dan -
satu langkah ke kiri, ini berarti bahwa berjalan dari setiap d
instruksi tidak pernah berjalan lebih dari 2 langkah dari posisi awal.
Misalnya, untuk d=3
, mengambil setiap suku ke-3 memberikan urutan +-++--+--+-...
, yang jumlah penjumlahannya [1,0,1,2,1,0,1,0,-1,0,1,...]
, yang tidak pernah mencapai -3 atau 3.
-++-+--++-++-+--+--++-+--+--++-+--+...
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
+ - + + - - + - - + -
1 0 1 2 1 0 1 0 -1 0 -1 ...
Urutan ini ditemukan pada tahun 2014 melalui pencarian komputer. Lihat makalah ini , di mana urutan direproduksi dalam Lampiran B. Pencarian membuktikan bahwa 1160 adalah panjang maksimum urutan ketidaksesuaian-2, meskipun ada lebih dari satu urutan panjang itu. Masalah perbedaan Erd, yang dibuktikan pada 2015 , mengatakan bahwa urutan seperti itu harus memiliki panjang yang terbatas untuk setiap perbedaan maksimum c
di tempat 2.
Persyaratan waktu
Kode Anda akan selesai dalam 5 detik . Ini untuk membatasi kekerasan.
Format output
Anda dapat menggunakan dua karakter atau nilai tetap berbeda untuk +
dan -
dalam format daftar-suka atau seperti-string. Format harus berupa format di mana nilai bit 1160 dapat langsung dibaca, tidak misalnya dikodekan sebagai angka melalui representasi binernya atau string melalui nilai karakter. Untuk output string, sebuah trailing newline diperbolehkan.
Papan peringkat
Jawaban:
Jelly , 149 byte
Ada beberapa pola, misalnya hanya 81 dari 256 panjang 8 string biner yang hadir jika seseorang memotong urutan menjadi delapan, tetapi saya belum (setidaknya belum) melihat cara untuk memanfaatkan untuk mengurangi jumlah byte dari basis lurus ke depan ini 250 kompresi dikonversi ke daftar biner.
Cobalah online! (footer memformat daftar biner ke string untuk perbandingan langsung yang lebih mudah).
sumber
Python 2 ,
269259256247245243 byteCobalah online!
sumber
JavaScript (ES6),
263253252 byteSaya mencoba menggunakan data payload sesedikit mungkin. Sayangnya - tetapi tidak mengherankan - ini membutuhkan kode dekompresi yang cukup banyak.
Kerusakan:
163153152 byteDi bawah ini adalah versi yang diformat tanpa data. Kode mentah ada di cuplikan demo.
Bagaimana?
Kami melacak jumlah yang berjalan a [i] dari setiap istilah ke- i . Setiap kali satu jumlah ini mengenai batas bawah -2 , kita tahu bahwa istilah berikutnya harus + . Logika yang sama berlaku untuk batas atas. Ini membantu hingga i = 264 dan tidak menyimpan byte tambahan di luar itu.
Ini memberi kita 599 istilah yang tidak bisa ditebak. Kami menyimpannya sebagai ⌈599 / 8⌉ = 75 byte, disandikan dalam string Base64 100-karakter.
Demo
Tampilkan cuplikan kode
sumber
Jelly ,
110109107 byteIni membutuhkan waktu terlalu lama pada TIO, tetapi selesai dalam waktu kurang dari 3 detik di komputer desktop saya.
Cobalah online!
sumber
Jelly ,
135133130129105104 byteBerdasarkan elemen sebelumnya dari urutan, algoritme membuat tebakan cerdas tentang elemen berikutnya. Ini berfungsi untuk semua kecuali 99 elemen, yang indeksnya di-hardcode sehingga elemen yang sesuai dapat ditukar.
Cobalah online!
sumber
MATL , 224 byte
Ouput adalah bentuk
1 0 0 1 0 ...
, di mana1
sesuai dengan'-'
dan0
sesuai dengan'+'
.Cobalah online!
Penjelasan
Urutan telah dikodekan run-length. Semua 720 berjalan memiliki panjang 1, 2, 3 atau 4, dengan 3 atau 4 kurang umum. Jadi masing-masing 3 telah diganti dengan 2, 0, 1 (lari 2, lalu lari 0 dari simbol lainnya, lalu lari 1 lagi) dan sama masing-masing 4 telah diganti dengan 2, 0, 2. Ini memberikan array ternary dengan panjang 862.
Array ini dikonversi ke pengkodean base-94, dan merupakan string panjang yang ditunjukkan dalam kode (
'$Te...kG'
). Pengkodean basis 94 menggunakan semua 95 karakter ASCII yang dapat dicetak kecuali untuk kutipan tunggal (yang harus diloloskan).Kode mengkonversi string itu dari basis 94 ke basis 3, dan menggunakan hasilnya untuk menjalankan-panjang mendekode simbol
[1 0 1 0 ... 0]
(array panjang 862).sumber
Jelly , 95 byte
Titik tengah antara dua pendekatan saya sebelumnya.
Kode mencoba untuk menebak 842 elemen dari urutan dan hardcode 318 yang tersisa. 19 dari tebakan itu salah dan harus dikembalikan melalui daftar indeks yang di-hardcode.
Cobalah online!
Bagaimana itu bekerja
©
B
Ḥ
C
⁽¡ɠ
Ḋ
sumber
Arang , 150 byte
Cobalah online!
Memanfaatkan kompresi string bawaan Charcoal. Penggunaan
.
untuk-
dan!
untuk+
.sumber
CJam, 153 byte
Penggunaan
1
untuk-
, dan0
untuk+
.Berisi yang tidak diinginkan. Cobalah online!
Ini sangat sederhana. Mengubah urutan panjang dari basis 256 ke basis 2.
sumber
Python 3 ,
236232 byteTerima kasih kepada Mego karena telah menghemat 4 byte
Cobalah online!
Menggunakan pengkodean CP-437. Terima kasih pada Dennis karena menunjukkan kesalahan.
sumber
437
adalah alias untukcp437
, sehingga Anda dapat mencukur 4 byte dengan menyingkirkancp
bit kedua kali mereka terjadi.Python 2 ,
364250 byteTerima kasih kepada Jonathan Allan karena telah menghemat 114 byte.
Cobalah online!
sumber
C # , 385 byte
Data
String
Hasil pura-pura.Golf
Tidak disatukan
Kode lengkap
Rilis
385 bytes
- Solusi awal.Catatan
sumber
05AB1E , 149 byte
Sangat membosankan. Hanya nomor terkompresi. Penggunaan
1
untuk-
dan0
untuk+
.Cobalah online!
sumber
PHP, 276 Bytes
Cobalah online!
sumber
Ruby , 245 byte
Output 0 untuk + dan 1 untuk -.
Cobalah online!
sumber
Perl, 164 byte
Hexdump:
Solusi yang jelas dan membosankan: cukup masukkan semua bit ke dalam string biner, 8 bit per byte. Menggunakan 0 untuk - dan 1 untuk +. Saya akan mencoba bermain golf ini lagi.
sumber
Retina , 333 byte
Cobalah online!
sumber