FIRST, A QUICK POLL
FUNCTIONAL PROGRAMMING EXPERIENCE? (THE 80’S COUNTS)
COFFEESCRIPT EXPERIENCE? (NOBODY LIKES A SHOW OFF)
AN OVER-SIMPLIFIED COMPARISON... F U N C T I O N A L L A N G U A G E S
- NO SIDE EFFECTS DUE TO LEXICAL SCOPING
- IMMUTABLE OBJECTS - MONADIC FUNCTIONS
(1-ARITY) - ITERATION THROUGH
RECURSION
AN OVER-SIMPLIFIED COMPARISON… F U N C T I O N A L L A N G U A G E S
- NO SIDE EFFECTS DUE TO LEXICAL SCOPING
- IMMUTABLE OBJECTS - MONADIC FUNCTIONS
(1-ARITY) - ITERATION THROUGH
RECURSION
J A V A S C R I P T / C O F F E E S C R I P T
- SIDE EFFECTS IF YOU WANT THEM, UGH!
- VERY FEW IMMUTABLE OBJECTS
- N-ARITY, VARIADIC FUNCTIONS
- ITERATION TYPICALLY THROUGH CURSORS
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH
- OPEN MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH
- OPEN MOUTH - PLACE PORK
SANDWICH IN MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH - OPEN MOUTH - PLACE PORK SANDWICH
IN MOUTH - RELEASE PORK
SANDWICH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH - OPEN MOUTH - PLACE PORK SANDWICH
IN MOUTH - RELEASE PORK
SANDWICH - REMOVE HAND FROM
MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH - OPEN MOUTH - PLACE PORK SANDWICH IN
MOUTH - RELEASE PORK SANDWICH - REMOVE HAND FROM
MOUTH - CLOSE MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH - OPEN MOUTH - PLACE PORK SANDWICH IN
MOUTH - RELEASE PORK SANDWICH - REMOVE HAND FROM
MOUTH - CLOSE MOUTH - OPEN MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH - OPEN MOUTH - PLACE PORK SANDWICH IN
MOUTH - RELEASE PORK SANDWICH - REMOVE HAND FROM MOUTH - CLOSE MOUTH - OPEN MOUTH - CLOSE MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH
- OPEN MOUTH - PLACE PORK SANDWICH IN MOUTH
- RELEASE PORK SANDWICH - REMOVE HAND FROM MOUTH
- CLOSE MOUTH - OPEN MOUTH
- CLOSE MOUTH - OPEN MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH
- OPEN MOUTH - PLACE PORK SANDWICH IN MOUTH
- RELEASE PORK SANDWICH - REMOVE HAND FROM MOUTH
- CLOSE MOUTH - OPEN MOUTH
- CLOSE MOUTH - OPEN MOUTH
- CLOSE MOUTH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH
- OPEN MOUTH
- PLACE PORK SANDWICH IN MOUTH
- RELEASE PORK SANDWICH
- REMOVE HAND FROM MOUTH
- CLOSE MOUTH
- OPEN MOUTH
- CLOSE MOUTH
- OPEN MOUTH
- CLOSE MOUTH
- SWALLOW
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH
- OPEN MOUTH
- PLACE PORK SANDWICH IN MOUTH
- RELEASE PORK SANDWICH
- REMOVE HAND FROM MOUTH
- CLOSE MOUTH
- OPEN MOUTH
- CLOSE MOUTH
- OPEN MOUTH
- CLOSE MOUTH
- SWALLOW
D E C L A R A T I V E L A N G U A G E S ( W H A T )
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH
- OPEN MOUTH
- PLACE PORK SANDWICH IN MOUTH
- RELEASE PORK SANDWICH
- REMOVE HAND FROM MOUTH
- CLOSE MOUTH
- OPEN MOUTH
- CLOSE MOUTH
- OPEN MOUTH
- CLOSE MOUTH
- SWALLOW
D E C L A R A T I V E L A N G U A G E S ( W H A T )
- EAT PORK SANDWICH
A GROSSLY OVER-SIMPLIFIED COMPARISON… I M P E R A T I V E L Y L A N G U A G E S
( H O W )
- USING FREE HAND, PICK UP PORK SANDWICH
- RAISE HAND TO MOUTH
- OPEN MOUTH
- PLACE PORK SANDWICH IN MOUTH
- RELEASE PORK SANDWICH
- REMOVE HAND FROM MOUTH
- CLOSE MOUTH
- OPEN MOUTH
- CLOSE MOUTH
- OPEN MOUTH
- CLOSE MOUTH
- SWALLOW
D E C L A R A T I V E L A N G U A G E S ( W H A T )
- EAT PORK SANDWICH
(I SAID “GROSSLY”)
…WHICH LEADS US TO A FEW CAVEATS
COFFEESCRIPT IS NOT PURELY FUNCTIONAL
WE DON’T REALLY CARE
IT’S JUST JAVASCRIPT
PROBLEM 1†
IF WE LIST ALL THE NATURAL NUMBERS BELOW 10 THAT ARE MULTIPLES OF 3 OR 5, WE GET 3, 5, 6 AND 9. THE SUM OF THESE MULTIPLES IS 23.
FIND THE SUM OF ALL THE MULTIPLES OF 3 OR 5 BELOW 1000.
† HTTP://PROJECTEULER.NET/PROBLEM=1
PROBLEM 1†
IF WE LIST ALL THE NATURAL NUMBERS BELOW 10 THAT ARE MULTIPLES OF 3 OR 5, WE GET 3, 5, 6 AND 9. THE SUM OF THESE MULTIPLES IS 23.
FIND THE SUM OF ALL THE MULTIPLES OF 3 OR 5 BELOW 1000.
† HTTP://PROJECTEULER.NET/PROBLEM=1
(VOLUNTEERS?)
PROBLEM 1†
IF WE LIST ALL THE NATURAL NUMBERS BELOW 10 THAT ARE MULTIPLES OF 3 OR 5, WE GET 3, 5, 6 AND 9. THE SUM OF THESE MULTIPLES IS 23.
FIND THE SUM OF ALL THE MULTIPLES OF 3 OR 5 BELOW 1000.
† HTTP://PROJECTEULER.NET/PROBLEM=1
FUNCTIONS WE’LL USE: FILTER, REDUCE
[1, 2, 3, 4].FILTER(FUNCTION(X){
RETURN X % 2 == 0;
});
//-> [2, 4]
[‘THE’, ‘RAIN’, ‘IN’, ‘SPAIN’].FILTER(
FUNCTION(WORD){
RETURN WORD.LENGTH > 4;
}
);
//-> [‘SPAIN’]
[2, 4, 6].REDUCE(FUNCTION(SUM, X){
RETURN SUM + X;
});
//-> 12
[1, 2, 3].REDUCE(
FUNCTION(STR, X){
RETURN STR + ‘…‘ + X;
}, ‘TESTING…TESTING’
);
//-> ‘TESTING…TESTING…1…2…3’
PROBLEM 2†
THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS IS,
1^2 + 2^2 + ... + 10^2 = 385
THE SQUARE OF THE SUM OF THE FIRST TEN NATURAL NUMBERS IS,
(1 + 2 + ... + 10)^2 = 55^2 = 3025
HENCE THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS AND THE SQUARE OF THE SUM IS 3025 - 385 = 2640.
FIND THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST ONE HUNDRED NATURAL NUMBERS AND THE SQUARE OF THE SUM.
† HTTP://PROJECTEULER.NET/PROBLEM=6
PROBLEM 2†
THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS IS,
1^2 + 2^2 + ... + 10^2 = 385
THE SQUARE OF THE SUM OF THE FIRST TEN NATURAL NUMBERS IS,
(1 + 2 + ... + 10)^2 = 55^2 = 3025
HENCE THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS AND THE SQUARE OF THE SUM IS 3025 - 385 = 2640.
FIND THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST ONE HUNDRED NATURAL NUMBERS AND THE SQUARE OF THE SUM.
† HTTP://PROJECTEULER.NET/PROBLEM=6
(VOLUNTEERS?)
PROBLEM 2†
THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS IS,
1^2 + 2^2 + ... + 10^2 = 385
THE SQUARE OF THE SUM OF THE FIRST TEN NATURAL NUMBERS IS,
(1 + 2 + ... + 10)^2 = 55^2 = 3025
HENCE THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST TEN NATURAL NUMBERS AND THE SQUARE OF THE SUM IS 3025 - 385 = 2640.
FIND THE DIFFERENCE BETWEEN THE SUM OF THE SQUARES OF THE FIRST ONE HUNDRED NATURAL NUMBERS AND THE SQUARE OF THE SUM.
† HTTP://PROJECTEULER.NET/PROBLEM=6
FUNCTIONS WE’LL USE: MAP, REDUCE
[‘ALAN’, ‘BOB’, ‘FRANK’].MAP(FUNCTION(NAME){
RETURN NAME.LENGTH;
});
//-> [4, 3, 5]
[1, 2, 3].MAP(FUNCTION(X){
RETURN X * X;
});
//-> [1, 4, 9]
PROBLEM 3†
A PALINDROMIC NUMBER READS THE SAME BOTH WAYS. THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 2-DIGIT NUMBERS IS 9009 = 91 X 99.
FIND THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 3-DIGIT NUMBERS.
† HTTP://PROJECTEULER.NET/PROBLEM=4
PROBLEM 3†
A PALINDROMIC NUMBER READS THE SAME BOTH WAYS. THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 2-DIGIT NUMBERS IS 9009 = 91 X 99.
FIND THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 3-DIGIT NUMBERS.
† HTTP://PROJECTEULER.NET/PROBLEM=4
(VOLUNTEERS?)
PROBLEM 3†
A PALINDROMIC NUMBER READS THE SAME BOTH WAYS. THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 2-DIGIT NUMBERS IS 9009 = 91 X 99.
FIND THE LARGEST PALINDROME MADE FROM THE PRODUCT OF TWO 3-DIGIT NUMBERS.
† HTTP://PROJECTEULER.NET/PROBLEM=4
FUNCTIONS WE’LL USE: MAP, FILTER, REDUCE
REALISTIC PROBLEM
ASSUME WE HAVE A BUNCH OF DOCUMENTS, REPRESENTED AS STRINGS (YES, AN ANEMIC DOMAIN. I SAID IT’D BE REALISTIC).
DESIGN A DOCUMENT DATABASE THAT TAKES A COLLECTION OF DOCUMENTS AND RETURNS THE SIZE OF THE LARGEST ONE
REALISTIC PROBLEM
ASSUME WE HAVE A BUNCH OF DOCUMENTS, REPRESENTED AS STRINGS (YES, AN ANEMIC DOMAIN. I SAID IT’D BE REALISTIC).
DESIGN A DOCUMENT DATABASE THAT TAKES A COLLECTION OF DOCUMENTS AND RETURNS THE SIZE OF THE LARGEST ONE
(VOLUNTEERS?)
PAIRING CHALLENGE
A COLLATZ SEQUENCE TAKES A NUMBER. IF THAT NUMBER IS EVEN, IT’S DIVIDED BY BY 2. IF IT’S ODD, IT’S MULTIPLIED BY 3 AND ADDED TO 1. THE RESULTING
NUMBER IS THEN REAPPLIED TO THE COLLATZ FORMULA, UNTIL WE GET BACK THE NUMBER 1, AT WHICH POINT THE COLLATZ SEQUENCE TERMINATES.
FOR ALL STARTING NUMBERS BETWEEN 1 AND 100, HOW MANY COLLATZ SEQUENCES HAVE A LENGTH GREATER THAN 15?