diff --git a/hw/hw01/construct_check.py b/hw/hw01/construct_check.py
deleted file mode 100644
index bee096e7e..000000000
--- a/hw/hw01/construct_check.py
+++ /dev/null
@@ -1,180 +0,0 @@
-from ast import parse, NodeVisitor, Name
-
-# For error messages (student-facing) only
-_NAMES = {
- 'Add': '+',
- 'And': 'and',
- 'Assert': 'assert',
- 'Assign': '=',
- 'AnnAssign': '=',
- 'AugAssign': 'op=',
- 'BitAnd': '&',
- 'BitOr': '|',
- 'BitXor': '^',
- 'Break': 'break',
- 'Recursion': 'recursive call',
- 'ClassDef': 'class',
- 'Continue': 'continue',
- 'Del': 'del',
- 'Delete': 'delete',
- 'Dict': '{...}',
- 'DictComp': '{...}',
- 'Div': '/',
- 'Ellipsis': '...',
- 'Eq': '==',
- 'ExceptHandler': 'except',
- 'ExtSlice': '[::]',
- 'FloorDiv': '//',
- 'For': 'for',
- 'FunctionDef': 'def',
- 'Filter': 'filter',
- 'GeneratorExp': '(... for ...)',
- 'Global': 'global',
- 'Gt': '>',
- 'GtE': '>=',
- 'If': 'if',
- 'IfExp': '...if...else...',
- 'Import': 'import',
- 'ImportFrom': 'from ... import ...',
- 'In': 'in',
- 'Index': '...[...]',
- 'Invert': '~',
- 'Is': 'is',
- 'IsNot': 'is not ',
- 'LShift': '<<',
- 'Lambda': 'lambda',
- 'List': '[...]',
- 'ListComp': '[...for...]',
- 'Lt': '<',
- 'LtE': '<=',
- 'Mod': '%',
- 'Mult': '*',
- 'NamedExpr': ':=',
- 'Nonlocal': 'nonlocal',
- 'Not': 'not',
- 'NotEq': '!=',
- 'NotIn': 'not in',
- 'Or': 'or',
- 'Pass': 'pass',
- 'Pow': '**',
- 'RShift': '>>',
- 'Raise': 'raise',
- 'Return': 'return',
- 'Set': '{ ... } (set)',
- 'SetComp': '{ ... for ... } (set)',
- 'Slice': '[ : ]',
- 'Starred': '',
- 'Str': 'str',
- 'Sub': '-',
- 'Subscript': '[]',
- 'Try': 'try',
- 'Tuple': '(... , ... )',
- 'UAdd': '+',
- 'USub': '-',
- 'While': 'while',
- 'With': 'with',
- 'Yield': 'yield',
- 'YieldFrom': 'yield from',
-}
-
-def check(source_file, checked_funcs, disallow, source=None):
- """Checks that AST nodes whose type names are present in DISALLOW
- (an object supporting 'in') are not present in the function(s) named
- CHECKED_FUNCS in SOURCE. By default, SOURCE is the contents of the
- file SOURCE_FILE. CHECKED_FUNCS is either a string (indicating a single
- name) or an object of some other type that supports 'in'. CHECKED_FUNCS
- may contain __main__ to indicate an entire module. Prints reports of
- each prohibited node and returns True iff none are found.
- See ast.__dir__() for AST type names. The special node name 'Recursion'
- checks for overtly recursive calls (i.e., calls of the form NAME(...) where
- NAME is an enclosing def."""
- return ExclusionChecker(disallow).check(source_file, checked_funcs, source)
-
-class ExclusionChecker(NodeVisitor):
- """An AST visitor that checks that certain constructs are excluded from
- parts of a program. ExclusionChecker(EXC) checks that AST node types
- whose names are in the sequence or set EXC are not present. Its check
- method visits nodes in a given function of a source file checking that the
- indicated node types are not used."""
-
- def __init__(self, disallow=()):
- """DISALLOW is the initial default list of disallowed
- node-type names."""
- self._disallow = set(disallow)
- self._checking = False
- self._errs = 0
-
- def generic_visit(self, node):
- if self._checking and type(node).__name__ in self._disallow:
- self._report(node)
- super().generic_visit(node)
-
- def visit_Module(self, node):
- if "__main__" in self._checked_funcs:
- self._checking = True
- self._checked_name = self._source_file
- super().generic_visit(node)
-
- def visit_Call(self, node):
- if 'Recursion' in self._disallow and \
- type(node.func) is Name and \
- node.func.id in self._func_nest:
- self._report(node, "should not be recursive")
- self.generic_visit(node)
-
- def visit_FunctionDef(self, node):
- self._func_nest.append(node.name)
- if self._checking:
- self.generic_visit(node)
- elif node.name in self._checked_funcs:
- self._checked_name = "Function " + node.name
- checking0 = self._checking
- self._checking = True
- super().generic_visit(node)
- self._checking = checking0
- self._func_nest.pop()
-
- def _report(self, node, msg=None):
- node_name = _NAMES.get(type(node).__name__, type(node).__name__)
- if msg is None:
- msg = "should not contain '{}'".format(node_name)
- print("{} {}".format(self._checked_name, msg))
- self._errs += 1
-
- def errors(self):
- """Returns the number of number of prohibited constructs found in
- the last call to check."""
- return self._errs
-
- def check(self, source_file, checked_funcs, disallow=None, source=None):
- """Checks that AST nodes whose type names are present in DISALLOW
- (an object supporting the contains test) are not present in
- the function(s) named CHECKED_FUNCS in SOURCE. By default, SOURCE
- is the contents of the file SOURCE_FILE. DISALLOW defaults to the
- argument given to the constructor (and resets that value if it is
- present). CHECKED_FUNCS is either a string (indicating a single
- name) or an object of some other type that supports 'in'.
- CHECKED_FUNCS may contain __main__ to indicate an entire module.
- Prints reports of each prohibited node and returns True iff none
- are found.
- See ast.__dir__() for AST type names. The special node name
- 'Recursion' checks for overtly recursive calls (i.e., calls of the
- form NAME(...) where NAME is an enclosing def."""
-
- self._checking = False
- self._source_file = source_file
- self._func_nest = []
- if type(checked_funcs) is str:
- self._checked_funcs = { checked_funcs }
- else:
- self._checked_funcs = set(checked_funcs)
- if disallow is not None:
- self._disallow = set(disallow)
- if source is None:
- with open(source_file, 'r', errors='ignore') as inp:
- source = inp.read()
- p = parse(source, source_file)
- self._errs = 0
-
- self.visit(p)
- return self._errs == 0
\ No newline at end of file
diff --git a/hw/hw01/hw01.ok b/hw/hw01/hw01.ok
deleted file mode 100644
index 5ccfd9042..000000000
--- a/hw/hw01/hw01.ok
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "Homework 1",
- "endpoint": "cal/cs61a/fa24/hw01",
- "src": [
- "hw01.py"
- ],
- "tests": {
- "hw*.py": "doctest",
- "tests/*.py": "ok_test"
- },
- "default_tests": [
- "a_plus_abs_b",
- "a_plus_abs_b_syntax_check",
- "two_of_three",
- "two_of_three_syntax_check",
- "largest_factor",
- "hailstone"
- ],
- "protocols": [
- "file_contents",
- "grading",
- "analytics",
- "help",
- "backup"
- ]
-}
\ No newline at end of file
diff --git a/hw/hw01/hw01.py b/hw/hw01/hw01.py
deleted file mode 100644
index a06963e47..000000000
--- a/hw/hw01/hw01.py
+++ /dev/null
@@ -1,91 +0,0 @@
-from operator import add, sub
-
-def a_plus_abs_b(a, b):
- """Return a+abs(b), but without calling abs.
-
- >>> a_plus_abs_b(2, 3)
- 5
- >>> a_plus_abs_b(2, -3)
- 5
- >>> a_plus_abs_b(-1, 4)
- 3
- >>> a_plus_abs_b(-1, -4)
- 3
- """
- if b < 0:
- f = _____
- else:
- f = _____
- return f(a, b)
-
-def a_plus_abs_b_syntax_check():
- """Check that you didn't change the return statement of a_plus_abs_b.
-
- >>> # You aren't expected to understand the code of this test.
- >>> import inspect, re
- >>> re.findall(r'^\s*(return .*)', inspect.getsource(a_plus_abs_b), re.M)
- ['return f(a, b)']
- """
- # You don't need to edit this function. It's just here to check your work.
-
-
-def two_of_three(i, j, k):
- """Return m*m + n*n, where m and n are the two smallest members of the
- positive numbers i, j, and k.
-
- >>> two_of_three(1, 2, 3)
- 5
- >>> two_of_three(5, 3, 1)
- 10
- >>> two_of_three(10, 2, 8)
- 68
- >>> two_of_three(5, 5, 5)
- 50
- """
- return _____
-
-def two_of_three_syntax_check():
- """Check that your two_of_three code consists of nothing but a return statement.
-
- >>> # You aren't expected to understand the code of this test.
- >>> import inspect, ast
- >>> [type(x).__name__ for x in ast.parse(inspect.getsource(two_of_three)).body[0].body]
- ['Expr', 'Return']
- """
- # You don't need to edit this function. It's just here to check your work.
-
-
-def largest_factor(n):
- """Return the largest factor of n that is smaller than n.
-
- >>> largest_factor(15) # factors are 1, 3, 5
- 5
- >>> largest_factor(80) # factors are 1, 2, 4, 5, 8, 10, 16, 20, 40
- 40
- >>> largest_factor(13) # factor is 1 since 13 is prime
- 1
- """
- "*** YOUR CODE HERE ***"
-
-
-def hailstone(n):
- """Print the hailstone sequence starting at n and return its
- length.
-
- >>> a = hailstone(10)
- 10
- 5
- 16
- 8
- 4
- 2
- 1
- >>> a
- 7
- >>> b = hailstone(1)
- 1
- >>> b
- 1
- """
- "*** YOUR CODE HERE ***"
-
diff --git a/hw/hw01/hw01.zip b/hw/hw01/hw01.zip
deleted file mode 100644
index a72964d40..000000000
Binary files a/hw/hw01/hw01.zip and /dev/null differ
diff --git a/hw/hw01/index.html b/hw/hw01/index.html
deleted file mode 100644
index e2aa33045..000000000
--- a/hw/hw01/index.html
+++ /dev/null
@@ -1,534 +0,0 @@
-
-
-
-
Submission: When you are done, submit the assignment by uploading all code files you've edited to Gradescope. You may submit more than once before the deadline; only the
-final submission will be scored. Check that you have successfully submitted
-your code on Gradescope. See Lab 0 for more instructions on
-submitting assignments.
-
-
Using Ok: If you have any questions about using Ok, please
-refer to this guide.
-
-
-
Readings: You might find the following references
- useful:
Grading: Homework is graded based on
-correctness. Each incorrect problem will decrease the total score by one point.
-This homework is out of 2 points.
-
-
-
-
-
-
-
-
-
-
-
Getting Started Videos
-
-
-
These videos may provide some helpful direction for tackling the
-problems on this assignment.
-
-
To see these videos, you should be logged into your berkeley.edu email.
-
-
Python's operator module contains two-argument functions such as add and
-sub for Python's built-in arithmetic operators. For example, add(2, 3)
-evalutes to 5, just like the expression 2 + 3.
-
-
Fill in the blanks in the following function for adding a to the
-absolute value of b, without calling abs. You may not modify any
-of the provided code other than the two blanks.
-
-
def a_plus_abs_b(a, b):
- """Return a+abs(b), but without calling abs.
-
- >>> a_plus_abs_b(2, 3)
- 5
- >>> a_plus_abs_b(2, -3)
- 5
- >>> a_plus_abs_b(-1, 4)
- 3
- >>> a_plus_abs_b(-1, -4)
- 3
- """
- if b < 0:
- f = _____
- else:
- f = _____
- return f(a, b)
-
-
Use Ok to test your code:
python3 ok -q a_plus_abs_b
-
-
-
-
Use Ok to run the local syntax checker (which checks that you didn't modify any of the provided code other than the two blanks):
-
-
python3 ok -q a_plus_abs_b_syntax_check
-
-
-
-
-
-
-
Q2: Two of Three
-
-
-
Write a function that takes three positive numbers as arguments and returns
-the sum of the squares of the two smallest numbers. Use only a single line
-for the body of the function.
-
-
def two_of_three(i, j, k):
- """Return m*m + n*n, where m and n are the two smallest members of the
- positive numbers i, j, and k.
-
- >>> two_of_three(1, 2, 3)
- 5
- >>> two_of_three(5, 3, 1)
- 10
- >>> two_of_three(10, 2, 8)
- 68
- >>> two_of_three(5, 5, 5)
- 50
- """
- return _____
-
-
-
Hint: Consider using the max or min function:
-
-
>>> max(1, 2, 3)
-3
->>> min(-1, -2, -3)
--3
-
-
Use Ok to test your code:
python3 ok -q two_of_three
-
-
-
-
Use Ok to run the local syntax checker (which checks that you used only a single line for the body of the function):
-
-
python3 ok -q two_of_three_syntax_check
-
-
-
-
-
-
-
Q3: Largest Factor
-
-
-
Write a function that takes an integer n that is greater than 1 and
-returns the largest integer that is smaller than n and evenly divides n.
-
-
def largest_factor(n):
- """Return the largest factor of n that is smaller than n.
-
- >>> largest_factor(15) # factors are 1, 3, 5
- 5
- >>> largest_factor(80) # factors are 1, 2, 4, 5, 8, 10, 16, 20, 40
- 40
- >>> largest_factor(13) # factor is 1 since 13 is prime
- 1
- """
- "*** YOUR CODE HERE ***"
-
-
-
Hint: To check if b evenly divides a,
-use the expression a % b == 0, which can be read as,
-"the remainder when dividing a by b is 0."
-
-
Use Ok to test your code:
python3 ok -q largest_factor
-
-
-
-
-
-
-
Q4: Hailstone
-
-
-
Douglas Hofstadter's Pulitzer-prize-winning book, Gödel, Escher, Bach, poses
-the following mathematical puzzle.
-
-
-
Pick a positive integer n as the start.
-
If n is even, divide it by 2.
-
If n is odd, multiply it by 3 and add 1.
-
Continue this process until n is 1.
-
-
-
The number n will travel up and down but eventually end at 1 (at least for
-all numbers that have ever been tried -- nobody has ever proved that the
-sequence will terminate). Analogously, a hailstone travels up and down in the
-atmosphere before eventually landing on earth.
-
-
This sequence of values of n is often called a Hailstone sequence. Write a
-function that takes a single argument with formal parameter name n, prints
-out the hailstone sequence starting at n, and returns the number of steps in
-the sequence:
-
-
def hailstone(n):
- """Print the hailstone sequence starting at n and return its
- length.
-
- >>> a = hailstone(10)
- 10
- 5
- 16
- 8
- 4
- 2
- 1
- >>> a
- 7
- >>> b = hailstone(1)
- 1
- >>> b
- 1
- """
- "*** YOUR CODE HERE ***"
-
-
-
Hailstone sequences can get quite long! Try 27. What's the longest you can
-find?
-
-
Note that if n == 1 initially, then the sequence is one step long.
-Hint: If you see 4.0 but want just 4, try using floor division // instead of regular division /.
-
-
Use Ok to test your code:
python3 ok -q hailstone
-
-
-
-
Curious about hailstones or hailstone sequences? Take a look at these articles:
-
-
-
Check out this article to learn more about how hailstones work!
-
In 2019, there was a major development in understanding how the hailstone conjecture works for most numbers!
-
-
-
-
-
-
Check Your Score Locally
-
-
You can locally check your score on each question of this assignment by running
-
-
python3 ok --score
-
-
This does NOT submit the assignment! When you are satisfied with your score, submit the assignment to Gradescope to receive credit for it.
-
-
-
Submit Assignment
-
-
-
Submit this assignment by uploading any files you've edited to the appropriate Gradescope assignment.Lab 00 has detailed instructions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/hw/hw01/ok b/hw/hw01/ok
deleted file mode 100644
index 88874ff1a..000000000
Binary files a/hw/hw01/ok and /dev/null differ