Dalam gim Pickomino , ada beberapa ubin yang terletak di tengah meja, masing-masing dengan bilangan bulat positif yang berbeda. Setiap belokan, pemain melempar dadu dengan cara tertentu dan mendapatkan skor, yang merupakan bilangan bulat negatif
Sekarang pemain mengambil ubin dengan angka tertinggi yang masih lebih rendah atau sama dengan skor mereka, menghapus ubin dari tengah dan menambahkannya ke tumpukan mereka. Jika ini tidak memungkinkan karena semua angka di tengah lebih tinggi dari skor pemain, pemain kehilangan ubin paling atas dari tumpukan mereka (yang ditambahkan terbaru), yang dikembalikan ke tengah. Jika pemain tidak memiliki ubin yang tersisa, tidak ada yang terjadi.
Tantangan
Simulasikan pemain yang memainkan permainan melawan diri mereka sendiri. Anda mendapatkan daftar ubin di tengah dan daftar skor yang didapat pemain. Kembalikan daftar ubin pemain setelah semua belokan dievaluasi.
Aturan tantangan
- Anda dapat mengasumsikan bahwa daftar dengan ubin disusun dan tidak mengandung bilangan bulat dua kali.
- Anda dapat mengambil kedua daftar input dalam urutan apa pun yang Anda inginkan
- Keluaran harus menjaga urutan ubin pada tumpukan, tetapi Anda dapat memutuskan apakah daftar diurutkan dari atas ke bawah atau dari bawah ke atas.
Aturan umum
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda dari memposting jawaban dengan bahasa yang bukan kode. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa pun'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Dianjurkan menambahkan penjelasan untuk jawaban Anda.
Contoh
(diambil dari testcase ke-6)
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Skor pertama adalah 22, jadi ambil petak tertinggi di tengah <= 22, yaitu 22 itu sendiri.
Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [22, 22, 23, 21, 24, 0, 22]
Skor berikutnya adalah 22, jadi ambil ubin tertinggi di tengah <= 22. Karena 22 sudah diambil, pemain harus mengambil 21.
Middle: [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 21]
Remaining scores: [22, 23, 21, 24, 0, 22]
Skor berikutnya adalah 22, tetapi semua angka <= 22 sudah diambil. Oleh karena itu, pemain kehilangan ubin paling atas di tumpukan (21), yang dikembalikan ke tengah.
Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [23, 21, 24, 0, 22]
Skor berikutnya adalah 23, 21 dan 24, sehingga pemain mengambil ubin ini dari tengah.
Middle: [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21, 24]
Remaining scores: [0, 22]
Pemain itu gagal dan skor nol. Oleh karena itu, ubin dengan nomor 24 (paling atas pada tumpukan) dikembalikan ke tengah.
Middle: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21]
Remaining scores: [22]
Skor terakhir adalah 22, tetapi semua ubin <= 22 sudah diambil, sehingga pemain kehilangan ubin paling atas di tumpukan (21).
Middle: [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Final Stack and Output: [22, 23]
Uji kasus
(dengan ubin paling atas terakhir dalam daftar output)
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [26, 30, 21]
Output: [26, 30, 21]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [35, 35, 36, 36]
Output: [35, 34, 36, 33]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23]
Output: [23]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: []
Output: []
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23, 0]
Output: []
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Output: [22, 23]
Tiles: [1, 5, 9, 13, 17, 21, 26]
Scores: [6, 10, 23, 23, 23, 1, 0, 15]
Output: [5, 9, 21, 17, 13, 1]
Tiles: []
Scores: [4, 6, 1, 6]
Output: []
Jawaban:
Haskell ,
119111104103 byte1 byte disimpan berkat Ørjan Johansen
Cobalah online!
Asumsikan ubin diurutkan dalam urutan menurun.
Tidak banyak yang terjadi di sini. Argumen pertama adalah tumpukan pemain, yang kedua skor mereka dan yang ketiga adalah tumpukan di tengah.
sumber
sort
naik. Kasus uji TIO tidak pernah mengenai cabang itu. Saya sangat merekomendasikan menguji semua kasus setiap kali iterasi seperti ini.(#)=span.(<)
.Japt, 24 byte
Oh! Itu tidak berhasil sebaik yang saya kira!
Mengambil input dalam urutan terbalik.
Cobalah atau jalankan semua test case di TIO
sumber
Perl 6 , 89 byte
Cobalah online!
Saya pikir ada beberapa byte lagi untuk bermain golf ini ...
sumber
C # (Visual C # Interactive Compiler) ,
159158154 byteDisebut sebagai
f(tiles)(scores)
Kalau saja
System.Void
sebenarnya tipe pengembalian dan bukan hanya pengganti untuk refleksi. Saya akan bisa menggantiif(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a);
denganvar t=a>1?m.Add(s.Count<1?0:s.Pop()):s.Push(a);
, menghemat dua byte.Cobalah online!
sumber
Ruby , 77 byte
Cobalah online!
sumber
JavaScript (Node.js) , 80 byte
Logika yang sama dengan versi ES6, tetapi menggunakan ubin sebagai bitmask BigInt dan skor sebagai array BigInts.
Cobalah online!
JavaScript (ES6),
100 98 9487 byteMengambil input sebagai
(tiles)(scores)
. Ubin dapat dilewati dengan urutan apa pun.Cobalah online!
Berkomentar
sumber
Arang , 35 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Ulangi skor.
Cari ubin tertinggi yang tersedia.
Jika ada maka ...
... lepaskan ubin dari tengah ...
... dan tambahkan ke tumpukan.
Jika tidak, jika tumpukan tidak kosong ...
Hapus ubin terbaru dari tumpukan dan kembalikan ke tengah.
Cetak tumpukan yang dihasilkan dari yang terlama ke yang terbaru.
sumber
Python 2 , 120 byte
Cobalah online!
sumber
05AB1E ,
2722 byteCobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Pyth, 32 byte
Coba online di sini , atau verifikasi semua uji sekaligus di sini .
Pasti ada ruang untuk perbaikan di sini di suatu tempat - saran apa pun akan sangat dihargai!
sumber
Perl 5
-apl -MList:Util=max
, 97 byteTIO
membaca skor dan ubin pada baris berikutnya dan mencetak output.
Bagaimana
-apl
:-p
untuk mengulang garis dan mencetak,-a
autosplit,-l
untuk chomp dari input dan menambahkan karakter baris baru ke output$_=$".<>
: untuk membaca baris berikutnya (petak) dan menambahkan spasi ke var default$_
for$i(@F){
...}
loop di$i
atas@F
bidang baris saat ini (skor)(
...?
..:
..).=$&
tambahkan pertandingan sebelumnya ke nilai ter ternary($m=max grep$_<=$i,/\d+/g)&&s/ $m\b//?$s
dalam hal nilai maks ditemukan dan dihapus dari ubin ($_
) nilai l adalah skor ($s
)$s=~s/ \d+$//?$_
jika tidak, jika nomor terakhir dapat dihapus dari skor itu ubin:$G
akhirnya sampah karena tidak bisa terjadi$_=$s;s/ //
untuk mengatur skor ke var default, dan menghapus ruang terdepansumber