Diberikan adalah papan ukuran variabel dengan ukuran maksimum 5 kali 5 bidang. Setiap bidang dapat diisi dengan 'x'. Jika tidak diisi dengan 'x', itu diisi dengan 'o'.
Status awal setiap papan diberikan (lihat di bawah). Dengan setiap papan, 10 putaran harus dimainkan (maksimal, syarat: lihat di bawah) dan evolusi x harus diawasi.
Satu putaran bekerja dengan cara berikut:
- setiap 'x' menyebar ke bidang yang berbatasan secara orthogonal, tetapi menghilang dengan sendirinya
- setiap kali dua 'x' berada di satu bidang, mereka menetralkan satu sama lain
Evolusi semua 'x' di setiap putaran harus terjadi secara bersamaan. Contoh:
o o o o x o
o x o -> x o x
o o o o x o
Dengan setiap putaran evolusi, Anda harus melihat apakah papan dikosongkan dari 'x'. Kalau tidak kosong, pola berulang bisa hadir. Jika tidak demikian halnya, kami menyerah pada analisis evolusi. Selain itu Anda harus mencetak persentase maksimum bidang x untuk setiap papan awal (dibulatkan ke seluruh angka).
Memasukkan:
Data input dapat ditemukan di sini (Pastebin) Data ini berisi 100 status awal. Seperti yang telah disebutkan, ukuran papan bervariasi. Jumlah baris dinyatakan dengan angka n dari 1 hingga 5, diikuti oleh n baris yang hanya berisi 'x' dan 'o', mewakili pola awal. Setiap baris papan memiliki 1 hingga 5 bidang.
Keluaran:
Hasil lengkap harus dicetak, satu baris tercetak untuk setiap papan awal dalam bentuk berikut:
Round {0-10}: {repetition/empty/giveup}, {0-100} percent maximum-fill
Contoh:
Contoh 1:
Input: 2 Starting state: x o x
xox x x
xx
Round 1: x x o
o x
Round 2: x o x
o x
Round 3: o x o
o o
Round 4: x o x -> The pattern repeats:
o x It is the same as in round 2,
therefore we stop. Maximum fill was
in the starting state with four times 'x'
of 5 fields altogether,
so we have 4/5 = 80 %.
Output: Round 4: repetition, 80 percent maximum-fill
Contoh 2:
Input: 1 Starting state: x x
xx
Round 1: x x -> We already have a repetition, because
the pattern is the same as in the starting
state. The board is always filled 100 %.
Output: Round 1: repetition, 100 percent maximum-fill
Setelah delapan hari saya akan menandai jawaban yang berfungsi dengan karakter paling sedikit sebagai pemenang. Selain itu saya akan memposting output yang benar untuk 100 papan awal (input).
Anda dapat menggunakan bahasa pilihan Anda (pemrograman / skrip / apa pun).
Selamat bersenang-senang!
PS: Jika ada pertanyaan, jangan ragu bertanya.
PPS: Sehubungan dengan pembuat asli: Untuk orang yang mampu berbahasa Jerman, pertanyaan diambil dari JANGAN KLIK JIKA ANDA TIDAK INGIN SPOILER di sini . Karena waktu resmi untuk menyelesaikan tantangan telah berakhir, saya ingin melihat apakah seseorang dapat memberikan solusi yang singkat dan elegan.
22.04.2014:
Tantang Selesai! Pemenang ditandai sebagai diterima. Output yang benar:
Round 10: giveup, 50 percent maximum-fill
Round 5: empty, 66 percent maximum-fill
Round 1: repetition, 100 percent maximum-fill
Round 1: empty, 100 percent maximum-fill
Round 4: repetition, 100 percent maximum-fill
Round 4: repetition, 70 percent maximum-fill
Round 2: repetition, 60 percent maximum-fill
Round 4: empty, 88 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 5: repetition, 80 percent maximum-fill
Round 10: repetition, 80 percent maximum-fill
Round 1: empty, 80 percent maximum-fill
Round 3: repetition, 60 percent maximum-fill
Round 4: repetition, 48 percent maximum-fill
Round 9: empty, 41 percent maximum-fill
Round 10: giveup, 92 percent maximum-fill
Round 10: giveup, 53 percent maximum-fill
Round 10: giveup, 66 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 10: giveup, 88 percent maximum-fill
Round 10: giveup, 76 percent maximum-fill
Round 10: giveup, 68 percent maximum-fill
Round 10: giveup, 40 percent maximum-fill
Round 10: giveup, 100 percent maximum-fill
Round 10: giveup, 71 percent maximum-fill
Round 2: empty, 81 percent maximum-fill
Round 6: repetition, 36 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 4: repetition, 66 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 3: empty, 80 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 10: giveup, 83 percent maximum-fill
Round 7: repetition, 37 percent maximum-fill
Round 9: repetition, 85 percent maximum-fill
Round 5: repetition, 40 percent maximum-fill
Round 5: repetition, 60 percent maximum-fill
Round 4: empty, 80 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 4: repetition, 46 percent maximum-fill
Round 6: repetition, 42 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 4: repetition, 70 percent maximum-fill
Round 4: repetition, 80 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 4: repetition, 56 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 10: giveup, 54 percent maximum-fill
Round 10: giveup, 66 percent maximum-fill
Round 2: repetition, 40 percent maximum-fill
Round 2: repetition, 40 percent maximum-fill
Round 6: repetition, 75 percent maximum-fill
Round 7: empty, 85 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 6: repetition, 70 percent maximum-fill
Round 2: empty, 66 percent maximum-fill
Round 1: empty, 66 percent maximum-fill
Round 3: empty, 100 percent maximum-fill
Round 3: empty, 66 percent maximum-fill
Round 8: repetition, 42 percent maximum-fill
Round 1: empty, 60 percent maximum-fill
Round 2: repetition, 100 percent maximum-fill
Round 2: repetition, 83 percent maximum-fill
Round 4: repetition, 66 percent maximum-fill
Round 6: repetition, 75 percent maximum-fill
Round 4: empty, 66 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 10: giveup, 56 percent maximum-fill
Round 4: empty, 66 percent maximum-fill
Round 6: repetition, 33 percent maximum-fill
Round 3: empty, 57 percent maximum-fill
Round 3: repetition, 100 percent maximum-fill
Round 6: repetition, 73 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 6: repetition, 50 percent maximum-fill
Round 10: giveup, 73 percent maximum-fill
Round 5: empty, 80 percent maximum-fill
Round 10: giveup, 61 percent maximum-fill
Round 3: repetition, 53 percent maximum-fill
Round 10: giveup, 33 percent maximum-fill
Round 10: giveup, 80 percent maximum-fill
Round 10: giveup, 63 percent maximum-fill
Round 10: giveup, 70 percent maximum-fill
Round 10: giveup, 84 percent maximum-fill
Round 7: repetition, 70 percent maximum-fill
Round 10: repetition, 57 percent maximum-fill
Round 10: giveup, 55 percent maximum-fill
Round 6: repetition, 36 percent maximum-fill
Round 4: repetition, 75 percent maximum-fill
Round 10: giveup, 72 percent maximum-fill
Round 10: giveup, 64 percent maximum-fill
Round 10: giveup, 84 percent maximum-fill
Round 10: giveup, 58 percent maximum-fill
Round 10: giveup, 60 percent maximum-fill
Round 10: giveup, 53 percent maximum-fill
Round 4: repetition, 40 percent maximum-fill
Round 4: empty, 40 percent maximum-fill
Round 10: giveup, 50 percent maximum-fill
Round 10: giveup, 68 percent maximum-fill
Jawaban:
Perl,
308, 304, 305, 293, 264, 262Sunting: Bug merayap masuk setelah salah satu pengeditan baru-baru ini, menyebabkan output yang salah untuk papan kosong (output test suite OK). Karena
Round 0
dalam format output yang diberikan hanya dapat berarti bahwa ada papan kosong di input (meskipun tidak ada dalam test suite), bug harus diperbaiki. Perbaikan cepat berarti peningkatan jumlah byte (sebenarnya 1) - bukan pilihan, tentu saja. Karena itu, saya harus bermain golf sedikit lagi.Jalankan dengan
-p
(+1 ditambahkan ke hitungan), dibaca dari STDIN. Membutuhkan 5.014 karenar
pengubah substitusi.yaitu
sumber
perl -p x.pl < input.txt
Jika data ada dalam file, atauperl -p x.pl
dan masukkan baris demi baris untuk menguji entri tunggal (diakhiri denganctrl-D
(ctrl-Z
)). Ingatlah untuk memeriksa perl Anda5.014
atau lebih baru.1 \n o
input.C # - 1164 karakter
Ini adalah partisipasi pertama saya dalam kode-golf jadi harap memanjakan ;-)
Saya tahu, saya jauh dari hasil terbaik - sungguh menakjubkan!
Tapi saya pikir saya akan membagikan solusi saya dalam C #.
Semata-mata arahan menggunakan sudah menghitung 97 karakter - jadi saya pikir itu akan sangat sulit untuk mencapai sisanya dalam waktu kurang dari 200 karakter.
Ini adalah pendekatan yang cukup iteratif, memanfaatkan LINQ di banyak tempat. Saya juga memasukkan pengunduhan file input dan penulisan file output ke dalam kode.
Berikut ini satu versi yang lebih mudah dibaca:
sumber
J - 275 char
Oh, semua spesifikasi I / O ini! Skor yang sangat memalukan bagi J, pada akhirnya. Mengambil input pada STDIN dengan trailing newline, dan mengasumsikan tidak ada carriage return (
\r
) pada input. Inilah hasil penerapannya pada file input sampel dalam pertanyaan.Tidak dikelompokkan: (Saya dapat menambahkan penjelasan yang lebih menyeluruh dan ramah bagi pemula).)
Bagian tersebut
$:
membuat badan utama berulang atas input (bentuk yang sangat tidak nyaman untuk mengurai J), menerapkan@
rantai daisy pada setiap bagian.nlines
menemukan jumlah garis untuk papan berikutnya.Tindakan pada setiap papan (
evolvex
) rapi:iterate
(dipanggila
dalam golf) menyusun daftar setiap iterasi simulasi sampai kami mencapai sesuatu yang terlihat sebelumnya atau terlalu banyak langkah. Kemudianpercent@,.
hitung persentase kuadrat terisi pada setiap hasil, danformat
jalankan beberapa statistik (stat
, dipanggilt
dalam golf) untuk mengetahui bagaimana simulasi berakhir, persentase mana yang terbesar, dan seterusnya, sebelum memformat semua itu menjadi string.Akhirnya,
}:
urus beberapa sampah sebelum; joinln
bergabung dengan semua output papan individu menjadi satu string yang dipisahkan baris baru.sumber
jconsole golf.ijs < input.txt
.v
sebagai nama, yang karena alasan apa pun tidak diizinkan dalam skrip. (Saya telah menjalankan cuplikan di REPL.) Mengubahnyaa
tampaknya berfungsi.