Di Pokemon ada 18 jenis:
Normal Fighting Flying Poison Ground Rock
Bug Ghost Steel Fire Water Grass
Electric Psychic Ice Dragon Dark Fairy
Pokemon dapat memiliki pengetikan tunggal atau ganda. Misalnya, Pikachu adalah Electric
, dan Tyranitar adalah Rock/Dark
. Urutan jenisnya tidak masalah. Pokemon tidak dapat memiliki tipe yang sama dua kali. Langkah menyerang memiliki tepat salah satu dari 18 jenis di atas.
Beberapa tipe Pokémon lemah terhadap jenis serangan tertentu. Misalnya,
Fire
Pokemon lemah terhadapWater
serangan. Ini memberikan pengganda kerusakan 2.Beberapa tipe Pokemon tahan terhadap jenis serangan tertentu. Misalnya,
Rock
Pokemon tahan terhadapNormal
serangan. Ini memberikan pengali kerusakan 0,5.Beberapa tipe Pokémon kebal terhadap jenis serangan tertentu. Misalnya,
Flying
Pokemon kebal terhadapGround
serangan. Ini memberikan pengganda kerusakan 0.
Pokemon bisa dua kali lipat lemah, dua kali lipat kebal atau kombinasi lainnya terhadap tipe serangan. Lipat gandakan pengganda untuk mendapatkan efektivitas total.
Tulis program atau fungsi yang memberikan tipe gerakan dan hasil pengetikan Pokemon menghasilkan pengganda kerusakan total dari serangan. Pengetikan Pokémon selalu ditulis sebagai A
atau A/B
, di mana A
dan B
merupakan tipe yang berbeda dari daftar di atas. Anda harus menerima pengetikan Pokemon dalam format ini. Selain dari pembatasan ini, Anda dapat mengambil input dengan cara yang wajar. Contoh format input yang dapat diterima adalah:
"Ice", "Dragon/Flying"
Tapi ini tidak bisa diterima:
["Ice", ["Dragon", "Flying"]]
Output Anda harus persis salah satu dari string berikut, diikuti oleh baris tambahan opsional:
0x 0.25x 0.5x 1x 2x 4x
Contohnya
Ground, Fire -> 2x
Normal, Rock/Dragon -> 0.5x
Fighting, Ghost/Steel -> 0x
Steel, Water/Steel -> 0.25x
Ice, Dragon/Flying -> 4x
Water, Ground/Water -> 1x
Ghost, Ghost -> 2x
Ketik efektivitas
Untuk bagan tipe ramah-manusia, saya ingin merujuk Anda ke Gamepedia . Untuk membuat proses golf sedikit lebih cepat, saya akan memberikan Anda matriks efektifitas terkompresi yang ramah komputer. Bagilah setiap angka dengan dua untuk mendapatkan pengganda yang benar (1 -> 0,5, 4 -> 2):
Defending type
(same order)
Normal 222221201222222222
Fighting 421124104222214241
A Flying 242221421224122222
t Poison 222111210224222224
t Ground 220424124421422222
a Rock 214212421422224222
c Bug 211122211124242241
k Ghost 022222242222242212
i Steel 222224221112124224
n Fire 222221424114224122
g Water 222244222411222122
Grass 221144121141222122
T Electric 224202222241122122
y Psychic 242422221222212202
p Ice 224242221114221422
e Dragon 222222221222222420
Dark 212222242222242211
Fairy 242122221122222442
Kode terpendek dalam byte menang.
Jawaban:
Pyth -
246245188 byteMengkodekan matriks dengan kompresi dasar, mungkin akan menggunakan pengindeksan / hashing modular untuk indeks matriks tapi sekarang saya belum melakukan sesuatu yang mewah dengan itu.
Test Suite .
sumber
Java,
663 639582 byteAda meja pencarian sederhana yang memakan banyak ruangan. Itu hanya menemukan jenis yang benar dan mengalikannya. Sebut saja seperti ini:
Dengan beberapa jeda baris terlihat seperti ini:
sumber
c="222...442".split(",");
for(String B:b)
for-loop Anda mulai dari 24 menjadi 15, menyimpan 9, dan menjadikan Anda[b[i++]]
sebagaiB
untuk 7 penghematan lebih. Total 16 penghematan!i
, saya harus mengurangi satu nanti atau memulainya-1
, yang mana akan meniadakan byte yang disimpan.JavaScript (ES6), 287
Saya belum melihat kompresi jenis yang baik, jadi ini salah satunya.
Tidak Disatukan:
Oh, dan inilah bagan saya (ingat itu dipesan sehingga surat tidak akan cocok dengan kata-kata yang tercantum di bawahnya):
sumber
atob
, Anda dapat menyimpan 26 byte dengan menggunakannyabtoa
. Ketika Anda menyandikannya, pastikan untuk menambahkan karakter tambahan karena"...pew5"
menjadi"...peww=="
karena perataan byte.Pikalang, 868068 byte
Ini terlalu bagus untuk dilewati. ( Terima kasih, mbomb007. )
Ini pada dasarnya tabel pencarian yang kurang optimal. Saya pertama kali mengkodekan setiap jenis sebagai
Ini menghasilkan representasi unik untuk setiap jenis. Jenis kosong (ketika pokemon yang membela hanya memiliki satu jenis) dikodekan sebagai
0x00
.Setelah itu saya hanya menggunakan kekacauan yang
if-else
setara untuk memeriksa semua ~ 5800 kombinasi.Kode
Stack Exchange tidak mengizinkan saya memposting kode secara keseluruhan, jadi ini dia gzipped + base64'd.
Contoh
Rupanya penerjemah resmi Pikalang belum siap, tetapi karena ini adalah pengganti Brainfuck yang sepele, saya mengujinya menggunakan penerjemah Brainfuck.
Input dipisahkan oleh baris baru dan memerlukan baris tambahan tambahan baru.
Program ini menggunakan lokasi memori -1, jadi jika penerjemah Anda tidak diizinkan keluar dari sisi kiri kaset, tambahkan kode dengan a
pipi
atau a>
(masing-masing untuk Pikalang dan Brainfuck).Brainfuck, 193708
Berikut adalah program yang sama di Brainfuck (juga + gzped base64'd).
Program ini berisi empat bagian:
Struktur program utama
Berikut skrip yang menghasilkan tabel pencarian:
BTW, jawaban ini membutuhkan 29.817 byte. :)
sumber
PIPI
dapat diartikan sebagai>
atau++
). Juga BFC tampaknya akan membutuhkan kode casing yang besar.C ++ 14,
420416Masukan harus berupa stdin dan dalam bentuk
Normal, Rock/Dragon
Versi langsung .
Dengan spasi putih:
sumber
Tcl, 382
Skrip berisi data terkompresi termasuk byte non-UTF-8. Berikut ini skrip persis yang dikodekan dalam basis 64:
Menggunakan
zlib
perintah untuk kompresi.sumber
Lua,
758661633 byteTidak Disatukan:
Sebut saja dengan
f("Grass","Water/Flying")
sumber
m
langsung karena hanya direferensikan sekali.m
kee
lebih murah, karenae
digunakan beberapa kali.e={...}[r]
:? Karena saya mencobanya dan itu tidak sah: /Python 3 - 362
Format input adalah tipe bergerak dan tipe Pokemon, dipisahkan oleh spasi. Misalnya
Fire Grass
, atauWater Steel/Electric
.Tabel disimpan adalah string di mana indeks masing-masing karakter berada dalam kisaran 40 hingga 103 dan mewakili 3 jenis kombinasi. Daftar jenis disimpan sebagai karakter ke-3 dan ke-4 (jika ada) dari masing-masing jenis, yang dibandingkan dengan karakter ke-3 dan ke-4 dari setiap jenis yang dimasukkan.
sumber
'rmghyiis...'.find(x[2:4])//2
alih-alih"rm gh yi is ...".split().index(x[2:4])
e
dang
karakter .... mungkin tiga awalan huruf dapat digunakan dan Anda masih akan memiliki penghematan dari.find(...)//3
versus.split().index(...)
/
antara dua jenis untuk Pokemon berjenis ganda, misalnyaSteel/Electric
.PHP, 426
Input sampel:
Output sampel:
sumber