Scrivi un programma completo con un codice sorgente di 256 byte o meno che guardi l'immagine di una bandiera e determini da quale paese proviene quella bandiera. Un file zip contenente le 196 bandiere diverse nella sfida può essere scaricato da qui . Fonte: [ Flagpedia ]. Queste 196 immagini di flag sono gli unici input che il tuo programma deve gestire.
Il tuo programma non accetterà alcun input. L'immagine della bandiera sarà nella stessa directory del programma e denominata "f.png". Il tuo programma aprirà questo file, lo identificherà e stamperà l' abbreviazione di due lettere per quel paese . Se usi una lingua che non può aprire i file, è anche accettabile eseguire il tuo programma come ./program < f.png
.
Ogni file flag viene chiamato come l'output previsto. Tutti gli output superiori a 2 lettere verranno ignorati.
Ecco un elenco di tutti gli output / nomi dei file:
ad, ae, af, ag, al, am, ao, ar, at, au, az, ba, bb, bd, be, bf, bg, bh, bi, bj,
bn, bo, br, bs, bt, bw, by, bz, ca, cd, cf, cg, ch, ci, cl, cm, cn, co, cr, cu,
cv, cy, cz, de, dj, dk, dm, do, dz, ec, ee, eg, eh, er, es, et, fi, fj, fm, fr,
ga, gb, gd, ge, gh, gm, gn, gq, gr, gt, gw, gy, hn, hr, ht, hu, id, ie, il, in,
iq, ir, is, it, jm, jo, jp, ke, kg, kh, ki, km, kn, kp, kr, ks, kw, kz, la, lb,
lc, li, lk, lr, ls, lt, lu, lv, ly, ma, mc, md, me, mg, mh, mk, ml, mm, mn, mr,
mt, mu, mv, mw, mx, my, mz, na, ne, ng, ni, nl, no, np, nr, nz, om, pa, pe, pg,
ph, pk, pl, pt, pw, py, qa, ro, rs, ru, rw, sa, sb, sc, sd, se, sg, si, sk, sl,
sm, sn, so, sr, st, sv, sy, sz, td, tg, th, tj, tl, tm, tn, to, tr, tt, tv, tw,
tz, ua, ug, us, uy, uz, va, vc, ve, vn, vu, ws, ye, za, zm, zw,
punteggio
Ecco un breve script in pitone che userò per assegnare un punteggio a ogni invio.
import os
import subprocess
import random
botlist = []
with open("bots.txt") as bots:
for line in bots:
line = line.split(", ")
if len(line) >= 2:
botLine = line + [0]
botlist.append(botLine)
files = os.listdir(os.getcwd() + "/flags")
random.shuffle(files)
def test(bot_command):
score = 0
for filename in files:
command = "COPY flags\\{} f.png".format(filename)
os.system(command)
print bot_command
result = subprocess.check_output(bot_command, shell = True)
if result[:2] == filename[:2]:
score += 1
return score
for i in range(len(botlist)):
command = botlist[i][1]
botlist[i][2] = test(command)
with open("output.txt", "w+") as output:
for bot in botlist:
output.write("{} got a score of {}.".format(bot[0], bot[2]))
os.system("del f.png")
Il tuo punteggio è il numero totale di flag identificati correttamente. In caso di pareggio, vince l'invio precedente.
Regole
Per la mia comodità di test, è possibile utilizzare qualsiasi lingua con un interprete / compilatore disponibile gratuitamente per Windows 10 o Ubuntu.
Le librerie di elaborazione delle immagini sono consentite, ma non sono consentiti tutti i builtin relativi a flag o paesi. ( tosse Mathematica tosse )
Fornisci il comando completo necessario per eseguire il programma insieme ai collegamenti a tutte le librerie necessarie.
Gli invii non possono interagire con nessun file tranne "f.png".
Non ho alcun limite di tempo per l'invio, ma ti preghiamo di mantenerlo relativamente veloce. Non voglio che la sceneggiatura del punteggio richieda ore.
./program < f.png
opzione solo se la lingua non ha modo di leggere i file o possiamo usarla anche se la lingua può leggere i file? (Apparentemente CJam è in grado di leggere da file, che non sapevo)