Klein adalah bahasa 2D yang saya rancang yang dapat disematkan pada 12 permukaan topologi yang berbeda. Program Klein dapat dijalankan pada permukaan yang berbeda dengan mengubah argumen baris perintah.
Topologi menentukan ke mana penunjuk instruksi berjalan ketika keluar dari tepi program. Ketika bergerak dari tepi IP akan melompat ke tepi dengan warna yang cocok, dan akan mempertahankan posisinya relatif terhadap panah, yaitu pointer akan menghemat jarak dari kepala panah.
Misalnya topologi 000
, topologi yang digunakan oleh sebagian besar bahasa 2D, menyebabkan penunjuk instruksi membungkus ke sisi lain ketika jika bergerak dari tepi.
Tugas
Tugasnya cukup sederhana, tulis program Klein yang ketika dijalankan akan menampilkan topologi yang dijalankan. Angka-angka individual dapat dipisahkan oleh spasi. (misalnya 000
dan 0 0 0
keduanya keluaran yang diizinkan). Anda dapat memilih untuk menggunakan atau mengabaikan -A
flag baris perintah itu tidak akan dikenakan biaya byte jika Anda menggunakannya.
Ini adalah kode-golf sehingga jawaban terpendek akan menjadi pemenangnya.
Berikut ini adalah test driver online yang dapat digunakan untuk menguji semua topologi sekaligus. Untuk menjalankan dalam mode integer hapus -A
.
Jawaban:
5248 byteCobalah online!
Driver Penguji
Penjelasan
Di Klein IP dimulai di sudut kiri atas ke kanan. Langkah pertama yang saya ingin program saya lakukan adalah mengirim IP dari bagian atas program untuk menentukan bit pertama dan ketiga. IP akan masuk kembali ke program sebagai berikut tergantung pada topologi:
Saya memutuskan bahwa program saya akan merekam bit ketiga dari topologi sebelum bit kedua tetapi menukar mereka (menggunakan
$
) sebelum akhir. Untuk itu saya menambahkan kode untuk mendorong bit pertama dan ketiga dari setiap topologi pada titik masuk IP yang dijelaskan di atas.Selanjutnya saya fokus pada topologi dengan
1
atau2
sebagai bit pertama mereka. Saya memutuskan untuk menggabungkan kembali dan mengirimkannya ke sisi yang tidak terhubung ke sisi utara sehingga saya dapat menentukan bit kedua.Dengan mudah ini mengelompokkan kembali topologi dengan bit kedua mereka sehingga saya bisa mendorongnya ke stack.
Setelah itu saya hanya perlu menukar bit kedua dan ketiga dan menghentikan program.
Sekarang topologi dengan
1
atau2
sebagai bit pertama mereka berfungsi, saya bisa fokus membuat topologi dengan0
memberikan hasil yang benar. Langkah pertama adalah mengkombinasikan mereka sehingga mereka dapat dipisahkan menjadi dua kelompok berdasarkan bit kedua mereka.Saya pertama-tama fokus pada topologi-topologi itu dengan
1
bit kedua. Ini menghadirkan tantangan karena bagi mereka IP berada pada jalur yang sudah digunakan oleh topologi2
sebagai bit pertama mereka. Karena akan sulit untuk memasukkan lebih dari satu instruksi pada baris tersebut (satu instruksi dapat dilompati menggunakan!
instruksi) dan saya kehabisan ruang secara keseluruhan, saya memutuskan untuk mengarahkan IP dari baris itu dan menggunakan kembali1
instruksi yang ada untuk mendorong bit kedua.Sekarang semua yang tersisa untuk dilakukan untuk topologi dengan
1
bit kedua mereka adalah untuk memperbaiki urutan bit kedua dan ketiga dan mengakhiri.Terakhir tetap topologi dengan
0
bit kedua mereka. Tidak ada banyak ruang yang tersisa dalam program dengan ruang tidak terpakai terbesar berada di baris atas sehingga di sana saya mengarahkan ulang IP untuk topologi dengan0
bit kedua mereka.Saya masih perlu untuk mendorong
0
bit kedua dan memperbaiki urutan bit kedua dan ketiga serta menghentikan program. Untungnya, saya bisa menggunakan kembali$
instruksi yang ada sehingga instruksi0
dan@
bisa masuk dalam ruang yang tersisa.Akhirnya nops dapat dilucuti dari ujung garis untuk mendapatkan program akhir.
sumber
1168886776961605958545350 byteCobalah online!
sumber
-d
bendera itu akan melakukan hal itu. Sayangnya tidak berfungsi di TIO.44 41 40 3837 byteCobalah online!
Driver uji.
Menggunakan kotak 6 x 6. Terpendek saya bisa dapatkan dengan 8 oleh 8 persegi adalah 38 byte jika ada yang ingin mencoba memperbaikinya.
Penjelasan:
Satu kode pass-through pertama mengkodekan dua angka pertama untuk awalan
0
dan1
. Untuk2
, itu mengkodekan angka ketiga lalu yang pertama.Kemudian kami melewati IP melalui tepi ketiga untuk menentukan angka akhir. Kami menggabungkan IP dengan awalan yang sama.
Untuk
0
dan1
awalan, keduanya keluar tepi atas untuk menentukan angka ketiga.Untuk
2
awalan, IP keluar sudut dari tepi bawah.Kedua sisi menukar nomor pertama dan ketiga, mendorong nomor kedua dan menukarnya dengan yang ketiga untuk mendapatkan urutan yang benar.
sumber