Ada mini game di Super Mario 3D World yang dikenal sebagai Lucky House . Ini terdiri dari mesin slot dengan 4 blok.
Setiap blok mungkin salah satu dari 5 ikon berbeda (Bunga, Daun, Bel, Cherry atau Boomerang) dan tujuan pemain adalah untuk mendapatkan ikon identik sebanyak mungkin ( lihat video ).
Pemain diberi koin, yang pada gilirannya dapat dikonversi menjadi kehidupan ekstra. Tugas Anda adalah menghitung jumlah nyawa ekstra yang dimenangkan.
Bergantung pada jumlah ikon yang cocok, jumlah koin yang dihadiahi adalah sebagai berikut:
- Tidak ada yang cocok - 10 koin
- Satu pasang - 100 koin
- Dua pasang - 200 koin
- Tiga jenis - 300 koin
- Empat jenis: 777 koin
Anda memenangkan satu kehidupan ekstra (1UP) setiap 100 koin . Karenanya, Anda dijamin akan menang tepat 1UP dengan satu pasangan , 2UP dengan dua pasangan dan 3UP dengan 3-of-a-kind . Namun, jumlah nyawa dimenangkan tanpa pertandingan atau 4-of-a-kind tergantung pada stok koin awal Anda.
Sumber: Super Mario Wiki
Memasukkan
Anda diberi stok koin awal dan daftar empat nilai mewakili ikon terakhir pada mesin slot.
Keluaran
Jumlah nyawa ekstra yang dimenangkan: , , , , atau .
Aturan
- Anda dapat mengambil ikon dalam format apa pun yang masuk akal: misalnya sebagai daftar, sebagai string, atau sebagai 4 parameter berbeda.
- Setiap ikon dapat diwakili oleh integer satu digit atau karakter tunggal . Silakan tentukan set ikon yang digunakan dalam jawaban Anda. (Tapi kamu tidak harus menjelaskan bagaimana mereka dipetakan ke Flower, Leaf, Bell, dll., Karena itu tidak masalah sama sekali.)
- Anda tidak diizinkan untuk memetakan ulang nilai output.
- Ini adalah 🎰 kode-golf 🎰.
Uji kasus
Dalam contoh berikut, kami menggunakan daftar bilangan bulat di untuk mewakili ikon.
coins icons output explanation
-------------------------------------------------------------------------
0 [1,4,2,5] 0 no matches -> 0 + 10 = 10 coins -> nothing
95 [3,1,2,4] 1 no matches -> 95 + 10 = 105 coins -> 1UP
25 [2,3,4,3] 1 one pair -> 25 + 100 = 125 coins -> 1UP
25 [4,5,5,4] 2 two pairs -> 25 + 200 = 225 coins -> 2UP
0 [2,5,2,2] 3 3-of-a-kind -> 0 + 300 = 300 coins -> 3UP
22 [1,1,1,1] 7 4-of-a-kind -> 22 + 777 = 799 coins -> 7UP
23 [3,3,3,3] 8 4-of-a-kind -> 23 + 777 = 800 coins -> 8UP
99 [3,3,3,3] 8 4-of-a-kind -> 99 + 777 = 876 coins -> 8UP
sumber
Jawaban:
x86-16 Majelis,
564139 byteBiner:
Belum dirakit:
Masukkan jumlah koin awal
DX
,SI
arahkan ke mulai dari "ikon" byte (yang bisa'1'
-'5'
, atau nilai byte apa pun). Keluarkan jumlah 1UP diBX
.Penjelasan:
Input empat byte diulang dan dibandingkan dengan byte yang tersisa di sebelah kanan, dengan menghitung jumlah kecocokan. Skor untuk setiap jenis pertandingan diberikan dan ditambahkan hingga total. Karena four-of-a-kind juga tiga-of-a-kind dan juga satu-pasangan, nilai dari masing-masing jenis skor dapat diuraikan sebagai berikut:
Contoh:
[2, 2, 2, 2]
(four-of-a-kind) = 7 1UP + 77 koin[2, 5, 2, 2]
(three-of-a-kind) = 3 1UP[4, 5, 5, 4]
(dua pasangan) = 2 1UP[2, 3, 4, 3]
(satu pasang) = 1 1UPJika jumlah 1UP yang diperoleh adalah 0 di akhir, 10 koin diberikan. Jika total koin lebih besar dari 100, 1UP tambahan diberikan.
Berikut ini adalah program uji untuk PC DOS yang mencakup rutinitas ekstra untuk menangani nilai integer I / O:
Unduh dan uji LUCKY.COM untuk DOS.
sumber
Jelly ,
23 22 2019 byte-1 berkat Erik the Outgolfer (digunakan
³
sebagai penggantiȷ2
) juga digunakan dalam versi yang lebih baru dua kali-1 berkat Grimy (kurangi satu sebelum menjumlahkan alih-alih mengurangi empat sesudahnya)
Mungkin bisa dikalahkan?
Tautan diad menerima daftar dan bilangan bulat yang menghasilkan bilangan bulat.
Cobalah online! Atau lihat test-suite .
Bagaimana?
Cara evaluasi tangan bekerja untuk setiap jenis tangan:
Alternatif 20:
ĠẈị“¡ıKĖ‘S×4+E{»⁵+:³
sumber
ȷ2
dengan³
mengasumsikan program fungsi tidak mengambil argumen baris perintah , meskipun itu bukan apa yang saya pikir Anda maksud dengan "beatable". : PċⱮ`’SṚḌH׳«777»⁵+:³
Zsh ,
117 ...60 byte-13 dengan menggunakan kriteria berbeda untuk diferensiasi, -9 dengan menggabungkan kasus, -28 dengan mengubah
case
pernyataan ke ternary aritmatika bersarang, -4 terima kasih kepada @JonathanAllan, -1 dengan mengoptimalkan terner, -2 karena saya secara tidak sengaja digunakanecho
ketika menambahkan Optimasi Jonathan.Mengambil hitungan koin pada stdin, dan memblokir input sebagai argumen. Argumen dapat berupa angka, karakter, atau bahkan string:
./foo.zsh flower leaf flower boomerang
Cobalah online:
117 104 95 67 63 6260Inilah keajaiban dari jawaban 67 byte:
sumber
C # (Visual C # Interactive Compiler) ,
12310690 bytePort jawaban python saya, yang berasal dari jawaban @ Dat.
Cobalah online!
sumber
Python 2 , 63 byte
Cobalah online!
Saya memiliki ide yang sama dengan Fungsi Gamma untuk digunakan
sum(map(l.count,l))
sebagai "sidik jari". Tapi, alih-alih menggunakan rumus aritmatika pada hasilnya, saya menggunakan tabel pencarian, pertama-tama menekan nilai menjadi 0 hingga 4 menggunakan rantai mod%14%5
. Membagi semua nilai poin dengan 100 menghemat beberapa byte.sumber
Python 3 , 68 byte
Cobalah online!
Port Python pada port C saya pada port Bash pada jawaban Zsh saya, golf ulang dengan bantuan dari halaman "Tips untuk bermain golf di Python". Port terakhir, saya bersumpah ... Saya kehabisan bahasa. Saya nyaman bermain golf. Saya ingin tahu bagaimana strategi ini dibandingkan dengan jawaban Python lainnya. Sekali lagi, mungkin ada beberapa cara untuk mengalahkan ini.
Yang ini ternyata sangat bagus, jadi saya menambahkan tabel di bawah ini yang meringkas apa yang terjadi sehingga orang lain dapat port atau meningkatkan ini.
Python 3.8 (pra-rilis) , 63 byte
Puji
:=
walrus!Cobalah online!
sumber
Perl 6 ,
4844 byteCobalah online!
Fungsi kari
f(icons)(coins)
.sumber
Python 2 ,
969189 byte-2 byte terima kasih kepada @Kevin Cruijssen
Cobalah online!
sumber
(100*sum((a==b,a==c,a==d,b==c,b==d,c==d))
-2 byte.PHP,
153127 byte@ 640KB membuat beberapa perubahan yang sangat pintar untuk mempersingkat lebih lanjut:
Cobalah online!
sumber
Python 3 ,
126111108103 byteCobalah online!
sumber
Python 3.8 (pra-rilis) , 78 byte
Dat menjawab, tetapi lebih banyak bermain golf.
Cobalah online!
sumber
Perl 5
-pF
, 46 byteCobalah online!
Input pertama adalah hasil putaran, menggunakan 5 huruf ASCII unik, kecuali
q
(saya sarankanabcde
). Input baris kedua adalah jumlah koin saat ini.Bagaimana?
Semua jumlah yang terlibat dibagi dengan 100, sehingga program ini menghitung jumlah nyawa (termasuk yang sebagian) saat ini diperoleh. Trik untuk solusi ini ada di
map
. Jika memungkinkan entriabcde
, kemudian masing-masing$a
,$b
,$c
,$d
, dan$e
memegang hitungan berapa kali karakter ini sebelumnya pernah terlihat. Itu akan ditambahkan ke total berjalan ($q
) setiap kali karakter terlihat. Total berjalan dinaikkan jika ada empat jenis (efektif bonus 177 koin).sumber
JavaScript (Node.js) , 64 byte
Cobalah online!
Saya pikir harus ada setidaknya satu jawaban JavaScript untuk tantangan Arnauld!
Konsep di sini terutama untuk menggunakan jumlah elemen berbeda sebagai kunci pencarian.
Untuk membedakan antara 2 pasangan dan 3 jenis, array input diurutkan dan elemen 2 tengah dibandingkan.
sumber
PHP ,
8984 byteCobalah online!
Input dari baris perintah, output ke
STDOUT
:sumber
Stax , 23 byte
Jalankan dan debug itu
Program ini menggunakan set sembarang 5 bilangan bulat untuk ikon.
Prosedur:
Inilah output dari visualizer state stack eksperimental yang telah saya kerjakan untuk rilis stax berikutnya. Ini adalah versi tanpa kode yang sama dengan status stack yang ditambahkan ke komentar.
Jalankan yang ini
sumber
Retina 0.8.2 , 72 byte
Cobalah online! Tautan termasuk kasus uji. Mengambil input sebagai 4 digit ASCII yang dapat dicetak diikuti oleh jumlah koin awal dalam digit. Penjelasan:
Urutkan non-digit sehingga simbol identik dikelompokkan bersama.
Skor empat-of-a-kind 777.
Three-of-a-kind skor 300.
Setiap pasangan mendapat skor 100, jadi dua pasangan akan mendapat skor 200.
Jika tidak ada pertandingan maka Anda masih menang!
Konversikan nilai menjadi unary dan ambil jumlahnya.
Integer membagi jumlah dengan 100 dan mengkonversi kembali ke desimal.
sumber
Retina , 56 byte
Cobalah online! Tautan termasuk kasus uji. Mengambil input sebagai 4 digit ASCII yang dapat dicetak diikuti oleh jumlah koin awal dalam digit. Penjelasan:
Skor empat-of-a-kind 777.
Masing-masing pasangan mendapat nilai 100.
w
Mempertimbangkan semua pasangan, sehingga mereka dapat disisipkan, ditambah tiga jenis dapat diuraikan menjadi tiga pasangan, sehingga secara otomatis mencetak 300.Jika tidak ada pertandingan maka Anda masih menang!
Konversikan nilai menjadi unary dan ambil jumlahnya.
Integer membagi jumlah dengan 100 dan mengkonversi kembali ke desimal.
sumber
APL + WIN, 42 byte
Anjuran untuk ikon diikuti oleh stok koin.
Cobalah online! Atas perkenan Dyalog Classic
sumber
Bash ,
76 75 7170 byte-4 Terima kasih kepada @JonathanAllan, -1 dengan mengatur ulang terner.
Bash port jawaban Zsh saya.
Cobalah online! Cobalah online! Cobalah online!Cobalah online!sumber
C (gcc) ,
92 84 82 81 7978 byte-1 oleh
x+=(..!=..)
-5 dengan kembali melalui tugas , -4 berkat Jonathan Allan dengan mengganti!=
dengan<
, yang menyimpan byte tempat lain, -1 dengan menata ulang terner tersebut.Dari @ceilingcat: -2 dengan mendeklarasikan
i
dan dix
luar fungsi, -1 dengan mengaturx=i
dan mengurangix
.Port lain dari jawaban Zsh saya. Saya tidak terbiasa dengan golf C, mungkin ada trik lain di sini untuk menguranginya lebih lanjut.
92 84 82 81 79Cobalah secara online!sumber
x+=a[i/4]<a[i%4];c=x?(x-6?6-x:c>89):7+(c>22);
05AB1E ,
201918 bytePort of @JonathanAllan jawaban Jelly , jadi pastikan untuk membatalkannya !!
-2 byte terima kasih kepada @Grimy .
Mengambil daftar ikon sebagai input pertama (sedang
[1,2,3,4,5]
), dan jumlah koin sebagai input kedua.Cobalah secara online atau verifikasi semua kasus uji . (Test suite digunakan
T‚à+
alih-alihTMI+
, yang merupakan alternatif byte yang sama.)Penjelasan:
sumber
777‚ßTMI
bisa777T)Åm
.0.90
apakah90
koin dalam kasus itu? Karena input koin dijamin berada dalam kisaran[0,99]
, Anda dapat menanyakan OP apakah ia mengizinkannya atau tidak.Scala , 88 byte
Cobalah online!
sumber
Arang , 30 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input sebagai jumlah koin dan array nilai sebanding Python sebagai ikon. Penjelasan:
Tanpa malu-malu mencuri trik menghitung @ GammaFunction dari setengah jumlah hitungan.
Kurangi
2
dari jumlah, sehingga menghasilkan nilai-nilai yang0, 1, 2, 3
tepat, tetapi untuk 4-of-a-kind, bagi2
dengan yang9
pertama, menghasilkan7.777...
.Tetapi jika hasilnya 0, maka tidak ada kecocokan, jadi gantilah dengan
0.1
. (Menggunakan literal tidak membantu saya di sini karena saya akan membutuhkan pemisah.)Bagilah koin awal dengan 100 dan tambahkan pada kemenangan, kemudian rangkai hasilnya dan masukkan ke string untuk output tersirat.
sumber
Pyth , 32 byte
Cobalah online!
Terinspirasi oleh solusi GammaFunction. Mengambil input sebagai
[coins, [icons]]
.sumber
PowerShell , 94 byte
Cobalah online!
Belum dibuka:
sumber
PowerShell ,
114107 byte-7 byte berkat mazzy
Cobalah online!
Operasi ternary besar PowerShell dengan rasa yang dibangun di atas pengelompokan dan pengurutan jumlah daftar input. Penyortiran diperlukan karena kami memanfaatkan fakta bahwa daftar yang dikelompokkan semakin pendek semakin banyak pengulangan yang ada. Bahkan, inilah semua nilai yang mungkin:
Memotong ke int masih mahal.
Belum dibuka:
sumber
0
? Cobalah online!Bahasa Wolfram (Mathematica) , 54 byte
Cobalah online!
sumber
R,
102,91, 81 byteBerhasil menurunkan 11 byte (dan memperbaiki bug) berkat @Giuseppe. Dikelola 10 lebih lanjut terinspirasi oleh / 10 ide @ Giuseppe
Tidak disatukan
Cobalah online!
sumber
as.factor()
danf=
untuk mendapatkannya hingga 88 byte.table
- saya tidak terbiasa dengan itu seperti yang seharusnya - saya mulai dengansummary(as.factor(v))
. Saya lebih suka meninggalkanf=
. Saya tidak merasa kode lengkap tanpa itu, tapi saya sadar itu pilihan gaya.f=
; jangan ragu untuk memasukkan tautan TIO ke dalam jawaban Anda :-)sum(s==2)
membantu. Tetapi diperlukan menulis ulang segala sesuatu yang lain, dan / 10 tidak lagi menghemat ruang (saya tidak berpikir)8051 Assembly (kompilasi hingga 158 bytes)
Ini adalah pendekatan naif VEEEEEEEEEERRY, ini belum teruji dan tidak diserang tetapi saya cukup percaya diri yang bekerja. Hal yang perlu dipertimbangkan adalah:
1) 8051 adalah mesin akumulator yaitu. diperlukan instruksi bergerak yang mungkin tidak diperlukan oleh arsitektur lain sama sekali.
2) 8051 adalah mesin 8bit karena itu harus dilakukan beberapa tipu daya untuk angka> 255 yang membuat lebih banyak kode dan karenanya ada kerugian dari platform atas yang lain.
sumber