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
duangsuse Throws
我曾经写的『倒序』(那时候我连字节序到底是什么都不知道) 我记得就这程序我当时至少写了 5 分钟,当然现在我优化了自己对 bound 模型的理解力,所以会快很多(不过写错了,Kotlin 也骗我,我以为 a..b 是 (a, b] 区间的意思……Kotlin 变成全开区间了) def rev(hex); l = hex.length; "#{hex[0..l-(2*3 +1)]}#{hex[l-(2*3 +1)..l-(2*2 +1)]}#{hex[l-(2*2 +1)..l-(2*1 +1)]}#{hex[l…
c=b; b=a; a=c 是一个『swap』程序里常用的逻辑
为什么 不这么看呢(当然和原来的不一样啦) 🤔
c « b « a « c « ...
也就是递归模式(迫真
I = c « b « a « I
突然想到 Fibonacci 序列
a b c
1 1 2
1 2 3
……
b=1, c=1
loop { a=b, b=c; c=a+b; yield c }

a b c
- 1 1
1 1 2
1 2 3
……

有什么区别呢?其实第一个是 c = b; b = a, a = c, 根本不是什么递归,成环了(而 c 也就只能算是 附带给 b 的第二存储)
第二个是 b < a < f c < … 真正的可递归(显然 b,a 依赖上一个 c,c 依赖 b,a)

既然太抽象没啥用,其实 Kotlin 里用 sequence 也很容易写的…… 我不会

def fib():
b, c = 1, 1
while True:
a = b; b = c
c = a+b
yield c
🤔 我还想写一个 Nat 包用于支持 Unsigned 类型的,Kotlin 官方逼死同人啊,看来只能可怜 Java 用了…
Kotlin 现在真的是什么都有啊… 都不缺
Forwarded from dnaugsuz
ring.kt
1.6 KB
Forwarded from dnaugsuz
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from dnaugsuz
Ring.xcf
102.9 KB
源文件,动画是我一帧一帧拿 VisualGimp 工具肝的
Ring.kt
2.3 KB
#Kotlin #code Ring buffer
Forwarded from dnaugsuz
加上了 mark/reset 就很迷,但是为了保护之前还没出队的数据的(markDistance 对 avaliable 从数值大小上看和 free 是一样的,可是用 markDistance 会导致 add 不能使用(锁住了 freeSpaces),加 free 就不会)
如果完全不加注释还真的是有点莫名其妙
一般的话加个『可视化』文本注释会比较好吧
Forwarded from dnaugsuz
再写了一遍,花了 8 分钟居然一遍编译过,开心(虽然还是看不清楚……)
Forwarded from dnaugsuz
🤔 看起来 mark 以后已经读取的数据还是不能遍历第二次,如果想的话,就要把 distance 减去 markerPosition,或者不看 free;基本理清了
duangsuse Throws
我曾经写的『倒序』(那时候我连字节序到底是什么都不知道) 我记得就这程序我当时至少写了 5 分钟,当然现在我优化了自己对 bound 模型的理解力,所以会快很多(不过写错了,Kotlin 也骗我,我以为 a..b 是 (a, b] 区间的意思……Kotlin 变成全开区间了) def rev(hex); l = hex.length; "#{hex[0..l-(2*3 +1)]}#{hex[l-(2*3 +1)..l-(2*2 +1)]}#{hex[l-(2*2 +1)..l-(2*1 +1)]}#{hex[l…
template <typename T>
void reverse(T *ptr, size_t len) {
size_t lastIdx = len -1;
size_t end = (len / 2) +1; // 其实这个 +1 可以去掉,因为即便输入是单数个,最中间的一个也不存在顺序之说,无须逆序
for (unsigned i = 0; i < end; ++i)
{ std::swap(ptr[i], ptr[lastIdx-i]); }
}
#Cplusplus
此外,有些程序员还通过 (a + (a-1)) / b 的方式来 div_ceil, 此时只要有余数,结果自动加一
duangsuse::Echo
Ring.kt
🤔 #Duava 打算加入迫真豪华套餐
#China 梯子国庆活动
Forwarded from null
[CloudHammer 国庆活动公告]

庆祝中华人民共和国成立 70 周年,CloudHammer 特推出全站 7 折优惠码:国庆70,7 天时间,全场 7 折,迎 70 华诞!

https://console.cloudhammer.site/user/shop
Forwarded from dnaugsuz
function os.execute 在 LuaJIT 2.1 和 Lua 5.3 里的行为好像是不一样的

okay, status, code = os.execute('exit 1')

Lua 官方解释器的实现在这里注册在这里),Lua 的 OS library(luaL_)
这里可以看到如果输入不为 nil 之类,只要有 shell,就会执行并且返回 luaL_execresult
辅助的 luaL_execresult这里
这里可以看到
+ 默认 status 是 "exit"
+ 如果 system libc API 调用失败,则自动 fmt strerror
+ 如果编译目标是 POSIX 系统,会自动区分子进程 exit 和 signal received
what = singaled(stat)? signo(stat) : exited(stat)? exitcode(stat) : "exit"
push(ok? true:luaFail) push(what) push(stat)

Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
> os.execute('sleep 5')
^Cnil signal 2


LuaJIT 的返回类型则是 (number | boolean),这么做是为了方便,因为 Lua 里 falsey 是 nil, false,其他都是 truthy value

okay, _, code = os.execute('systemctl start prc90')
if not okay then print(code)…… end

如果和官方一样用 okay 而不是 hasError,在 truthy 和 falsey 的层面(直接用 if 来判断)就无法区分两种 case 了,就必须得这么写

res = os.execute('systemctl stop winnie')
if type(res) == 'boolean' and res then -- okay
print('Okay, winnie is stopped 🐻')
else if type(res) == 'number' then
print('failed: ' .. res)
end

不然的话直接用 if not res 就可以处理错误退出码
不时发一些容易被忽视的技(dao) 术(de) 问题 #statement
用 Telegraph 怎么样,会不会被枪毙
Forwarded from duangsuse Throws
#INFO #News #tencent #China duangsuse 的(绝望)QQ 空间现在是开放的
https://user.qzone.qq.com/3323659619
但愿不会被枪毙
#Kotlin #code 我真的不想再去考虑 markReset 的 Ring 是怎么保证『不重复』这件事了,无用的努力…… 现在已经够好了
Ring.kt
3 KB
#Kotlin #code #Duava 全家桶
Ring.kt
3.3 KB
#Kotlin #code #Duava 新版本的 Ring,支持 Viewport: List<E>
Ring.kt
3.3 KB
又做了一点修改(其实就是改了个名字… Kotlin 的 a..b 还真是 有点…… 不过我自己都没注意到 avaliable 的结果其实是包含了 position 的部分,本身就属于瞎猫 x 死耗子,面向 REPL 编程