해커랭크 사이트의 문제 중 하나 The Tree of Life 를 풀다가 나온 입력 처리입니다.
위의 문제는 이진 트리가 LISP의 S-expression 형식으로 입력됩니다.
이진 트리의 각 노드 값은 . 이나 X 이고,
브랜치는 괄호로 묶어 왼쪽/자신/오른쪽 순으로 표시됩니다.
예를 들어(X . (. X .))는 아래와 같은 트리를 나타냅니다.
| class Confluence { | |
| constructor(base, username, password) { | |
| this.base = base; | |
| this.username = username; | |
| this.password = password; | |
| } | |
| async getChanges() { | |
| let results = []; | |
| let url = this.base + '/rest/api/content/search?cql=lastModified>now("-1m")'; | 
해커랭크 사이트의 문제 중 하나 The Tree of Life 를 풀다가 나온 입력 처리입니다.
위의 문제는 이진 트리가 LISP의 S-expression 형식으로 입력됩니다.
이진 트리의 각 노드 값은 . 이나 X 이고,
브랜치는 괄호로 묶어 왼쪽/자신/오른쪽 순으로 표시됩니다.
예를 들어(X . (. X .))는 아래와 같은 트리를 나타냅니다.
| import Text.Parsec (parse, char, (<|>)) | |
| import Text.Parsec.Char (spaces) | |
| import Text.Parsec.Language (haskell) | |
| import Text.Parsec.String (Parser) | |
| import Text.Parsec.Token (makeTokenParser, integer, parens, whiteSpace, identifier) | |
| data Tree a = Leaf a | Branch (Tree a) a (Tree a) deriving (Show) | |
| int :: Parser Int | |
| int = integer haskell >>= return.fromInteger | 
| {-# LANGUAGE FlexibleContexts #-} | |
| import Data.Array.IO | |
| import Data.IORef | |
| import Control.Monad (when, forM_) | |
| import Control.Applicative ((<$>)) | |
| readInt :: String -> Int | |
| readInt = read | |
| quicksort (l,r) arr = when (l < r) $ do | 
| (defn throttle-first [duration keyF] | |
| (operator* | |
| (fn [s] | |
| (let [cache (atom #{})] | |
| (subscriber | |
| s | |
| (fn [s v] | |
| (let [k (keyF v)] | |
| (when-not (@cache k) | |
| (on-next s v) | 
> npm install babel-preset-es2015
> npm install babel-polyfill
> babel-node --presets "es2015" evenfib.js
4613732
| /* | |
| Using following two API functions | |
| - deletePage(pageId, callback) : delete a page. if the page has sub-pages then it fails. | |
| - getChildPages(pageId, callback) : get a list of ids of direct child pages. | |
| write deleteTree(pageId, callback) function which | |
| deletes the pages of pageId and sub-pages. | 
| var PEG = require('pegjs'); | |
| var parser = PEG.buildParser(` | |
| tree = fork? | |
| fork = name:[a-z] c:children? { return Object.assign({name}, c); } | |
| children = '(' left:tree ',' right:tree ')' {return {left,right}} | |
| `); | |
| var tree = parser.parse('a(b,c(,d))'); | |
| console.log(tree); | 
| /* base functions */ | |
| function apply(f,args) { | |
| return f.apply(undefined, args); | |
| } | |
| var slice = Function.prototype.call.bind(Array.prototype.slice); | |
| /* Stream */ | 
| // http://homepages.inf.ed.ac.uk/wadler/topics/language-design.html#lazyinstrict | |
| class Cons<A, B> { | |
| head: A; | |
| tail: B; | |
| constructor(head: A, tail: B) { | |
| this.head = head; | |
| this.tail = tail; | |
| } | |
| } | |
| function cons<A, B>(head: A, tail: B): Cons<A, B> { |