Tujuan
Tulis program atau fungsi yang mengambil bilangan bulat positif n
dan secara acak menghasilkan serangkaian nada (untuk selanjutnya disebut string Pitch) panjangnya n
.
Memasukkan
Bilangan bulat nol tidak nol n
<= 100
Keluaran
Mengembalikan string acak, atau daftar karakter, yang mewakili string panjang nada yang mungkin dan valid n
. Karakter yang digunakan adalah:
- B - Ball. Jika Anda mengumpulkan 4 dari ini, adonan berjalan dan selesai memukul.
- S - Strike. Jika Anda mengumpulkan 3 dari ini, adonan keluar dan selesai memukul.
- F -Foul. Akan juga meningkatkan jumlah Strike tetapi tidak bisa mengeluarkan adonan. Yaitu, Anda tidak dapat memiliki pelanggaran menjadi nada terakhir dalam string yang valid. Setiap pelanggaran melewati dua serangan / pelanggaran tidak akan meningkatkan jumlah Serangan (adonan sudah memiliki 2 serangan pada saat itu dan yang ketiga akan mengeluarkannya).
- H - Hit. Adonan telah memukul bola untuk dimainkan dan selesai memukul.
(Ini sedikit disederhanakan tapi jangan khawatir tentang itu)
Senar nada yang valid adalah yang berakhir dengan mogok, jalan-jalan, atau pukulan.
Yaitu, string pitch yang tidak valid memiliki salah
- pitch tambahan setelah Ball 4, Strike ke-3, atau Hit
- dihentikan sebelum menghasilkan bola ke-4, serangan ke-3, atau Hit.
Aturan
- Program Anda harus dapat menghasilkan semua hasil yang mungkin untuk input yang diberikan.
- Program Anda tidak harus acak, tetapi masih harus mengikuti aturan sebelumnya.
- Ini adalah kode-golf .
Contohnya
Input => Possible Outputs
1 => [H] #Can only end with a hit
2 => [S,H], [B,H], [F,H] #Can only end with a hit
3 => [S,S,S], [F,F,S], [B,B,H], ... #Can now strike-out, otherwise must end with a hit
4 => [B,B,B,B], [S,B,S,S], [B,F,S,S], [B,B,B,H], ... #Can now be walked, struck-out, or get a hit
6 => [S,B,S,B,B,H], [F,F,F,F,F,S], ... #Can now have a full-count (3 balls, 2 strikes) before finishing
Input => Invalid Outputs
1 => [S], [B] #Not enough for a strike-out/walk
2 => [S,S] #Not enough for a strike-out/walk
2 => [H,H] #Batter has already scored a hit
3 => [S,S,F] #Fouls will not cause a strike-out
4 => [S,S,S,H] #Batter has already struck out
5 => [B,B,B,B,B] #Batter has already walked
F
detik danS
a strike-outJawaban:
Python 2 , 128 byte
Cobalah online!
Secara acak menghasilkan string pitch sampai adonan selesai, output jika ternyata panjang yang tepat, dan jika tidak coba lagi dari awal.
Python 2 , 136 byte
Cobalah online!
sumber
n=8
dapat menghasilkan rantaiF
s pada akhirnyaS/3
untuk(S>2)
memperbaikinya.05AB1E ,
445044 byteDicoret
44
tidak lagi 44 :)Pelabuhan @xnor 's Python 2 answer , jadi pastikan untuk menghapusnya juga jika Anda suka jawaban ini!
+6 byte karena perbaikan bug, dan setelah itu -6 byte lagi berkat @xnor dengan porting cara memperbaikinya yang lebih efisien dibandingkan dengan perbaikan sementara saya, seperti yang saya harapkan. ;)
Cobalah secara online atau verifikasi beberapa keluaran acak .
Penjelasan:
sumber
X/3
keX>2
.R , 148 byte
Cobalah online!
Menghasilkan string, menggunakan inklusi bersyarat dalam dataset pengambilan sampel untuk memastikan bahwa hasilnya adalah urutan pitch yang mungkin.
Kemungkinan melakukan rejection sampling (seperti yang dilakukan oleh xnor's python ) lebih pendek.
Referensi acak "F dan S" yang terus bermain di kepala saya setiap kali saya mengetik salah satu surat itu ...
sumber
JavaScript (SpiderMonkey) , 137 byte
Cobalah online!
sumber
Pyth, 53 byte
Cobalah online di sini .
Ini terasa terlalu lama, saya pikir pendekatan lain mungkin diperlukan.
sumber
JavaScript (ES6),
107 10699 byteCobalah online!
Berkomentar
sumber
Tinta ,
120119116117 byteCobalah online!
Mungkin masih golf.
Tidak disatukan (diformat ulang sedikit)
Suntingan
->->
bukan->END
.n
sebelumnya.sumber
APL (Dyalog Unicode) , 77 byte SBCS
Cobalah online!
sumber
Arang , 57 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Mulailah dengan 0 bola dan 0 serangan.
Ulangi semua pengiriman kecuali yang terakhir.
Jika jumlahnya kurang dari tiga bola, maka hasilkan angka acak dari 0 hingga 2, jika tidak hanya coinflip antara 0 dan 1.
Nilai acak 2 adalah bola jika tidak maka jumlah serangan akan meningkat.
Nilai 0 hingga 2 peta untuk menyerang, busuk dan bola, kecuali bahwa jika akan ada tiga pukulan maka pelanggaran dicetak sebagai gantinya. (Empat bola dikecualikan di atas.)
Tentukan apakah serangan atau bola akan mengeluarkan adonan dan memilih dari mereka atau pukulan yang sesuai.
sumber
Perl 5 , 122 byte
Cobalah online!
sumber
C (GCC)
164145142 byte-3 byte ceilingcat
Cobalah online
sumber
&n
alih-alihtime(0)