>>>>,[[<]<<+>>>[>],]<[<]<+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>[<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Cobalah online!
Aman dalam rasa BF yang tidak menutupi sel dengan 256
, tidak mendukung byte nol.
Hapus panah kanan awal jika rasa mendukung memori negatif untuk 4 byte yang disimpan.
Penjelasan
Program ini dibagi menjadi 3 tahap:
Stage 1: >>>>,[[<]<<+>>>[>],]<[<]
Stage 2: <+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>
Stage 3: [<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Tahap 1
Pada tahap ini, kami menempatkan semua karakter ke dalam kaset, sambil tetap menghitung jumlah karakter.
Ini adalah rekaman untuk input abcdefghi
setelah rekaman ini:
000 009 000 000 095 096 097 098 099 100 101 102 103
^
The 009
adalah menghitung.
Untuk setiap karakter, kami memindahkan nol pertama di sebelah kiri [<]
dan kemudian menambahkan satu ke hitungan <<+>>>
, dan kemudian pindah ke nol paling kanan [>]
untuk bersiap-siap untuk karakter berikutnya.
Tahap 2
Tahap ini melakukan akar kuadrat dari panjang yang disimpan di sel kedua.
Itu terus mengurangi 1, 3, 5, 7, ...
hingga jumlahnya mencapai nol, sambil tetap memeriksa jumlah iterasi.
Ini bekerja karena angka kuadrat dapat dinyatakan sebagai 1 + 3 + 5 + ...
.
Tahap 3
Menunjukkan akar kuadrat dari panjang yang ditemukan di atas sebagai n
.
Tahap ini menampilkan n
karakter pada satu waktu, dan kemudian menampilkan baris baru, sampai rekaman itu dihapus.