半桶水 发布的文章

昨天是新加坡的公共假期排灯节

排灯节,印度教中称为“Diwali”或“Deepavali”,是印度和南亚许多国家庆祝的重大节日,也是全球印度教徒和信徒的重要节庆。排灯节象征着光明战胜黑暗、善良战胜邪恶,通常为期五天。

下午带着家人去China Town转了转,公共假期,就是人多,找个停车位都找了很久。

排灯节有个很大的寺叫佛牙寺,之前一直都是路过,所以这次特地的去看了看。

里面有5层,每一层都有一些佛教相关的主题。

9951730431309_.pic.jpg
9961730431312_.pic.jpg
9971730431315_.pic.jpg

每到周未

小朋友比较开心的几件事:

1、早上可以睡到8am (我也开心,平时早上都要6.30am起床,然后送他们去学校)
2、周日下午一般他们可以去图书馆看书。
9321730072500_.pic.jpg
9331730072502_.pic.jpg
9341730072503_.pic.jpg
9351730072505_.pic.jpg
9361730072506_.pic.jpg

不过这次他们没有借满16本书。

对于我来讲,这周未刷了很多的推特,很多人都在讲副业,都要讲怎么出海赚钱,多多少少有一点新的想法,但回过头来,还是感觉不用想太多,做好本职的事情之余,能持续的做一件事情就行了。

起一个新站蛮有意思了,几十年没有当站长的感觉了。

1、9月初买了新域名
2、大概花了三四天开发了一个网站
3、大概花了三四天做google的SEO
4、大概一周之后,google收录过万
5、一个月后,目前google来的流量在日70~100UV左右

期待能尽快做到日1000UV

加油,要做事情,什么时候都不过时。

今天刷推,看到了一个推里有介绍几个古早程序员的blog
分别是:
https://www.xiaohui.com/ 程序员小灰
https://www.liuhu.net/ 程序员刘虎
可以看到2000年到2010年之间的互联网的痕迹
打开了一些我以前的思绪

之前我也有个朋友也叫小灰,也是一位很优秀的程序员,在2003~2007年之前,我们之前的联系还是蛮多的

但后来由于时间的变化,沟通工具的变化,个人境遇的变化,渐渐失去的联系

还有很多QQ时代的好友,也是如此

现在偶尔登录QQ,还能看到一个一个曾经聊的火热的网友们

这就是时间的规律,但这也是一代人有一代人的记忆

计算器的Golang实现, 支持 +-*/,并会判断表达式是否合法

package code

import (
"strconv"
"unicode"
)

type Calculator struct {
origin  string
s       string
left    int
signMap map[byte]bool
}

func NewCalculator(s string) Calculator {
signMap := map[byte]bool{
    '+': true,
    '-': true,
    '*': true,
    '/': true,
    '(': true,
    ')': true,
    ' ': true,
}
return Calculator{
    origin:  s,
    s:       s,
    left:    0,
    signMap: signMap,
}
}

func (cal *Calculator) Execuate() int {
stack := NewStack()
num := 0
numFlag := false
emptyFlag := false
sign := '+'
//往前遍历字符串
for len(cal.s) > 0 {
    c := cal.s[0]
    cal.s = cal.s[1:]
    if c == ' ' {
        emptyFlag = true
        continue
    }
    //判断是不是数字,考虑到连续累加
    if unicode.IsDigit(rune(c)) {
        if numFlag {
            //数字之间不能有空格
            if emptyFlag {
                panic(cal.origin + ": express error, empty can not between in numbers")
            }
        } else {
            numFlag = true
        }
        num = num*10 + (int(c) - int('0'))
    } else {
        numFlag = false
        if _, ok := cal.signMap[c]; !ok {
            panic(cal.origin + ": express error, invaild sign:" + string(c))
        }
    }
    emptyFlag = false
    //如果是(,递归处理,直到 碰到)弹出,结果返回
    if c == '(' {
        cal.left++
        num = cal.Execuate()
    }
    //是操作符,或者到了字符串最后,进行sush操作
    if len(cal.s) == 0 || !unicode.IsDigit(rune(c)) {
        switch sign {
        case '+': //直接入stack
            stack.Push(num)
        case '-': //变成负数,再入stack
            num = 0 - num
            stack.Push(num)
        case '*': //取出statck的top元素并弹出,相乘,再入stack
            v, _ := stack.Peek()
            stack.Pop()
            stack.Push(num * v)
        case '/': //取出statck的top元素并弹出,相乘,再入stack
            v, _ := stack.Peek()
            stack.Pop()
            stack.Push(v / num)
        }

        sign = rune(c)
        num = 0
        numFlag = false
    }

    if c == ')' {
        cal.left--
        if cal.left < 0 {
            panic(cal.origin + ": express error, more )")
        }
        break
    }
}

if len(cal.s) == 0 && cal.left > 0 {
    panic(cal.origin + ":" + cal.s + ": express error, more (: " + strconv.Itoa(cal.left))
}
//statck求和,返回
return stack.Sum()
}