SELAMAT DATANG ke @kuroineko untuk entri terbaik dan menangkan 200 hadiah dari @TheBestOne (sportivitas luar biasa!).
Tulis program untuk mewarnai gambar sebanyak mungkin sebelum program oposisi melakukannya.
Aturan secara singkat
- Program Anda akan diberi gambar, warna Anda, dan bilangan bulat N.
- Setiap belokan Anda dikirim pembaruan piksel oleh program lain, dan diminta untuk pembaruan N Anda.
- Anda dapat memperbarui piksel putih apa pun yang berada di sebelah piksel warna Anda.
- Program yang telah menambahkan piksel terbanyak akan menang.
Aturan secara rinci
Program Anda akan diberi nama file gambar PNG, warna beranda, dan angka N. Angka N adalah jumlah piksel maksimum yang dapat diwarnai program Anda setiap giliran.
Contoh: MyProg arena.png (255,0,0) 30
Gambar input akan menjadi persegi panjang dengan sisi antara 20 dan 1000 piksel. Ini akan terdiri dari piksel hitam, putih, dan warna. Program Anda dapat memilih urutan piksel putih untuk diwarnai sebagai milik Anda, dengan ketentuan bahwa setiap piksel baru harus memiliki setidaknya satu dari empat piksel tetangganya dengan warna Anda sendiri. Gambar awalnya akan memiliki setidaknya satu piksel warna Anda. Mungkin juga memiliki piksel warna yang tidak ada program ditugaskan untuk. Saluran alfa tidak digunakan.
Tujuan Anda adalah untuk memblokir lawan Anda dan menulis warna Anda menjadi piksel sebanyak yang Anda bisa.
Setiap belokan program Anda akan menerima 1 atau lebih baris pesan pada STDIN, dan menulis baris yang terdiri dari koordinat piksel pada STDOUT. Ingatlah untuk menetapkan STDOUT sebagai tidak terbaca atau siram buffer STDOUT setiap belokan.
Urutan pemain yang dipanggil setiap belokan akan ditentukan secara acak. Ini berarti bahwa lawan (atau program Anda) mungkin memiliki 2 putaran berturut-turut.
Program Anda akan dikirimi colour (N,N,N) chose X,Y X,Y ... X,Y
pesan informasi yang menggambarkan piksel yang diisi oleh program pemain. Jika seorang pemain tidak membuat gerakan, atau tidak ada gerakan yang valid, Anda tidak akan dikirimi pesan tentang gerakan pemain itu. Program Anda juga akan dikirimi pesan tentang gerakan Anda sendiri yang diterima (jika Anda telah menentukan setidaknya satu gerakan yang valid). Pixel 0,0 berada di sudut kiri atas gambar.
Saat menerima pick pixels
, program Anda akan menghasilkan X,Y X,Y ... X,Y
hingga N piksel (string kosong yang hanya terdiri dari '\ n' diperbolehkan). Piksel harus dalam urutan plot. Jika sebuah piksel tidak valid, itu akan diabaikan dan tidak ada dalam laporan kepada pemain. Program Anda memiliki 2 detik untuk diinisialisasi setelah memulai, tetapi hanya 0,1 detik untuk menjawab dengan jawaban setiap belokan atau ia akan melewatkan belokan itu. Pembaruan piksel yang dikirim setelah 0,1 detik akan mencatat kesalahan. Setelah 5 kesalahan, program Anda ditangguhkan dan tidak akan dikirim pembaruan atau pick pixels
permintaan.
Ketika program juri menerima pilihan piksel kosong atau tidak valid dari setiap program pemain yang tidak ditangguhkan, gambar akan dianggap selesai dan program akan dikirim pesan "keluar". Program harus berakhir setelah menerima "keluar".
Mencetak gol
Juri akan mencetak poin setelah gambar selesai. Skor Anda akan menjadi jumlah piksel Anda yang diperbarui dibagi dengan tangkapan piksel rata-rata pada putaran itu, dinyatakan sebagai persentase.
Jumlah piksel yang ditambahkan ke gambar oleh pemain Anda adalah A. Jumlah piksel yang ditambahkan oleh semua pemain P adalah T.
avg = T/P
score = 100*A/avg
Posting skor
Referensi lawan "Gumpalan" diberikan. Untuk setiap jawaban, beri judul bot Anda dengan nama, bahasa, dan skor Anda (rata-rata arena 1 hingga 4) melawan lawan referensi. Gambar atau animasi dari salah satu pertempuran Anda juga bagus. Pemenangnya adalah program dengan skor tertinggi melawan bot referensi.
Jika The Blob terbukti terlalu mudah dikalahkan, saya dapat menambahkan ronde kedua dengan lawan referensi yang lebih kuat.
Anda mungkin juga ingin bereksperimen dengan 4 program pemain atau lebih. Anda juga dapat menguji bot Anda terhadap bot lain yang diposting sebagai jawaban.
Hakim
Program juri memerlukan Python Imaging Library (PIL) yang umum dan harus mudah diinstal dari manajer paket OS Anda di Linux. Saya punya laporan bahwa PIL tidak bekerja dengan 64 bit Python di Windows 7, jadi silakan periksa apakah PIL akan bekerja untuk Anda sebelum memulai tantangan ini (diperbarui 2015-01-29).
#!/usr/bin/env python
# Judge Program for Image Battle challenge on PPCG.
# Runs on Python 2.7 on Ubuntu Linux. May need edits for other platforms.
# V1.0 First release.
# V1.1 Added Java support
# V1.2 Added Java inner class support
# usage: judge cfg.py
import sys, re, random, os, shutil, subprocess, datetime, time, signal
from PIL import Image
ORTH = ((-1,0), (1,0), (0,-1), (0,1))
def place(loc, colour):
# if valid, place colour at loc and return True, else False
if pix[loc] == (255,255,255):
plist = [(loc[0]+dx, loc[1]+dy) for dx,dy in ORTH]
if any(pix[p]==colour for p in plist if 0<=p[0]<W and 0<=p[1]<H):
pix[loc] = colour
return True
return False
def updateimage(image, msg, bot):
if not re.match(r'(\s*\d+,\d+)*\s*', msg):
return []
plist = [tuple(int(v) for v in pr.split(',')) for pr in msg.split()]
plist = plist[:PIXELBATCH]
return [p for p in plist if place(p, bot.colour)]
class Bot:
botlist = []
def __init__(self, name, interpreter=None, colour=None):
self.prog = name
self.botlist.append(self)
callarg = re.sub(r'\.class$', '', name) # Java fix
self.call = [interpreter, callarg] if interpreter else [callarg]
self.colour = colour
self.colstr = str(colour).replace(' ', '')
self.faults = 0
self.env = 'env%u' % self.botlist.index(self)
try: os.mkdir(self.env)
except: pass
if name.endswith('.class'): # Java inner class fix
rootname = re.sub(r'\.class$', '', name)
for fn in os.listdir('.'):
if fn.startswith(rootname) and fn.endswith('.class'):
shutil.copy(fn, self.env)
else:
shutil.copy(self.prog, self.env)
shutil.copy(imagename, self.env)
os.chdir(self.env)
args = self.call + [imagename, self.colstr, `PIXELBATCH`]
self.proc = subprocess.Popen(args, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
os.chdir('..')
def send(self, msg):
if self.faults < FAULTLIMIT:
self.proc.stdin.write(msg + '\n')
self.proc.stdin.flush()
def read(self, timelimit):
if self.faults < FAULTLIMIT:
start = time.time()
inline = self.proc.stdout.readline()
if time.time() - start > timelimit:
self.faults += 1
inline = ''
return inline.strip()
def exit(self):
self.send('exit')
from cfg import *
for i, (prog, interp) in enumerate(botspec):
Bot(prog, interp, colourspec[i])
image = Image.open(imagename)
pix = image.load()
W,H = image.size
time.sleep(INITTIME)
total = 0
for turn in range(1, MAXTURNS+1):
random.shuffle(Bot.botlist)
nullbots = 0
for bot in Bot.botlist:
bot.send('pick pixels')
inmsg = bot.read(TIMELIMIT)
newpixels = updateimage(image, inmsg, bot)
total += len(newpixels)
if newpixels:
pixtext = ' '.join('%u,%u'%p for p in newpixels)
msg = 'colour %s chose %s' % (bot.colstr, pixtext)
for msgbot in Bot.botlist:
msgbot.send(msg)
else:
nullbots += 1
if nullbots == len(Bot.botlist):
break
if turn % 100 == 0: print 'Turn %s done %s pixels' % (turn, total)
for msgbot in Bot.botlist:
msgbot.exit()
counts = dict((c,f) for f,c in image.getcolors(W*H))
avg = 1.0 * sum(counts.values()) / len(Bot.botlist)
for bot in Bot.botlist:
score = 100 * counts[bot.colour] / avg
print 'Bot %s with colour %s scored %s' % (bot.prog, bot.colour, score)
image.save(BATTLE+'.png')
Contoh Config - cfg.py
BATTLE = 'Green Blob vs Red Blob'
MAXTURNS = 20000
PIXELBATCH = 10
INITTIME = 2.0
TIMELIMIT = 0.1
FAULTLIMIT = 5
imagename = 'arena1.png'
colourspec = (0,255,0), (255,0,0)
botspec = [
('blob.py', 'python'),
('blob.py', 'python'),
]
The Blob - lawan referensi
# Blob v1.0 - A reference opponent for the Image Battle challenge on PPCG.
import sys, os
from PIL import Image
image = Image.open(sys.argv[1])
pix = image.load()
W,H = image.size
mycolour = eval(sys.argv[2])
pixbatch = int(sys.argv[3])
ORTH = ((-1,0), (1,0), (0,-1), (0,1))
def canchoose(loc, colour):
if pix[loc] == (255,255,255):
plist = [(loc[0]+dx, loc[1]+dy) for dx,dy in ORTH]
if any(pix[p]==colour for p in plist if 0<=p[0]<W and 0<=p[1]<H):
return True
return False
def near(loc):
plist = [(loc[0]+dx, loc[1]+dy) for dx,dy in ORTH]
pboard = [p for p in plist if 0<=p[0]<W and 0<=p[1]<H]
return [p for p in pboard if pix[p] == (255,255,255)]
def updateimage(image, msg):
ctext, colourtext, chose, points = msg.split(None, 3)
colour = eval(colourtext)
plist = [tuple(int(v) for v in pr.split(',')) for pr in points.split()]
for p in plist:
pix[p] = colour
skin.discard(p)
if colour == mycolour:
for np in near(p):
skin.add(np)
board = [(x,y) for x in range(W) for y in range(H)]
skin = set(p for p in board if canchoose(p, mycolour))
while 1:
msg = sys.stdin.readline()
if msg.startswith('colour'):
updateimage(image, msg.strip())
if msg.startswith('pick'):
plen = min(pixbatch, len(skin))
moves = [skin.pop() for i in range(plen)]
movetext = ' '.join('%u,%u'%p for p in moves)
sys.stdout.write(movetext + '\n')
sys.stdout.flush()
if msg.startswith('exit'):
break
image.save('blob.png')
Arena 1
Arena 2
Arena 3
Arena 4
Contoh Pertempuran - Blob vs Blob
Pertempuran ini memiliki hasil yang dapat diprediksi:
Bot blob.py with colour (255, 0, 0) scored 89.2883333333
Bot blob.py with colour (0, 255, 0) scored 89.365
sumber
Jawaban:
ColorFighter - C ++ - makan beberapa swallower untuk sarapan
EDIT
Ya Tuhan, aku benci ular (pura-pura itu laba-laba, Indy)
Sebenarnya saya suka Python. Seandainya saja saya bukan anak yang malas dan mulai mempelajarinya dengan baik, itu saja.
Semua ini dikatakan, saya harus berjuang dengan versi 64 bit dari ular ini untuk membuat Hakim bekerja. Membuat PIL bekerja dengan versi 64 bit Python di bawah Win7 membutuhkan lebih banyak kesabaran daripada yang saya siapkan untuk tantangan ini, jadi pada akhirnya saya beralih (dengan menyakitkan) ke versi Win32.
Juga, Hakim cenderung crash parah ketika bot terlalu lambat untuk merespon.
Menjadi bukan Python savvy, saya tidak memperbaikinya, tetapi itu ada hubungannya dengan membaca jawaban kosong setelah batas waktu pada stdin.
Perbaikan kecil akan menempatkan output stderr ke file untuk setiap bot. Itu akan memudahkan pelacakan untuk debugging post-mortem.
Kecuali untuk masalah-masalah kecil ini, saya menemukan bahwa Hakim itu sangat sederhana dan menyenangkan untuk digunakan.
Pujian untuk tantangan inventif dan menyenangkan lainnya.
Kode
Membangun executable
Saya menggunakan LODEpng.cpp dan LODEpng.h untuk membaca gambar png.
Tentang cara termudah yang saya temukan untuk mengajarkan bahasa C ++ terbelakang ini cara membaca gambar tanpa harus membangun setengah lusin perpustakaan.
Kompilasi saja & tautkan LODEpng.cpp bersama dengan main dan Bob adalah pamanmu.
Saya dikompilasi dengan MSVC2013, tetapi karena saya hanya menggunakan beberapa kontainer dasar STL (deque dan vektor), mungkin berhasil dengan gcc (jika Anda beruntung).
Jika tidak, saya mungkin mencoba membangun MinGW, tapi terus terang saya bosan dengan masalah portabilitas C ++.
Saya melakukan cukup banyak C / C ++ portabel di hari-hari saya (pada kompiler eksotis untuk berbagai 8 hingga 32 bit prosesor serta SunOS, Windows dari 3,11 hingga Vista dan Linux dari masa kanak-kanak ke Ubuntu cooing zebra atau apa pun, jadi saya pikir Saya memiliki ide yang cukup bagus tentang apa artinya portabilitas), tetapi pada saat itu tidak perlu untuk menghafal (atau menemukan) perbedaan yang tak terhitung banyaknya antara interpretasi GNU dan Microsoft tentang spesifikasi samar dan bengkak dari monster STL.
Hasil melawan Swallower
Bagaimana itu bekerja
Pada intinya, ini adalah jalur penimbunan brute force yang sederhana.
Batas warna pemain (yaitu piksel yang memiliki setidaknya satu tetangga putih) digunakan sebagai seed untuk melakukan algoritma flooding jarak klasik.
Ketika suatu titik mencapai lingkaran warna musuh, jalur mundur dihitung untuk menghasilkan serangkaian piksel bergerak menuju tempat musuh terdekat.
Proses ini diulangi sampai cukup banyak poin telah dikumpulkan untuk tanggapan dengan panjang yang diinginkan.
Pengulangan ini sangat mahal, terutama ketika bertarung di dekat musuh.
Setiap kali serangkaian piksel yang mengarah dari perbatasan ke piksel musuh telah ditemukan (dan kami membutuhkan lebih banyak poin untuk menyelesaikan jawabannya), isi banjir akan dikerjakan ulang dari awal, dengan jalur baru ditambahkan ke perbatasan. Ini berarti Anda harus melakukan 5 pengisian banjir atau lebih untuk mendapatkan jawaban 10 piksel.
Jika tidak ada lagi piksel musuh yang dapat dijangkau, tetangga arbitrer dari piksel perbatasan dipilih.
Algoritma beralih ke pengisian banjir yang agak tidak efisien, tetapi ini hanya terjadi setelah hasil permainan telah diputuskan (yaitu tidak ada wilayah yang lebih netral untuk diperjuangkan).
Saya memang mengoptimalkannya sehingga Hakim tidak menghabiskan waktu lama untuk mengisi peta begitu kompetisi telah ditangani. Dalam kondisi saat ini, waktu eksekusi dapat diabaikan dibandingkan dengan Hakim itu sendiri.
Karena warna musuh tidak diketahui saat start, gambar arena awal disimpan di toko untuk menyalin area awal musuh ketika itu membuat langkah pertama.
Jika kode diputar terlebih dahulu, itu hanya akan mengisi beberapa piksel sembarang.
Hal ini membuat algoritma mampu melawan sejumlah musuh yang sewenang-wenang, dan bahkan mungkin musuh baru tiba pada titik waktu yang acak, atau warna muncul tanpa area awal (meskipun ini sama sekali tidak ada penggunaan praktis).
Penanganan musuh berdasarkan warna-per-warna juga akan memungkinkan dua instance bot bekerja sama (menggunakan koordinat piksel untuk melewati tanda pengakuan rahasia).
Kedengarannya menyenangkan, saya mungkin akan mencobanya :).
Penelusuran berat komputasi dilakukan segera setelah data baru tersedia (setelah pemberitahuan perpindahan), dan beberapa optimisasi (pembaruan perbatasan) dilakukan tepat setelah respons diberikan (untuk melakukan perhitungan sebanyak mungkin selama putaran bot lainnya) ).
Di sini lagi, mungkin ada cara untuk melakukan hal-hal yang lebih halus jika ada lebih dari 1 musuh (seperti membatalkan perhitungan jika data baru tersedia), tetapi bagaimanapun saya gagal untuk melihat di mana multitasking diperlukan, asalkan algoritma itu dapat bekerja dengan beban penuh.
Masalah kinerja
Semua ini tidak dapat bekerja tanpa akses data cepat (dan lebih banyak daya komputasi dari seluruh program Appolo, yaitu PC rata-rata Anda saat digunakan untuk melakukan lebih dari memposting beberapa tweet).
Kecepatannya sangat bergantung pada kompiler. Biasanya GNU mengalahkan Microsoft dengan selisih 30% (itu angka ajaib yang saya perhatikan pada 3 tantangan kode terkait lintasan lainnya), tetapi jarak tempuh ini tentu saja bervariasi.
Kode dalam kondisi saat ini nyaris tidak berkeringat di arena 4. Windows perfmeter melaporkan penggunaan CPU sekitar 4 hingga 7%, sehingga harus mampu mengatasi peta 1000x1000 dalam batas waktu respons 100 ms.
Inti dari setiap algoritma lintasan terletak pada FIFO (mungkin diprioritaskan, meskipun tidak dalam kasus itu), yang pada gilirannya membutuhkan alokasi elemen cepat.
Karena OP wajib menetapkan batas ukuran arena, saya melakukan beberapa matematika dan melihat bahwa struktur data tetap berdimensi maks (yaitu 1.000.000 piksel) tidak akan mengkonsumsi lebih dari beberapa lusin megabita, yang rata-rata PC Anda makan untuk sarapan.
Memang di bawah Win7 dan dikompilasi dengan MSVC 2013, kode ini mengkonsumsi sekitar 14MB di arena 4, sementara dua utas Swallower menggunakan lebih dari 20MB.
Saya mulai dengan wadah STL untuk prototipe yang lebih mudah, tetapi STL membuat kodenya bahkan lebih mudah dibaca, karena saya tidak punya keinginan untuk membuat kelas untuk merangkum setiap bit data untuk menyembunyikan kebingungan menjauh (apakah itu karena ketidakmampuan saya sendiri untuk mengatasi STL diserahkan kepada apresiasi pembaca).
Bagaimanapun, hasilnya sangat lambat sehingga pada awalnya saya pikir saya membangun versi debug secara tidak sengaja.
Saya rasa ini sebagian karena implementasi STL Microsoft yang sangat buruk (di mana, misalnya, vektor dan bitet melakukan pemeriksaan terikat atau operasi crypic lainnya pada operator [], yang melanggar spesifikasi secara langsung), dan sebagian karena desain STL diri.
Saya bisa mengatasi masalah sintaksis dan portabilitas (yaitu Microsoft vs GNU) yang buruk jika pertunjukannya ada di sana, tetapi ini tentu saja bukan masalahnya.
Sebagai contoh,
deque
secara inheren lambat, karena mengacak banyak data pembukuan sekitar menunggu kesempatan untuk melakukan perubahan ukuran super pintar, tentang yang saya tidak peduli.Tentu saya bisa menerapkan pengalokasi kustom dan whatver bit template kustom lainnya, tetapi pengalokasi kustom sendiri biaya beberapa ratus baris kode dan bagian yang lebih baik dari hari untuk menguji, apa dengan selusin antarmuka yang harus diimplementasikan, sementara struktur setara buatan tangan adalah tentang nol baris kode (walaupun lebih berbahaya, tetapi algoritme tidak akan bekerja jika saya tidak tahu - atau berpikir saya tahu - apa yang saya lakukan tetap).
Jadi akhirnya saya menyimpan kontainer STL di bagian kode yang tidak kritis, dan membangun pengalokasi brutal saya sendiri dan FIFO dengan dua array sekitar tahun 1970 dan tiga celana pendek yang tidak ditandatangani.
Menelan burung walet
Seperti yang dikonfirmasikan oleh penulisnya, pola Swallower yang tidak menentu disebabkan oleh jeda antara pemberitahuan pergerakan musuh dan pembaruan dari utas lintasan.
Perfmeter sistem menunjukkan dengan jelas bahwa jalur path mengkonsumsi 100% CPU sepanjang waktu, dan pola bergerigi cenderung muncul ketika fokus pertarungan bergeser ke area baru. Ini juga cukup jelas dengan animasinya.
Optimalisasi sederhana namun efektif
Setelah melihat pertarungan epik antara Swallower dan petarung saya, saya teringat pepatah lama dari permainan Go: bertahan dari dekat, tetapi serang dari jauh.
Ada kebijaksanaan dalam hal itu. Jika Anda mencoba terlalu banyak bertahan pada musuh Anda, Anda akan menyia-nyiakan gerakan berharga mencoba memblokir setiap jalur yang mungkin. Sebaliknya, jika Anda tinggal satu piksel jauhnya, Anda kemungkinan akan menghindari mengisi celah kecil yang akan mendapatkan sangat sedikit, dan menggunakan gerakan Anda untuk menghadapi ancaman yang lebih penting.
Untuk mengimplementasikan ide ini, saya cukup memperluas gerakan musuh (menandai 4 tetangga dari setiap gerakan sebagai piksel musuh).
Ini menghentikan algoritme lintasan satu piksel dari perbatasan musuh, memungkinkan pejuang saya untuk mengatasi musuh tanpa terjebak dalam terlalu banyak pertempuran udara.
Anda dapat melihat peningkatannya
(meskipun semua proses tidak berhasil, Anda dapat melihat garis besar yang jauh lebih lancar):
sumber
Kedalaman-Pertama Gumpalan vs Gumpalan
Bahasa = Python (3.2)
Nilai =
111,475388276153.34210035Pembaruan: Sekarang menggunakan
Set
kelas khusus untuk mendapatkanpop()
metode untuk menghasilkan semacam pola kisi yang secara drastis meningkatkan area yang dicakup pada awal memotong sebagian besar gambar dari musuh. Catatan: Saya menggunakan kisi 12 x 12 untuk sampel acak ukuran kisi mana yang tampaknya memberikan hasil terbaik untuk arena3 (yang mendapat skor terburuk sebelum pembaruan), namun sangat mungkin lebih optimal ukuran kisi ada untuk pemilihan arena yang diberikan.Saya pergi untuk modifikasi sederhana ke bot referensi untuk membuatnya memilih titik-titik yang layak yang dibatasi oleh poin berwarna sendiri sesedikit mungkin. Suatu perbaikan mungkin untuk membuatnya juga mendukung memilih poin yang layak yang dibatasi oleh sebanyak mungkin poin berwarna musuh.
dfblob.py:
Juri asli telah sedikit dimodifikasi untuk bekerja dengan Python 3.2 (dan untuk menambahkan fungsi logging mentah ke bot + simpan gambar arena secara berkala untuk membuat animasi):
Hasil arena mengikuti. Bot dfblob diberi warna merah untuk semua arena.
Arena 1:
Arena 2:
Arena 3:
Arena 4:
sumber
convert -delay 5 -loop 0 result*.png animated.gif
meskipun beberapa gif kemudian harus ditebang secara manual untuk diunggah di siniSwallower
Bahasa = Jawa
Skor =
162.3289512601408075169.4020975612382575Mencari musuh dan mengelilingi.
Anda mungkin harus memberikan batas waktu yang lebih lama. Dapat ditingkatkan sedikit. Terkadang mencetak piksel yang tidak valid.Pembaruan: Mengalami lebih cepat. Gunakan utas lain untuk memperbarui prioritas. Selalu kembali dalam 0,1 detik. Skor seharusnya mustahil dikalahkan tanpa meningkatkan
MAX_TURNS
.Bagaimana itu bekerja:
Bot ini mempertahankan antrian prioritas piksel yang dapat ditambahkan. Prioritas piksel musuh adalah 0. Prioritas piksel kosong adalah 1 lebih besar dari prioritas terendah di sekitarnya. Semua piksel lainnya memiliki prioritas Integer.MAX_VALUE. Utas updater secara konstan memperbarui prioritas piksel. Setiap belokan, piksel N terendah dikeluarkan dari antrian prioritas.
Green Blob vs Red Swallower
Skor Blob = 1.680553372583887225
Skor Swallower = 169.4020975612382575
Arena 1:
Arena 2:
Arena 3:
Arena 4:
Green Swallower vs. Red Blob
Skor Blob = 1.6852943642218457375
Skor Swallower = 169.3923095387498625
Arena 1:
Arena 2:
Arena 3:
Arena 4:
Red Swallower vs Green Depth First Blob
Skor Swallower = 157.0749775233111925
Skor Kedalaman Gumpalan Pertama = 18.192783547939744
Arena 1:
Arena 2:
Arena 3:
Arena 4:
Green Swallower vs Red Depth First Blob
Skor Swallower = 154.3368355651281075
Skor Kedalaman Gumpalan Pertama = 18.84463249420435425
Arena 1:
Arena 2:
Arena 3:
Arena 4:
Green Blob vs Red Depth First Blob vs Blue Swallower:
Skor Blob = 6.347962032393275525
Skor Kedalaman First Blob = 27.34842554331698275
Skor Swallower = 227.720728953415375
Arena 1:
Arena 2:
Arena 3:
Arena 4:
Ini adalah hakim Sam Yonnou dengan beberapa perubahan sehingga Anda menentukan file dan perintah secara terpisah:
Contoh cfg:
Catatan: Siapa pun yang berhasil menelan Swallower mendapatkan hadiah 100 reputasi. Silakan kirim komentar di bawah jika Anda berhasil.
sumber
Acak, Bahasa = java, Nilai = 0,43012126100275
Program ini secara acak menempatkan piksel di layar. Beberapa (jika tidak semua) piksel tidak akan valid. Di samping catatan, seharusnya sulit untuk membuat program yang lebih cepat daripada yang ini.
Arena 1:
Arena 2:
Arena 3:
Arena 4:
sumber