├── tech-tests ├── take-home │ ├── fizzbuzz.md │ ├── frontend.md │ ├── bank.md │ ├── tictactoe.md │ └── supermarket.md └── pairing │ ├── scrabble.md │ └── roman-numerals.md ├── README.md └── coach-guide.md /tech-tests/take-home/fizzbuzz.md: -------------------------------------------------------------------------------- 1 | # Fizzbuzz 2 | 3 | ## Specification 4 | 5 | ### Requirements 6 | 7 | Write a short program that prints each number from 1 to 100 on a new line. 8 | 9 | * For each multiple of 3, print "Fizz" instead of the number. 10 | * For each multiple of 5, print "Buzz" instead of the number. 11 | * For numbers which are multiples of both 3 and 5, print "FizzBuzz" instead of the number. 12 | * For all other numbers, print the number itself. 13 | 14 | ## Extension 15 | 16 | If you've completed the first part of the challenge, make it interactive via a REPL like IRB or the JavaScript console. Your programme should request a number input and then return the corresponding value (Fizz, Buzz etc). 17 | -------------------------------------------------------------------------------- /tech-tests/take-home/frontend.md: -------------------------------------------------------------------------------- 1 | # Front End Challenge 2 | 3 | Create a single page website which needs to display the top 100 songs (in UK) based on the iTunes API. 4 | 5 | ## Specifications 6 | 7 | ### Requirements 8 | 9 | * Show top 100 albums based on the JSON feed here: https://itunes.apple.com/gb/rss/topalbums/limit=100/json 10 | * Create and implement a basic design using HTML, CSS and JS to display the JSON in an organised way. 11 | * Use a CSS framework (Bootstrap, Foundation). 12 | * Design should be responsive. 13 | 14 | ## Extension 15 | 16 | Once you have fulfilled the basic functionality of the game, you can choose to implement these additional user stories. 17 | 18 | * Use a JavaScript framework (Angular, React etc). 19 | * Allow the user to see more information about a selected album. 20 | -------------------------------------------------------------------------------- /tech-tests/take-home/bank.md: -------------------------------------------------------------------------------- 1 | # Bank Tech Test 2 | 3 | ## Specification 4 | 5 | Implement a simple 'ATM' application. 6 | 7 | ### Requirements 8 | 9 | * User can interact with the code using a REPL like IRB or with the JavaScript console. 10 | * User can make deposits and withdrawals. 11 | * User should not be able to withdraw more money than they have in their account. 12 | * User can print their account statement which should show date, amount withdrawn/deposited and balance. 13 | * The account statement should be printed in descending order (latest date first). 14 | 15 | ## Extensions 16 | 17 | Once you have fulfilled the basic functionality of the game, you can choose to implement these additional user stories. 18 | 19 | * Store the transaction data in memory - doesn't have to be a DB, you can use a CSV file. 20 | * User can print their account statements for a specific month. 21 | -------------------------------------------------------------------------------- /tech-tests/pairing/scrabble.md: -------------------------------------------------------------------------------- 1 | # Scrabble 2 | 3 | Taken from [here](https://gist.github.com/adambray/186149f7d03293a67fae). 4 | 5 | ## Specification 6 | 7 | Write a program that, given a word, computes the scrabble score for that word. 8 | 9 | ## Letter Values 10 | 11 | ``` 12 | Letter Value 13 | A, E, I, O, U, L, N, R, S, T 1 14 | D, G 2 15 | B, C, M, P 3 16 | F, H, V, W, Y 4 17 | K 5 18 | J, X 8 19 | Q, Z 10 20 | ``` 21 | 22 | ## Examples 23 | 24 | "cabbage" should be scored as worth 14 points: 25 | 26 | * 3 points for C 27 | * 1 point for A, twice 28 | * 3 points for B, twice 29 | * 2 points for G 30 | * 1 point for E 31 | 32 | And to total: 33 | 34 | * 3 + 2*1 + 2*3 + 2 + 1 35 | * = 3 + 2 + 6 + 3 36 | * = 5 + 9 37 | * = 14 38 | -------------------------------------------------------------------------------- /tech-tests/take-home/tictactoe.md: -------------------------------------------------------------------------------- 1 | # Tic Tac Toe 2 | 3 | ## Specification 4 | 5 | ### Requirements 6 | 7 | Implement a working game of tic tac toe. You can choose to do so on any user interface (web or command line). 8 | 9 | The rules of the game are as follows: 10 | 11 | * There are two players - X and O. 12 | * The game is played on a 3 x 3 grid. 13 | * Players alternate to place Xs and Os on the grid until either wins. 14 | * A player can only place their piece in an empty square. 15 | * A player's turn is over once they have placed their piece. 16 | * The first player to get 3 of their pieces in a row (up, down, across or diagonally) wins. 17 | * When all 9 squares are full, the game is over. If no player has 3 pieces in a row, the game ends in a tie. 18 | 19 | ## Extension 20 | 21 | Once you have fulfilled the basic functionality of the game, you can choose to implement these additional user stories. 22 | 23 | * I can play a game of Tic Tac Toe with the computer. 24 | * The game will reset as soon as it's over so I can play again. 25 | * I can choose whether I want to play as X or O. 26 | * I can play a game of Tic Tac Toe with an unbeatable computer. (hint: you can use minimax). 27 | -------------------------------------------------------------------------------- /tech-tests/take-home/supermarket.md: -------------------------------------------------------------------------------- 1 | # Supermarket Challenge 2 | 3 | ## Specifications 4 | 5 | Quest for global domination has prompted us to open a supermarket - we sell only three products: 6 | 7 | ``` 8 | Product code | Name | Price 9 | ----------------------------------------- 10 | FR1 | Fruit tea | £3.11 11 | SR1 | Strawberries | £5.00 12 | CF1 | Coffee | £11.23 13 | ``` 14 | 15 | ## Requirements 16 | 17 | Our CEO is a big fan of buy-one-get-one-free offers and of fruit tea. He wants us to add a rule to do this. 18 | 19 | The COO, though, likes low prices and wants people buying strawberries to get a price discount for bulk purchases. If you buy 3 or more strawberries, the price should drop to £4.50 20 | 21 | Our check-out can scan items in any order, and because the CEO and COO change their minds often, it needs to be flexible regarding our pricing rules. 22 | 23 | The interface to our checkout looks like this (shown in ruby): 24 | ``` 25 | co = Checkout.new(pricing_rules) 26 | co.scan(item) 27 | co.scan(item) 28 | price = co.total 29 | ``` 30 | 31 | Implement a checkout system that fulfills these requirements. 32 | 33 | ## Test data 34 | 35 | * Basket: FR1,SR1,FR1,FR1,CF1, Total price expected: £22.45 36 | * Basket: FR1,FR1, Total price expected: £3.11 37 | * Basket: SR1,SR1,FR1,SR1, Total price expected: £16.61 38 | -------------------------------------------------------------------------------- /tech-tests/pairing/roman-numerals.md: -------------------------------------------------------------------------------- 1 | # Roman Numerals 2 | 3 | Taken from [here](http://codingdojo.org/kata/RomanNumerals/) and [here](https://www.codewars.com/kata/roman-numerals-encoder). 4 | 5 | ## Description 6 | 7 | The Romans wrote numbers using letters : I, V, X, L, C, D, M. Modern Roman numerals are written by expressing each digit separately starting with the left most digit and skipping any digit with a value of zero. In Roman numerals 1990 is rendered: 1000=M, 900=CM, 90=XC; resulting in MCMXC. 2008 is written as 2000=MM, 8=VIII; or MMVIII. 1666 uses each Roman symbol in descending order: MDCLXVI. 8 | 9 | 10 | ### Part I 11 | You should write a function to convert from normal numbers to Roman Numerals: eg 12 | ``` 13 | 1 --> I 14 | 10 --> X 15 | 7 --> VII 16 | 2008 --> MDCLXVI 17 | ``` 18 | 19 | For a full description of how it works, take a look at [this website](http://www.novaroma.org/via_romana/numbers.html). Alternatively, the table below should give you some guidance. 20 | 21 | ``` 22 | Symbol Value 23 | I 1 24 | V 5 25 | X 10 26 | L 50 27 | C 100 28 | D 500 29 | M 1,000 30 | ``` 31 | 32 | There is no need to be able to convert numbers larger than about 3000. (The Romans themselves didn’t tend to go any higher). 33 | 34 | ### Part II 35 | 36 | Write a function to convert in the other direction, ie numeral to digit. 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tech Test Workshop 2 | 3 | You can pick one of the following sample take home tech tests or pairing exercises to work on this evening. You can choose to do them in any programming language of your choice. 4 | 5 | 6 | ## Take Home Tech Test 7 | 8 | Take home tech tests are one of the ways in which companies might assess your technical ability. You will be sent a description of the test and will be expected to complete it in your own time and send the code over for them to assess. 9 | 10 | You will typically have a few days to complete most of these tests so do not expect to finish within this session. The aim of the workshop is to plan your solution with the help of a coach and get started. 11 | 12 | * [Fizzbuzz](./tech-tests/take-home/fizzbuzz.md) 13 | * [Bank](./tech-tests/take-home/bank.md) 14 | * [Supermarket](./tech-tests/take-home/supermarket.md) 15 | * [Tic Tac Toe](./tech-tests/take-home/tictactoe.md) 16 | * [iTunes - Front End](./tech-tests/take-home/frontend.md) 17 | 18 | ## Pairing Exercise 19 | 20 | Other companies might choose to do a pairing exercise with you either remotely or in person where you will work through a short problem with a developer. This might be a standalone exercise (like a kata or koan similar to the one you see below) or working on a small part of their codebase. Most of the time, the other developer is only there to observe you or answer any questions if you are stuck. 21 | 22 | * [Scrabble](./tech-tests/pairing/scrabble.md) 23 | * [Roman Numerals](./tech-tests/pairing/roman-numerals.md) 24 | * [React Front End Test](https://github.com/Mergermarket-Careers/react-frontend-test) 25 | -------------------------------------------------------------------------------- /coach-guide.md: -------------------------------------------------------------------------------- 1 | # Coach Guide 2 | 3 | Your role is to ensure that the student has a clearer understanding of what to expect during a programming interview and how they should approach either a take home tech test or pairing interview. 4 | 5 | 1. Get the student(s) to pick a pairing exercise/take home tech test. Most of the exercises are backend focused except for the ones which specify that they are front end. We'd only recommend picking a pairing exercise if you're working with just 1 student. 6 | 7 | 2. Have a conversation with the student before starting to gauge their experience level and what they want to get out of the session. Some of them might just want to try a practice take home tech test with some guidance if they have never done anything like it before, others might want a go at a mock pairing interview to practice their communication. 8 | 9 | 2. Walk them through some of the best practices below before they get started on the exercise. Some of the concepts might be hard to explain within an hour (like SOLID) but feel free to introduce it to them so they can research it in their free time. During the session, try and ensure they stick to these practices. 10 | 11 | 12 | ## Some Best Practices 13 | 14 | These are some general best practices to encourage your students to do during the session. Given the limited time, you might not be able to cover all these points in detail (writing tests for example) but it could be useful to point them in the right direction so they can work on it on their own time. 15 | 16 | 1. Sketch out a plan before starting - plan the main pieces of your program and how they might fit together. 17 | 2. TDD (test-driven development) - include unit tests. 18 | 3. Make it readable 19 | ..* Take care when naming classes, methods/functions, and variables. Names should describe what the thing does, or what it represents. Choose a name that reminds the reader what is stored inside the variable. 20 | ..* Break it down - Short and concise methods over long and complex ones. 21 | ..* Use comments sparingly - code that is easy to understand is always better than a comment. 22 | 4. Follow the programming style of your language - if you choose a OO language, make sure to write object-oriented code. 23 | 5. Make sure you are handling any edge cases (if you aren't, acknowledge these edge cases to demonstrate that you have thought about it.) 24 | 6. Refactor your solution! 25 | 7. Include a README - your documentation should include what your code will do, how to run your code and the technologies you've used. You can also talk about the problems you ran into, why you took the approach you did, what you might do differently or additionally if you had more time. 26 | 8. The final result should be easy to run and/or follow. Someone should not have to execute 10 different commands/steps to get your code running on their machine. 27 | 28 | ### Additional tips for Pairing Interview 29 | 30 | 1. Make sure you understand what the problem is before beginning to 'code bash'. Take your time to read and understand what you are expected to do and feel free to ask questions to clarify any doubts you might have. 31 | 2. Communicate! Pairing interviews are intended for companies to see how you think and problem solve. Try and constantly be talking through your steps and the reasons you are doing one thing over the other. 32 | --------------------------------------------------------------------------------