Ini adalah tantangan polisi dan perampok yang agak mirip golf . Ini adalah utas polisi; utas perampok ada di sini.
Polisi
Tugas Anda adalah mendefinisikan sistem penulisan ulang abstrak yang sulit dijangkau satu kata dari kata lain. Anda akan mempersiapkan hal-hal berikut:
Seperangkat simbol, disebut alfabet. (Anda dapat menggunakan karakter Unicode untuk ini, tapi jangan gunakan spasi putih, atau simbol yang sulit dibedakan satu sama lain.)
Sebuah tali sumber terdiri dari simbol-simbol dari alfabet Anda.
Sebuah String Target terdiri dari simbol-simbol dari alfabet Anda.
Satu set aturan penulisan ulang menggunakan karakter dari alfabet Anda. (Lihat di bawah untuk definisi aturan penulisan ulang.)
Bukti yang menunjukkan apakah string sumber Anda dapat dikonversi menjadi string target Anda dengan penerapan berturut-turut aturan penulisan ulang Anda. Bukti ini mungkin terdiri dari urutan aktual dari langkah-langkah penulisan ulang, atau bukti matematika bahwa urutan seperti itu harus ada, atau bukti matematika bahwa urutan seperti itu tidak ada.
Anda akan memposting empat pertama dari ini, menjaga kerahasiaan bukti; perampok akan mencoba memecahkan jawaban Anda dengan memberikan bukti sendiri bahwa string target Anda dapat atau tidak dapat dijangkau dari string sumber Anda. Jika kiriman Anda tidak retak dalam waktu dua minggu , Anda dapat menandainya sebagai aman dan mengeditnya sebagai bukti.
Pengajuan akan diberi skor sesuai dengan jumlah karakter dalam aturan penulisan ulang mereka dan string sumber dan target mereka, sebagaimana dirinci di bawah ini. Pemenang akan menjadi pengajuan tanpa retak dengan skor terendah.
Apa itu aturan penulisan ulang?
Aturan penulisan ulang hanyalah sepasang string dalam alfabet Anda. (Salah satu dari string ini mungkin kosong.) Aplikasi aturan penulisan ulang terdiri dari menemukan substring yang sama dengan string pertama dalam pasangan, dan menggantinya dengan yang kedua.
Contoh harus menjelaskan ini:
Misalkan alfabet adalah A
, B
dan C
; string sumbernya adalah " A
"; string target adalah " C
" dan aturan penulisan ulangnya adalah
A:B
B:BB
B:A
AA:C
maka string target dapat dijangkau dengan cara berikut:
A
B (using rule 1)
BB (using rule 2)
AB (using rule 3)
AA (using rule 3)
C (using rule 4)
Mencetak gol
Skor Anda akan
- panjang string sumber Anda,
- ditambah panjang string target Anda,
- ditambah panjang semua string yang termasuk dalam aturan penulisan ulang Anda,
- ditambah satu poin ekstra untuk setiap aturan penulisan ulang.
Jika Anda menulis aturan penulisan ulang dengan pemisah titik dua seperti di atas, ini hanya panjang total semua aturan penulisan ulang (termasuk pemisah), ditambah panjang sumber dan string target. Skor yang lebih rendah lebih baik. Jumlah karakter berbeda dalam alfabet Anda akan digunakan untuk memutuskan ikatan, dengan lebih sedikit yang lebih baik.
Karunia
Saya ingin melihat jawaban yang benar-benar cocok untuk skor rendah. Saya akan memberikan 200 rep untuk jawaban pertama yang mendapat skor kurang dari 100 poin dalam tantangan ini dan tidak retak.
Mx -> Mxx
aturan tersebut, sehingga akan berakhir jauh lebih rumit daripada Hofstadter's asli.Jawaban:
326 poin - Retak oleh jimmy23013
Levelnya adalah Picokosmos # 13 oleh Aymeric du Peloux (dengan modifikasi sepele). Saya mencoba untuk menemukan level berselera yang dapat diimplementasikan dengan "kotak" dan "dinding" menjadi karakter yang sama. Untuk level ini dimungkinkan dengan membuat titik choke pusat dua kolom lebih lebar daripada satu.
Aturan / string awal / target bisa bermain golf sedikit lebih, tapi ini hanya untuk bersenang-senang.
String awal:
String target:
Aturan:
sumber
171 poin, dipecahkan oleh HyperNeutrino
Sumber:
YAAAT
Target:
VW626206555675126212043640270477001760465526277571600601
Aturan:
Hanya sesuatu yang jelas untuk dilakukan. Urutan sebenarnya dari langkah menulis ulang mungkin tidak cocok dengan jawaban SE.
sumber
VWx
di manax
terbentuk dari setiap string yang biner_
(0) dan+
(1) yang mengevaluasi10*n+6
(termasuk terkemuka_
;n
= bilangan bulat non-negatif) namunx
diberikan (626...601
) terbentuk dari biner yang mengevaluasi ke10*n+3
(untuk besarn
).33 poin, dipecahkan oleh user71546
Yang sederhana untuk memulai.
Sumber:
xnor
Target:
xor
Aturan penulisan ulang:
Aturan terakhir membutuhkan 11o ke string kosong.
sumber
139 poin (safe-ish)
Saya bermaksud jawaban ini menjadi retak, dan user202729 pada dasarnya menyelesaikannya di komentar, tetapi tidak ada yang memposting jawaban di utas perampok, jadi saya menandainya "safe-ish" dan termasuk bukti saya di bawah ini.
(Hal-hal ini jelas jauh lebih mudah dibuat daripada retak. Tidak ada yang mencoba untuk mendapatkan skor yang sangat rendah, dan mungkin ada lebih banyak kesenangan yang bisa didapat di akhir hal itu, jika tantangan ini pernah lepas landas. )
Inilah jawaban sendiri. Ini berpotensi sangat sulit, tetapi seharusnya mudah jika Anda mengetahui dari mana asalnya.
alfabet:
ABCDEⒶⒷⒸⒹⒺⒻ⬛⚪️️🎂←→
sumber:
←A→
target:
←🎂→
Aturan: (spasi tidak signifikan)
Ini adalah versi ASCII , jika unicode tidak ditampilkan dengan baik untuk semua orang.
Bukti
Ini setara dengan pesaing terbaik saat ini untuk berang-berang sibuk enam negara . Berang-berang yang sibuk adalah mesin Turing yang berhenti setelah waktu yang sangat lama. Karena itu, string sumber
←A→
memang dapat diubah menjadi string target←🎂→
, tetapi hanya setelah lebih dari7*10^36534
langkah, yang akan memakan waktu jauh lebih lama daripada usia alam semesta untuk implementasi fisik apa pun.Pita mesin Turing diwakili oleh simbol
⬛
(0) dan⚪
(1). Aturanberarti bahwa ujung kaset selalu dapat diperpanjang dengan lebih banyak nol. Jika kepala mesin Turing mendekati salah satu ujung pita, kita bisa menerapkan salah satu aturan ini, yang memungkinkan kita untuk berpura-pura bahwa pita itu tidak terbatas, dan mulai diisi dengan semua nol. (Simbol
→
dan←
tidak pernah dibuat atau dihancurkan, jadi mereka selalu ada di ujung rekaman itu.)Kepala mesin Turing diwakili dengan simbol
ABCDEⒶⒷⒸⒹⒺⒻ
dan🎂
.A
berarti kepala dalam keadaanA
dan simbol di bawah kepala adalah a⬛
(0), sedangkan Ⓐ berarti itu dalam keadaanA
dan simbol di bawahnya adalah⚪
(1). Ini dilanjutkan untuk negara bagian lain, dengan huruf yang dilingkari mewakili angka 1 di bawah kepala dan versi yang tidak dilingkari mewakili angka 0. (Tidak ada simbolF
karena itu terjadi bahwa kepala tidak pernah berakhir dalam keadaanF
dengan angka 1 di bawahnya.)Negara
🎂
adalah keadaan tersendat-sendat. Ini memiliki aturan khususJika keadaan penghentian tercapai, kita dapat berulang kali menerapkan aturan ini untuk "menyedot" semua rekaman itu (termasuk nol tambahan yang muncul dari perpanjangan pita lebih dari yang diperlukan), meninggalkan kita di negara bagian
←🎂→
. Oleh karena itu masalah keterjangkauan bermuara pada apakah negara🎂
akan pernah tercapai.Aturan yang tersisa adalah aturan transisi untuk mesin Turing. Misalnya aturannya
dapat dibaca sebagai "jika mesin dalam keadaan A dan ada nol di bawah kepala, lalu tulis 1, ubah ke keadaan B dan bergerak ke kanan." Bergerak ke kanan membutuhkan dua aturan, karena sel kaset di sebelah kanan mungkin mengandung a
⬛
, dalam hal ini mesin harus masuk ke keadaanB
, atau sel mungkin berisi a⚪
, dalam hal itu harus masuk ke keadaanⒷ
, karena ada di⚪
bawahnya.Demikian pula,
berarti "jika mesin dalam keadaan D dan ada 1 di bawah kepala, lalu tulis 0, ubah ke keadaan C dan pindah ke kiri."
Mesin Turing yang digunakan ditemukan oleh Pavel Kropitz pada tahun 2010. Meskipun sering disebutkan dalam konteks berang-berang yang sibuk, tabel transisi sebenarnya agak sulit dilacak, tetapi dapat ditemukan misalnya di sini . Dapat ditulis sebagai
yang dapat dibaca sebagai "jika mesin dalam keadaan A dan ada nol di bawah kepala, lalu tulis 1, ubah ke keadaan B dan bergerak ke kanan," dan seterusnya. Harus mudah, jika melelahkan, untuk memeriksa bahwa setiap entri tabel ini sesuai dengan sepasang aturan seperti dijelaskan di atas.
Satu-satunya pengecualian adalah aturan
1RH
yang terjadi ketika mesin berada dalam keadaan F lebih dari 0, karena tampaknya cukup sia-sia untuk membuat mesin menulis angka 1 dan bergerak ke kanan ketika mesin itu bisa langsung berhenti begitu ia memasuki keadaan F lebih dari 0. Jadi saya mengubah aturan yang seharusnyake
Inilah sebabnya mengapa tidak ada simbol
F
dalam alfabet. (Ada beberapa 'golf' lain yang bisa saya buat, tetapi saya tidak ingin terlalu banyak mengaburkannya.)Pada dasarnya itu. String target dapat dijangkau dari string sumber, tetapi hanya setelah sejumlah langkah konyol.
Satu lagi fakta yang menyenangkan: jika saya pernah menggunakannya
←A⚪⚪→
sebagai titik awal sebagai gantinya, maka tidak akan mengambil
7*10^36534
langkah untuk berhenti, tetapi10^10^10^10^18705352
langkah-langkah, yang merupakan jumlah yang sangat besar.sumber
48 poin, dipecahkan oleh bb94
Alfabet:
abc
Sumber:
cbaabaabc
Target:
cbacbcabc
Aturan penulisan ulang:
sumber
287 poin, aman
Sumber:
YAAT
Target:
Aturan:
Saya menemukan bahwa openssl jauh lebih mudah digunakan daripada gpg untuk tujuan ini.
Lihat celah HyperNeutrino ke versi yang lebih lemah. Dalam hal ini, Jumlah
C
s adalah:Dan faktor utamanya adalah:
Angka pertama mod 5 = 2, jadi mungkin untuk mendapatkan string terakhir.
sumber
402 poin
Alfabet:
abcdefghijklmnopqrstu
Sumber:
abcdoi
Target:
ioabcdnnnnnnnnnnnnnnnnnn
Aturan penulisan ulang:
Aturan terakhir memungkinkan Anda untuk membuat sebanyak yang
n
Anda butuhkan.Jelek seperti yang terlihat, itu sebenarnya cukup bagus, dengan satu atau lain cara ...
sumber
aoi:eog
yangeog
seharusnyaeag
?1337 Poin
Jelas tidak kompetitif, dan butuh waktu terlalu lama untuk membuat (saya harap saya tidak membuat kesalahan).
Petunjuk:
Alfabet:
ABEILRSTabcdefijlr
Sumber:
SIbbbbbbbdbffacebbfadbdbeecddfaeebddcefaddbdbeeecddaaaaadfaeeebdddcefbbfadbdbdbeeecdddfaeeebdddcefaddbdbeeecddaaaadfaeeebdddcefbfadbdbdbeeecdddfaeeebdddcbdbffacebfadbdbeecddfaeebddceeefadddbdbeeeecddddfaeeeebddddceefaddbdbeeecdddfaeeebdddceefadadbefadfacdbeecddfaeebddcefaeeefaddbdbeeecdddfaeeebdddcceecdfaeeaddceecefaeadcbefadfacecdfaebdceeeeefadddddbdbeeeeeecddddddfaeeeeeebddddddceeefaddaeecdddbdbffacebfadbdbeecddfaeebddceeefadddbdbeeeecddddfaeeeebddddceefaddbdbeeecdddfaeeebdddceefadadbefadfacdbeecddfaeebddcefaeeefaddbdbeeecdddfaeeebdddcceecdfaeeaddceecefaeadcbefadfacecdfaebdcefaefaeeebdddcdcefaceeaaaceefacdffacebdceeeeefadddddbdbeeeeeecddddddfaeeeeeebddddddceeefaddaeecdddbdbffacebfadbdbeecddfaeebddceeefadddbdbeeeecddddfaeeeebddddceefaddbdbeeecdddfaeeebdddceefadadbefadfacdbeecddfaeebddcefaeeefaddbdbeeecdddfaeeebdddcceecdfaeeaddceecefaeadcbefadfacecdfaebdcefaefaeeebdddcdcefaceeaaaaceefacdffacebdcecefacE
Target:
SE
Aturan penulisan ulang:
sumber
154 Poin
Alfabet:
P.!xABC[{mD<
Sumber:
[x!P.P...P..P.P....P..P.P.....P.P....P......P.P..P...P.P...Pm
(61 karakter)Target:
{CCCCC<
(ada 5C
s, jadi 7 karakter)Aturan:
Ada 19 aturan, jumlah karakter = 67.
sumber
106 poin - dipecahkan oleh HyperNeutrino
Alfabet:
ABCDEFGHIJ
Sumber:
FIABCJAGJDEHHID
Target:
F
Aturan Tulis Ulang:
Oke, HyperNeutrino telah membuktikan bahwa ini tidak dapat dipecahkan. Namun, ada solusi lain untuk ini.
Mengambil:
Nilai sumbernya genap. Nilai targetnya ganjil. Jika kita mengambil setiap sisi, total nilainya, dan ambil nilainya ke mod 2, nilainya tetap sama. Karena itu, ini tidak dapat dicapai.
sumber