Quiz9

Quiz9 Version C



Important notes:
  1. Do not start until you are instructed to do so!
  2. We suggest you do not use your browser's zoom feature. Instead...
  3. You will have 20 minutes once the proctor says to start.
  4. You will have brief additional time after we stop to scan and submit your solutions.

  5. Just before the quiz...
    1. Have a fully-charged smartphone and laptop, and still plug both in if possible
    2. Log into Gradescope on your phone
    3. Change the screen timeout setting on your phone to never, so your screen doesn't go black if you don't interact with your screen for a while.
      • iPhones: Settings / Display & Brightness / Auto-Lock / Never
      • Android: Settings / Display / Screen timeout / 10 minutes (or the maximum amount of time)
    4. Turn on Do Not Disturb (or otherwise turn off all notifications).
    5. Position your webcam so we can see:
      • Your desk
      • The paper you are working on
      • Your writing utensil(s)
      • Both of your hands
      • Your phone
      • Optionally: one double-sided "help sheet" (with anything on it that you wish)

  6. During the quiz:
    1. You may not ask questions during the exam.
      • If you are unsure how to interpret a problem, take your best guess.
    2. You may not touch your laptop or webcam.
      • This includes muting yourself at any point; the proctors may mute you though.
    3. All of these must be visible at all times:
      • Your desk
      • The paper you are working on
      • Your writing utensil(s)
      • Both of your hands
      • Your phone, with the quiz webpage
      • Optionally: one double-sided "help sheet" (with anything on it that you wish)
    4. For any tech fails (laptop or internet stops working, etc.):
      1. Stop taking the quiz
      2. Fill out this Google Form immediately
      3. We will email you soon to set up a 1-on-1 oral quiz with the course faculty

  7. After the quiz:
    1. Follow all proctor instructions on how to end the quiz.
    2. Keep everything in view (as noted above) until the proctor calls "time".
    3. When instructed, use your phone to scan your quiz and submit the PDF to Gradescope.
    4. After submitting to Gradescope, hold your phone up to the webcam to show the receipt.
    5. Even then, remain in quiz mode until the proctor calls "all clear"


1. Code Tracing 1 [20 points]

What does the following code print?
Be certain to show your work, and also very clearly circle your answer!
def h(s, c):
    if (s == ''):
        return 0
    else:
        a = h(s[1:], c)
        if (s[0] == c):
            b = 1 
        elif (str(a * 2) == c):
            b = 10
        else:
            b = 0
        return a + b

def ct1C():
    print('ct1C:')
    print(h('1234','3'))
    print(h('927262', '2'))
    print(h('124222', '2'))

ct1C()



2. Code Tracing 2 [20 points]

What does the following code print?
Be certain to show your work, and also very clearly circle your answer!
def ct2C(n):
    if (n == 0):
        return 'x'
    elif (n == 1):
        return 'y'
    else:
        return ct2C(n//4) + str(n) + ct2C(n//2)

print(ct2C(9))



3. Reasoning Over Code [10 points]

What input makes the following function return True? Be certain to show your work, and also very clearly circle your answer!
def h(n):
    # this is a helper function for rc1
    if (n == 0):
        return 0
    x = n % 10
    if (x % 2 == 0):
        return 1 + h(n//10)
    else:
        return h(n//10)

def rc1C(n):
    return ((n > 12345) and 
            (h(n) == 3) and
            (h(n//100) == 2))



4. Free Response: makePal [50 points]

Note: you may not use helper functions, wrapper functions, default parameters, etc. You must write a single recursive function to solve each of these.

Also: you may not use ANY builtin functions at all. So you cannot use abs, len, max, min, pow, count, ...

Also: no slicing allowed except when you are excluding just a small constant number of values, such as excluding just the first value, excluding just the last value, or excluding both of those.
So these are all ok: L[1:], L[:-1], L[1:-1]
But these are not ok: L[::-1], L[::2],...
You also may not use list methods like .pop() or .insert()

With this in mind, write the function makePal(L) which takes a list of integers L, and returns a new list of integers M of twice the original length. If N is the length of L, then the first N values in M are the same as in L, and the last N values in M are those values in reverse.

For example, if L = [1,2,3], then makePal(L) returns [1,2,3,3,2,1].





5. Bonus/Optional: Code Tracing [2.5 points]

What does the following code print?
Be certain to show your work, and also very clearly circle your answer!
def f(x, d, m={ }):
    # hint: { } is mutable
    if (x not in m):
        if (x < 2):
            m[x] = 1
        else:
            m[x] = f(x-1, d) + (f(x-2, d) * d)
    return m[x]
print([f(x, 3) for x in range(5)])
print(f(3, 4))