JSFiddle - React, Tailwind, and code Playground

by stvnmntjy

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/prettify/r224/prettify.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js"></script>
<h2>Even Fibonacci numbers</h2>
<h3>Problem 2</h3>
<p>Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:</p>
<pre>
                                1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
</pre>
<p>By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.</p>
<pre class="prettyprint">
solve = ->
  addTwo = (a, b) -> a + b
  gen = (arr) ->
    if not arr or arr.length is 0
    then gen [0, 1]
    else if _.last(arr) > 4000000
    then _.initial arr
    else gen arr.concat [addTwo _.last(arr), _.last _.initial arr]
  _.reduce (_.filter gen(), (a) -> a % 2 is 0),
           ((m, a) -> m + a),
           0
</pre>
<button id="solve" type="button">Solve!</button>
<pre id="solution" class="prettyprint">
>
</pre>

CSS

/* Pretty printing styles. Used with prettify.js. */
/* Vim sunburst theme by David Leibovic */

pre .str, code .str { color: #65B042; } /* string  - green */
pre .kwd, code .kwd { color: #E28964; } /* keyword - dark pink */
pre .com, code .com { color: #AEAEAE; font-style: italic; } /* comment - gray */
pre .typ, code .typ { color: #89bdff; } /* type - light blue */
pre .lit, code .lit { color: #3387CC; } /* literal - blue */
pre .pun, code .pun { color: #fff; } /* punctuation - white */
pre .pln, code .pln { color: #fff; } /* plaintext - white */
pre .tag, code .tag { color: #89bdff; } /* html/xml tag    - light blue */
pre .atn, code .atn { color: #bdb76b; } /* html/xml attribute name  - khaki */
pre .atv, code .atv { color: #65B042; } /* html/xml attribute value - green */
pre .dec, code .dec { color: #3387CC; } /* decimal - blue */

pre.prettyprint, code.prettyprint {
	background-color: #000;
	-moz-border-radius: 8px;
	-webkit-border-radius: 8px;
	-o-border-radius: 8px;
	-ms-border-radius: 8px;
	-khtml-border-radius: 8px;
	border-radius: 8px;
}

pre.prettyprint {
	width: 95%;
	margin: 1em auto;
	padding: 1em;
	white-space: pre-wrap;
}


/* Specify class=linenums on a pre to get line numbering */
ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE; } /* IE indents via margin-left */
li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }
/* Alternate shading for lines */
li.L1,li.L3,li.L5,li.L7,li.L9 { }

@media print {
  pre .str, code .str { color: #060; }
  pre .kwd, code .kwd { color: #006; font-weight: bold; }
  pre .com, code .com { color: #600; font-style: italic; }
  pre .typ, code .typ { color: #404; font-weight: bold; }
  pre .lit, code .lit { color: #044; }
  pre .pun, code .pun { color: #440; }
  pre .pln, code .pln { color: #000; }
  pre .tag, code .tag { color: #006; font-weight: bold; }
  pre .atn, code .atn { color: #404; }
  pre .atv, code .atv { color: #060; }
}

CoffeeScript

solve = ->
  addTwo = (a, b) -> a + b
  gen = (arr) ->
    if not arr or arr.length is 0
    then gen [0, 1]
    else if _.last(arr) > 4000000
    then _.initial arr
    else gen arr.concat [addTwo _.last(arr), _.last _.initial arr]
  _.reduce (_.filter gen(), (a) -> a % 2 is 0),
           ((m, a) -> m + a),
           0

$ ->
  prettyPrint()
  $('#solve').click ->
    str = '> ' + solve()
    prettied = prettyPrintOne str
    $('#solution').html prettied
    return
  return