leetcode的bash題目們

動機 onlinejudge居然有bash的題目!! 這麼有趣的東西當然是解爆阿!! 抱怨 有的時候會出現 rbash: ./prog.sh: Permission denied 這個時候就是只能調整輸入像用pipe等等 題目 目前只有4題 192 193 194 195 192 cat words.txt | tr ' ' '\n' | sed '/^[[:space:]]*$/d' | sort | uniq -c | nawk '{print $1" "$2}' | sort -r -n -k 1 | nawk '{print $2" "$1}' bash做為一個奇怪的PL bash可以想成只有string的PL 那要怎麼表現array? 用delimiter區分,常見的是 space newline comma etc… 第一步: 多個array合成一條array 先把空白換成斷行 把多的斷行吃掉 故最後會變成 1 2 3 => 1 2 3 cat words.txt | tr ' ' '\n' | sed '/^[[:space:]]*$/d' 第二步: 計數 先排好,再計算重複的單字...

July 11, 2020 · 2 min · zhengcf

git筆記

動機 git的指令很多,希望能用一種統一的觀點來看 commit as Node (folder) -> (stage :: node) -> (repo :: linked list) | \ / (stash :: pool of nodes) Linked List new node & use existing node git add 把folder中的file,加到node中 git stash 把還沒加到repo(linked list)的node放到node的暫存區 edit the last node git amend 修改最後一個node(HEAD) iterate nodes git filter-branch list.map ... git rebase newlist = list.each ...; list.append(newlist) 可以edit, squash(融合), drop, pick(保留) ptr to node git tag 單純的ptr git branch 替node加上新的ptr,只是這個ptr會在他被append一個新node時,把該ptr往後移動 所以可以把這個ptr當成"最新"或是"現在" append node(s) git commit 把目前的node加到目前HEAD的後面 就是list....

June 15, 2020 · 1 min · zhengcf

設定vscode的c++ format

動機 工作的code的風格與自己平常打的code的風格差很多!! 如果有可以自動調的會很方便。 同時vscode的c/c++外掛,有ctags與cscope的功能,不用另外裝, 所以變成研究如何在vscode上自動調整format 作法 vscode自動調整format 把 setting 中的 Editor: Format On Paste Editor: Format On Save Editor: Format On Type 勾起來 如果覺得不好找,可以在setting上方的搜尋欄打上 format 去找 tab與空白混用 把 Editor: Detect Indentation 與 Editor: Insert Spaces 關掉 設定 clang-format-fallback 設定clang-format-fallback 把 { BasedOnStyle: WebKit, IndentWidth: 4, TabWidth: 8, ColumnLimit: 80, AlignAfterOpenBracket: Align, AlignConsecutiveMacros: true, AlignTrailingComments: true, UseTab: ForContinuationAndIndentation, BraceWrapping: { AfterFunction: false }, SpaceBeforeParens: ControlStatements } 貼到C_Cpp: Clang_format_fallback Style去,用成一行 一些詭異的地方 TabSize & TabWidth 顯示tab時會依照TabSize的大小,所以如果要顯示得不會刺痛眼睛 要去改Editor:TabSize成8...

June 13, 2020 · 1 min · zhengcf

The Little MLer 筆記

ch0: 執行環境 想用wsl來跑sml的話,poly/ml是不錯的選項 ch1: 定義type datatype num = ZERO | ONE_MORE of num datatype ‘a Slist = NIL of ‘a | SCONS of ‘a Slist ch2: 寫function datatype Abc = A | B of Abc | C of Abc fun only_B(A) = true | only_B(B(x)) = only_B(x) | only_B(C(x)) = false (only_B : Abc -> bool) datatype ‘a Xyz = X of ‘a | Y of ‘a Xyz | Z of ‘a Xyz fun is_xy(X(x)) = true | is_xy(Y(x)) = is_xy(x) | is_xy(Z(x)) = false (is_xy : ‘a Xyz -> bool) ch3: 在list上遞迴 fun rem_B(A) = A | rem_B(B(x)) = rem_B(x) | rem_B(C(x)) = C(rem_B(x)) fun C_in_fron_of_B(A) = A | C_in_fron_of_B(B(x)) = C(B(C_in_fron_of_B(x))) | C_in_fron_of_B(C(x)) = C(C_in_fron_of_B(x)) fun subst_B_C(x) = rem_B(C_in_fron_of_B(x)) (* OR *) fun subst_B_C(A) = A | subst_B_C(B(x)) = C(subst_B_C(x)) | subst_B_C(C(x)) = C(subst_B_C(x)) (* 都是走訪同一list故可以用同一種走訪,把兩個式子結合起來(map fusion) *) ch4: tuple & 多參數function (A,X,A) :: (Abc * Xyz * Abc) datatype Abc = A | B | C fun add_a(A) = (A,A) | add_a(B) = (B,A) | add_a = (C,A) (add_a : Abc -> (Abc * Abc)) 可以利用type variable來打少一點字...

May 24, 2020 · 6 min · zhengcf

little typer 後篇(8~16) 整理與筆記

來證明啦 ch8 & ch9 & ch10 & ch11 現在說用type證明,但實際上怎麼做? 在claim寫下想證的東西,在define證出來 incr & + (claim incr (-> Nat Nat)) (define incr (λ (n) (iter-Nat n 1 (+ 1)))) (claim + (-> Nat Nat Nat)) (define + (λ (a b) (iter-Nat a b (λ (ret) (add1 ret))))) +1=add1 證對於任何整數,add1等於+1 (claim +1=add1 (Pi ((n Nat)) (= Nat (+ 1 n) (add1 n)))) 所以我們需要一個value的type是(= Nat (+ 1 n) (add1 n))) 先把1帶入+中,會發現根本就是(add1 n) 也就是兩邊都一樣,same!! (define +1=add1 (λ (n) (same (+ 1 n)))) incr=add1 同樣的來試試incr=add1...

May 16, 2020 · 10 min · zhengcf

little typer 前篇(1~7) 整理與筆記

介紹Pie怎麼用 ch1 & ch2 & ch3 所有東西都是expression 有人斷言expression有某種屬性或與其他expression有共通的特質是judgment Sentences get their meaning from those who understand them. The sentences capture thoughts that we have, and thoughts are more important than the words we use to express them. 描述某一群expression的expression是Type 當type constructor在頂部就是type (Pair Nat Nat) constructor在頂部就是Value constructor會產生某個type的實體(像add1會產生Nat的實體,8也是Nat的實體) eliminator會分解value取出構成value的資訊 當某一expression無法再被改寫時叫normal form 改寫expression叫evaluation expression因為有變數而無法繼續改寫叫neutral 只要長的一樣就是same (不是等於,之後會用same去證等於) total function對任何一個值都能產生對應的值 沒有遞迴 因為每個expression都一定要收斂 所以有其他東西來做類似的效果 evaluation & value 在dependent type中,evaluation得到的是expression 在一般PL(像lisp)中,evaluation得到的是value 在一般PL中,expression與value是不同類別的東西 ch4 & ch5 claim & define 在pie中要產生一個變數要先claim再define...

May 16, 2020 · 2 min · zhengcf

在不同context下的sync與async(與block&non-block比較)

caller: block & nonblock caller會等 => block caller不等 => nonblock (所以要自己時不是去確認好了沒,或是,callee通知) return val: (general’s) sync & async 調用後會拿到 sync: 我們想要的資料 async: 類似raincheck的東西,也許馬上,也許要一段時間後,才會拿到我們想要的資料 要不要自己把copy到userspace的io做完: (NP’s) sync & async 前面4種都是最後要自己call system call拉資料,所以是sync,最後user與kernel的任務會同時完成 async io是user連什麼時候完成都不知道,等到kernel把資料copy好就會call callback AJAX var httpRequest = httpRequest = new XMLHttpRequest(); httpRequest.onreadystatechange = function() { // 等狀態變成請求完成狀態 if (httpRequest.readyState === 4 && httpRequest.status == 200) { httpRequest.responseText } alert(`ERROR - server status code: ${httpRequest.status} xdr status: ${httpRequest.readyState}`); }; httpRequest.open('GET', '/api/get_something'); httpRequest....

May 4, 2020 · 2 min · zhengcf

有趣與有用的es6特性

下面是個人比較喜歡的es6的新特性 終於來了!! Template Literals `Fifteen is ${a + b} and not ${2 * a + b}.` Arrow Functions function Person() { this.age = 0; // var self = this; // 定義該 Arrow Functions 時的環境,是在 Person 物件中 setInterval(() => { // 所以 this 會正確指向 Person 物件 this.age++; //self.age++ }, 1000); } var p = new Person(); class syntax sugar class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' makes a noise....

May 4, 2020 · 2 min · zhengcf

monad推導,主要是cont monad

把參數藏起來 把acc藏起來看看 (define (sum l acc) (if (null? l) acc (sum (cdr l) (+ acc (car l))))) delay 要藏的變數 (define (sum1 l) (lambda (acc) (if (null? l) acc ((sum2 (cdr l)) (+ (car l) acc))))) 把lambda推到if的兩項 (define (sum2 l) (if (null? l) (lambda (acc) acc) (lambda (acc) ((sum2 (cdr l)) (+ (car l) acc))))) 抽出遞迴的part (define (sum3 l) (if (null? l) (lambda (acc) acc) (let ((m (sum3 (cdr l)))) (lambda (acc) (m (+ (car l) acc)))))) 把運算抽出來,並把delay的變數塞回去 (define (sum4....

May 4, 2020 · 3 min · zhengcf

JS一些概念的整理

hoisting console.log(a) var a = 10 會變成類似(會說是類似,因為底層不一定是這樣做) var a console.log(a) a = 10 可以把他 var a = '1' // A... var b = 2 // B ... var c 想像成這樣 function whatever(a,b,c) { // A ... // B ... }('1',1,undefined); 如果有let var a = '1' function x() { // a ... let a = 2 } 先想像成 function whatever(a) { function x() { // a ... let a = 2 // b ....

April 21, 2020 · 2 min · zhengcf