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
 |