JSFiddle - React, Tailwind, and code Playground

by jfroom

HTML

<script src="http://searls.github.io/jasmine-all/jasmine-all-min.js"></script>

CoffeeScript

# == RansomParser
# static class to test magazines against random notes
class RansomParser
    
    # -- canMagazineParseRansom
    # static method for comparing magazines against ransom note
    # parser assumes can safely split on space character
    @canMagazineParseRansom: (magazine, ransom) ->
        splitArr = ransom.split(" ")
        canParse = false
        content = magazine.content
        for word in splitArr
            result = @parseRansomWord word, content
            
            # update scope canParse
            canParse = result.isMatch
            
            # continually remove match word
            content = result.content
            
            # exit if parse failed
            if !canParse
                break
                
        return canParse
    
    # -- parseRansomWord
    # static helper method to find  a word in content and extract word from content
    # returns object {isMatch:boolean, content: remaining content string}
    @parseRansomWord: (word, content) ->
        out = 
            isMatch: false
            content: content
        index = content.indexOf word
        if index > -1
            out.isMatch = true
            start = index
            front = content.substring 0, index
            back = content.substring index + word.length, content.length
            out.content =  front + back
        return out

# == Magazine
# holds content as a string
class Magazine
    content: ""
    constructor: (@content) ->

# ---------------------------------------------------------
# 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....