Esempio n. 1
0
class TestCodeJamMain(unittest.TestCase):
  def solve(self, *lines):
    assert lines == [[1,2,3]]
    return 1

  def run_basic(self, inf, outf, debug=False, silent=False):
    self.h = {'fn':'run','inf':inf,'outf':outf,'debug':debug,'silent':silent,'workers':None}

  def run_multiproc(self, inf, outf, debug=False, silent=False, workers=4):
    self.h = {'fn':'run_multiproc','inf':inf,'outf':outf,'debug':debug,'silent':silent,'workers':workers}

  def setUp(self):
    self.cj = CodeJam(parsers.ints, self.solve)
    self.cj.run = self.run_basic
    self.cj.run_multiproc = self.run_multiproc

    self.h = {s:None for s in 'fn inf outf debug silent workers'.split()}

    inf = open('test.in','w')
    inf.write('2\n1 2 3\n1 2 3')
    inf.close()

  def tearDown(self):
    pass

  def test_basic(self):
    argv = ['test.in']
    self.cj.main(argv)
    assert self.h['fn'] == 'run'
    assert self.h['inf'].name == 'test.in'
    assert self.h['inf'].read() == '''2
1 2 3
1 2 3'''
    assert self.h['outf'].name == 'test.out'
    assert self.h['silent'] == False
    assert self.h['debug'] == False

  def test_debug_silent(self):
    argv = ['test.in','-d','-q']
    self.cj.main(argv)
    assert self.h['fn'] == 'run'
    assert self.h['silent'] == True
    assert self.h['debug'] == True

  def test_outpuf_file(self):
    argv = ['test.in','-o','another.out']
    self.cj.main(argv)
    assert self.h['fn'] == 'run'
    assert self.h['outf'].name == 'another.out'

  def test_multiproc(self):
    argv = ['test.in','-m','-w','3']
    self.cj.main(argv)
    assert self.h['fn'] == 'run_multiproc'
    assert self.h['workers'] == 3
Esempio n. 2
0
  def setUp(self):
    self.cj = CodeJam(parsers.ints, self.solve)
    self.cj.run = self.run_basic
    self.cj.run_multiproc = self.run_multiproc

    self.h = {s:None for s in 'fn inf outf debug silent workers'.split()}

    inf = open('test.in','w')
    inf.write('2\n1 2 3\n1 2 3')
    inf.close()
Esempio n. 3
0
                c = 'P'
                a = 'R'
            else:
                return 'IMPOSSIBLE'

    def expand(a, r):
        if r == 0:
            return a
        x = expand(a, r - 1)
        y = expand(beats[a], r - 1)
        return ''.join(sorted((x, y)))

    return expand(a, n)
    #field = a
    #for round in range(n):
    #    newfield = ''
    #    for ct in field:
    #        newfield += ''.join(sorted(ct + beats[ct]))
    #    field = newfield
    #return field


cj = CodeJam(docase)

# After importing cj into an interactive terminal, I test the code by
# running:
# >>> cj.processtext("""examples""")
#
# Then after downloading the problem set, I solve it with:
# >>> cj.processfile('filename')
Esempio n. 4
0
        except KeyError:
            level[len(implied)] = [implied]

    full = []
    for l, impl in sorted(level.items()):
        if l == 1:
            for ii in impl:
                full = merge(full, ii[0])
        else:
            for ii in impl:
                full = mergemult(full, ii)

    assert len(full) <= N, 'too big %s' % full

    return full + (N - len(full)) * [2]


@parsers.iter_parser
def parse(nxt):
    inxt = lambda: [int(x) for x in nxt().split()]
    r, n, m, k = inxt()
    nums = []
    for _ in xrange(r):
        nums += [inxt()]

    return n, m, k, nums


if __name__ == "__main__":
    CodeJam(parse, solve).main()
Esempio n. 5
0
import itertools
import decimal
import math
from codejam import CodeJam

cj = CodeJam(debug=False)

three = decimal.Decimal(3)
five = decimal.Decimal(5).sqrt()
for case in cj.cases:
    n = cj.get_int()
    total = (three + five)**n
    t = total.to_eng_string()
    entera = t.split('.', 1)[0]
    print entera, t
    cj.write_case(entera[-3:].zfill(3))
Esempio n. 6
0
from math import log


def testcase(f):
    (N, K) = (int(i) for i in f.readline().split())
    rounds = int(log(K, 2))
    thisround = 2**rounds
    stallsleft = N - (thisround - 1)
    mindist = int(stallsleft / thisround)
    maxdist = mindist + 1
    nummax = stallsleft - (mindist * thisround)
    nummin = thisround - nummax
    if K - (thisround - 1) > nummax:
        span = mindist
    else:
        span = maxdist
    if span % 2:
        return '{0} {0}'.format((span - 1) // 2)
    else:
        return '{} {}'.format((span - 1) // 2 + 1, (span - 1) // 2)


cj = CodeJam(testcase)

# After importing cj into an interactive terminal, I test the code by
# running:
# >>> cj.processtext("""examples""")
#
# Then after downloading the problem set, I solve it with:
# >>> cj.processfile('filename')
Esempio n. 7
0

def process_case(line):

    recycled = set()
    A_s, B_s = line.split(' ')
    A = int(A_s)
    B = int(B_s)

    length = len(str(A))
    range_len = range(1, length)

    for n in range(A, B):
        n_l = list(str(n))
        for i in range_len:
            if n_l[-i] > B_s[0] or \
                        n_l[-i] < A_s[0] or n_l[-i] == '0':
                continue
            #m_l = n_l[-i:] + n_l[:-i]
            #m_s = ''.join(m_l)
            #m = int(m_s)
            m = int(''.join(n_l[-i:] + n_l[:-i]))
            if A <= n < m <= B:
                recycled.add((n, m))
    return len(recycled)


if __name__ == '__main__':
    codejam = CodeJam()
    codejam(process_case)
Esempio n. 8
0
def jamcoins(f):
    (length, num) = (int(_) for _ in f.readline().split())
    n = 0
    coins = []
    while len(coins) < num:
        factors = []
        s = '1{n:0{width}b}1'.format(n=n, width=length - 2)
        for base in range(2, 11):
            factors.append(findfactor(int(s, base)))
            if factors[-1] is None:
                break
        else:
            coins.append((s, factors))
        n += 1
    out = ''
    for coin in coins:
        out += '\n' + coin[0] + ' '
        out += ' '.join(str(_) for _ in coin[1])
    return out


cj = CodeJam(jamcoins)

# After importing cj into an interactive Python shell, I test the code by
# running:
# >>> cj.processtext("""examples""")
#
# Then after downloading the problem set, I solve it with:
# >>> cj.processfile('filename')
Esempio n. 9
0
'''
from codejam import CodeJam, parsers
from codejam.helpers import memoize
from math import ceil


def solve(params, ns):
    E, r, n = params
    maxn = max(ns)

    @memoize
    def best(e, *rest):
        if len(rest) == 0:
            return 0
        else:
            t, rest = rest[0], rest[1:]
            if t == maxn:
                return e * t + best(r, *rest)

            all = [
                x * t + best(min(e - x + r, E), *rest)
                for x in reversed(xrange(e + 1))
            ]
            return max(all)

    return best(E, *ns)


if __name__ == "__main__":
    CodeJam(parsers.ints, solve).main()
Esempio n. 10
0
import itertools
from codejam import CodeJam

cj = CodeJam(debug=False)

for case in cj.cases:
    elements = cj.get_int()
    v1 = map(int, cj.get_lines(1)[0].split(' '))
    v2 = map(int, cj.get_lines(1)[0].split(' '))
    total = 0

    if max(v1) > max(v2):
        v1.sort(reverse=True)
        v2.sort()
    else:
        v2.sort(reverse=True)
        v1.sort()

    for i in xrange(elements):
        total += v1[i] * v2[i]

    print total
    cj.write_case(total)
Esempio n. 11
0
#!/usr/bin/python3

from codejam import CodeJam


def sheep(f):
    last = n = int(f.readline())
    if n == 0:
        return 'INSOMNIA'
    digs = set(str(n))
    while len(digs) < 10:
        last += n
        digs |= set(str(last))
    return last


cj = CodeJam(2016, 'qual', 'A', sheep)

# After importing cj into an interactive terminal, I test the code by
# running:
# >>> cj.processtext("""examples""")
#
# Then after downloading the problem set, I solve it with:
# >>> cj.processfile('filename')
Esempio n. 12
0
#!/usr/bin/python3

from codejam import CodeJam


def pancakes(f):
    stack = [True if p == '+' else False for p in f.readline().strip()]
    flips = int(not stack[-1])
    ptr = 0
    parity = stack[0]
    while ptr < len(stack):
        try:
            ptr += stack[ptr:].index(not parity)
        except:
            return flips
        flips += 1
        parity = not parity


cj = CodeJam(2016, 'qual', 'B', pancakes)
Esempio n. 13
0
                    'rbcpc ypc rtcsra dkh wyfrepkym veddknkmkrkcd '
                    'de kr kd eoya kw aej tysr re ujdr lkgc jv')

sample_decrypted = ('our language is impossible to understand '
                    'there are twenty six factorial possibilities '
                    'so it is okay if you want to just give up')


def load_dict():
    for i, enc_letter in enumerate(sample_encrypted):
        dict_[enc_letter] = sample_decrypted[i]


def translate(text):
    translated = []
    for enc_letter in text:
        translated.append(dict_.get(enc_letter))

    return ''.join(translated)


def test_dict():
    assert translate(sample_encrypted) == sample_decrypted


if __name__ == '__main__':
    load_dict()
    #test_dict()
    codejam = CodeJam('A-small-attempt0.in')
    codejam(translate)
Esempio n. 14
0
    newStrNum = ''
    for i, char in enumerate(strNum):
        if i >= untidyAt:
            newStrNum += '0'
        else:
            newStrNum += strNum[i]

    num = int(newStrNum)
    num -= 1
    if isTidy(num)[0]:
        return num
    else:
        return tidyNumber(num)


assert tidyNumber(11243799) == 11239999
assert tidyNumber(111) == 111
assert tidyNumber(9876) == 8999
assert tidyNumber(1234) == 1234
assert tidyNumber(1023) == 999
assert tidyNumber(111111111111111110) == 99999999999999999


def solveTidy(xs):
    return tidyNumber(xs[0])


if __name__ == "__main__":
    from codejam import CodeJam, parsers
    CodeJam(parsers.ints, solveTidy).main()
Esempio n. 15
0
        for se in search_engines:
            if words[i:].count(se) == 0:
                candidate = (0, se)
                break
        else:
            for word in words[i:]:
                actual = words[i:].index(word)
                if actual >= candidate[0] and actual != 0:
                    candidate = (actual, word)

        ret_word_dict.append(candidate)

    return ret_word_dict

cj = CodeJam(debug=False)
cases = cj.get_int()

for case in xrange(cases):
    search_engines = cj.get_lines(cj.get_int())
    words = cj.get_lines(cj.get_int())

    switch = 0
    if words:
        words_best = get_words_count(words, search_engines)

        actual = ''
        for i in xrange(len(words)):
            if i == 0 or actual == words[i]:
                actual = words_best[i][1]
                if i != 0: switch += 1