Collection of scripts corresponding to LucidProgramming YouTube tutorials
# LucidProgramming YouTube Tutorial Scripts:
[LucidProgramming](http://bit.ly/lucidcode) is my YouTube channel and this repo consists of a collection of scripts corresponding to YouTube tutorials for my YouTube channel.

## Sponsoring

If you found this code useful in your programming journey, please consider
sponsoring the creation of my content by clicking on the "Sponsor" button in
this repo.

The funding goes to the creation of new videos, code, and time spent responding
to questions, comments, etc.

Your support allows me to spend more time on creating more content to help
learners!

I thank the following supporters for helping sponsor the free content here:

[![LogoVertical](https://user-images.githubusercontent.com/1562214/155734335-954df830-9c41-4afb-ba76-334c573d157d.png)](https://github.com/vprusso/vprusso/blob/master/README.md)


## Contributing
I would love to compile solutions to all of the problems here, as well as offer solutions in different languages. Just create a pull request with your changes. 

## Index 

### Algorithms

#### Greedy Algorithms

* [Optimal Task Assingment](https://www.youtube.com/watch?v=QvSIAB27Vdk)<br>
    Determine the optimal way to assign two tasks to minimize total time.

#### Recursion

* [Count Consonants](https://www.youtube.com/watch?v=FTOTyTXIX6I)<br>
    Count the number of consonants present in a string.

* [Find Uppercase](https://www.youtube.com/watch?v=dlCGc92tAqo)<br> 
    Given a string, find the first uppercase character.

* [Product Two Numbers](https://www.youtube.com/watch?v=VapDVrsERsA)<br>
    Recursively calculate the product of two numbers.

* [String Length](https://www.youtube.com/watch?v=RRK0gd77Ln0)<br>
    Recursively calculate the length of a given string.

#### Search Algorithms

* [Binary Search](https://www.youtube.com/watch?v=zeULw-a7Mw8)<br>
    Iterative and recursive implementation and comparison of binary search.

* [Python's Bisect Method](https://www.youtube.com/watch?v=mqaf7vj1AdA&list=PL5tcWHG-UPH1kjiE-Fqt1xCSkcwyfn2Jb)<br>
    We cover the "bisect" function in Python, and how this can be used to apply to problems requiring binary search.

* [Cyclic Sorted Array](https://www.youtube.com/watch?v=l7swJRixYUM)<br>
    We use binary search to determine the first element of a sorted cyclically rotated list.

* [Find Bitonic Peak](https://www.youtube.com/watch?v=gHHjjcCc_4w&list=PL5tcWHG-UPH1kjiE-Fqt1xCSkcwyfn2Jb)<br>
    Determine what the "bitonic peak" of a sequence of numbers is using binary search.

* [Find Bitonic Peak](https://www.youtube.com/watch?v=gHHjjcCc_4w&list=PL5tcWHG-UPH1kjiE-Fqt1xCSkcwyfn2Jb)<br>
    Determine what the "bitonic peak" of a sequence of numbers is using binary search.

* [Find Closest Number](https://www.youtube.com/watch?v=0gkWZNE1H4Y&list=PL5tcWHG-UPH1kjiE-Fqt1xCSkcwyfn2Jb)<br>
    Given an array of sorted integers. We need to find the closest value to the given number.

* [Find First Duplicate Entry](https://www.youtube.com/watch?v=mGaamvgPqpw&list=PL5tcWHG-UPH1kjiE-Fqt1xCSkcwyfn2Jb)<br>
    Write a function that takes an array of sorted integers and a key and returns the index of the first occurrence of that key from the array.

* [Find Fixed Point](https://www.youtube.com/watch?v=BQa1hi6fnOE&list=PL5tcWHG-UPH1kjiE-Fqt1xCSkcwyfn2Jb)<br>
    Given an array of n distinct integers sorted in ascending order, write a function that returns a "fixed point" in the array. If there is not a fixed point return "None".

* [Integer Square Root](https://www.youtube.com/watch?v=plbSgfLCt74&list=PL5tcWHG-UPH1kjiE-Fqt1xCSkcwyfn2Jb)<br>
    Write a function that takes a non-negative integer and returns the largest integer whose square is less than or equal to the integer given.

#### Sorting Algorithms

* [Intersect Sorted Array](https://www.youtube.com/watch?v=vNm2nvDyyls)<br>
    Calculate the intersection (common elements) between two sorted arrays.

* [Remove First Name Duplicates](Pending)<br>
    Given a list of first/last name pairs, eliminate any entries with duplicate first names.

#### String Processing

* [Convert Integer to String](https://www.youtube.com/watch?v=b0vKXjPJwkg)<br>
    You are given some integer as input. Convert the integer you are given to a string. Do not make use of the built-in "str" function.

* [Convert String to Integer](https://www.youtube.com/watch?v=ik-RePSeaSs)<br>
    You are given some numeric string as input. Conver the string you are given to an integer. Do not make use of the built-in "int" function.

* [Is Anagram](https://www.youtube.com/watch?v=Pb7pmvifBf4)<br>
    Given a string, determine if it is an anagram, i.e. a word or phrase formed by rearranging the letters of a different word or phrase.

* [Is Palindrome](https://www.youtube.com/watch?v=qjuXUWzVO_Q)<br>
    Given a string, determine if it is a palindrome, i.e. a word or phrase that can be read the same forwards and backwards. 

* [Is Permutation](https://www.youtube.com/watch?v=qjuXUWzVO_Q&index=4&list=PL5tcWHG-UPH03aqnBTkBuH5qIbhshbg_K)<br>
    Given two strings, determine if one string is a permutation of the other.

* [Is Palindrome Permutation](https://www.youtube.com/watch?v=dCnxQGMpKz0&index=6&list=PL5tcWHG-UPH03aqnBTkBuH5qIbhshbg_K)<br>
    Given a string, determine if it is a permutation of a palindrome.

* [Is Unique](https://www.youtube.com/watch?v=KtKgFnZoM5o&index=8&list=PL5tcWHG-UPH03aqnBTkBuH5qIbhshbg_K)<br>
    Implement an algorithm to determine if a string has all unique characters.

* [Look-and-Say Sequence](https://www.youtube.com/watch?v=_1Wp4Bww8Rs)<br>
    Generate the so-called ["Look-and-Say" sequence](https://en.wikipedia.org/wiki/Look-and-say_sequence)

* [Spreadsheet Decode](Pending)<br>
    Given a list of first/last name pairs, eliminate any entries with duplicate first names.

* [Spreadsheet Encode](https://www.youtube.com/watch?v=GDFVTZ-kKl0)<br>
    Given a column string as formatted in a spreadsheet program, write a function that returns a number corresponding to that particular column.

### Bit Manipulation

* [Find Set Bit](Pending)<br>
    Given a number having only one "1" and all other "0"s in its binary representation, find position of set bit.

* [Is Even or Odd](https://www.youtube.com/watch?v=F0RywIXmqlU&index=2&list=PL5tcWHG-UPH1u5iox6v1Hey59vNd5cnTw)<br>
    Write a program to determine if a given number is even or odd. Do not make use of the modulus operator.

* [Is Nth Bit Set](https://www.youtube.com/watch?v=G8SI2Jrqeww&index=3&list=PL5tcWHG-UPH1u5iox6v1Hey59vNd5cnTw)<br>
    Write a program that takes an integer and tests whether the n-th bit in the binary representation of that integer is set of not.

* [Is Power Two](Pending)<br>
    Given a positive integer, check if the integer is a power of 2.

* [Set Nth Bit](https://www.youtube.com/watch?v=ZfU00JFhL7E&index=4&list=PL5tcWHG-UPH1u5iox6v1Hey59vNd5cnTw)<br>
    Write a program  that takes an integer and sets the n-th bit in the binary representation of that integer.

* [Toggle Nth Bit](https://www.youtube.com/watch?v=3r5TmVmPuJ8&index=6&list=PL5tcWHG-UPH1u5iox6v1Hey59vNd5cnTw)<br>
    Write a program  that takes an integer and toggles the n-th bit in the binary representation of that integer.

* [Unset Nth Bit](https://www.youtube.com/watch?v=4sYl6oIgrs8&index=5&list=PL5tcWHG-UPH1u5iox6v1Hey59vNd5cnTw)<br>
    Write a program  that takes an integer and unsets the n-th bit in the binary representation of that integer.

* [Unset Right-Most Bit](Pending)<br>
    Write a program  that takes an integer and unsets the right most bit in the binary representation of that integer

### Data Science

* [Data Science, Kaggle, Wine and Python -- Part 1: Pandas] (https://www.youtube.com/watch?v=BQj7sy2MmOA)
    We go over what the agenda is for the series and go over some basics in the pandas module.

### Data Structures

#### Arrays

* [Arbitrary Precision Arithmetic](https://www.youtube.com/watch?v=v6K3SfMv9WM)<br>
    Given two arrays that each represent an integer, compute the sum between these numbers.

* [Array Advance](https://www.youtube.com/watch?v=r7EzxgrYfNg)<br>
    Given an array with integers that correspond to moves that can be made from left to right, determine if it is possible to advance to the end of the array.

* [Buy and Sell Stock Once](https://www.youtube.com/watch?v=7AMjRbJhsKM)<br>
    Given a list of end-day stock prices, determine what the maximum profit one can make by buying and selling a single stock.

* [Two Sum](https://www.youtube.com/watch?v=gCin6Qz-eJQ)<br>
    Given an array of integers, return the two numbers such that they add up to a specific target. 

#### Bloom Filter

* [Bloom Filters and Pokemon](https://www.youtube.com/watch?v=U8Ni1yJ8ZS4)<br>
    An introduction to Bloom filters using Pokemon to explain key concepts.

#### Linked List

##### Singly Linked List

* [Count Occurrences](https://www.youtube.com/watch?v=W4UtFrPLF7k)<br>
    Given a data element, determine how many nodes in a singly linked list contain this piece of data.

* [Deletion](https://www.youtube.com/watch?v=gXY_2wsQf3A)<br>
    Given a data element, delete all nodes in a singly linked list that have this given data element.

* [Insertion](https://www.youtube.com/watch?v=FSsriWQ0qYE)<br>
    Insert an element into a singly linked list.

* [Is Palindrome](https://www.youtube.com/watch?v=liZvIQNBr-0)<br>
    Given a singly linked list, determine if the data elements form a palindrome.

* [Length](https://www.youtube.com/watch?v=sTsop8hf78c)<br>
    Given a singly linked list, calculate the length, i.e. the number of nodes in the linked list.

* [Merge Sorted](https://www.youtube.com/watch?v=6ui3pEgOT70)<br>
    Given two sorted singly linked lists, produce a merged singly linked list that is also sorted.

* [Nth-to-Last](https://www.youtube.com/watch?v=Vta4ty-t1nY)<br>
    Given a singly linked list and an integer N, determine the Nth-to-last node in the list.

* [Remove Duplicates](https://www.youtube.com/watch?v=e2TjJMhe08U)<br>
    Given a singly linked list, remove all nodes with duplicate data elements.

* [Reverse](https://www.youtube.com/watch?v=xFuJI29BiDY)<br>
    Given a singly linked list, reverse the linked list.

* [Rotate](https://www.youtube.com/watch?v=s9cEFnn-Y5Q)<br>
    Given a singly linked list and an integer, rotate the contents of the singly linked list.

* [Sum Two Lists](https://www.youtube.com/watch?v=dm9drjU-DuM)<br>
    Given two singly linked lists representing integers, produce a third singly linked list that represents the sum of these integers.

* [Swap Nodes](https://www.youtube.com/watch?v=s9NEaxVvQnQ)<br>
    Given a singly linked list and two nodes, swap the first node with the second.

* [Tail to Head](https://www.youtube.com/watch?v=VfHf6MV9q0A)<br>
    Given a singly linked list swap the tail of the list with the head.


##### Circular Linked List

* [Insert](https://www.youtube.com/watch?v=5WoNhm7sOnA)<br>
    Insert a node into a circular linked list.

* [Is Circular Linked List](https://www.youtube.com/watch?v=JF6-UT3w8mQ)<br>
    Given a linked list, determine if it is a circular linked list.

* [Josephus Problem](https://www.youtube.com/watch?v=lnOcDRWPpDU)<br>
    Solve the so-called [Josephus Problem](https://en.wikipedia.org/wiki/Josephus_problem) using a circular linked list.

* [Remove Node](https://www.youtube.com/watch?v=op42w-5o3nE)<br>
    Remove node from a circular linked list.

* [Split List](https://www.youtube.com/watch?v=tij0gatte7g)<br>
    Given a circular linked list an an integer, split the circular linked list.

##### Doubly Linked List

* [Add Before/Add After](https://www.youtube.com/watch?v=8kptHdreaTA)<br>
    Add a node in a doubly linked list before a given node. Add a node in a doubly linked list after a given node.

* [Append/Prepend](https://www.youtube.com/watch?v=8kptHdreaTA)<br>
    Append (add to back) a node to a doubly linked list. Prepend (add to front) a node to a doubly linked list.

* [Delete](https://www.youtube.com/watch?v=Am5u1vaT0x0)<br>
    Delete a node in a doubly linked list.

* [Insert](https://www.youtube.com/watch?v=dPGBKZBYy0w)<br>
    Insert a node in a doubly linked list.

* [Pairs with Sum](https://www.youtube.com/watch?v=VD73579E3-o)<br>
    Obtain the pairs of nodes that sum up to a given target element.

* [Remove Duplicates](https://www.youtube.com/watch?v=wLiji1WOfxU)<br>
    Remove duplicates from a doubly linked list.

* [Reverse](https://www.youtube.com/watch?v=SQHvcLvqq_Q)<br>
    Reverse a doubly linked list.

#### Stack

* [Stack Implementation](https://www.youtube.com/watch?v=lVFnq4zbs-g)<br>
    Impelementation and description of the stack data structure.

* [Balanced Parens](https://www.youtube.com/watch?v=TC7apM-xGaU)<br>
    Using the stack data structure, determine if a string of parentheses are properly balanced or not.

* [Divide by Two](https://www.youtube.com/watch?v=X41iojWqQZY)<br>
    Perform division by two using the stack data structure.

* [Reverse String](https://www.youtube.com/watch?v=cXxkvq3u_f8)<br>
    Reverse a string using the stack data structure.

### Go

* [1. Hello World](https://www.youtube.com/watch?v=mbW0oQq5NLQ)<br>
    Introduction to the "Go" Programming language.

* [2. Values](https://www.youtube.com/watch?v=uBbL3QsJyFk)<br>
    Cover the concept of "values" in Go.

* [3. Variables](https://www.youtube.com/watch?v=wqANpSRmlm4)<br>
    Cover the concept of "variables" in Go.

* [4. Constants](https://www.youtube.com/watch?v=lHJ33KvdyN4)<br>
    Cover the concept of "constants" in Go.

* [5. Loops](https://www.youtube.com/watch?v=MuSTPrYa7-A)<br>
    Cover looping constructs in Go.

* [6. If/Else](https://www.youtube.com/watch?v=N1gR2NpwN5A)<br>
    Cover "if/else" conditonal statements.

* [7. Switch](https://www.youtube.com/watch?v=lV9FmloZOMg)<br>
    Cover conditional "switch" statements.

* [8. Arrays](https://www.youtube.com/watch?v=oYVbA9YthlA)<br>
    Cover the concept of "arrays" in Go.

* [9. Slices](https://www.youtube.com/watch?v=PzvcYZ2hy6A)<br>
    Cover the concept of slicing in arrays in Go.

* [10. Maps](https://www.youtube.com/watch?v=XQre3ILIVH0)<br>
    Cover the concept of "maps" in Go.

* [11. Range](https://www.youtube.com/watch?v=ne4cLmDrqgM)<br>
    Cover the "range" function in Go.

* [12. Functions](https://www.youtube.com/watch?v=d2wl9hlxyeA)<br>
    Cover the concept of "functions" in Go.

* [13. Multiple Return Values](https://www.youtube.com/watch?v=roF5YIKNX1M)<br>
    Cover how to create functions with multiple return values in Go.

* [14. Variadic Functions](https://www.youtube.com/watch?v=lLoYEft9tFk)<br>
    Cover how to create functions with multiple types.

* [15. Closures](https://www.youtube.com/watch?v=MnUQoVk44n0)<br>
    Cover the concept of "closures" in Go.

* [16. Recursion](https://www.youtube.com/watch?v=K6mJ7Ed0DIA0)<br>
    Cover the concept of "recursion" in Go.

* [17. Pointers](https://www.youtube.com/watch?v=XKdyN9kH4O0)<br>
    Cover the concept of "pointers" in Go.

* [18. Structs](https://www.youtube.com/watch?v=fR2r67nQUHQ)<br>
    Cover the concept of "structs" in Go.

* [19. Methods](https://www.youtube.com/watch?v=1h5e-g2vqCc)<br>
    Cover the concept of "methods" in Go.

* [20. Interfaces](https://www.youtube.com/watch?v=EGRXKV6j-v0)<br>
    Cover the concept of "interfaces" in Go.

### imgur Python

* [Python and the imgur API: Setup and Installation (Part 1/3)](https://www.youtube.com/watch?v=OiDQu-0-DIA)<br>
    Setup for imgur API to access via Python module.

* [Python and the imgur API: Authentication (Part 2/3)](https://www.youtube.com/watch?v=kDcn_Tn-ti8)<br>
    Authenticating our imgur application.

* [Python and the imgur API: Image Upload (Part 3/3)](https://www.youtube.com/watch?v=MyCr8kPT3OI)<br>
    Uploading an image to an imgur gallery using the Python imgur module.

### Multiprocessing and Threading

* [Multiprocessing in Python: Introduction (Part 1)](https://www.youtube.com/watch?v=RR4SoktDQAw)<br>
    An introduction to the multiprocessing module in Python.

* [Multiprocessing in Python: Introduction (Part 2)](https://www.youtube.com/watch?v=itbx_hDX7z8)<br>
    A continuation of the introduction of the multiprocessing module in Python.

* [Multiprocessing in Python: Locks](https://www.youtube.com/watch?v=iYJNmuD4McE)<br>
    An introduction to lock objects in the multiprocessing module.

* [Multiprocessing in Python: Logging](https://www.youtube.com/watch?v=KpDKpgzvmrY)<br>
    We see how to make use of the multiprocessing logging functionality.

* [Multiprocessing in Python: Pool](https://www.youtube.com/watch?v=u2jTn-Gj2Xw)<br>
    We see how to make use of the multiprocessing Pool class and how to spawn multiple processes.

* [Multiprocessing in Python: Process Communication](https://www.youtube.com/watch?v=TQx3IfCVvQ0)<br>
    We see how to make use of the multiprocessing communicate information among different processes.

### Natural Language Processing

* [Natural Language Processing in Python: Part 1 -- Installation and Getting Started](https://www.youtube.com/watch?v=tP783g97C5o)<br>
    Accommodating blog post for this video can be found [here](http://vprusso.github.io/blog/2018/natural-language-processing-python-1/).

* [Natural Language Processing in Python: Part 2 -- Accessing Text Resources](https://www.youtube.com/watch?v=n3_mZ47ZVxA)<br>
    Accommodating blog post for this video can be found [here](http://vprusso.github.io/blog/2018/natural-language-processing-python-2/).

* [Natural Language Processing in Python: Part 3 -- Generating Word Clouds](https://www.youtube.com/watch?v=0Rc3452U6b8)<br>
    Accommodating blog post for this video can be found [here](http://vprusso.github.io/blog/2018/natural-language-processing-python-3/).

* [Natural Language Processing in Python: Part 4 -- WordNet](https://www.youtube.com/watch?v=byx3LDFiEZE)<br>
    Accommodating blog post for this video can be found [here](http://vprusso.github.io/blog/2018/natural-language-processing-python-4/).

* [Natural Language Processing in Python: Part 5 -- Stemming and Lemmatization](https://www.youtube.com/watch?v=P2PMgnQSHYQ)<br>
    Accommodating blog post for this video can be found [here](http://vprusso.github.io/blog/2018/natural-language-processing-python-5/).

### Podcasts and Interviews

* [Transitioning from Non-Tech to Tech: An Interview with Beau Carnes](https://www.youtube.com/watch?v=SOQAe9T1tdM)<br>
    A conversation with Beau Carnes regarding his journey in shifting from a teaching career to a technical career.

* [Preparing for a Technical Interview: An Interview with Sam Gavis-Hughson of Byte-by-Byte](https://www.youtube.com/watch?v=dgBLqylx9ew)<br>
    A conversation with Sam Gavis-Hughson of Byte-by-Byte about how to effectively prepare for a technical interview.

### System Design

* [System Design: URL Shortener -- Introduction](https://www.youtube.com/watch?v=_ANBR698D7c)<br>
    An introduction to system design interviews and Part 1 of designing the URL shortener.

* [System Design: URL Shortener -- Calculating Estimates](https://www.youtube.com/watch?v=oK6BmG3R5iE)<br>
    Part 2 of the URL shortener system design interview question where we cover how to roughly estimate costs for the project.

* [System Design: URL Shortener -- Database Design](https://www.youtube.com/watch?v=xq74OjU_w4w)<br>
    Part 3 of the URL shortener system design interview question where we cover database design.

* [System Design: General Approach](https://www.youtube.com/watch?v=ilkgBo461E4)<br>
    A general overview of how to approach the system design interview.

* [System Design: Photo Sharing Website](XXX)<br>

### Technical Interview

* [Check if String has Unique Characters](https://www.youtube.com/watch?v=UqEU-obRUnI&t=232s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    Write a script to determine if a given string has all unique characters.

* [Is Anagram](https://www.youtube.com/watch?v=iUK0cKV_lT4&t=1s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    Write a script to determine if a given string is an anagram.

* [Check if String is Permutation](https://www.youtube.com/watch?v=71UjBGz-o0w&t=0s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    Given two strings, check if they are permutations of each other.

* [Check if String is Palindrome](https://www.youtube.com/watch?v=y3S0iYFedCw&t=1s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    Given a string, check if it is a palindrome.

* [Two Sum Problem](https://www.youtube.com/watch?v=8uYHAM-dtVA&t=0s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    Given an array of integers, return indices of the two numbers such that they add up to a specific target. Each input would have exactly one solution, and don't use the same element twice.

* [Single Number Problem](https://www.youtube.com/watch?v=r0CAz6MdgEg&t=0s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    Given an array of integers, every element appears twice except for one. Find that single one.

* [FizzBuzz](https://www.youtube.com/watch?v=bS837DTJsTI&t=0s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    Solving the infamous "FizzBuzz" problem in Python.

* [Iterative and Recursive Factorial](https://www.youtube.com/watch?v=yUOoJL9_y9M&t=0s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    Calculate the factorial of a positive integer. Do so using both an iterative and recursive approach.

* [URLify String](https://www.youtube.com/watch?v=rxgVVwZlJko&t=0s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    Write a method to replace all spaces in a string with '%20'. You may assume that the string has sufficient space at the end to hold the additional characters and that you are given the "true" length of the string. 

* [One Away](Pending)<br>
    There are three types of edits that can be performed on strings: insert a character, remove a character, or replace a character. Given two strings, write a function to check if they are one edit (or zero edits) away.

* [Matrix Median](https://www.youtube.com/watch?v=wn-NKs_KNyQ&t=0s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    We are given a row-wise sorted matrix of size r-by-c we need to find the median of the matrix given. It is assumed that r-by-c is always odd.

* [String Compression](https://www.youtube.com/watch?v=sE7F1WroB1M&t=0s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
   String Compression: Implement a method to perform basic string compression using the counts of repeated characters. For example, the string "aabcccccaaa" would become a2b1c5a3. If the "compressed" string would not become smaller than the original string, your method should return the original string. You can assume the string has only uppercase and lowercase letters (a-z).
 
* [String Rotation](https://www.youtube.com/watch?v=g4tdn9KAu3M&t=0s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    String Rotation: Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 (e.g. "waterbottle" is a rotation of "erbottlewat").

* [Count Ones in Binary Representation](https://www.youtube.com/watch?v=P9EFWCvD_yU&t=0s&list=PL5tcWHG-UPH1D-JVSiZI_8I8LPUJtoHdg)<br>
    Find the number of 1s in the binary representation of a number. 

### Twitter Python

* [Twitter API with Python (Part 1/5)](https://www.youtube.com/watch?v=wlnx-7cm4Gg&list=PL5tcWHG-UPH2zBfOz40HSzcGUPAVOOnu1)<br>
    We make use of the Tweepy module in Python to create a script that allows us to interface with Twitter.

* [Twitter API with Python (Part 2/5)](https://www.youtube.com/watch?v=rhBZqEWsZU4&t=730s&list=PL5tcWHG-UPH2zBfOz40HSzcGUPAVOOnu1)<br>
    We make use of the Tweepy module in Python to create a script that allows us to interface with Twitter.

* [Twitter API with Python (Part 3/5)](https://www.youtube.com/watch?v=WX0MDddgpA4)<br>
    We make use of the Tweepy module in Python to create a script that allows us to interface with Twitter.

* [Twitter API with Python (Part 4/5)](https://www.youtube.com/watch?v=w9tAoscq3C4)<br>
    We make use of the Tweepy module in Python to create a script that allows us to interface with Twitter.

* [Twitter API with Python (Part 5/5)](https://www.youtube.com/watch?v=pdnTPUFF4gA)<br>
    We make use of the Tweepy module in Python to create a script that allows us to interface with Twitter.

### Utility Scripts

* [Python: Converting WAV to MP3](https://www.youtube.com/watch?v=4E7N7W1lUkU)<br>
    Write a script in Python to convert a .wav file to a .mp3 formatted file.

* [Markdown: Creating Presentations Using Markdown and Pandoc](https://www.youtube.com/watch?v=e-HqKSBZOXo)<br>
    Cover how to create slides using pandoc and markdown.

* [Sending an Email in Python via Gmail](https://www.youtube.com/watch?v=mP_Ln-Z9-XY)<br>
    Send an email from a Python script with Gmail as the email client.

### Vim

* [Vim: Setting up Vim for Python Development](https://www.youtube.com/watch?v=vlb3qUiS2ZY)<br>
    Video to set up your Vim environment specifically geared for Python development.

* [Vim: Let's Play VimTutor! (Part 1)](https://www.youtube.com/watch?v=jGWjzjfzths)<br>
    Part 1 of going through the built-in Vim tutor.

* [Vim: Let's Play VimTutor! (Part 2)](https://www.youtube.com/watch?v=-lukOcfqMK4)<br>
    Part 2 of going through the built-in Vim tutor.

* [Vim: Let's Play VimTutor! (Part 3)](https://www.youtube.com/watch?v=Lo3BTpMjUBo)<br>
    Part 3 of going through the built-in Vim tutor.

* [Vim: Let's Play VimTutor! (Part 4)](https://www.youtube.com/watch?v=siE4sc6aj9Q)<br>
    Part 4 of going through the built-in Vim tutor.

* [Vim: Let's Play VimTutor! (Part 5)](https://www.youtube.com/watch?v=yd0RsfFdiig)<br>
    Part 5 of going through the built-in Vim tutor.

* [Vim: Let's Play VimTutor! (Part 6)](https://www.youtube.com/watch?v=iBHOHz9_GYY)<br>
    Part 6 of going through the built-in Vim tutor.

* [Vim: Let's Play VimTutor! (Part 7)](https://www.youtube.com/watch?v=i4fgncEf128)<br>
    Part 7 of going through the built-in Vim tutor.

### Web Scraping and Automation

#### BeautifulSoup

* [BeautifulSoup and Requests: Getting Started and Quick Example](https://www.youtube.com/watch?v=zLlHs0jyddQ)<br>
    A quick and simple introduction to BeautifulSoup using the Requests module.

* [BeautifulSoup in Python: Objects](https://www.youtube.com/watch?v=oDtLJEc5Ako)<br>
    We cover various objects that one uses in BeautifulSoup and see how they can be made use of.

#### PyAutoGui

* [PyAutoGui: Automate GUI Applications with Python and PyAutoGui (Part 1)](https://www.youtube.com/watch?v=dUeCoUw9OoQ)<br>
    Introduce the PyAutoGui module and give some initial examples of what can be achieved with it.

* [PyAutoGui: Automate the Calculator! (Part 2)](https://www.youtube.com/watch?v=CXtC8Jzxsvw)<br>
    Write a program that makes use of the PyAutoGui module to manipulate the system calculator.

* [PyAutoGui: Control the Mouse (Part 3)](https://www.youtube.com/watch?v=4rgt7Od7-KM)<br>
    Write a program that makes of of the PyAutoGui module to manipulate the mouse.

#### Robobrowser

* [Using Robobrowser to Login and Extract Data](https://www.youtube.com/watch?v=hrdDIrT9kJI)<br>
    We use the Robobrowser module to login to a website automatically and extract information once logged in.

* [Gift Card Scraper with Python and Robobrowser](https://www.youtube.com/watch?v=l1eLu-HL-fc)<br>
    We use the Robobrowser module to extract balance information for a given giftcard.

#### Scrapy

* [Scrapy: Setup and First Project](https://www.youtube.com/watch?v=OJ8isyws2yw)<br>
    We install the scrapy module and setup an small project.

#### Selenium

* [Selenium IDE: Installation and “Hello World” Example](https://www.youtube.com/watch?v=8sm4sWYXvNc)<br>
    An introduction to the Selenium IDE where we illustrate some of its automation capabilities.

* [Python and Selenium: Using Chrome](https://www.youtube.com/watch?v=OJ8isyws2yw)<br>
    If you wish to use Chrome instead of Firefox with Selenium and Python, this video illustrates how to set that up.

* [Crawling Pages with Selenium (Part 1/2)](https://www.youtube.com/watch?v=zjo9yFHoUl8)<br>
   A simple multi-page website is used to illustrate how to extract content and move through pages. 

* [Crawling Pages with Selenium (Part 2/2)](https://www.youtube.com/watch?v=Z3vFdtZ7d-g)<br>
   A simple multi-page website is used to illustrate how to extract content and move through pages. 

* [Craigslist Scraper with Python and Selenium (Part 1/3)](https://www.youtube.com/watch?v=4o2Eas2WqAQ&t=0s&list=PL5tcWHG-UPH1aSWALagYP2r3RMmuslcrr)<br>
    Write a script using Selenium, Beautiful Soup, and urllib to extract information from the website Craigslist. 

* [Craigslist Scraper with Python and Selenium (Part 2/3)](https://www.youtube.com/watch?v=x5o0XFozYnE&t=716s&list=PL5tcWHG-UPH1aSWALagYP2r3RMmuslcrr)<br>
    Write a script using Selenium, Beautiful Soup, and urllib to extract information from the website Craigslist. 

* [Craigslist Scraper with Python and Selenium (Part 3/3)](https://www.youtube.com/watch?v=_y43iqSJgnc&t=1s&list=PL5tcWHG-UPH1aSWALagYP2r3RMmuslcrr)<br>
    Write a script using Selenium, Beautiful Soup, and urllib to extract information from the website Craigslist. 

* [Amazon Sheets Budget: Introduction (Part 1/7)](https://www.youtube.com/watch?v=x2r_RmvfzRo)
    Showcase what the overall script and show what will be accomplished in this series.

* [Amazon Sheets Budget Setup Google Sheets and Google Drive API (Part 2/7)](https://www.youtube.com/watch?v=xMGcfURml9M)
    Setup Google Sheets and Google Drive API. Install gspread and oauth in Python. 
    Share the spreadsheet to allow access for script.

* [Amazon Sheets Budget: Automate Amazon Search (Part 3/7)](https://www.youtube.com/watch?v=wai6j84QOus)
    Amazon bot for searching for item, picking first one, navigating to page
    and extracting and cleaning the price.

* [Amazon Sheets Budget: Extracting More Amazon Content (Part 4/7)](https://www.youtube.com/watch?v=JpHgsdQhsXo)
    Adding functionality to extract the Amazon title, AISN, and 
    URL. Storing this in spreadsheet.

* [Amazon Sheets Budget: Updating the Google Sheet (Part 5/7)](https://www.youtube.com/watch?v=R4qwnJVd7-k)
    Price updater component that takes the prices and plugs them into
    the spreadsheet.

* [Amazon Sheets Budget: Setting up Email Alerts (Part 6/7)](https://www.youtube.com/watch?v=GP87YVZvHdU)
    Once completed processing, add in functionality for emailing
    to self. Primarily will refer to other video that describes
    how to send email in Python.

* [Amazon Sheets Budget: Wrap-Up (Part 7/7)](https://www.youtube.com/watch?v=3gD1uqrH_rk)
    Outro video that wraps up everything and gives a brief
    overview of what we accomplished in this series.
