Manually merging: - README.md: I added the description from universe/README.md into the heading of dotfiles/README.md. - .envrc: dotfiles/.envrc was a superset of universe/.envrc - .gitignore: Adding some of the ignored patterns from universe/.gitignore to dotfiles/.gitignore Everything else here should be a simple rename.
		
			
				
	
	
		
			78 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
 | 
						|
 | 
						|
 | 
						|
# Write a function with the following type signature:L
 | 
						|
# equal? :: String -> String -> Bool
 | 
						|
#
 | 
						|
# Determine equality between two inputs with backspace characters encoded as
 | 
						|
# "<".
 | 
						|
 | 
						|
################################################################################
 | 
						|
# Solution 1
 | 
						|
################################################################################
 | 
						|
 | 
						|
# from collections import deque
 | 
						|
 | 
						|
# def equal(a, b):
 | 
						|
#     sa = deque()
 | 
						|
#     sb = deque()
 | 
						|
 | 
						|
#     for c in a:
 | 
						|
#         if c == '<':
 | 
						|
#             sa.pop()
 | 
						|
#         else:
 | 
						|
#             sa.append(c)
 | 
						|
 | 
						|
#     for c in b:
 | 
						|
#         if c == '<':
 | 
						|
#             sb.pop()
 | 
						|
#         else:
 | 
						|
#             sb.append(c)
 | 
						|
 | 
						|
#     return sa == sb
 | 
						|
 | 
						|
################################################################################
 | 
						|
# Solution 2
 | 
						|
################################################################################
 | 
						|
 | 
						|
def handle_dels(num_dels, i, xs):
 | 
						|
    if i < 0:
 | 
						|
        return -1
 | 
						|
 | 
						|
    while xs[i] == '<':
 | 
						|
        num_dels += 1
 | 
						|
        i -= 1
 | 
						|
 | 
						|
    while num_dels > 0 and xs[i] != '<':
 | 
						|
        num_dels -= 1
 | 
						|
        i -= 1
 | 
						|
 | 
						|
    if xs[i] == '<':
 | 
						|
        return handle_dels(num_dels, i, xs)
 | 
						|
    else:
 | 
						|
        return i
 | 
						|
 | 
						|
def update_index(i, xs):
 | 
						|
    # TODO: Indexing into non-available parts of a string.
 | 
						|
    if xs[i] != '<' and xs[i - 1] != '<':
 | 
						|
        return i - 1
 | 
						|
 | 
						|
    elif xs[i - 1] == '<':
 | 
						|
        return handle_dels(0, i - 1, xs)
 | 
						|
 | 
						|
def equal(a, b):
 | 
						|
    ia = len(a) - 1
 | 
						|
    ib = len(b) - 1
 | 
						|
 | 
						|
    while ia >= 0 and ib >= 0:
 | 
						|
        if a[ia] != b[ib]:
 | 
						|
            return False
 | 
						|
        ia = update_index(ia, a)
 | 
						|
        ib = update_index(ib, b)
 | 
						|
 | 
						|
    if ia != 0:
 | 
						|
        return update_index(ia, a) <= -1
 | 
						|
    if ib != 0:
 | 
						|
        return update_index(ib, b) <= -1
 | 
						|
 | 
						|
    return True
 |