This commit is contained in:
Pl4gue
2017-12-23 17:37:47 +01:00
parent 0a84276458
commit 4bd0df6496

View File

@ -14,11 +14,10 @@
<meta property="og:type" content="website"/><meta property="og:image" content="favicon.png">
<link rel="icon" type="image/png" href="favicon.png">
<link rel="stylesheet" href="prism.css">
<script src="../docs/bundle.js"></script>
</head>
<script>
const search = (node) => {
// Hide non-query-matching snippets
// Hide non-query-matching snippets
Array.from(node.parentElement.parentElement.getElementsByTagName('a')).forEach(x => {
x.style.display = x.getAttribute("href").toUpperCase().indexOf(node.value.toUpperCase()) + 1 ? '' : 'none'
});
@ -33,28 +32,30 @@
element.style.display = (element.tagName == 'H3' && index + 1 == source.length ? 'none' : element.tagName == 'H3' && source[index + 1].tagName == 'H3' ? 'none' : '')
})
}
function clipboard() {
const snippets = document.querySelectorAll("pre");
snippets.forEach(element => {
const button = document.createElement("button");
button.innerHTML = "Copy to clipboard";
element.parentElement.appendChild(button);
const snippets = document.querySelectorAll("pre");
snippets.forEach(element => {
const button = document.createElement("button");
button.innerHTML = "Copy to clipboard";
element.parentElement.appendChild(button);
button.addEventListener ("click", function() {
//The following regex removes all the comments from the snippet
const text = element.textContent.replace(/\/\*(.|[\r\n])*?\*\//g, '').replace(/\/\/.*/gm, '');
// Apparently you can't copy a variable to clipboard so you need to create text input element,
// give it a value, copy it and then remove it from DOM.
const textArea = document.createElement("textarea");
textArea.value = text;
document.body.appendChild(textArea);
textArea.select();
document.execCommand("Copy");
document.body.removeChild(textArea);
});
});
button.addEventListener ("click", function() {
//The following regex removes all the comments from the snippet
const text = element.textContent.replace(/\/\*(.|[\r\n])*?\*\//g, '').replace(/\/\/.*/gm, '');
// Apparently you can't copy a variable to clipboard so you need to create text input element,
// give it a value, copy it and then remove it from DOM.
const textArea = document.createElement("textarea");
textArea.value = text.trim();
document.body.appendChild(textArea);
console.log(textArea.innerText);
textArea.select();
document.execCommand("Copy");
document.body.removeChild(textArea);
});
});
};
</script>
<body>
<body onload="clipboard()">
<a href="https://github.com/Chalarangelo/30-seconds-of-code" class="github-corner" aria-label="View source on Github"><svg width="90" height="90" viewBox="0 0 250 250" style="fill:#151513;color:#fff;position:absolute;top:0;border:0;right:0" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin:130px 106px" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>
<header style="height:5.5rem">
<h1 class="logo" href="https://github.com/Chalarangelo/30-seconds-of-code"><img src="favicon.png" style="height:4rem"/><span id="title">&nbsp;30 seconds of code</span>
@ -304,7 +305,7 @@ arrayMax([1,2,4]) // -&gt; 4
<p>Use <code>Array.reduce()</code> and the <code>lcm</code> formula (uses recursion) to calculate the lowest common multiple of an array of numbers.</p>
<pre><code class="language-js">const arrayLcm = arr =&gt;{
const gcd = (x, y) =&gt; !y ? x : gcd(y, x % y);
const lcm = (x, y) =&gt; (x*y)/gcd(x, y);
const lcm = (x, y) =&gt; (x*y)/gcd(x, y);
return arr.reduce((a,b) =&gt; lcm(a,b));
}
// arrayLcm([1,2,3,4,5]) -&gt; 60
@ -448,7 +449,7 @@ Use <code>Array.reduce()</code> to create an object, where the keys are produced
<p>Initializes an array containing the numbers in the specified range where <code>start</code> and <code>end</code> are inclusive.</p>
<p>Use <code>Array((end + 1) - start)</code> to create an array of the desired length, <code>Array.map()</code> to fill with the desired values in a range.
You can omit <code>start</code> to use a default value of <code>0</code>.</p>
<pre><code class="language-js">const initializeArrayWithRange = (end, start = 0) =&gt;
<pre><code class="language-js">const initializeArrayWithRange = (end, start = 0) =&gt;
Array.from({ length: (end + 1) - start }).map((v, i) =&gt; i + start);
// initializeArrayWithRange(5) -&gt; [0,1,2,3,4,5]
// initializeArrayWithRange(7, 3) -&gt; [3,4,5,6,7]
@ -475,7 +476,7 @@ You can omit <code>value</code> to use a default value of <code>0</code>.</p>
</div></div><br/><div class="card fluid"><div class="section double-padded"><h3 id="mapobject">mapObject</h3></div><div class="section double-padded">
<p>Maps the values of an array to an object using a function, where the key-value pairs consist of the original value as the key and the mapped value.</p>
<p>Use an anonymous inner function scope to declare an undefined memory space, using closures to store a return value. Use a new <code>Array</code> to store the array with a map of the function over its data set and a comma operator to return a second step, without needing to move from one context to another (due to closures and order of operations).</p>
<pre><code class="language-js">const mapObject = (arr, fn) =&gt;
<pre><code class="language-js">const mapObject = (arr, fn) =&gt;
(a =&gt; (a = [arr, arr.map(fn)], a[0].reduce( (acc,val,ind) =&gt; (acc[val] = a[1][ind], acc), {}) )) ( );
/*
const squareIt = arr =&gt; mapObject(arr, a =&gt; a*a)
@ -506,7 +507,7 @@ Use <code>Array.length = 0</code> to mutate the passed in an array by resetting
<pre><code class="language-js">const pull = (arr, ...args) =&gt; {
let argState = Array.isArray(args[0]) ? args[0] : args;
let pulled = arr.filter((v, i) =&gt; !argState.includes(v));
arr.length = 0;
arr.length = 0;
pulled.forEach(v =&gt; arr.push(v));
};
@ -527,7 +528,7 @@ Use <code>Array.push()</code> to keep track of pulled values</p>
let removed = [];
let pulled = arr.map((v, i) =&gt; pullArr.includes(i) ? removed.push(v) : v)
.filter((v, i) =&gt; !pullArr.includes(i))
arr.length = 0;
arr.length = 0;
pulled.forEach(v =&gt; arr.push(v));
return removed;
}
@ -544,7 +545,7 @@ Use <code>Array.push()</code> to keep track of pulled values</p>
Use <code>Array.length = 0</code> to mutate the passed in an array by resetting it's length to zero and <code>Array.push()</code> to re-populate it with only the pulled values.
Use <code>Array.push()</code> to keep track of pulled values</p>
<pre><code class="language-js">const pullAtValue = (arr, pullArr) =&gt; {
let removed = [],
let removed = [],
pushToRemove = arr.forEach((v, i) =&gt; pullArr.includes(v) ? removed.push(v) : v),
mutateTo = arr.filter((v, i) =&gt; !pullArr.includes(v));
arr.length = 0;
@ -856,7 +857,7 @@ If <code>num</code> falls within the range, return <code>num</code>.
Otherwise, return the nearest number in the range.</p>
<pre><code class="language-js">const clampNumber = (num, lower, upper) =&gt; {
if(lower &gt; upper) upper = [lower, lower = upper][0];
return (num&gt;=lower &amp;&amp; num&lt;=upper) ? num : ((num &lt; lower) ? lower : upper)
return (num&gt;=lower &amp;&amp; num&lt;=upper) ? num : ((num &lt; lower) ? lower : upper)
}
// clampNumber(2, 3, 5) -&gt; 3
// clampNumber(1, -1, -5) -&gt; -1
@ -951,7 +952,7 @@ If the second parameter, <code>end</code>, is not specified, the range is consid
</div></div><br/><div class="card fluid"><div class="section double-padded"><h3 id="isarmstrongnumber">isArmstrongNumber</h3></div><div class="section double-padded">
<p>Checks if the given number is an Armstrong number or not.</p>
<p>Convert the given number into an array of digits. Use <code>Math.pow()</code> to get the appropriate power for each digit and sum them up. If the sum is equal to the number itself, return <code>true</code> otherwise <code>false</code>.</p>
<pre><code class="language-js">const isArmstrongNumber = digits =&gt;
<pre><code class="language-js">const isArmstrongNumber = digits =&gt;
( arr =&gt; arr.reduce( ( a, d ) =&gt; a + Math.pow( parseInt( d ), arr.length ), 0 ) == digits ? true : false )( ( digits+'' ).split( '' ) );
// isArmstrongNumber(1634) -&gt; true
// isArmstrongNumber(371) -&gt; true
@ -1031,13 +1032,13 @@ Then, <code>split('')</code> into individual characters, <code>reverse()</code>,
<p>Generates primes up to a given number, using the Sieve of Eratosthenes.</p>
<p>Generate an array from <code>2</code> to the given number. Use <code>Array.filter()</code> to filter out the values divisible by any number from <code>2</code> to the square root of the provided number.</p>
<pre><code class="language-js">const primes = num =&gt; {
let arr = Array.from({length:num-1}).map((x,i)=&gt; i+2),
let arr = Array.from({length:num-1}).map((x,i)=&gt; i+2),
sqroot = Math.floor(Math.sqrt(num)),
numsTillSqroot = Array.from({length:sqroot-1}).map((x,i)=&gt; i+2);
numsTillSqroot.forEach(x =&gt; arr = arr.filter(y =&gt; ((y%x)!==0)||(y==x)));
return arr;
return arr;
}
// primes(10) -&gt; [2,3,5,7]
// primes(10) -&gt; [2,3,5,7]
</code></pre>
</div></div><br/><div class="card fluid"><div class="section double-padded"><h3 id="randomintegerinrange">randomIntegerInRange</h3></div><div class="section double-padded">
<p>Returns a random integer in the specified range.</p>
@ -1432,7 +1433,6 @@ Use <code>Number()</code> to check if the coercion holds.</p>
</main>
</div>
<script src="prism.js"></script>
<script src="bundle.js"></script>
</body>
</html>