【程序媛晒83行代码】人生如码,用代码构造极其简单人生模型的清宵小姐姐...

2024-02-08 14:30

本文主要是介绍【程序媛晒83行代码】人生如码,用代码构造极其简单人生模型的清宵小姐姐...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在中国程序媛中,他们的代码有什么样的魅力,Aone联合云栖社区、饿了么、钉钉、阿里云、天猫、口碑发起首届程序媛比码活动——不秀大长腿,秀高智商;不秀美图照,秀代码图,参与晒码互动游戏赢“83行代码”T恤!

我们来说说这群女工程师的第83行代码及代码背后的故事:

清宵:人生如码

我是阿里云函数计算团队技术专家清宵,用动图撩一下大家吧~~大家好!
7ddfd0c7b3f0cbf20d556d0bb11d830be77a55aa
我的第83行代码来自这个简单的Life模型,非项目非社区贡献,纯业余时间自娱自乐。
看了《药神》之后,对人生的感悟加深。回来没有写什么观后感,却是随便写了一段代码,构造一个极其简单的人生模型,算作总结思考了。
人生如码,以梦为马。珍惜所爱,精彩过好每一天!

package mainimport ("fmt""math/rand""sync""time"
)var (r = rand.New(rand.NewSource(time.Now().Unix()))disasterSignal = make(chan string)accidentSignal = make(chan string)diseaseSignal  = make(chan string)
)// Element : abstract factor which life consisted by
type Element interface {Improve()Depress()Stable()Enable() boolBeAbleHandle(event string) bool
}type Activity interface {IsSuitable(life *Life) boolDo(life *Life)Interrupted()
}type Life struct {Sex stringAge time.DurationHealth       ElementKnowledge    ElementAbility      ElementRelationShip ElementWealth       ElementOtherElement ElementWork        ActivityStudy       ActivityExercise    ActivityEntertain   ActivityRest        ActivityOtherActive ActivityisDoings []ActivityvitalitySignal chan struct{}NaturalDeath   chan struct{}
}func (f *Life) Join(oppositeSex *Life, love, family Element) (*Life, error) {if !love.Enable() || !family.Enable() || f.Sex == oppositeSex.Sex {return nil, fmt.Errorf("Sorry, no boby should be borned!")}boby := &Life{Sex:            []string{"male", "female"}[r.Intn(2)],Age:            0,isDoings:       []Activity{},NaturalDeath:   make(chan struct{}),vitalitySignal: make(chan struct{}),}return boby, nil
}func (f *Life) Run() {go ExternalEndanger(f)// time elapses day by dayfor {startTime := time.Now().UTC()wg := &sync.WaitGroup{}for _, active := range []Activity{f.Study, f.Work, f.Entertain, f.Exercise, f.Rest, f.OtherActive} {if f.SuitableFor(active) {wg.Add(1)go func(activity Activity) {defer wg.Wait()activity.Do(f)}(active)}}select {case <-f.NaturalDeath:f.Close()fmt.Println("Life is short, make it colourful and cherish the love around all!")returncase <-f.vitalitySignal:fmt.Println("记得买保险!")returncase <-time.After(24*time.Hour - time.Now().UTC().Sub(startTime)):fmt.Println("One day went by...")}//wg.Wait()f.Age += 24 * time.Hour}fmt.Println("Goodbye, life!")
}func (f *Life) Somehow() {// happened something to effect one to reach some life stage
}func (f *Life) SuitableFor(active Activity) bool {return active.IsSuitable(f)
}func (f *Life) Survive(event string) bool {for _, e := range []Element{f.Health, f.Knowledge, f.Ability, f.RelationShip, f.Wealth, f.OtherElement} {if !e.BeAbleHandle(event) {return false}}return true
}func (f *Life) Close() {for _, doing := range f.isDoings {doing.Interrupted()}close(f.vitalitySignal)
}var female = LifeFromSomeWhere("female")
var male = LifeFromSomeWhere("male")func ExternalEndanger(f *Life) {for {event := ""select {case event = <-diseaseSignal:case event = <-disasterSignal:case event = <-accidentSignal:}if !f.Survive(event) {f.Close()return}}
}func LifeFromSomeWhere(sex string) *Life {life := &Life{Sex: sex}life.Somehow()return life
}func main() {// I don't know the question of "鸡生蛋 or 蛋生鸡"...newLife, err := female.Join(male, ElementImp{Type: "love"}, ElementImp{Type: "family"})if err != nil {newLife.Run()}
}

与清宵小姐姐互动,为她打call——>点击进入清宵晒码

这篇关于【程序媛晒83行代码】人生如码,用代码构造极其简单人生模型的清宵小姐姐...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/691308

相关文章

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是