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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
RingBuffer.kt
3.8 KB
#Kotlin 我又写了一遍,不太好看,之前想的时候觉得是很清楚的,坐在屏幕前的时候就麻烦了
>>> listOf(1,2,3).zipWith(listOf(4,5,6)) { a,b->println("$a $b") }.take(2)
1 4
2 5
3 6
[kotlin.Unit, kotlin.Unit]
好像正常,为什么刚才测试的时候 addMany 好像不正确?
RingBuffer.kt
3.5 KB
我修改了一下代码,比如移除了不适合的类型抽象、改进了 until (新模型),现在看起来代码更好看了
用了常见的『Adapter』,解决了子类的麻烦,可是也感觉这有得有失
>>> r.addAll(listOf(1,2,3))
>>> r.viewport()
[1, 2, 3]
>>> r.pop()
1
>>> r.add(2)
>>> r.viewport()
[2, 3, 2]
>>> r
Ring[[2, 2, 3]; ^1, _1, 3]
好。
尽管我依然无法很好的在脑中『可视化』一个环,可是,我也能写出比较好看的代码了
RingBuffer.kt
4 KB
diff.kra
138.3 KB
RingBuffer.kt
4 KB
#Kotlin 『用四种方法写 RingBuffer……』
DiffAlgorithm.kt
5.6 KB
最终版本的 diff 算法,到底是没有什么…… 都是实现细节
Forwarded from dnaugsuz
就是 diff 算法啦,规定输出是一个序列

sealed class Change<out T>
data class Same(part: List<T>)
data class Inserted(added: List<T>)
data class Deleted(removed: List<T>)

像是这样,[] 里面的东西代表 Inserted, () 里面的东西代表 Deleted,主语是第一个输入序列
diff 操作符不考虑其对称性等性质,只作为子程序看待

举例:

diff("abc", "aebc").toString() // a [e] bc
diff("abc", "ac").toString() // a (b) c
diff("abc", "aec").toString() // a (b) [e] c
diff("abcd", "a0c1").toString() // a (b) [0] c (d) [1]

这样。
Forwarded from dnaugsuz
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from dnaugsuz
>>> Diff.diff("Hello beautiful world".split(' '), "Goodbye cruel world".split(' '))
(Hello,beautiful) [Goodbye,cruel] world
>>> Diff.diff("Good morning".split(' '), "Good bye".split(' '))
Good (morning) [bye]
>>> Diff.diff("a b c".split(' '), "a b c".split(' '))
a,b,c
>>> Diff.diff("a b c".split(' '), "a c".split(' '))
a (b) c
>>> Diff.diff("a b c".split(' '), "a e b c".split(' '))
a [e] b,c
>>> Diff.diff("a b c".split(' '), "a e c".split(' '))
a (b) [e] c
>>> Diff.diff("a b c d".split(' '), "a 0 c 1".split(' '))
a (b) [0] c (d) [1]
duangsuse::Echo
RingBuffer.kt
两个文件均可在 GitHub Share 里访问到。 [1]
随时欢迎大家加入讨论和使用(暂时没有附加任何许可证)。
duangsuse::Echo
两个文件均可在 GitHub Share 里访问到。 [1] 随时欢迎大家加入讨论和使用(暂时没有附加任何许可证)。
我马上要把它们移植到 Kotlin Common(因为它们本来就对 Java 特性没啥依赖)
然后我会写 TypeEqualizer,写完我最后修复、更新一下我的《抓周》
[master 78af361] Kotlin: three files
3 files changed, 283 insertions(+)
create mode 100644 Others/three-kt-files/DiffAlgorithm.kt
create mode 100644 Others/three-kt-files/RingBuffer.kt
create mode 100644 Others/three-kt-files/common.kt

因为是自己的抽象,完美兼容 KotlinJS/JVM,除了 java.io.Closeable 和 Kotlin @Throws, assert 不能用外都可以,其中前两个接口都可以直接在 Common 里静态链接实现
#sysadmin #linux 更新时间……
我更新了 IDEA,可是我还是觉得原来的版本好用;我想写一个 Parser.kt 框架,可是我觉得现在弄一个解释器就好了;我工作效率很低;我这个下午只是重构了这个项目,我只学会提出函数是 Ctrl+Alt+M、找引用是 Shift+Alt+7 (好像);我累死了
我想写的 TypeEqualizer 还没动笔,一个有点麻烦的算法(numpreety.hanShow)现在基本上是没心情写的……

我应该把困难一点的东西留到以后做,比如把 26 格式化成 二十六 的算法……
理论不困难,但是实现真的不容易