Class Central is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

Exercism

Haskell

via Exercism

Overview

Coursera Flash Sale
40% Off Coursera Plus for 3 Months!
Grab it

Haskell is a general-purpose programming language known for being purely functional, non-strict with strong static typing and for having type inference.

Purely functional means that you don't update variables or modify state. Pure functions will always return the same value given the same input and will do nothing else. Functions that are referentially transparent are more predictable and more composable. Non-strict (somewhat like lazy) means that you can express infinite data structures. Strong static typing means that a lot of program errors are caught during compilation. Type inferencemeans that the compiler can often figure out the type of a value by itself. The compiler can also tell you if a value has conflicting types in different parts of the code.

There are more than 10,000 free third-party packages available at Hackage, the Haskell community's central package archive, and you can download them using the Stack tool that Exercism also uses.

You can also read the free book Learn You a Haskell for Great Good or follow the interactive tutorial at tryhaskell.org.

Syllabus

  • Hello World
    • The classical introductory exercise. Just say "Hello, World!".
  • Leap
    • Determine whether a given year is a leap year.
  • Reverse String
    • Reverse a given string.
  • Darts
    • Write a function that returns the earned points in a single toss of a Darts game.
  • Space Age
    • Given an age in seconds, calculate how old someone is in terms of a given planet's solar years.
  • Pangram
    • Determine if a sentence is a pangram.
  • Bob
    • Bob is a lackadaisical teenager. In conversation, his responses are very limited.
  • Collatz Conjecture
    • Calculate the number of steps to reach 1 using the Collatz conjecture.
  • RNA Transcription
    • Given a DNA strand, return its RNA Complement Transcription.
  • Nucleotide Count
    • Given a DNA string, compute how many times each nucleotide occurs in the string.
  • Sum of Multiples
    • Given a number, find the sum of all the multiples of particular numbers up to but not including that number.
  • Grains
    • Calculate the number of grains of wheat on a chessboard given that the number on each square doubles.
  • Acronym
    • Convert a long phrase to its acronym.
  • Strain
    • Implement the `keep` and `discard` operation on collections. Given a collection and a predicate on the collection's elements, `keep` returns a new collection containing those elements where the predicate is true, while `discard` returns a new collection containing those elements where the predicate is false.
  • Anagram
    • Given a word and a list of possible anagrams, select the correct sublist.
  • Clock
    • Implement a clock that handles times without dates.
  • Crypto Square
    • Implement the classic method for composing secret messages called a square code.
  • Luhn
    • Given a number determine whether or not it is valid per the Luhn formula.
  • Nth Prime
    • Given a number n, determine what the nth prime is.
  • Minesweeper
    • Add the numbers to a minesweeper board.
  • Game of Life
    • Implement Conway's Game of Life.
  • Perfect Numbers
    • Determine if a number is perfect, abundant, or deficient based on Nicomachus' (60 - 120 CE) classification scheme for positive integers.
  • Phone Number
    • Clean up user-entered phone numbers so that they can be sent SMS messages.
  • Secret Handshake
    • Given a decimal number, convert it to the appropriate sequence of events for a secret handshake.
  • Pascal's Triangle
    • Compute Pascal's triangle up to a given number of rows.
  • Binary Search Tree
    • Insert and search for numbers in a binary tree.
  • Queen Attack
    • Given the position of two queens on a chess board, indicate whether or not they are positioned so that they can attack each other.
  • State of Tic-Tac-Toe
    • Determine the game state of a match of Tic-Tac-Toe.
  • Word Count
    • Given a phrase, count the occurrences of each word in that phrase.
  • Word Search
    • Create a program to solve a word search puzzle.
  • Wordy
    • Parse and evaluate simple math word problems returning the answer as an integer.
  • Hamming
    • Calculate the Hamming difference between two DNA strands.
  • Robot Simulator
    • Write a robot simulator.
  • Twelve Days
    • Output the lyrics to 'The Twelve Days of Christmas'.
  • Saddle Points
    • Detect saddle points in a matrix.
  • Food Chain
    • Generate the lyrics of the song 'I Know an Old Lady Who Swallowed a Fly'.
  • OCR Numbers
    • Given a 3 x 4 grid of pipes, underscores, and spaces, determine which number is represented, or whether it is garbled.
  • Change
    • Correctly determine change to be given using the least number of coins.
  • Knapsack
    • Given a knapsack that can only carry a certain weight, determine which items to put in the knapsack in order to maximize their combined value.
  • Satellite
    • Rebuild binary trees from pre-order and in-order traversals.
  • Go Counting
    • Count the scored points on a Go board.
  • Resistor Color Duo
    • Convert color codes, as used on resistors, to a numeric value.
  • D&D Character
    • Randomly generate Dungeons & Dragons characters.
  • Resistor Color Trio
    • Convert color codes, as used on resistors, to a human-readable label.
  • Run-Length Encoding
    • Implement run-length encoding and decoding.
  • House
    • Output the nursery rhyme 'This is the House that Jack Built'.
  • Proverb
    • For want of a horseshoe nail, a kingdom was lost, or so the saying goes. Output the full text of this proverbial rhyme.
  • Simple Linked List
    • Write a simple linked list implementation that uses Elements and a List.
  • Custom Set
    • Create a custom set type.
  • Bowling
    • Score a bowling game.
  • ISBN Verifier
    • Check if a given string is a valid ISBN-10 number.
  • Protein Translation
    • Translate RNA sequences into proteins.
  • Yacht
    • Score a single throw of dice in the game Yacht.
  • Pythagorean Triplet
    • There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product a * b * c.
  • Rotational Cipher
    • Create an implementation of the rotational cipher, also sometimes called the Caesar cipher.
  • Spiral Matrix
    • Given the size, return a square matrix of numbers in spiral order.
  • Affine Cipher
    • Create an implementation of the Affine cipher, an ancient encryption algorithm from the Middle East.
  • Alphametics
    • Write a function to solve alphametics puzzles.
  • Beer Song
    • Produce the lyrics to that beloved classic, that field-trip favorite: 99 Bottles of Beer on the Wall.
  • List Ops
    • Implement basic list operations.
  • Matrix
    • Given a string representing a matrix of numbers, return the rows and columns of that matrix.
  • Binary Search
    • Implement a binary search algorithm.
  • Parallel Letter Frequency
    • Count the frequency of letters in texts using parallel computation.
  • Transpose
    • Take input text and output it transposed.
  • Poker
    • Pick the best hand(s) from a list of poker hands.
  • Lens Person
    • Use lenses to update nested records (specific to languages with immutable data).
  • Triangle
    • Determine if a triangle is equilateral, isosceles, or scalene.
  • Meetup
    • Calculate the date of meetups.
  • Sieve
    • Use the Sieve of Eratosthenes to find all the primes from 2 up to a given number.
  • Palindrome Products
    • Detect palindrome products in a given range.
  • Simple Cipher
    • Implement a simple shift cipher like Caesar and a more secure substitution cipher.
  • Connect
    • Compute the result for a game of Hex / Polygon.
  • Book Store
    • To try and encourage more sales of different books from a popular 5 book series, a bookshop has decided to offer discounts of multiple-book purchases.
  • POV
    • Reparent a graph on a selected node.
  • Difference of Squares
    • Find the difference between the square of the sum and the sum of the squares of the first N natural numbers.
  • Raindrops
    • Convert a number to a string, the content of which depends on the number's factors.
  • Kindergarten Garden
    • Given a diagram, determine which plants each child in the kindergarten class is responsible for.
  • All Your Base
    • Convert a number, represented as a sequence of digits in one base, to any other base.
  • Allergies
    • Given a person's allergy score, determine whether or not they're allergic to a given item, and their full list of allergies.
  • Series
    • Given a string of digits, output all the contiguous substrings of length `n` in that string.
  • Bank Account
    • Simulate a bank account supporting opening/closing, withdraws, and deposits of money. Watch out for concurrent transactions!
  • Rail Fence Cipher
    • Implement encoding and decoding for the rail fence cipher.
  • Sublist
    • Write a function to determine if a list is a sublist of another list.
  • SGF Parsing
    • Parsing a Smart Game Format string.
  • Zipper
    • Creating a zipper for a binary tree.
  • Armstrong Numbers
    • Determine if a number is an Armstrong number.
  • ETL
    • Change the data format for scoring a game to more easily add other languages.
  • Scrabble Score
    • Given a word, compute the Scrabble score for that word.
  • Roman Numerals
    • Convert modern Arabic numbers into Roman numerals.
  • Atbash Cipher
    • Create an implementation of the atbash cipher, an ancient encryption system created in the Middle East.
  • Pig Latin
    • Implement a program that translates from English to Pig Latin.
  • Robot Name
    • Manage robot factory settings.
  • Say
    • Given a number from 0 to 999,999,999,999, spell out that number in English.
  • Dominoes
    • Make a chain of dominoes.
  • Accumulate
    • Implement the `accumulate` operation, which, given a collection and an operation to perform on each element of the collection, returns a new collection containing the result of applying that operation to each element of the input collection.
  • Complex Numbers
    • Implement complex numbers.
  • Rational Numbers
    • Implement rational numbers.
  • Largest Series Product
    • Given a string of digits, calculate the largest product for a contiguous substring of digits of length n.
  • Prime Factors
    • Compute the prime factors of a given natural number.
  • Matching Brackets
    • Make sure the brackets and braces all match.
  • Linked List
    • Implement a doubly linked list.
  • Two Bucket
    • Given two buckets of different size, demonstrate how to measure an exact number of liters.
  • Zebra Puzzle
    • Solve the zebra puzzle.
  • Forth
    • Implement an evaluator for a very simple subset of Forth.
  • Diamond
    • Given a letter, print a diamond starting with 'A' with the supplied letter at the widest point.
  • Grade School
    • Given students' names along with the grade that they are in, create a roster for the school.
  • Isogram
    • Determine if a word or phrase is an isogram.

Reviews

Start your review of Haskell

Never Stop Learning.

Get personalized course recommendations, track subjects and courses with reminders, and more.

Someone learning on their laptop while sitting on the floor.