Penolakan
Meskipun saya tahu ada pertanyaan terkait khusus ini , saya menggunakan dua pintu garasi, komponen acak, dan saya juga mendasarkan ini pada peristiwa kehidupan nyata, melihat anak saya secara tidak sengaja menurunkan salah satu pintu garasi tersebut sementara saya berjalan keluar dari garasi minggu lalu ... Tidak ada yang seperti pukulan di kepala untuk membuat jus kreatif mengalir! ;)
Latar belakang
Lucas (putra saya yang berumur 15 bulan) suka bermain dengan remote garasi. Ada dua tombol pada remote ini, satu untuk pintu garasi kiri, dan satu untuk pintu garasi kanan. Kedua tombol bekerja dengan cara yang sama; tekan sekali untuk mendapatkan pintu untuk mulai membuka, tekan lagi untuk berhenti, tekan lagi untuk mulai menutup, tekan lagi untuk berhenti lagi, dan seterusnya.
Lucas menyukai remote ini, dia akan secara acak menekan salah satu tombol, atau keduanya, atau tidak sama sekali. Jika keduanya ditekan, tidak ada sinyal yang dikirim, tetapi menekan satu tombol akan mengirimkan sinyal.
Jadi, tantangan kode-golf dibagi menjadi dua bagian:
Bagian satu
Hasilkan string 60 karakter panjang yang mewakili tombol Lucas acak ditekan lebih dari satu menit. "Acak" dalam hal ini berarti "dengan peluang yang sama untuk setiap input pada setiap centang". Karakternya adalah sebagai berikut:
- 0: Lucas menekan tombol no, atau menekan kedua tombol. Bagaimanapun, tidak ada sinyal yang dikirim.
- 1: Tombol untuk pintu garasi kiri telah ditekan oleh Lucas
- 2: Tombol untuk pintu garasi kanan telah ditekan oleh Lucas
Bagian kedua
Menggunakan string yang dihasilkan di Bagian Satu, mensimulasikan pembukaan dan penutupan garasi dua mobil menggunakan angka sebagai pemicu untuk membuka, menghentikan dan menutup pintu-pintu ini.
Pintu garasi saya cukup cepat (lihat Penafian di atas tentang alasannya). Setelah Anda menekan tombol, dibutuhkan empat detik untuk sepenuhnya terbuka atau tertutup.
Jadi, jika ditutup:
- 0 dtk: 0% terbuka (tertutup); ketika tombol ditekan, pintu mulai terbuka
- 1 dtk: 25% terbuka
- 2 detik: 50% terbuka
- 3 detik: 75% terbuka
- 4 detik: 100% terbuka, pintu berhenti
Dan karena itu, jika terbuka:
- 0 dtk: 100% terbuka; ketika tombol ditekan, pintu mulai menutup
- 1 dtk: 75% terbuka
- 2 detik: 50% terbuka
- 3 detik: 25% terbuka
- 4 detik: 0% terbuka (tertutup), pintu berhenti
Jika pintu tertentu sedang bergerak, sinyal ke pintu yang sama akan menghentikannya. Sinyal selanjutnya dikirim ke pintu yang sama setelah itu akan mengirimnya bergerak ke arah yang berlawanan. Jika pintu berhenti ketika sebelumnya telah bergerak dan sekarang terbuka penuh atau tertutup sepenuhnya ketika sinyal "berhenti" diterima, pintu akan mendaftar sebagai "berhenti" dalam keadaan terbuka atau tertutup sepenuhnya, siap untuk bergerak ke arah yang berlawanan ketika menerima sinyal baru.
Dengan simulasi ini, kedua pintu garasi pada awalnya akan berada dalam posisi tertutup. Jadi, mari kita lihat daftar perintah 10 detik dan lihat apa yang terjadi jika Lucas melakukannya di remote:
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
Keluaran
Bagian pertama dari output membutuhkan tampilan string panjang 60 karakter acak "0", "1" dan "2" karakter yang dihasilkan dari Bagian Satu. misalnya.
212022112021202211202120221120212022112021202211202120221120
Di bawah string ini, adalah pemrosesan "sinyal" ini sesuai dengan aturan yang disebutkan di atas tentang bagaimana pintu garasi akan berperilaku dengan masing-masing karakter masing-masing (berdasarkan detik ke detik). Anda harus berakhir dengan 60 baris sebagai hasilnya di bawah string tampilan awal.
Masing-masing jalur yang diproses ini akan dalam bentuk: di
N: (L:X% XXXXXXX, R:Y% YYYYYYY)mana:
- N adalah karakter ke-n dari string acak masing-masing, yang akan dalam bentuk 0, 1, atau 2.
- X% adalah persentase keterbukaan pintu kiri (tidak ada bantalan nol)
- XXXXXXX adalah status pintu kiri. Jika pintu tidak bergerak (yaitu tidak membuka atau menutup) status "berhenti" diberlakukan, artinya telah berhenti bergerak (hanya mungkin pada 25%, 50% atau 75%) atau dihentikan ketika terbuka penuh (100% ) atau tertutup sepenuhnya (0%). Kalau tidak, pintu akan menjadi "membuka" atau "menutup".
- Y% adalah persentase keterbukaan pintu kanan (tidak ada bantalan nol)
- YYYYYYY adalah status pintu kanan. Jika pintu tidak bergerak (yaitu tidak membuka atau menutup) status "berhenti" diberlakukan, artinya telah berhenti bergerak (hanya mungkin pada 25%, 50% atau 75%) atau dihentikan ketika terbuka penuh (100% ) atau tertutup sepenuhnya (0%). Kalau tidak, pintu akan menjadi "membuka" atau "menutup".
Contoh yang ditunjukkan di bawah ini menggunakan 10 "sinyal" dan 10 jalur yang diproses
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
Ini adalah kode-golf, jadi kode terpendek akan menjadi pemenang yang jelas. Saya membuat ini sedikit mudah dengan menggunakan frasa seperti "pembukaan", "berhenti" dan "penutupan", yang semuanya adalah tujuh huruf ... jadi Anda mungkin ingin memasukkannya ke dalam strategi Anda.
Semoga berhasil!
1perintah terakhir tidak menghentikan pintu kiri 75% pada contoh Anda?