Latar Belakang
Fractran adalah bahasa pemrograman lengkap Turing esoterik yang ditemukan oleh John Conway. Program Fractran terdiri dari daftar fraksi yang dipesan. Program dimulai dengan mengambil satu bilangan bulat sebagai input. Setiap iterasi program, ia mencari daftar untuk fraksi pertama sedemikian sehingga mengalikan angka dengan fraksi itu menghasilkan bilangan bulat lain. Kemudian mengulangi proses ini dengan nomor baru, mulai kembali di awal daftar. Ketika tidak ada pecahan pada daftar yang dapat dikalikan dengan nomor, program berakhir dan memberikan nomor sebagai output.
Alasan bahwa Fractran adalah Turing-complete adalah karena mensimulasikan mesin register. Faktorisasi utama bilangan menyimpan isi register, sedangkan pembagian dan penggandaan adalah cara untuk menambah dan mengurangi kondisional dari register. Saya akan merekomendasikan membaca artikel Wikipedia (ditautkan di atas).
Tantangan
Tugas Anda adalah untuk menulis program sesingkat mungkin yang dapat mengambil program Fractran yang valid dari STDIN sebagai satu-satunya masukan dan menghasilkan program BF yang valid ke STDOUT yang mensimulasikan program Fractran. Ada dua cara untuk mensimulasikan program Fractran dengan BF.
CATATAN: Jawaban Anda bukan program BF. Jawaban Anda adalah kode yang menghasilkan program BF dari setiap program Fractran yang diberikan. Tujuannya adalah untuk mendapatkan program BF menjadi setara dengan program Fractran. (secara teknis Anda bisa melakukan kompetisi di BF, tetapi itu akan sulit)
Pilihan 1
Program Anda harus menghasilkan program BF yang melakukan hal berikut:
- Mengambil tepat 1 angka dari STDIN dalam bentuk karakter ASCII yang sesuai (karena cara input BF bekerja), yang merupakan input ke program Fractran.
- Mencetak tepat 1 angka ke STDOUT dalam bentuk karakter ASCII yang sesuai, yang merupakan keluaran dari program Fractran.
Opsi ini dimaksudkan untuk mewakili input dan output yang tepat dari mesin virtual Fractran.
pilihan 2
Kode BF yang dihasilkan oleh program Anda harus melakukan hal berikut:
- Ambil input dengan memiliki faktorisasi utama dari nomor yang sudah dikodekan dalam memori (sebelum menjalankan program). Jika inputnya 28 (2 * 2 * 7), maka akan ada nilai 2 di sel kedua dan nilai 1 di sel ketujuh (penunjuk dimulai pada sel 0). Semua sel lain akan menjadi nol.
- Berikan output dengan memiliki faktorisasi utama dari output yang dikodekan dalam memori ketika program berakhir. Jika outputnya 10, maka harus ada nilai 1 di masing-masing sel 2 dan 5. Semua sel bilangan prima lainnya harus memiliki nilai nol. Konten sel lain tidak masalah.
Opsi ini mewakili model komputasi di belakang bahasa Fractran.
Aturan dan Persyaratan
- Input (atas program Anda) akan menjadi daftar fraksi di STDIN. Akan ada satu fraksi per baris dengan koma antara pembilang dan penyebut. Baris kosong mewakili akhir input. Fraksi akan selalu direduksi menjadi istilah terendah.
- Output program Anda harus berupa program BF satu jalur yang valid untuk STDOUT. Program ini harus dapat mensimulasikan program Fractran tertentu sesuai dengan salah satu dari dua opsi. Untuk setiap input, program BF yang dihasilkan harus dapat menghasilkan output yang sama dengan program Fractran.
- Anda harus menyatakan opsi mana yang Anda pilih.
- Anda dapat memilih batas pada memori dan pita BF, dan apakah itu dibungkus
- KODE GOLF. Juga, ukuran program BF yang dikeluarkan tidak masalah, hanya ukuran program yang melakukan konversi.
- Program hanya terdiri dari ASCII yang dapat dicetak
Jika saya ambigu di mana saja, jangan ragu untuk bertanya. Ini adalah tantangan yang sangat rumit untuk digambarkan.
Selain itu, silakan posting kode BF yang dihasilkan program Anda untuk input berikut, untuk memberikan cara mudah untuk memeriksa apakah program Anda berfungsi:
33,20
5,11
13,10
1,5
2,3
10,7
7,2
Program ini menghitung jumlah 1s dalam ekspansi biner suatu angka. Namun, input dan output diformat aneh (seperti semua program Fractran). Input adalah dari bentuk 2 ^ A, sedangkan output dari bentuk 13 ^ B.