JSFiddle - React, Tailwind, and code Playground
by jfroom
HTML
<script src="http://searls.github.io/jasmine-all/jasmine-all-min.js"></script>
CoffeeScript
class RansomParser
@canMagazineParseRansom: (magStr, ransomStr) ->
magArr = magStr.split " "
ransomArr = ransomStr.split " "
dictionary = {}
# populate dictionary with word:count pairings
for word in magArr
dictionary[word] ?= 0
dictionary[word]++
# pop ransom words, exit if undefined, or count less than 0
for word in ransomArr
if !dictionary[word] || dictionary[word] <= 0
return false
else
dictionary[word]--
return true
# ---------------------------------------------------------
# TESTS
# ---------------------------------------------------------
testStr = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ut dolor elementum quam condimentum dictum. Nulla consectetur pharetra tellus. Quisque volutpat a dolor at tempus. Donec nec consectetur enim. Aenean fringilla, mauris eu aliquet molestie, lectus diam fringilla augue, consequat fermentum magna elit sit amet ligula. Praesent et venenatis tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit."
describe "Test RansomParser.canMagazineParseRansom", () ->
it "expects 'Lorem' to match", () ->
expect(RansomParser.canMagazineParseRansom testStr, "Lorem").toBe(true)
it "expects 'Lorem Lorem' to match", () ->
expect(RansomParser.canMagazineParseRansom testStr, "Lorem Lorem").toBe(true)
it "expects 'Lorem Lorem Lorem' to not match", () ->
expect(RansomParser.canMagazineParseRansom testStr, "Lorem Lorem Lorem Lorem").toBe(false)
it "expects 'elit sit amet' to match", () ->
expect(RansomParser.canMagazineParseRansom testStr, "elit sit amet").toBe(true)
it "expects 'food' to not match", () ->
expect(RansomParser.canMagazineParseRansom testStr, "food").toBe(false)