Escriba un programa completo con un código fuente de 256 bytes o menos que observe la imagen de una bandera y determine de qué país es esa bandera. Un archivo zip que contiene las 196 banderas diferentes en el desafío se puede descargar desde aquí . Fuente: [ Flagpedia ]. Estas 196 imágenes de bandera son las únicas entradas que su programa tiene que manejar.
Su programa no tendrá entrada. La imagen de bandera estará en el mismo directorio que su programa y se llamará "f.png". Su programa abrirá este archivo, lo identificará e imprimirá la abreviatura de dos letras para ese país . Si usa un idioma que no puede abrir archivos, también es aceptable ejecutar su programa como ./program < f.png
.
Cada archivo de marca se denomina igual que el resultado esperado. Todas las salidas por encima de 2 letras serán ignoradas.
Aquí hay una lista de todas las salidas / nombres de archivo:
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,
Puntuación
Aquí hay un breve script de Python que usaré para calificar cada envío.
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")
Su puntaje es el número total de banderas correctamente identificadas. En caso de empate, gana la presentación anterior.
Reglas
Para mi conveniencia de prueba, se puede usar cualquier idioma con un intérprete / compilador disponible gratuitamente para Windows 10 o Ubuntu.
Las bibliotecas de procesamiento de imágenes están permitidas, pero no se permite ninguna construcción relacionada con banderas o países. ( Tos Mathematica tos )
Proporcione el comando completo necesario para ejecutar su programa junto con enlaces a las bibliotecas necesarias.
Los envíos no pueden interactuar con ningún archivo excepto "f.png".
No tengo ningún límite de tiempo difícil para las presentaciones, pero manténgalo relativamente rápido. No quiero que el guión de puntuación tome horas.
./program < f.png
opción solo si el idioma no tiene forma de leer archivos, o también podemos usarla incluso si el idioma puede leer archivos? (Aparentemente, CJam puede leer de archivos, lo que no sabía)