Advertisement
Btwonu

Djoser

May 23rd, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2.  
  3. function djoser(base, increment) {
  4.   let stepAreas = [];
  5.   let stepCounter = 0;
  6.  
  7.   for (let i = base; i > 0; i -= 2, stepCounter++) {
  8.     stepAreas.push(i * i);
  9.   }
  10.  
  11.   let pyramidHeight = stepCounter * increment;
  12.  
  13.   //All areas of the outer layers
  14.   let outerLayers = outerLayerExtractor(stepAreas);
  15.   let innerLayers = stoneExtractor(stepAreas);
  16.   let goldArea = stepAreas[stepAreas.length - 1];
  17.  
  18.   //Multiply by the height
  19.   let incrementedMarble = incrementOuterLayers(outerLayers, increment);
  20.   let incrementedStone = incrementOuterLayers(innerLayers, increment);
  21.  
  22.   let incrementedLapis = lapisLazuli(incrementedMarble);
  23.   let incrementedGold = goldArea * increment;
  24.  
  25.   //Material Sums
  26.   let stoneSum = incrementedStone.reduce((a, b) => a + b, 0);
  27.   let marbleSum = incrementedMarble.reduce((a, b) => a + b, 0);
  28.   let lapisSum = incrementedLapis.reduce((a, b) => a + b, 0);
  29.   marbleSum -= lapisSum;
  30.  
  31.   //Output
  32.   console.log(`Stone required: ${Math.ceil(stoneSum)}`);
  33.   console.log(`Marble required: ${Math.ceil(marbleSum)}`);
  34.   console.log(`Lapis Lazuli required: ${Math.ceil(lapisSum)}`);
  35.   console.log(`Gold required: ${Math.ceil(incrementedGold)}`);
  36.   console.log(`Final pyramid height: ${Math.floor(pyramidHeight)}`);
  37.  
  38.   //Function Declarations
  39.   function outerLayerExtractor(arr) {
  40.     let outerLayerAreas = [];
  41.  
  42.     for (let i = 0; i < arr.length - 1; i++) {
  43.       for (let j = i + 1; j > i; j--) {
  44.         let current = arr[i] - arr[j];
  45.         outerLayerAreas.push(current);
  46.       }
  47.     }
  48.     return outerLayerAreas;
  49.   }
  50.  
  51.   function incrementOuterLayers(arr, inc) {
  52.     let incremented = [];
  53.     for (let i = 0; i < arr.length; i++) {
  54.       incremented.push(arr[i] * inc);
  55.     }
  56.     return incremented;
  57.   }
  58.  
  59.   function stoneExtractor(arr) {
  60.     let modifiedArray = arr;
  61.     modifiedArray.shift();
  62.     return modifiedArray;
  63.   }
  64.  
  65.   function lapisLazuli(arr) {
  66.     let lazuli = [];
  67.     let counter = 1;
  68.  
  69.     for (let i = 0; i < arr.length; i++, counter++) {
  70.       if (counter % 5 === 0) {
  71.         lazuli.push(arr[i]);
  72.       }
  73.     }
  74.     return lazuli;
  75.   }
  76. }
  77.  
  78. djoser(11, 0.75);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement