Fibonascii Squares
The Challenge
Your job is to, given input positive non-zero integer $n$, output an ASCII representation of the tiled Fibonacci squares up to the $n$th number of the Fibonacci sequence.
Rules
Input:
- Input will be an integer $n$ such that $n \gt 0$.
Output:
-
Output will be an ASCII representation of the tiled Fibonacci squares, up until the $n$th Fibonacci number.
-
For Fibonacci number $x$, its respective square will be $x$ characters tall and $x$ characters wide.
-
Squares must be tiled so as to match the arrangement shown in the examples below. However, the output may be mirrored or rotated by multiples of $90^\circ$ as desired. The orientation may be changed based on the input.
-
This challenge does include $0$ as a member of the Fibonacci sequence, so bear that in mind.
-
For cases where $n$ is $1$ (and hence there aren't any squares to create), you may either output any number of whitespace characters or output nothing at all.
-
Each square in the output must be represented by a grid made up of a unique ASCII character. For the characters forming your squares, you may use either the alphabet (either uppercase or lowercase, starting at
a
) or the digits 0-9 (starting at0
). You may reuse characters once you reach the end of the character sequence. You must use at least five unique characters. -
This is a code-golf challenge, so the code with the fewest bytes wins!
Examples
Here is an image of the proper way to tile Fibonacci squares:
Image source: Wikipedia
Example 1
Input:
6
Output:
DDDCC
DDDCC
DDDAB
EEEEE
EEEEE
EEEEE
EEEEE
EEEEE
Explanation: The input is $5$, representing the first $5$ numbers of the Fibonacci sequence, which are $0$, $1$, $1$, $2$, $3$, and $5$. The first and second squares are $1 \times 1$ characters in size, and are represented by A
and B
, respectively. The third square is $2 \times 2$ characters in size, and is represented by C
, and so on until we reach the fifth square.
Example 2
Input:
1
Output:
Explanation: The input is $1$, representing the first number of the Fibonacci sequence, which is $0$. Thus, nothing is outputted. Alternatively, any number of whitespace characters could be outputted.
Example 3
Input:
3
Output:
AB
Explanation:
The input is $3$, representing the first $3$ numbers of the Fibonacci sequence, which are $0$, $1$, and $1$. Thus, we have two squares, each $1 \times 1$ characters in size. The first square is represented by A
, the second by B
.
2 answers
BQN, 37 bytes
⍉∘⌽∘∾˜´(⍉{1⊸⌈⊸⋈⊑+`∘⌽⍟𝕩↕2}⥊'@'⊸+)¨∘⌽∘↕
-3 thanks to dzaima
The output isn't the same as the example but I think it's still correct if I understand the challenge correctly.
Result for x = 7:
FFFFFFFFEEEEE
FFFFFFFFEEEEE
FFFFFFFFEEEEE
FFFFFFFFEEEEE
FFFFFFFFEEEEE
FFFFFFFFBADDD
FFFFFFFFCCDDD
FFFFFFFFCCDDD
0 comment threads
BQN, 29 28 bytes
(⍉≍""){⍉⌽𝕩∾˘𝕨⥊˜⋈˜≠𝕩}´⟜⌽'@'+↕
Explanation:
(⍉≍""){⍉⌽𝕩∾˘𝕨⥊˜⋈˜≠𝕩}´⟜⌽'@'+↕ # a function taking a single argument
⍉≍"" # a 0-by-1 matrix
(⍉≍""){ }´ # right fold with the initial value of the 0-by-1 matrix
⟜⌽ # (but reverse the list to make it a left fold)
↕ # range; 0 1 2 3 4 … input-1
'@'+ # plus the character '@'; "@ABCDEF…"
{⍉⌽𝕩∾˘𝕨⥊˜⋈˜≠𝕩} # fold operand: 𝕨 - current character, 𝕩 - accumulator - the matrix
≠𝕩 # numbers of rows in the matrix
⋈˜ # paired with itself (7 → [7,7])
𝕨⥊˜ # reshape 𝕨 that much
𝕩∾˘ # concatenate horizontally to 𝕩
⍉⌽ # rotate 90° clockwise (reverse vertically, transpose)
2 comment threads