Dalam tantangan ini, Anda akan menulis penerjemah untuk 2 Ω (ditranskripsikan sebagai TwoMega ), bahasa yang didasarkan pada brainfuck dengan ruang penyimpanan dimensi tak terbatas.
Bahasa
2 Ω berisi tiga bagian negara:
The Tape , yang merupakan daftar tak terbatas bit, semua diinisialisasi ke 0. Ini memiliki unsur paling kiri, tapi ada unsur paling kanan.
The Memory Pointer , yang merupakan bilangan bulat tak negatif yang merupakan indeks dari elemen dalam rekaman itu. Pointer memori yang lebih tinggi mengacu pada sel kaset lebih jauh ke kanan; pointer memori 0 mengacu pada elemen paling kiri. Penunjuk memori diinisialisasi ke 0.
The Hypercube , yang merupakan konseptual ∞ berdimensi "kotak" sel, masing-masing berisi sedikit diinisialisasi ke 0. Lebar Hypercube terikat dalam setiap dimensi hanya 2 sel, tetapi tak terhingga dari dimensi berarti jumlah sel-sel tidak terhitung .
Sebuah indeks ke hypercube merupakan daftar tak terbatas bit yang mengacu ke sel di hypercube (dalam cara yang sama bahwa daftar yang terbatas bit dapat digunakan untuk merujuk kepada hypercube berdimensi berhingga). Karena rekaman itu adalah daftar bit yang tak terbatas, seluruh pita selalu mengacu pada elemen Hypercube; elemen ini disebut referensi .
2 Ω memberi arti pada 7 karakter yang berbeda:
<
mengurangi pointer memori dengan 1. Mengurangkannya di bawah 0 adalah perilaku yang tidak terdefinisi, sehingga Anda tidak perlu menanganinya.>
menambah penunjuk memori dengan 1.!
membalik bit pada referensi..
menampilkan bit pada referensi.^
mengganti bit pada sel yang ditunjuk oleh penunjuk memori pada pita dengan kebalikan dari bit pada referensi.[x]
menjalankan kodex
selama bit pada referensi adalah 1.
Tantangan
Tugas Anda adalah untuk menulis sebuah program yang mengambil string sebagai input dan mengeksekusi bahwa masukan sebagai 2 Ω Program.
Ini adalah kode-golf , sehingga jawaban terpendek yang valid (diukur dalam byte) menang.
Catatan
- Anda dapat mengasumsikan bahwa program hanya akan terdiri dari karakter
<>!.^[]
dan itu[]
akan disarangkan dengan benar. - Penerjemah Anda seharusnya hanya dibatasi oleh memori yang tersedia pada sistem. Seharusnya dapat menjalankan program sampel dalam jumlah waktu yang wajar.
Program Sampel
Cetak 1:
!.
Cetak 010:
.!.!.
Cetak 0 selamanya:
![!.!]
Cetak 0 selamanya, atau 1 selamanya jika !
dituliskan:
[.]![!.!]
cat
program: sepertinya tidak ada instruksi untuk mengambil input.
.
- mencetak nol tunggal dan kemudian ada; !^!.
- mencetak satu kemudian keluar. Akan lebih banyak yang baik. Saat ini seseorang harus memahami kiriman untuk memverifikasinya (dan karenanya meningkatkannya!)
[0,0,0,0,0,0,0...]
(yaitu keberadaan a !
pada awal program).
[.]![!.!]
untuk mencetak nilai sel itu selamanya
1
s pada pita selalu terbatas. Pada kenyataannya, ada suatu bijection yang cukup sederhana antara bilangan asli dan status rekaman (menafsirkan konten rekaman sebagai angka biner mundur), yang menunjukkan bahwa Hypercube pada dasarnya adalah array 1D yang tak terbatas, diakses dengan membalik bit dalam nilai pointer integer , bukannya di / decrementing seperti di brainfuck.