| @@ -0,0 +1,22 @@ | |||
| import sys | |||
| def shuffle(text, L, P): | |||
| cards = list(range(L)) | |||
| for line in text.splitlines(): | |||
| inst, n = line.rsplit(' ', 1) | |||
| if inst == 'deal with increment': | |||
| n = int(n) | |||
| invmod = pow(n, -1, L) # pow(n, L - 2, L) | |||
| source = lambda i: i * invmod % L # noqa | |||
| elif inst == 'cut': | |||
| n = int(n) | |||
| source = lambda i: (i + n) % L # noqa | |||
| elif inst == 'deal into new': | |||
| source = lambda i: (L - 1 - i) % L # noqa | |||
| cards = [cards[source(i)] for i in range(L)] | |||
| return cards.index(P) | |||
| text = sys.stdin.read() | |||
| print(shuffle(text, 10007, 2019)) | |||