Diberikan string yang mewakili keadaan saat ini dari permainan Monopoli pada awal giliran pemain, kompres semua data yang diperlukan ke dalam output terkecil. Jawaban akan dinilai berdasarkan ukuran output dan ukuran sumber .
Catatan: Ada banyak variasi regional, tetapi semua referensi dalam posting ini untuk nama properti, dll, didasarkan pada forum ini .
Memasukkan:
Input akan diberikan sebagai ;
string terpisah. String ini diberikan kepada program dengan cara apa pun yang biasa dalam bahasa yang Anda pilih, apakah itu stdin, argumen, dll.
Input yang belum diformat terlihat seperti ini:
numPlayers (1 to 8)
whose turn (0 to numPlayers-1)
for each player:
bankrupt? (true/false)
money (0 to 2^16-1)
get-out-of-jail-free cards (0 to 2)
position (0 to 39)
jail turns (-1 to 2)
for 28 properties:
owner (-1 to numPlayers-1)
mortgaged? (true/false)
improvement level (0 to 5)
for 16 chance cards in deck:
card index (-1 to 15)
for 16 community chest cards in deck:
card index (-1 to 15)
Contoh input yang diformat adalah ini:
3;1;false;1546;0;14;-1;false;7692;1;10;1;true;1;false;1;1;false;0;0;true;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;3;12;7;4;5;2;13;11;15;6;8;9;10;1;14;-1;
Diambil sedikit demi sedikit:
3;1;
Ada 3 pemain, dan giliran pemain 1 (diindeks nol, jadi pemain kedua )
Pemain
false;1546;0;14;-1;
false;7692;1;10;1;
true;
Pemain pertama:
- tidak bangkrut
- memiliki uang tunai $ 1546
- memiliki 0 kartu bebas-keluar-penjara
- ada di posisi 14 (Virginia Ave)
- tidak ada di penjara
Pemain kedua ada di penjara, dan sudah satu giliran. Saya tidak yakin mengapa , karena dia memiliki kartu GOoJF, tetapi dia ada di sana.
Pemain ketiga bangkrut, dan informasi lebih lanjut tidak diperlukan atau diberikan.
Properti
1;false;1;
1;false;0;
0;true;0;
-1;false;0;
-1;false;0;
-1;false;0;
...
Properti terdaftar secara berurutan di sekitar papan, mulai dari Mediterania dan berakhir di Boardwalk. Properti yang tidak dapat dimiliki tidak termasuk dalam daftar ini, sehingga akan ada total 28. Tingkat peningkatan 0
berarti tidak ditingkatkan. Level 1
adalah satu rumah, hingga level 5
untuk sebuah hotel. A -1
untuk pemilik berarti itu tidak dimiliki oleh pemain mana pun.
Menurut aturan standar, properti yang digadaikan harus dimiliki dan tidak boleh diperbaiki. Properti yang diperbaiki harus dimiliki dan tidak boleh digadaikan.
Selain itu, agar properti ditingkatkan, pemain harus memiliki seluruh blok warna. Untuk keperluan game ini, kami tidak peduli jika properti ditingkatkan "merata".
Perhatikan bahwa posisi ini tidak sama dengan posisi pemain yang diberikan di atas. Sebagai contoh, seorang pemain pada 5
posisi akan berada di Reading Railroad, yang merupakan properti ketiga dalam daftar (karena Go, Community Chest, dan Pajak Penghasilan tidak dapat dimiliki). Posisi pemain berjalan dari 0
(Go) searah jarum jam ke 39
(Boardwalk).
Kartu-kartu
0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;
3;12;7;4;5;2;13;11;15;6;8;9;10;1;14;-1;
Setiap dek Peluang dan Peti Komunitas memiliki 16
kartu total. Angka-angka disajikan ketika mereka muncul di dek yang sedang dikocok. Untuk contoh ini, kartu pertama yang ditarik dari dek Peluang akan berupa kartu 0
, diikuti oleh kartu 1
(siapa pun yang mengocok dek itu menyebalkan). Kartu pertama yang ditarik dari dada Komunitas adalah kartu 3
, lalu 12
.
Jangan khawatir tentang apa yang masing-masing kartu berarti (teks kartu), kecuali untuk kartu 0
. Itulah kartu Keluar dari Penjara untuk dek itu. Jika seorang pemain memilikinya, itu akan berada di akhir daftar, diwakili sebagai -1
.
Keluaran:
Anda harus menampilkan (untuk menghibur, stdout, atau file) representasi dari kondisi permainan. Ini harus mencakup semua informasi yang diperlukan untuk mewakili permainan. Misalnya, Anda dapat menghilangkan (atau menyingkat) properti yang tidak dimiliki, karena tidak dapat ditingkatkan atau digadaikan. Input tidak dapat menghilangkannya karena ini adalah daftar yang tidak terindeks.
Kompresi harus dilakukan dengan cara yang Anda dapat menghitung ukuran keluaran terburuk. Ini dapat mendiskualifikasi algoritma kompresi tertentu (kecuali Anda dapat membuktikan kasus terburuk, dan memberikan contoh input terburuk).
Kecuali kode sumber Anda adalah tidak masuk akal verbose, memberikan penjelasan tentang bagaimana permainan diwakili. Jawaban yang terdiri atas program golf dan output yang dikompres tidak disarankan. Misalnya, jika Anda menghilangkan nilai-nilai tertentu, jelaskan bagaimana cara menurunkannya dari output.
Penilaian / Aturan:
Penilaian didasarkan pada ukuran kompresi terburuk dalam bit , dan ukuran kode sumber dalam byte :
score = (outputBits * 2) + encoderSourceBytes
Jawaban lengkap harus mencakup:
- Contoh keluaran
- Sumber pembuat enkode
- Sumber dekoder (tidak dihitung terhadap skor)
Semua penyandi harus program lengkap, dan celah standar dilarang. Menggunakan pustaka kompresi internal atau eksternal juga dilarang.
Pemenangnya adalah jawaban dengan skor terendah , sebagaimana didefinisikan di atas.
sumber
The second player is in jail, and has been for one turn. I'm not sure why, since he has a GOoJF card, but he's there.
Berada di penjara adalah lategame yang bagus karena Anda tidak membayar sewa. :)Jawaban:
(Sebuah jawaban baru-baru ini diedit, yang membawa pertanyaan ini menjadi perhatian saya, dan saya memutuskan untuk mencobanya walaupun itu adalah pertanyaan lama.)
Swift 1.2 - 1016 Poin (2 * 81 + 854)
Outputnya paling buruk 81 byte, dan berubah dengan jumlah pemain.
Salah satu dari kedua metode ini berfungsi. Versi Playground sedikit lebih panjang.
Compress Playground
(Asumsi
Input.txt
ada diPlayground Documents Directory
)Compress.swift - dijalankan di Terminal menggunakan
swift Compress.swift
(Asumsi
Input.txt
ada diDesktop
)Contoh Input / Output
.
sumber
Pure C (3592 poin)
Outputnya adalah 182 byte. Ukurannya O (1), jadi ini adalah kasus terburuk.
Ini menggunakan sscanf secara ekstensif untuk membaca file, dan hanya membuang struct ke disk.
Saya harus sedikit memodifikasi input, karena contoh Anda tidak menyertakan 28 properti.
Untuk variabel, saya menamai mereka dari huruf pertama dari apa itu, atau jika itu akan bertentangan, huruf kedua (atau selanjutnya). Misalnya, Game, pLayer, pRoperty, dll.
compress.c (680 bytes):
kompres.c (pra-golf)
decompress.c :
Input / output :
Terkompresi (182 byte):
Menjalankannya!
sumber