排灯节
昨天是新加坡的公共假期排灯节
排灯节,印度教中称为“Diwali”或“Deepavali”,是印度和南亚许多国家庆祝的重大节日,也是全球印度教徒和信徒的重要节庆。排灯节象征着光明战胜黑暗、善良战胜邪恶,通常为期五天。
下午带着家人去China Town转了转,公共假期,就是人多,找个停车位都找了很久。
排灯节有个很大的寺叫佛牙寺,之前一直都是路过,所以这次特地的去看了看。
里面有5层,每一层都有一些佛教相关的主题。
昨天是新加坡的公共假期排灯节
排灯节,印度教中称为“Diwali”或“Deepavali”,是印度和南亚许多国家庆祝的重大节日,也是全球印度教徒和信徒的重要节庆。排灯节象征着光明战胜黑暗、善良战胜邪恶,通常为期五天。
下午带着家人去China Town转了转,公共假期,就是人多,找个停车位都找了很久。
排灯节有个很大的寺叫佛牙寺,之前一直都是路过,所以这次特地的去看了看。
里面有5层,每一层都有一些佛教相关的主题。
每到周未
小朋友比较开心的几件事:
1、早上可以睡到8am (我也开心,平时早上都要6.30am起床,然后送他们去学校)
2、周日下午一般他们可以去图书馆看书。
不过这次他们没有借满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()
}