Boah du Asi, hast mich angefixt xD
Ich kann nicht glauben, dass ich jetzt 2h meiner Arbeitszeit wasted habe.
Dachte anfangs ofc es wären nur 10min Arbeit aber ich bin einfach nicht auf die "kluge Lösung" gekommen.
Denke es ist nicht ohne Grund nach der Summe gefragt. Wahrscheinlich kann man die berechnen ohne die konkreten losing configurations betrachten und addieren zu müssen.
Aber komme nciht drauf und auch kein Bock mehr
Die Lösung hier Ist nicht elegant, braucht 10GB RAM (nur dank lol pyhton, 1000^3 bools ist jetzt echt nicht die Welt)
... aber läuft in in weniger als 2 Wochen, Kappa
Code
def add_ordered(tab, x, y, z):
s = sorted([x, y, z])
tab[s[0]][s[1]][s[2]] = True
def main(n):
# Most configs should be winning -> use a dense representation as lists.
win_confs = [[[False for x in range(n + 2)] for y in range(n + 2)] for z in range(n + 2)]
sum = 0
for i in range(0, n + 1):
for j in range(i, n + 1):
for k in range(j, n + 1):
# Act as if 0, 0, 0 is a losing conf. no harm.
if not win_confs[i][j][k]:
sum += i + j + k
print('losing conf: ' + str((i, j, k)))
# This means that any other combination, where an enemy
# move leads to (i, j, k), is a winning conf.
for add in range(1, n + 1):
ia = i + add
ja = j + add
ka = k + add
if ia <= n + 1:
add_ordered(win_confs, ia, j, k)
if ja <= n + 1:
add_ordered(win_confs, i, ja, k)
if ka <= n + 1:
add_ordered(win_confs, i, j, ka)
if ia <= n + 1 and ja <= n + 1:
add_ordered(win_confs, ia, ja, k)
if ia <= n + 1 and ka <= n + 1:
add_ordered(win_confs, ia, j, ka)
if ja <= n + 1 and ka <= n + 1:
add_ordered(win_confs, i, ja, ka)
if ia <= n + 1 and ja <= n + 1 and ka <= n + 1:
add_ordered(win_confs, ia, ja, ka)
print(sum)
if __name__ == '__main__':
main(1000)
Quote
Correct
Congratulations, the answer you gave to problem 260 is correct.
You are the 958th person to have solved this problem.
Fühle mich schmutzig weil es nciht die elegante Lösung war
This post was edited by Kasiir on Mar 15 2017 08:38am