Dalam teori chaos , peta tapal kuda adalah contoh bagaimana kekacauan muncul dalam proses sederhana melipat dan meremas. Bunyinya seperti ini: ambil adonan imajiner, lipat, dan akhirnya remas ke ukuran aslinya. Kekacauan muncul dalam pola bagaimana potongan-potongan adonan berakhir dalam pengaturan akhir setelah pengulangan.
Dalam kasus kami, kami akan melihat bagaimana pola biner sederhana berperilaku ketika kita lipat dan remas . Berikut adalah langkah-langkah dengan contoh 8-bit (representasi biner 201 atau 11001001
).
Potong bit menjadi dua bagian dengan panjang yang sama (tambahkan '0' di awal jika ada jumlah bit yang ganjil).
1100 | 1001
Lipat bagian pertama dari babak kedua. Perhatikan bahwa urutan babak pertama terbalik, karena kami memutar sambil melipat.
0011
1001
Labu ke bentuk aslinya. Saat tergencet, bit atas digeser ke kiri ke bit di bawah posisi aslinya.
01001011
Jika kita mengulangi ini untuk contoh ini, kita dapat melihat bahwa setelah 4 iterasi, kita kembali ke bitstring asli:
Start bits: 11001001
Iteration 1: 01001011
Iteration 2: 01001101
Iteration 3: 01011001
Iteration 4: 11001001
Jadi, untuk nilai desimal 201, jumlah siklus adalah 4.
Tantangan
- Tulis program lengkap yang menggunakan angka desimal sebagai input dan hasilkan jumlah siklus yang diperlukan untuk mengulangi proses squash-and-fold biner yang dijelaskan di atas.
- Input (desimal) harus diambil dari stdin (rentang: dari 1 hingga Googol atau 10 ^ 100).
- Output (desimal) harus ditulis ke stdout.
- Skor Anda adalah jumlah byte kode Anda.
- Jawaban Anda harus dimulai dengan [Bahasa pemrograman] - [Skor dalam byte]
- Tidak ada celah standar.
Contohnya
7 --> 3
43 --> 5
178 --> 4
255 --> 1
65534 --> 1
65537 --> 12
1915195950546866338219593388801304344938837974777392666909760090332935537657862595345445466245217915 --> 329
Catatan akhir
Yang menarik adalah bahwa jumlah siklus terkait dengan panjang representasi biner, kecuali untuk beberapa pengecualian di mana jumlah siklus lebih pendek karena pola dalam bitstring (misalnya 111110
siklus setelah 1 iterasi). Ini menciptakan peluang menarik untuk mengoptimalkan panjang kode menggunakan pola yang mendasarinya alih-alih menghitung jumlah siklus.
Jawaban:
CJam, 34 byte
Tidak ada yang mewah, itu hanya berlaku peta sampai kita kembali ke input, dan mencetak jumlah iterasi yang diperlukan.
Uji di sini.
sumber
Python 2,
175154149 byteTautan ideone
Terima kasih agtoever untuk 27 byte!
sumber
while i!=o|c==0
dan jatuhkanif i==o:break
. Menghemat 5. Mungkin (perlu diketahui) Anda juga tidak perlua
. Gunakan sajai
. Menghemat tugas (4 byte) Juga tugas j dapat diletakkan di luar loop.while i!=c|c==0
penggantian, tetapi masih dapat menyimpan beberapa byte dengan standar `atau`.Pyth, 21 byte
Saya mengetik ini di ponsel saya, jadi pastikan untuk memberi tahu saya jika ada kesalahan.
Cobalah online.
sumber