Skip to content

Instantly share code, notes, and snippets.

View jooyunghan's full-sized avatar

Jooyung Han jooyunghan

View GitHub Profile
@jooyunghan
jooyunghan / confluence.js
Created October 23, 2015 04:52
Get last-minute changes from Confluece
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")';
@jooyunghan
jooyunghan / haskell_read.md
Last active February 8, 2023 04:09
Haskell 간단 파싱 (Read)

문제

해커랭크 사이트의 문제 중 하나 The Tree of Life 를 풀다가 나온 입력 처리입니다.

위의 문제는 이진 트리가 LISP의 S-expression 형식으로 입력됩니다. 이진 트리의 각 노드 값은 . 이나 X 이고, 브랜치는 괄호로 묶어 왼쪽/자신/오른쪽 순으로 표시됩니다. 예를 들어(X . (. X .))는 아래와 같은 트리를 나타냅니다.

@jooyunghan
jooyunghan / parsec.hs
Created October 26, 2015 07:42
Haskell 간단 파싱 예제 (Text.Parsec)
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
@jooyunghan
jooyunghan / imperative_quicksort.hs
Created October 28, 2015 22:58
Haskell imperative
{-# 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
@jooyunghan
jooyunghan / throttle-first.clj
Last active November 4, 2015 15:10
Throttle-first operator which ignores the following events with same key within `duration`
(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)
@jooyunghan
jooyunghan / README.md
Last active November 19, 2015 21:20
Sum the even values in Fibonacci series which are less than 4000000
> npm install babel-preset-es2015
> npm install babel-polyfill
> babel-node --presets "es2015" evenfib.js
4613732
@jooyunghan
jooyunghan / async.js
Created December 6, 2015 23:37
Async Exercises
/*
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.
@jooyunghan
jooyunghan / treeparsing.js
Created December 15, 2015 08:55
Tree Parsing with Peg.js
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);
@jooyunghan
jooyunghan / ant.js
Created December 15, 2015 18:20
Basic lazy stream in JS
/* base functions */
function apply(f,args) {
return f.apply(undefined, args);
}
var slice = Function.prototype.call.bind(Array.prototype.slice);
/* Stream */
@jooyunghan
jooyunghan / lazy.ts
Last active December 20, 2015 17:54
lazy in 'even' style.
// 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> {