duangsuse::Echo
718 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
https://en.wikipedia.org/wiki/Lambda_lifting 居然有 wiki…… 白找了那么久
duangsuse::Echo
https://www.pythonhunter.org/episodes/ep11
#PLT #Python #parsing 快看
http://news.sciencenet.cn/htmlnews/2020/1/434911.shtm
Lark - a modern parsing library for Python
PLY (Python Lex-Yacc)

https://en.wikipedia.org/wiki/Lambda_lifting
一句话总结:把不支持 (相对的)local function 化为 global function,可能需要把 free var 变成 parameter。 可能是被用于对 no first-class closure 低级化的。

https://stackoverflow.com/questions/1233448/no-multiline-lambda-in-python-why-not
一句话总结: apply(lambda x: y = x+1; return y, 2) 这对 Python 的 layout parsing 策略有很大破坏,而且完全可以用 local def 的
https://github.com/tiangolo/fastapi
一句话:基于 Python type hints ,支持 Go 和 NodeJS
https://github.com/vstinner/bytecode
一句话:生成和修改 Python bytecode
https://docs.python.org/3/library/ast.html

https://bgm.tv/subject/271145 一句话:大概是 BGM 来源?
红姐说《刀剑神域》是引他加入 CS 的一个契机,开始别人让他做 Hanoni 但没有引起他的兴趣
duangsuse::Echo
#PLT #Python #parsing 快看 http://news.sciencenet.cn/htmlnews/2020/1/434911.shtm Lark - a modern parsing library for Python PLY (Python Lex-Yacc) https://en.wikipedia.org/wiki/Lambda_lifting 一句话总结:把不支持 (相对的)local function 化为 global function,可能需要把 free var 变成…
“他们不需要去分析 scoping,他们不需要知道什么是 free var 什么是 local var” 🤔
其实我之前也在想这个问题

所以现在我给 ParserKt 设计了 LexicalScopedPattern ,我很想利用 ParserKt 的可扩展性完成一遍做完所有事情的操作
但目前还没实现,对 incremental parsing 我也很迷,好像需要 SortedSet (还是叫 TreeSet 好吧……)
如果有了 LexicalScopedPattern,很轻松就能创建调用栈了,很轻松就可以实现 Scheme 了,啊…… 直接一步登天实现 Lexical Scoping
This media is not supported in your browser
VIEW IN TELEGRAM
编程有一个重点是能够区分什么是“有名字的量”什么是“存储”,这不止是“能不能重新赋值”的问题。

当你能区分 valvar 并且知道啥可以 inline 啥要怎么变形才能降低 cost 的时候,才算是好的程序员。
#drawing #CG 我们来说实现 Conway's game of life 这个游戏的三个点,都是关于 cell 矩阵的。

这个游戏呢…… 请允许我这个民科再履行本业一次,我不再检查资料了。
无非就是一个 2D 矩阵,自动机。 游戏分“轮”(自动机的 cycle),每个细胞只有 生/死 二态,如果一轮中细胞 上下左右 还有四角 的邻居不超过 k 个,那它就死了,然后这么一次一次更新下去。

或许你想问那既然这样游戏是怎么开始的,当然是用户自己画这些 cell 啊,然后看它们怎么发展变迁。
是个矩阵,当然这个矩阵也是可以无限大小的,现在有最大的 game of life 模拟程序,几乎可以用来做这个 2D 世界里造物的 research 。

这个游戏目前也是有些好玩的组合的(比如说生成“枪”、循环蠕虫这些小“生命”,等等)。开始。

一、如何进行基本的矩阵表示,以及定义其上的操作
我们这里没那么牛逼,矩阵是有大小的(2D矩阵。这里说的是每一维的长度)
n=列数、m=行数

C 的多维数组不熟悉的给个例子:
int a[1][2] = {
{233, 666}
};

嗯。你没看错,不是 (a[1]) [2]a[1][2] 。符合逻辑吗?(当然你是没法做到动态取 length 的,所以许多 C 程序里都有 size_t 的参数,是封装不到位的体现,嘿嘿嘿

说两种表达方式,多维数组和裸一维数组(多维也是可以用一维存储的,基本上就是 a[(i*m)+j] ,其中 i=列号 j=行号 )。
bool map[n][m];
cout << map[1][2];

bool map[m*n];
cout << map[m*1+2];
其实说到底这里我们的需求只有给定 i, j 或者 i ,取它上下左右和四角的元素
int
l = map[i][j-1], r = map[i][j+1],
t = map[i-1][j], d = map[i+1][j];
int
lt = map[i-1][j-1], rt = map[i-1][j+1],
ld = map[i+1][j-1], rd = map[i+1][j+1];
有点冗… 耐心看完吧,就是+1-1什么的(怎么感觉可以动态构造索引…)

int
l = map[i-1], r = map[i+1],
t = map[i-m], d = map[i+m];
int
lt = map[i-m-1], rt = map[i-m+1],
ld = map[i+m-1], rd = map[i+m+1];

二、边角的 cell 在判断下一轮存活时索引越界该怎么办
呃…… 理论上有一种方法(应该说信号处理、求卷积里这个问题也很常见的)
就是分配实际 map[n+2][m+2] 的矩阵,然后只把它 1..n-1, 1..m-1 的部分作为 “世界” 映射绘制/更新,但是计算起来很麻烦,而且选择 1D 保存模拟矩阵做起来更麻烦,所以不说了。

常见的方法是添加越界检测逻辑,你可以提供一个默认值(别吐嘈性能什么的,不相信JVM难道你们还不相信GCC?):
bool m(int i, int j) {
bool
ie = i == (-1) || i == n,
je = j == (-1) || i == m;
if (ie || je) return false;
else return map[i][j];
}
如果按这个实现,没得优化,每次取都要判越界(不排除高性能要求会用更 hack 的矩阵分配方式来解决这个问题)。

三、GUI 操作置活 cell 时每次一定不能只放1个,怎么办
可以加一个 d 参数,每次按照 rectangle(x-r, y-r, d, d) 更新整个矩阵(当然是可以是按列 里每行的区间去更新的 ),但这样其实也没多大意思吧…… (生死都很规律,毕竟是个纯方块)

我不会画圆(QAQ),如果要画的话,大概就得用别人的东西先弄一个再往上 assign 了吧……

如果每次只放一个活细胞,下一轮更新该细胞往往直接挂了,整个程序等于啥都没干。
……拖延症 #life #dev #tech
刚才明明想用 Python/C++ & OpenCV 弄一个这游戏的,现在分析了一下又不感兴趣了
今天早上看到 @iseki_zero 在 QQ 空间转发的一张图(graph),我还想用 HTML/CSS/canvas bezier line 弄个 node editor,再加上 BFS/DFS/Dijkstra 求解支持…… 结果也就是分析了下 dijkstra 的大致选择/回溯流程就完了,啥代码没写。果然要咸鱼了么……

但还是真诚地为昨天因为新冠去世的 John Horton Conway 致敬。 RIP 🕯
Forwarded from Reference Error (Axton Unreachable | 503 Studying)
英国数学家 John Horton Conway 4 月 11 日因 COVID-19 去世。
他于 1970 发明了生命游戏,使得元胞自动机这一概念为更多人所知。相信很多人都自己实现过这一游戏。
#Math 草这个不规范啊,怎么可以用全角括号呢 () [] {}
Forwarded from 〄FW
弄了很久连抄别人 Ruby 的 solver 都做不到… 看来我或许要被卡死了吧…… (咸鱼) 😭

之前想了一个可以用于扒谱的程序:
首先用键盘指定音高, backspace=remove last
Enter=replay

下个流程开始计时弹奏,a=add with duration, s=new tone, backspace=time -5s; filter 出 it >= newTime 的音符全删掉(要 first, last 还是 filter ,还有单调顺序居然都卡了我好久……)

应该可以得到一个音符 (offset+duration+tone) 序列
#YouTube https://duckduckgo.com/?t=ffab&q=youtube-dl+sound+only&ia=qa&iax=qa
直接下载声音可以用 youtube-dl -F 选择格式,然后 -f 下载
ytdl -F 'https://www.youtube.com/watch?v=bH5nSGYGnzU'|sed 's/ \{2,\}/,/g'
ytdl_audio() {
awk -v max=0 '{ if($6>$max){max=$6;id=$1} } END { print $id }'
}
#linux #sysadmin #code 🤔 不行!输出格式太过分

ytdl_f() {
ytdl -F "$1"
echo -n fmt:; read fmt
ytdl -f ${fmt} "$1"
}
Forwarded from Mivik Q
Forwarded from Mivik Q
感觉你这个greedy不太对啊 @duangsuse
Forwarded from dnaugsuz
之前也有说,ParserKt 的目标并不是取代 Regex 或者做 NLP 之类非常复杂的解析器(那几乎不能算单纯的解析器了,何况 Regex groups 对副作用利用比较强,对 PKT 而言用 AlsoDo 和 StatedFeed 可以做到,但不推荐)

ParserKt 的目标是为各种相对规范的编程语言提供模式匹配 read/show (back) 的能力,也提供类似代码高亮这种常见兼容用途

我不会试着让它包容万物,它只需要保持简单的核心就好,包括现在解析一些复杂语法的东西 (NumUnit 和自动 Number 运算的类型转换、Layout 缩排语法的解析)都是作为 parserkt-ext 另作打包的,就是为了尽可能降低学习开销