2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
43
Task/Sierpinski-carpet/JavaScript/sierpinski-carpet-3.js
Normal file
43
Task/Sierpinski-carpet/JavaScript/sierpinski-carpet-3.js
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
(() => {
|
||||
'use strict';
|
||||
|
||||
// sierpinskiCarpet :: Int -> String
|
||||
let sierpinskiCarpet = n => {
|
||||
|
||||
// carpet :: Int -> [[String]]
|
||||
let carpet = n => {
|
||||
let xs = range(0, Math.pow(3, n) - 1);
|
||||
return xs.map(x => xs.map(y => inCarpet(x, y)));
|
||||
},
|
||||
|
||||
// https://en.wikipedia.org/wiki/Sierpinski_carpet#Construction
|
||||
|
||||
// inCarpet :: Int -> Int -> Bool
|
||||
inCarpet = (x, y) =>
|
||||
(!x || !y) ? true : !(
|
||||
(x % 3 === 1) &&
|
||||
(y % 3 === 1)
|
||||
) && inCarpet(
|
||||
x / 3 | 0,
|
||||
y / 3 | 0
|
||||
);
|
||||
|
||||
return carpet(n)
|
||||
.map(line => line.map(bool => bool ? '\u2588' : ' ')
|
||||
.join(''))
|
||||
.join('\n');
|
||||
};
|
||||
|
||||
// GENERIC
|
||||
|
||||
// range :: Int -> Int -> [Int]
|
||||
let range = (m, n) =>
|
||||
Array.from({
|
||||
length: Math.floor(n - m) + 1
|
||||
}, (_, i) => m + i);
|
||||
|
||||
// TEST
|
||||
|
||||
return [1, 2, 3]
|
||||
.map(sierpinskiCarpet);
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue