Given a letter such as C, print a diamond using letters A to C, for example:
A B B C C B B A
First thing to notice that a Diamond is symmetric vertically: we can then reduce the algorithm to taking the top half, and putting the bottom half by re-using the top through reversing and dropping the last element.
We can in fact represent a range of letters using Scala's Range concept, and from that, compute the length of the padding and the filling around the diamond. (this is © from www.scala-algorithms.com)
Scala provides a simple way to repeat a character multiple times, and String interpolation enables straight-forward concatenation like you would have in languages such as PHP.
Scala concepts & Hints
Drop, Take, dropRight, takeRight
Scala's `drop` and `take` methods typically remove or select `n` items from a collection.
(1 to n)syntax produces a "Range" which is a representation of a sequence of numbers.
.viewsyntax creates a structure that mirrors another structure, until "forced" by an eager operation like .toList, .foreach, .forall, .count.
Algorithm in Scala
22 lines of Scala (version 2.13), showing how concise Scala can be!
Test cases in Scala
assert(fillingLength(forLetter = 'B', toLetter = 'B') == 1) assert(fillingLength(forLetter = 'B', toLetter = 'C') == 1) assert(diamond('A') == "A") assert(diamond('B') == " A \nB B\n A ") assert(diamond('C') == " A \n B B \nC C\n B B \n A ")