# For-comprehension, a Scala language concept

Last updated

The for-comprehension is highly important syntatic enhancement in functional programming languages.

Last updated

The for-comprehension is highly important syntatic enhancement in functional programming languages.

Scala is used at many places, such as AirBnB, Apple, Bank of America, BBC, Barclays, Capital One, Citibank, Coursera, eBay, JP Morgan, LinkedIn, Morgan Stanley, Netflix, Singapore Exchange, Twitter.

Fully unit-tested, with explanations and relevant concepts; new algorithms published about once a week.

- Compute the length of longest valid parentheses
- Check a binary tree is balanced
- Make a queue using stacks (Lists in Scala)
- Find height of binary tree
- Single-elimination tournament tree
- Quick Sort sorting algorithm in pure immutable Scala
- Find minimum missing positive number in a sequence
- Least-recently used cache (LRU)
- Count pairs of a given expected sum
- Compute a Roman numeral for an Integer, and vice-versa
- Compute keypad possibilities
- Matching parentheses algorithm with foldLeft and a state machine
- Traverse a tree Breadth-First, immutably
- Read a matrix as a spiral
- Remove duplicates from a sorted list (state machine)
- Merge Sort: stack-safe, tail-recursive, in pure immutable Scala, N-way
- Longest increasing sub-sequence length
- Reverse first n elements of a queue
- Binary search a generic Array
- Merge Sort: in pure immutable Scala
- Make a queue using Maps
- Is an Array a permutation?
- Count number of contiguous countries by colors
- Add numbers without using addition (plus sign)
- Tic Tac Toe MinMax solve
- Run-length encoding (RLE) Encoder
- Print Alphabet Diamond
- Balanced parentheses algorithm with tail-call recursion optimisation
- Reverse a String's words efficiently
- Count number of changes (manipulations) needed to make an anagram with foldLeft and a MultiSet
- Count passing cars
- Establish execution order from dependencies
- Counting inversions of a sequence (array) using a Merge Sort
- Longest common prefix of strings
- Check if an array is a palindrome
- Check a directed graph has a routing between two nodes (depth-first search)
- Compute nth row of Pascal's triangle
- Run-length encoding (RLE) Decoder
- Check if a number is a palindrome
- In a range of numbers, count the numbers divisible by a specific integer
- Find the index of a substring ('indexOf')
- Reshape a matrix
- Compute modulo of an exponent without exponentiation
- Closest pair of coordinates in a 2D plane
- Find the contiguous slice with the minimum average
- Compute maximum sum of subarray (Kadane's algorithm)
- Pure-functional double linked list
- Binary search in a rotated sorted array
- Check if a directed graph has cycles
- Rotate Array right in pure-functional Scala - using an unusual immutable efficient approach
- Check a binary tree is a search tree
- Length of the longest common substring
- Tic Tac Toe board check
- Find an unpaired number in an array
- Check if a String is a palindrome
- Count binary gap size of a number using tail recursion
- Remove duplicates from a sorted list (Sliding)
- Monitor success rate of a process that may fail
- Find sub-array with the maximum sum
- Find the minimum absolute difference of two partitions
- Find maximum potential profit from an array of stock price
- Fibonacci in purely functional immutable Scala
- Fizz Buzz in purely functional immutable Scala
- Find combinations adding up to N (non-unique)
- Make a binary search tree (Red-Black tree)
- Remove duplicates from an unsorted List
- Find combinations adding up to N (unique)
- Count factors/divisors of an integer
- Compute single-digit sum of digits
- Traverse a tree Depth-First
- Reverse bits of an integer
- Find k closest elements to a value in a sorted Array
- QuickSelect Selection Algorithm (kth smallest item/order statistic)
- Rotate a matrix by 90 degrees clockwise

To save you going through various tutorials, we cherry-picked the most useful Scala concepts in a consistent form.

- Class Inside Class
- Class Inside Def
- Collect
- Def Inside Def
- Drop, Take, dropRight, takeRight
- foldLeft and foldRight
- For-comprehension
- Lazy List
- Option Type
- Ordering
- Partial Function
- Pattern Matching
- Range
- scanLeft and scanRight
- Sliding / Sliding Window
- Stack Safety
- State machine
- Tail Recursion
- Type Class
- View
- Zip