Foto saya sedang menyusun tantangan ini dengan keterampilan menggambar tingkat lanjut saya.
Latar Belakang
Perang Stickman terjadi jauh sebelumnya, ketika spesies dominan Bumi tidak lain hanyalah tongkat. Sejarawan menyesali kenyataan bahwa tidak ada pelukis atau kamera saat itu, kita dapat menggunakan beberapa gambar perang itu dalam buku-buku sejarah saat ini. Di situlah kekuatan coding Anda menjadi berguna. Stickmen sangat mudah digambar dan Sejarawan berhasil menemukan beberapa data tentang berapa banyak stickmen yang berperang¹. Sekarang terserah Anda untuk membuat ulang gambar saat sebelum perang dimulai!
Inilah stickmen pemberani yang terlibat dalam perang:
O / | / | \ / | | / \ Pendekar Pedang OA / | \ | | | / \ | pendekar tombak . . ' *. 'O * '\ | /. . | * './ \ *. Mage HAI / | \ | / \ Penduduk desa HAI / | \ / \ Bayi
Memasukkan
Terima melalui stdin atau yang setara dengan representasi setiap stickman yang muncul di setiap sisi medan perang. Misalnya, jika dua Swordmen bertarung di sisi kanan dan dua spearmen di sisi kiri, input Anda bisa {Sword: 2}, {Spear: 2}
, [2,0,0,0,0], [0,2,0,0,0]
atau a "WW", "SS"
.
Keluaran
Representasi setiap stickmen pemberani di medan perang, sesuai dengan aturan di bawah ini. Itu dapat ditampilkan di stdout atau disimpan ke file, apa pun batu perahu Anda.
Aturan
- Di sebelah kiri adalah setiap stickmen dari array / string / objek pertama yang diterima program Anda.
- Stickmen itu harus terlihat persis seperti yang ditunjukkan sebelumnya pada pertanyaan ini.
- Urutan tentara sisi kiri harus
Infants Villagers Mages Swordsmen Spearmen
. - Tentara sisi kanan akan berperilaku sama, tetapi dengan karakter dan urutannya dicerminkan.
- Setiap stickman akan dipisahkan oleh 1 ruang.
- Setiap kelas akan dipisahkan oleh 3 spasi.
- Tentara akan dipisahkan oleh 8 ruang.
- Karena stickmen tidak bisa terbang, Anda harus menggambar tanah menggunakan minus-minus
-
. - Tanah harus berakhir pada kolom yang sama dengan stickman terakhir dari pasukan kanan berakhir.
Contoh
Mari kita asumsikan program saya mengharapkan dua array dengan panjang 5 dan setiap nilai dalam array mewakili, secara berurutan Infants Villagers Mages Swordsmen Spearmen
,.
Input: [1,1,2,3,1] [0,0,1,1,1]
. . . . ' *. . ' *. . * '. O 'O *' O * O / O / O / OAAO \ O * O ' O / | \ '\ | /. '\ | /. | / | \ / | / | \ / | \ / / | \ | | / | \ \ / | \ | . \ | / ' / | \ | . | *. | * | | | | | | | | | | | | * | . / \ / \ './ \ *. './ \ *. / \ / \ / \ / \ | | / \ / \. * / \ '. -------------------------------------------------- -------------------------------------
Pertimbangan Terakhir
Harap dicatat bahwa celah standar berlaku dan mage benar-benar asimetris hanya karena.
Hasil dari jawaban yang paling banyak dipilih akan menjadi "gambar sampul" dari tantangan ini. Jawaban terpendek pada akhir bulan (31/08/2014) akan dipilih sebagai pemenang.
Ini adalah kode-golf , jadi kode terpendek, dalam byte, menang.
Itation Kutipan diperlukan
sumber
IVMMWWWS SWM
berada dalam batas "apa pun yang membantu Anda"?Jawaban:
JavaScript (E6) 336
344 356 369 424 478 522 570Sunting 6 Sunting terakhir adalah buggy. Memperbaiki bug dan dipersingkat. Itu saja yang saya harap.
Sunting 5 Akhirnya menemukan cara untuk menghilangkan kalikan dengan 23 - mengganggu saya dari awal. Ditambah lagi perubahan pada input (@William berteriak ketika terlalu banyak). Sekarang fungsi tersebut mengharapkan satu parameter array, yang mengandung 2 subarrays. Tanpa perubahan ini 349 - masih merupakan perbaikan
Sunting 4 Cukur beberapa byte lagi dan sedikit perubahan ke format input. Dengan format input baru, kelas yang hilang diwakili sebagai elemen array kosong. Jadi,
D([1,,2,3,1],[,3,1,1,2])
bukannyaD([1,0,2,3,1],[0,3,1,1,2])
. Saya pikir itu masih mematuhi aturan.Sunting 3 Dipotong lagi. Tidak ada perubahan pada algoritma, tetapi menyalahgunakan banyak array.map dan fungsi lokal untuk menghindari loop.
Edit 2 kompresi String, dengan cara yang benar ...
Edit kompresi string yang ditambahkan, banyak pekerjaan dan tidak banyak diperoleh. Sekarang stickmen cermin dihasilkan dari templat, tidak disimpan.
Lakukan beberapa percobaan, pertama berjalan.
Untuk golf.NB Kolmogorow-bisnis masih harus ditangani.Tes di konsol FireFox.
Ubah 'kembali' denganTambahkan 'lansiran (...)' untuk memiliki pernyataan keluaran (meskipun tidak berguna sama sekali)console.log(D([[1,,2,3,1],[,3,1,1,2]]))
Keluaran
Kode Golf
Kode (edit 2)
Kode tidak digabungkan (versi 1)
sumber
Python
362353Sunting: Menghapus satu for-loop dan menggunakan pernyataan exec menyimpan 9 byte
Memasukkan:
Keluaran:
sumber
C,
418414Contoh input:
Contoh output:
Kode golf (linebreak hanya untuk keterbacaan; harus berupa satu baris panjang kode):
Lebar maksimal medan perang adalah 999 (saya bisa menghemat 2 karakter dengan membatasinya menjadi 99). Saya menggunakan struktur kontrol 1 byte per karakter keluaran (non-spasi), menggambar angka-angka dari bawah ke atas.
Ada 5 offset ke dalam struktur kontrol.
Beberapa bit tidak jelas lainnya:
f%27%5
menerjemahkan karakterVWSMI
ke angka0, 1, 2, 3, 4
t*3%12%5+4
menghitung lebar stickman tipet
t^3|~o||(s=d[5]+p,*s--=46,*s=39)
bertanggung jawab atas asimetri kiri / kananargc=3
untuk menghasilkan bendera arah gambar1
dan-1
Kode tidak dikunci:
sumber
*a
koma setelah menjadi koma? Itu menghilangkan peringatan dan memiliki jumlah byte yang sama.f=*a
sebagai kondisi berhenti; kompiler mungkin mengeluh tetapi saya bersungguh-sungguh. Saya tidak dapat menghapusnya karena harus ada dua titik koma difor
sintaks -loop.Haskell, 556
Masukkan format
Urutan: [Bayi, Penduduk Desa, Mage, Pendekar Pedang, Spearman], [Spearman, Pendekar Pedang, Penyihir, Penduduk Desa, Bayi]
Output Sampel
Kode
Tidak disatukan
sumber
Haskell (
736733720 Bytes)Panggilan dengan ./stickmanwars 2 3 1 3 4 -1 3 2 4 1 0 4 2 1 . -1 menandai pembatas untuk dua array. Saya harap tidak apa-apa.
Nah, tantangan golf kode pertama saya dan pertama kali saya menggunakan haskell untuk aplikasi nyata setelah saya mempelajarinya semester ini di universitas saya. Mungkin bahkan tidak mendekati menjadi solusi terbaik atau terpendek tapi saya senang menciptakannya dan itu adalah latihan yang baik :) Kritik dan umpan balik sangat dihargai.
Keluar dari ini:
sumber
Haskell, 450
Tantangan keren! Saya mungkin bisa bermain golf itu sedikit lebih. Pada dasarnya saya menyimpan kolom angka dengan bijaksana sehingga saya dapat menambahkannya satu sama lain dengan mudah, dan kemudian membalik seluruh array
String
s diseluruh menggunakan Haskelltranspose
.Format input adalah
([Infants,Villagers,Mages,Swordsmen,Spearmen],[Infants,Villagers,Mages,Swordsmen,Spearmen])
Berikut adalah contoh dari OP:
Dan di sini adalah penggambaran favorit saya tentang pembunuhan bayi ritual yang terkenal selama era kedua!
sumber
Python (
612,522,460, 440)Setiap "garis" dipangkas bantalan kanan, dan ini ditambahkan kembali ketika merekonstruksi.
Saya pra-membalikkan stickmen dalam penyandian internal saya karena itu menyelamatkan saya harus membalikkannya secara individual ketika merendernya dalam kode.
Contoh dijalankan:
Kode:
sumber
Python (476)
Pemecah yang berbeda dari yang sebelumnya; lebih lama, tetapi lebih fungsional.
Kode:
sumber