From d2a5e8fe9347ed090f33f83ba5d9e1bf8065fbdf Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Thu, 24 Oct 2024 09:27:37 -1000 Subject: [PATCH 1/3] Update tech challenges index --- module4/projects/index.md | 3 + module4/projects/tech_challenges/index.md | 65 ++ .../problem_solving_template.md | 30 + module4/projects/tech_challenges/prompts.md | 600 ++++++++++++++++++ 4 files changed, 698 insertions(+) create mode 100644 module4/projects/tech_challenges/index.md create mode 100644 module4/projects/tech_challenges/problem_solving_template.md create mode 100644 module4/projects/tech_challenges/prompts.md diff --git a/module4/projects/index.md b/module4/projects/index.md index 37074300..68968f66 100644 --- a/module4/projects/index.md +++ b/module4/projects/index.md @@ -13,3 +13,6 @@ The following projects will be assigned and their completion is required to grad ## Professional Development Projects - Weeks 1-4 (Solo): [Personal Portfolio](./personal_portfolio/) - Weeks 4-5 (Solo): [Employer Case Study](./employer_case_study/) + +## Technical Challenges +- [Technical Challenges](./tech_challenges/) \ No newline at end of file diff --git a/module4/projects/tech_challenges/index.md b/module4/projects/tech_challenges/index.md new file mode 100644 index 00000000..45f5fbc5 --- /dev/null +++ b/module4/projects/tech_challenges/index.md @@ -0,0 +1,65 @@ +--- +title: Technical Challenges +layout: page +--- + +Technical challenges may be given as part of the interview process to help assess candidates on how they break down problems, communicate their logic and reasoning, demonstrate their technical knowledge, and implement a working solution. Our goal is to provide you with the opportunity to practice these skills and develop a good process. Over the course of 1 week, students will complete daily timed technical challenges and reflect on their approach to these problems. + +These scenarios are focused on helping you develop a good approach and do not always allow enough time to complete the challenge. Do not be discouraged if you are unable to implement a solution in the alotted time. Some of the challenges are very difficult and assigned intentionally to emphasize process over results. + +
+ +### Technical Prompts + +We will use these [Technical Prompts](./prompts) for our practice throughout Mod 4. + +
+ +## Technical Challenge Format + +Technical challenges will either be solo or paired. + +After each challenge, students should track their reflections in a [GitHub Gist](https://gist.github.com/) that they will submit at the end of the week. + + + + +### Solo Challenges + +For solo challenges, you will be given a technical challenge and a designated amount of time to work through it. Start by focusing on your approach to breaking down the problem. Work to develop a process for when you don't know the answer or where to start. If you are feeling stuck or not sure where to begin, use this [problem-solving template](./problem_solving_template). + +After the time is up, talk through your process with a peer. Share your solutions, compare approaches, and ask questions to help one another see the same problem from a new perspective. _If you want to take it a step further, talk about the Big O complexity of your solution._ + +Once you've finished your discussions with a peer, take time to add your personal reflection on the process to your GitHub Gist. + +
+#### Reflection Questions +1. What worked well in your process? +2. What was difficult/where did you struggle? +3. What feedback/discussion did you have with your peer? +4. Even if you didn't get to a solution, would your problem solving process have impressed an interviewer? +5. Is there anything you want to change about your approach to the next technical challenge? + +If this isn't your first technical challenge: +6. Were you able to improve your approach? What went better? +
+ +### Paired Challenges + +You will be assigned either a partner or a small group. Start by coordinating who will be the problem solver and who will be the observer first. The problem solver will then work through the challenge in the designated amount of time. The observer should be participating and taking notes for feedback. Once the time is completed, the observer should share feedback. Switch roles and repeat with a new problem. + +
+#### Problem Solver Outline +1. Clearly define what you are trying to solve +2. Communicate any considerations or questions that you would ask +3. Pseudocode your solution _(Pseudocode should simply be words. Don't try to write a mix of code and words.)_ +4. Implement & Test your solution + +#### Observer Outline +1. Actively listen to who you are observing +2. Take notes for feedback. Use these questions to help guide your feedback: + - Did your partner clearly define the problem they were solving? + - Was communication clear and were you able to follow their thought process? + - Did your partner use technical vocabulary or use vague terms? + - Did your partner take time to plan out their approach to the problem before trying to code a solution? +
\ No newline at end of file diff --git a/module4/projects/tech_challenges/problem_solving_template.md b/module4/projects/tech_challenges/problem_solving_template.md new file mode 100644 index 00000000..2d134a9a --- /dev/null +++ b/module4/projects/tech_challenges/problem_solving_template.md @@ -0,0 +1,30 @@ +--- +title: Problem Solving Template +layout: page +--- + +Sometimes the hardest part of a challenge is undestanding what you are trying to solve, or knowing where to begin. Below is a guide to help you get started and gain momementum for developing a solution. Use a notebook, gist, or document to copy the prompts below and work through them. + +1. Rewrite the question in your own words +2. Answer these questions: + - What assumptions will you make about this problem if you cannot ask any more clarifying questions? + - What are your reasons for making those assumptions? + - What are your initial thoughts about this problem? (high level design, 2-3 sentences) +3. Identify the elements of this problem + - [ ] Searching of Data + - [ ] Sorting of Data + - [ ] Pattern Recognition + - [ ] Build/Navigate a Grid + - [ ] Math + - [ ] Language API knowledge + - [ ] Optimization +4. Consider which data structure(s) do you think you'll use? What pros/cons do you see with that choice? +5. Write out a few lines of initial pseudocode: (mid-level design, NOT REAL CODE) +6. Write your implementation code and test your solution (low-level design) + +
+Reminders +1. It is okay to use Google! However, you should __not__ google the technical challenge to find solutions unless you have completed the challenge yourself. __Do__ use Google or documentation to look up possible enumerables that might be a part of your solution, check assumptions about your pseudo code, or for clarifying parts of the problem. + +2. Please do not make your answers public. +
\ No newline at end of file diff --git a/module4/projects/tech_challenges/prompts.md b/module4/projects/tech_challenges/prompts.md new file mode 100644 index 00000000..42572122 --- /dev/null +++ b/module4/projects/tech_challenges/prompts.md @@ -0,0 +1,600 @@ +--- +title: Technical Challenge Prompts +layout: page +--- + + +### Bracket Matcher + +
+
+ +#### Prompt ☟ + +matcher + +#### Instructions +Create a method/function that will intake a set of brackets [ { ( as a string and determine if the brackets are well-formed (match). Brackets can be nested. + + bracket('{}') + // => true + + bracket('{()}') + // => true + + bracket('({[]}{[]})') + // => true + + bracket('{(') + // => false + + bracket('{[)][]}') + // => false + + bracket(']') + // => false +
+ +
+ + +### Flattener +
+
+ +#### Prompt ☟ + + +flatten + +#### Instructions +In Ruby and JavaScript, there is a built in method/function to `flatten` arrays, meaning it makes them one-dimensional. Below are examples of both Ruby and JavaScript: + + #Ruby + nums = [1, 2, 3, [[4], 5], [[[6]]]] + nums.flatten + => [1, 2, 3, 4, 5, 6] + + #JavaScript + var nums = [ 0, 1, 2, [ 3, 4 ] ] + nums.flat() + => [ 0, 1, 2, 3, 4 ] + +Your goal is to recreate this functionality without using the built in method/function. You will be given a deeply nested array, or multi-dimensional array, that will look similar to either of the below: + + nums = [1, 2, 3, [[4], 5], [[[6]]]] + words = ["hi", "this is", [[["string"], "that is very"], [[[["nested"]]]]]] + +The contents of the array are not significant. Your method/function should take an input of a multi-dimensional array and output a one-dimensional array. More simply put, remove the deeply nested brackets to return a single array. + +
+
+ +### Millions of Numbers +
+
+ +#### Prompt ☟ + + +numbers + +#### Instructions +You are given three arrays of __equal__ size. Each array has 1 million __RANDOM__ integer values. + +Assume that each array is already sorted in ascending order and that no individual array has any duplicate values. + +Your goal is to write a method/function that will return an array of any/all values which are present in all three arrays. + +_Bonus: Once you've found a working solution, try to optimize to run in O(n) time and 1x space complexity._ + +Small Scale Example Below + + #Ruby + nums_1 = [1, 2, 4, 5, 8] + nums_2 = [2, 3, 5, 7, 9] + nums_3 = [1, 2, 5, 8, 9] + find_matches(nums_1, nums_2, nums_3) + => [2, 5] + + #JavaScript + nums1 = [1, 2, 4, 5, 8] + nums2 = [2, 3, 5, 7, 9] + nums3 = [1, 2, 5, 8, 9] + findMatches(nums1, nums2, nums3) + => [2, 5] +
+
+ +### Next Palindrome + +
+
+ +#### Prompt ☟ + + +next + +#### Instructions + +A palindrome is any number, word, or phrase that reads the same forward as it does backward. In this challenge, we are going to focus on palindromic numbers. For example, `12321` is a palindromic number, whereas `123` is not. + +Your goal is to write a method/function that takes in an integer and returns the __next__ palindrome. It is safe to assume you are working with only whole numbers, no decimals, and no negatives. + +Example + + #Ruby + find_next_palindrome(100) + => 101 + + find_next_palindrome(101) + => 111 + + + #JavaScript + findNextPalindrome(100) + => 101 + + findNextPalindrome(101) + => 111 +
+
+ +### Palindromic Sum +
+
+ +#### Prompt ☟ + + + + +#### Instructions + +A palindrome is any number, word, or phrase that reads the same forward as it does backward. In this challenge, we are going to focus on palindromic numbers. For example, `12321` is a palindromic number, whereas `123` is not. + +Write a method/function that starts at 0 and finds the first twenty-five numbers where the number plus its inverse equals a palindrome that is greater than 1,000. + +47(number) + 74(inverse) = 121(palindrome) _Note: This does not meet the greater than 1,000 rule._ + +Collect the twenty-five numbers in an array as the return value. Be sure to collect the __number__ and not the sum. + +_Bonus: Once you've found a working solution, see if you can create a solution without converting the numbers to strings/arrays._ + +
+
+ +### Pascal's Triangle +
+
+ +#### Prompt ☟ + + +triangle + +#### Instructions + +If you've never heard of Pascal's Triangle, you are not alone! Use [this](http://en.wikipedia.org/wiki/Pascal's_triangle) resource to help gain some context. + +Your goal is to write a method/function that, given a depth (n), returns an array representing Pascal's Triangle to the n-th level. + + #Ruby + calculate_pascals_triangle(4) + => [1, 1, 1, 1, 2, 1, 1, 3, 3, 1] + + #JavaScript + calculatePascalsTriangle(3) + => [1, 1, 1, 1, 2, 1] +
+
+ +### Robot +
+
+ +#### Prompt ☟ + + +robot + +#### Instructions + +In this challenge, you are working with a computer simulation of a mobile robot. The robot moves on a plane, and its movements are described by a command string consisting of one or more of the following letters: + +- G instructs the robot to __move__ forward one step +- L instructs the robot to __turn__ left +- R instructs the robot to __turn__ right + +The robot CANNOT go backwards - poor robot. After running all of the movement commands, you want to know if the robot returns to its original starting location. + + #Ruby + return_to_origin?("GRGRGRG") + => true + + JavaScript + returnToOrigin("GRGL") + => false + +
+
+ +### Roman Numerals +
+
+ +#### Prompt ☟ + + +roman numerals + +#### Instructions + +[What are Roman Numerals?](https://www.mathsisfun.com/roman-numerals.html) + +Your goal is to write a method/function that converts an integer into a string such that the number is represented in Roman Numerals in the most efficient way. + +For example, the number 4 could be written as `IIII` but it's more efficient to use `IV` since that's a shorter string. + +Assume no number is greater than 4,000. + +Here are the Roman Numeral equivalents you'll need to know: + +- M=1000 +- CM=900 +- D=500 +- CD=400 +- C=100 +- XC=90 +- L=50 +- XL=40 +- X=10 +- IX=9 +- V=5 +- IV=4 +- I=1 + +Example + + #Ruby + to_roman(128) + => "CXXVIII" + to_roman(2000) + => "MM" + + #JavaScript + toRoman(2017) + => "MMXVII" + toRoman(1999) + => "MCMXCIX" + +
+
+ +### Snail +
+
+ +#### Prompt ☟ + + +snail + +#### Instructions + +Given an n x n array, write a method that returns the array elements arranged from outermost elements to the middle element, traveling clockwise. + +A good way to visualize this is to picture the spiral shell of a snail! + +Example + + #Ruby + array_matrix = [ + [1, 2, 3], + [4, 5, 6], + [7, 8, 9] + ]; + snail(array_matrix) + => [1, 2, 3, 6, 9, 8, 7, 4, 5] + + + #JavaScript + const arrayMatrix = [ + [9, 8, 7], + [6, 5, 4], + [3, 2, 1] + ]; + snail(arrayMatrix) + => [9, 8, 7, 4, 1, 2, 3, 6, 5] +
+
+ +### Target & Payload +
+
+ +#### Prompt ☟ + + +target + +#### Instructions +Write a method that takes two parameters, payload and target. The playload should be an array or unique integer values(positive, negative, or 0). The target should be an integer(positive, negative, or 0).Your method/function should search through the payload to find any two numbers that add together to equal the target value. + +When you find a pair of numbers that add up to your target value, you can stop processing/searching and return an array of those two values. If no values are found return an empty array. + +Be careful that you don't find the same number twice in your payload; for example if your payload contains a 4 and your target is 8, your answer should not indicate that it found 4 twice. + +Example + + #Ruby + find_target([1, 3, 4, 5, 10], 15) + => [5, 10] + find_target([-1, -3, 4, 7, -5, 18, 10, -23, 5], 15) + => [-3, 18] + find_target([-3, -34, 2, 6, 40, -4], 1) + => [] + + #JavaScript + findTarget([1, 3, 4, 5, 10], 15) + => [5, 10] + findTarget([-1, -3, 4, 7, -5, 18, 10, -23, 5], 15) + => [-3, 18] + findTarget([-3, -34, 2, 6, 40, -4], 1) + => [] + +_Bonus: Once you've found a working solution, try to optimize to run in O(n) time and 1x space complexity._ +
+
+ +### Merge Linked Lists +
+
+ +#### Prompt ☟ + + +link + +#### Instructions + +Start [here](https://www.geeksforgeeks.org/data-structures/linked-list/) to explore what is a linked list. + +In this challenge, imagine you are given two sorted linked lists. + +Each linked list: +- has data sorted in ascending order +- will not be empty + +Your goal is to write a method/function that will merge all data into a single linked list, which should also be sorted in ascending order. The method/function should return an __array__ of all the elements of the merged linked list. + +
+
+ + Ruby Starter Code ☟ + + + class ListNode + attr_accessor :val, :next + + def initialize(val) + @val = val + @next = nil + end + end + + + def merge_two_sorted_linked_lists(list1, list2) + result = [] + + # start a new list with a nil value, which you'll need to skip later + new_list = ListNode.new(nil) + + # we need to keep track of the start of this linked list for later, also + head = new_list + + # return our result array + result + end + + # test cases: + list1 = ListNode.new(1) + list1.next = ListNode.new(3) + list1.next.next = ListNode.new(5) + list2 = ListNode.new(2) + list2.next = ListNode.new(4) + list2.next.next = ListNode.new(6) + puts 'test case 1 failed' if merge_two_sorted_linked_lists(list1, list2) != [1,2,3,4,5,6] + + + list1 = ListNode.new(1) + list1.next = ListNode.new(2) + list2 = ListNode.new(4) + list2.next = ListNode.new(5) + list2.next.next = ListNode.new(6) + puts 'test case 2 failed' if merge_two_sorted_linked_lists(list1, list2) != [1,2,4,5,6] + + list1 = ListNode.new(10) + list1.next = ListNode.new(20) + list1.next.next = ListNode.new(40) + list2 = ListNode.new(0) + puts 'test case 3 failed' if merge_two_sorted_linked_lists(list1, list2) != [0, 10, 20, 40] + + puts 'all done!' +
+
+ +
+
+ + JavaScript Starter Code ☟ + + + class ListNode { + constructor(data) { + this.val = data; + this.next = null; + } + } + + + function merge_two_sorted_linked_lists(list1, list2) { + var result = []; + + // start a new list with a nil value, which we'll skip later + let new_list = new ListNode(null); + + // we need to keep track of the start of this linked list for later, also + let head = new_list; + + return result; + } + + // test cases: + var list1 = new ListNode(1); + list1.next = new ListNode(3); + list1.next.next = new ListNode(5); + var list2 = new ListNode(2); + list2.next = new ListNode(4); + list2.next.next = new ListNode(6); + if (JSON.stringify(merge_two_sorted_linked_lists(list1, list2)) != JSON.stringify([1, 2, 3, 4, 5, 6])) { + console.log("test case 1 failed"); + } + + + var list1 = new ListNode(1); + list1.next = new ListNode(2); + var list2 = new ListNode(4); + list2.next = new ListNode(5); + list2.next.next = new ListNode(6); + if (JSON.stringify(merge_two_sorted_linked_lists(list1, list2)) != JSON.stringify([1, 2, 4, 5, 6])) { + console.log("test case 2 failed"); + } + + + var list1 = new ListNode(10); + list1.next = new ListNode(20); + list1.next.next = new ListNode(40); + var list2 = new ListNode(0); + if (JSON.stringify(merge_two_sorted_linked_lists(list1, list2)) != JSON.stringify([0, 10, 20, 40])) { + console.log("test case 3 failed"); + } + + console.log("all done!"); + +
+
+ +
+
+ +### Subsets +
+
+ +#### Prompt ☟ + + +#### Instructions +In this challenge you are given an array of unique integers. Your job is to return all the possible combinations of unique pairs (2 integers only). No duplicate pairs are allowed. Below are some examples: + + #Example 1 + Input: [1, 2, 3, 4] + Output: [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]] + + #Example 2 + Input: [54, 77] + Output[[54, 77]] + + #Example 3 + Input: [] + Output: [] + +__Possible Extension__ +If you successfully complete the challenge above, consider refactoring your solution to return all __possible unique subsets__ from the original array. A subset is any selection of the array, and can be between 0 and n elements long, where n is the number of items in the original array. + + #Example 1 + Input: [1, 2, 3, 4] + Output: [[],[1],[2],[3],[4],[1,2],[1,3],[1,4],[2,3],[2,4],[3,4],[1,2,3],[1,2,4],[1,3,4],[2,3,4],[1,2,3,4]] + +
+
+ +### What Did I Order? +
+
+ +#### Prompt ☟ + + +cash register + +#### Instructions + +In this challenge you are given a menu and a list of receipt values. Write a method/function to find the __first__ combination of food that adds up to the receipt total. Return a print out of only __one__ combination for that receipt, and move on to the next receipt. How the print out looks is up to you, but here are some examples: + + #Example 1 + 4.85: + 3 items, extra veggies, chips, cheese + + #Example 2 + 13.75: + 3 items, {'veggie sandwich': 1, 'nachos': 2} + + +Constraints: +- you must use 100% of the receipt value, we don't want any money left over +- you can order any quantity of any menu item +- none of the receipt values are "tricks", they all have answers + +Tip: +- Doing subtraction and addition on money values CAN lead to “floating point precision” problems. For example, `4.85 - 1.25` might give you `3.599999996`. Round values to two decimal places to make sure you’re finding answers. + + +
+
+ + Ruby Starter Code ☟ + + + + menu = { + 'veggie sandwich' => 6.85, + 'extra veggies' => 2.20, + 'chicken sandwich' => 7.85, + 'extra chicken' => 3.20, + 'cheese' => 1.25, + 'chips' => 1.40, + 'nachos' => 3.45, + 'soda' => 2.05, + } + + receipts = [4.85, 11.05, 13.75, 17.75, 18.25, 19.40, 28.25, 40.30, 75.00] + +
+
+ +
+
+ + JavaScript Starter Code ☟ + + + let menuItems = { + "veggie sandwich": 6.85, + "extra veggies": 2.20, + "chicken sandwich": 7.85, + "extra chicken": 3.20, + "cheese": 1.25, + "chips": 1.40, + "nachos": 3.45, + "soda": 2.05, + }; + + const receipts = [4.85, 11.05, 13.75, 17.75, 18.25, 19.40, 28.25, 40.30, 75.00]; +
+
+ +
+
\ No newline at end of file From a5ea03d184a96e55b63bb2dc84b5fdcc65290894 Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Thu, 24 Oct 2024 10:00:40 -1000 Subject: [PATCH 2/3] Update formatting tech prompts --- module4/projects/tech_challenges/prompts.md | 186 +++++++++----------- 1 file changed, 83 insertions(+), 103 deletions(-) diff --git a/module4/projects/tech_challenges/prompts.md b/module4/projects/tech_challenges/prompts.md index 42572122..61d3be16 100644 --- a/module4/projects/tech_challenges/prompts.md +++ b/module4/projects/tech_challenges/prompts.md @@ -6,11 +6,10 @@ layout: page ### Bracket Matcher -
-
- -#### Prompt ☟ - +
+
### Flattener -
-
- -#### Prompt ☟ - +
+
### Millions of Numbers -
-
- -#### Prompt ☟ - +
+
### Next Palindrome -
-
- -#### Prompt ☟ - +
+
### Palindromic Sum -
-
- -#### Prompt ☟ - +
+
### Pascal's Triangle -
-
- -#### Prompt ☟ - +
+
### Robot -
-
- -#### Prompt ☟ - +
+
### Roman Numerals -
-
- -#### Prompt ☟ - +
+
### Snail -
-
- -#### Prompt ☟ - +
+
### Target & Payload -
-
- -#### Prompt ☟ - +
+
### Merge Linked Lists -
-
- -#### Prompt ☟ - +
+
### Subsets -
-
- -#### Prompt ☟ - +
+
### What Did I Order? -
-
- -#### Prompt ☟ - +
+
\ No newline at end of file From 4d48f6bd6b67bcb6e6de47c7aa041e8048f110ef Mon Sep 17 00:00:00 2001 From: Heather Faerber Date: Mon, 4 Nov 2024 08:48:06 -1000 Subject: [PATCH 3/3] Remove reference to 1 week and remove submission of gist --- module4/projects/tech_challenges/index.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/module4/projects/tech_challenges/index.md b/module4/projects/tech_challenges/index.md index 45f5fbc5..7a22178a 100644 --- a/module4/projects/tech_challenges/index.md +++ b/module4/projects/tech_challenges/index.md @@ -3,9 +3,9 @@ title: Technical Challenges layout: page --- -Technical challenges may be given as part of the interview process to help assess candidates on how they break down problems, communicate their logic and reasoning, demonstrate their technical knowledge, and implement a working solution. Our goal is to provide you with the opportunity to practice these skills and develop a good process. Over the course of 1 week, students will complete daily timed technical challenges and reflect on their approach to these problems. +Technical challenges may be given as part of the interview process to help assess candidates on how they break down problems, communicate their logic and reasoning, demonstrate their technical knowledge, and implement a working solution. Our goal is to provide you with the opportunity to practice these skills and develop a good process. Students will complete timed technical challenges and reflect on their approach to these problems. -These scenarios are focused on helping you develop a good approach and do not always allow enough time to complete the challenge. Do not be discouraged if you are unable to implement a solution in the alotted time. Some of the challenges are very difficult and assigned intentionally to emphasize process over results. +These scenarios are focused on helping you develop a good approach and do not always allow enough time to complete the challenge. Do not be discouraged if you are unable to implement a solution in the alotted time. Some of the challenges are very difficult and are assigned **intentionally to emphasize process over results**.
@@ -19,7 +19,7 @@ We will use these [Technical Prompts](./prompts) for our practice throughout Mod Technical challenges will either be solo or paired. -After each challenge, students should track their reflections in a [GitHub Gist](https://gist.github.com/) that they will submit at the end of the week. +After each challenge, students should track their reflections with their preferred note taking tool. @@ -30,7 +30,7 @@ For solo challenges, you will be given a technical challenge and a designated am After the time is up, talk through your process with a peer. Share your solutions, compare approaches, and ask questions to help one another see the same problem from a new perspective. _If you want to take it a step further, talk about the Big O complexity of your solution._ -Once you've finished your discussions with a peer, take time to add your personal reflection on the process to your GitHub Gist. +Once you've finished your discussions with a peer, take time to add your personal reflection on the process to your notes.
#### Reflection Questions @@ -46,7 +46,9 @@ If this isn't your first technical challenge: ### Paired Challenges -You will be assigned either a partner or a small group. Start by coordinating who will be the problem solver and who will be the observer first. The problem solver will then work through the challenge in the designated amount of time. The observer should be participating and taking notes for feedback. Once the time is completed, the observer should share feedback. Switch roles and repeat with a new problem. +You will be assigned either a partner or a small group. Start by coordinating who will be the problem solver and who will be the observer first. The problem solver will then work through the challenge in the designated amount of time. The observer should be participating and taking notes for feedback. Once the time is completed, the observer should share feedback. Switch roles and repeat with a new problem. + +Be sure to add any reflections to your notes.
#### Problem Solver Outline