From 7c0a2b10b3f61fa25cfd2df45d1c990a832dc0bf Mon Sep 17 00:00:00 2001 From: Dominic Ricottone Date: Fri, 6 Jan 2023 16:42:08 -0600 Subject: [PATCH] Initial commit --- main.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 main.py diff --git a/main.py b/main.py new file mode 100755 index 0000000..60e21b5 --- /dev/null +++ b/main.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 + +""" +You and a friend are shooting some hoops at your local basketball court when +she issues a challenge: She will name a number, which we’ll call N. Your goal +is to score exactly N points in as many ways as possible using only 2-point +and 3-point shots. The order of your shots does not matter. + +For example, there are two ways you could score N = 8 points: four 2-pointers +or two 3-pointers and one 2-pointer. + +Your apparently sadistic friend chooses 60 for the value of N. You try to +negotiate this number down, but to no avail. However, she says you are welcome +to pick an even larger value of N. Does there exist an integer N greater than +60 such that there are fewer ways to score N points than there are ways to +score 60 points? +""" + +def count_combinations(total_points: int) -> int: + counter = 0 + for i in range(total_points // 3 + 1): + for j in range(total_points // 2 + 1): + combination = (3 * i) + (2 * j) + if combination == total_points: + counter += 1 + elif combination > total_points: + break + return counter + +def test(): + """Small test set.""" + assert count_combinations(0) == 1 #no points + assert count_combinations(1) == 0 #impossible + assert count_combinations(2) == 1 #1 two-pointer + assert count_combinations(3) == 1 #1 three-pointer + assert count_combinations(4) == 1 #2 two-pointers and 0 three-pointers + assert count_combinations(5) == 1 #0 and 1 + assert count_combinations(6) == 2 #3 and 0; 0 and 2 + assert count_combinations(7) == 1 #1 and 2 + assert count_combinations(8) == 2 #4 and 0; 1 and 2 + assert count_combinations(9) == 2 #3 and 1; 0 and 3 + +def main(): + """Main function.""" + sixty_points_combinations = count_combinations(60) + print(f"There are {sixty_points_combinations} ways to score 60 points") + + n = 61 + while True: + n_points_combinations = count_combinations(n) + if n_points_combinations < sixty_points_combinations: + print(f"{n} points can be scored in just {n_points_combinations} ways") + break + cursor += 1 + +def timed_main(): + """Main function without any printing.""" + sixty_points_combinations = count_combinations(60) + n = 61 + while True: + n_points_combinations = count_combinations(n) + if n_points_combinations < sixty_points_combinations: + break + cursor += 1 + +if __name__ == "__main__": + test() + main() + -- 2.45.2