Skip to content

Instantly share code, notes, and snippets.

@gciruelos
Last active August 29, 2015 13:59
Show Gist options
  • Save gciruelos/10795001 to your computer and use it in GitHub Desktop.
Save gciruelos/10795001 to your computer and use it in GitHub Desktop.
Google Code Jam 2014 - Qualification Round
# Gonzalo Ciruelos
# Problem A
def intersection(set1, set2):
for a in set1:
if a in set2:
yield a
f = open('A-small-attempt0.in', 'r')
case_no = 1
for game in range(int(f.readline())):
square1 = [0,0,0,0]
guess1 = int(f.readline()[0])
square1[0] = f.readline()[:-1].split(' ')
square1[1] = f.readline()[:-1].split(' ')
square1[2] = f.readline()[:-1].split(' ')
square1[3] = f.readline()[:-1].split(' ')
square2 = [0,0,0,0]
guess2 = int(f.readline()[0])
square2[0] = f.readline()[:-1].split(' ')
square2[1] = f.readline()[:-1].split(' ')
square2[2] = f.readline()[:-1].split(' ')
square2[3] = f.readline()[:-1].split(' ')
both = list(intersection(square1[guess1-1],square2[guess2-1]))
if len(both)==1:
result = both[0]
elif len(both)>1:
result = 'Bad magician!'
else:
result = 'Volunteer cheated!'
print 'Case #'+str(case_no)+': '+result
case_no+=1
#Gonzalo Ciruelos
#Problem B
def what_to_do(C, F, X, velocity = 2.0, seconds_accum = 0):
time_required = C/F
if C+velocity*(time_required) > X: #easiest case
return seconds_accum + X/velocity
else: #I have to buy in the first round
seconds_accum += C/velocity
velocity = velocity + F
if X == 0:
return seconds_accum
else:
return what_to_do(C, F, X, velocity, seconds_accum)
f = open('B-large.in', 'r')
case_no = 1
for game in range(int(f.readline())):
arg = list(map(float, f.readline()[:-1].split(' ')))
result = what_to_do(arg[0], arg[1], arg[2])
print ('Case #'+str(case_no)+': '+str(round(result, 7)))
case_no+=1
#Gonzalo Ciruelos
#Problem D
def war(naomi, ken):
naomi = sorted(naomi, reverse = True)
ken = sorted(ken,reverse = True)
total = 0
for n in naomi:
found = False
for k in ken:
if k>n:
ken.remove(k)
found = True
break
if not found:
total+=1
return total
def deceitful3(naomi, ken, l):
naomi = sorted(naomi, reverse = True)
ken = sorted(ken, reverse = True)
maximum = 0
#basically i try all possibilities with a little wit.
for tries in range(l):
local_max = 0
for i in range(l):
if naomi[i]>ken[i]: local_max +=1
if local_max>maximum: maximum = local_max
try:
naomi = [naomi[-1]]+naomi[:-1]
except:
naomi = [naomi[-1]]+[naomi[:-1]]
return maximum
f = open('D-large.in', 'r')
case_no = 1
for game in range(int(f.readline())):
length = int(f.readline()[:-1])
naomi_ = map(float, f.readline()[:-1].split(' '))
ken_ = map(float, f.readline()[:-1].split(' '))
print 'Case #'+str(case_no)+': '+str(deceitful3(naomi_, ken_, length))+' '+str(war(naomi_,ken_))
case_no+=1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment