Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- This program will verify a solution to Bytelandian Exchange 3. To use:
- python byteland-3-check.py < solution.txt
- If the program executes with no assertion errors, your solution is correct.
- The first line of the file is two integers N and p, with N = the number of the coin you start
- with and p = the smallest coin that Machine #1 will output. (For the basic challenge, p = 1,
- and for the Bonus, p = 2.)
- Each line after the first is a single number that represents an exchange:
- -N means to put a coin with a value of N into Machine #1.
- This will add three coins valued N/2, N/3, and N/4 to your collection.
- N means to put a coin with a value of N into Machine #2, along with your smallest-valued coin
- with a value of at least p. This will add a coin with a value of N+1 to your collection.
- For example, the input might start like this:
- 897 1
- -897
- -224
- -56
- -14
- -3
- 299
- 300
- This represents 5 uses of Machine #1 followed by 2 uses of Machine #2. At this point, the coins
- you have will be: 448 301 112 74 28 18 7 4
- At the end you must have at least 2 coins worth >= p, one of which is worth >= N.
- """
- import sys, collections
- lines = list(sys.stdin)
- N, p = map(int,lines[0].split())
- coins = collections.Counter()
- coins[N] = 1
- for line in lines[1:]:
- n = int(line)
- assert abs(n)
- if n < 0:
- # Use Machine 1
- n = -n
- assert coins[n]
- coins[n] -= 1
- coins[n//2] += 1
- coins[n//3] += 1
- coins[n//4] += 1
- else:
- # Use Machine 2
- m = min(coin for coin in coins if coins[coin])
- assert coins[n]
- assert coins[m]
- coins[n] -= 1
- coins[m] -= 1
- if n == m:
- assert coins[n] >= 0
- coins[n+1] += 1
- # Throw out useless coins
- for n in coins:
- if n < p:
- coins[n] = 0
- print("%s | %s" %
- (line.strip(),
- " ".join(map(str, sorted(list(coins.elements()), reverse=True))))
- )
- largest = max(coin for coin in coins if coins[coin])
- ncoins = sum(coins.values())
- assert largest >= N and ncoins > 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement