NaiveParserc.hs
3.5 KB
duangsuse::Echo
#matlab https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m 啊?为啥这么简单的算法要发上来... 我还以为是要 show SIMD 优化的呢... 🤔???
弄了半天我才猜到
function [lv1, lv2] = Name(ArgType)是这样的啊
end
duangsuse::Echo
#matlab https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m 啊?为啥这么简单的算法要发上来... 我还以为是要 show SIMD 优化的呢... 🤔???
可是,即使是线性查找也有点奇怪呢?... 不清楚呢
https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L8
https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L10
https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L12
https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L17
Matlab 已经很不怎么优化了(所谓的『数据处理语言』,我个人觉得还不如直接 Julia),还这样一遍一遍找 O(n) 两遍... 尽可能一次弄完吧
类似 #Haskell #fp 的 banana split:
https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L8
maximum=Matrix(1,1);反正要被替换,为什么不直接随便初始化个简单的...
https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L10
for i=1:rows没有考虑到 Matrix 为 0x~ 维度的情况
https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L12
if maximum <= Matrix(i,j);
其实等于的时候不必替换https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L17
[row_max column_max] = find(A == maximum);
别这样,扫描一遍已经够了,为啥要再来第二遍...Matlab 已经很不怎么优化了(所谓的『数据处理语言』,我个人觉得还不如直接 Julia),还这样一遍一遍找 O(n) 两遍... 尽可能一次弄完吧
类似 #Haskell #fp 的 banana split:
length = foldl (\x y -> succ y) 1productLength 比 productLength' 要好,它只 travelse 了一遍,没有不必要地再去算第二遭
product = foldl (*) 1
productLength = foldl ( \(a0, a1) x -> (x * a0, succ a1) ) (1, 1)
productLength' xs = (product xs, length xs)
GitHub
BaseMax/MatlabMatrixProject
Scan and find the biggest number's value of the a matrix. - BaseMax/MatlabMatrixProject
#Rust 很想回去写底层一点的编程呢,虽然 Rust 也不需要手动回收内存
已经可以在脑中默写下来了!HashMap、App、Arg、cargo 宏和 if match control-flow 都看到了!
duangsuse::Echo
可是,即使是线性查找也有点奇怪呢?... 不清楚呢 https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L8 maximum=Matrix(1,1); 反正要被替换,为什么不直接随便初始化个简单的... https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L10 for i=1:rows…
GitHub
Some Advice on Traversal Algorithm · Issue #1 · BaseMax/MatlabMatrixProject
In reply to duangsuse::Echo 可是,即使是线性查找也有点奇怪呢?... 不清楚呢 https://github.com/BaseMax/MatlabMatrixProject/blob/master/BiggestValueMatrix.m#L8 maximum=Matrix(1,1); 反正要被替换,为什么不直接随便初始化个简单的... https://githu...
duangsuse::Echo
抄了几个小时,Monad 真的是很难尝试与作者拥有相同的想法...
那些 show List comprehension 的真应该来看看 Monad,了解一下自己要学的还有多少,不止一个语法糖 🙈
顺便默写一下 Haskell qsort:
顺便默写一下 Haskell qsort:
quickShort :: Ord a => [a] -> [a]写不出来那个 splitH....
quickShort xs = let x = xs !! (length xs `div` 2) in
[ l | l <- xs, l < x ] ++ [x] ++ [ r | r <- xs, r > x ]
splitH :: Char -> String-> [String]
splitH d str
= splitH' str []
where
splitH' (c : cs) ac
| c == d = reverse ac : splitH' cs []
| otherwise = splitH' cs (c : ac)
main :: IO ()
main = do
line <- getLine
print . show $ splitH ' ' line
return ()
Json.hs
1.3 KB
#Haskell 简单的 JSON dump 小程序
scala>
scala> :type id _
Nothing => Nothing
scala> :type id(1)
Int
scala>
scala> :type id("2")
String
scala>
scala qsort
试用 Scala
推荐幻灯片 #fp
def id[A](x: A): A = x
id: [A](x: A)Ascala> :type id _
Nothing => Nothing
scala> :type id(1)
Int
scala>
id(1)
res0: Int = 1scala> :type id("2")
String
scala>
id("Strin")
res1: String = Strinimport scala.math.Orderingscalac qsort.scala
object QuickSort {
def quickSort[A](list: List[A])(implicit ord: Ordering[A]): List[A] = {
if (list.length < 2) return list
val pivot = list.length / 2
val less = list.filter((x) => ord.lt(x, list{pivot}))
val more = list.filter((x) => ord.gt(x, list{pivot}))
return quickSort(less) ++ List(list{pivot}) ++ quickSort(more)
}
def main(args: Array[String]): Unit =
println(quickSort(List(4, 3, 5, 2, 1)))
}
scala qsort
试用 Scala
推荐幻灯片 #fp
duangsuse::Echo
那些 show List comprehension 的真应该来看看 Monad,了解一下自己要学的还有多少,不止一个语法糖 🙈 顺便默写一下 Haskell qsort: quickShort :: Ord a => [a] -> [a] quickShort xs = let x = xs !! (length xs `div` 2) in [ l | l <- xs, l < x ] ++ [x] ++ [ r | r <- xs, r > x ] splitH :: Char -> String…
This media is not supported in your browser
VIEW IN TELEGRAM
然后接下来可能做的事情是:
1. Haskell, Json, 先自己写完那个 Json Parser,然后写一个 Json 的 type checker 和 type inferer,为学习类型推导算法做准备
2. Rust, TypeScript, 重写 996.icu 的 licence 模板生成程序
3. Haskell, C, 写一个 joinToString 的例子,要试用 LLVM Sanitizer、动态内存分配
C 也要写 strtok 切分的例子,和 alloc 传递函数指针回调栈上动态分配的例子
C 还要写动态数组分配的例子,还要复制拼接数组
C++ 再写一个链表
然后自由安排,我还是很想先血洗前耻把 BinaryStreamIO 写出来(
1. Haskell, Json, 先自己写完那个 Json Parser,然后写一个 Json 的 type checker 和 type inferer,为学习类型推导算法做准备
2. Rust, TypeScript, 重写 996.icu 的 licence 模板生成程序
3. Haskell, C, 写一个 joinToString 的例子,要试用 LLVM Sanitizer、动态内存分配
C 也要写 strtok 切分的例子,和 alloc 传递函数指针回调栈上动态分配的例子
C 还要写动态数组分配的例子,还要复制拼接数组
C++ 再写一个链表
然后自由安排,我还是很想先血洗前耻把 BinaryStreamIO 写出来(
Forwarded from 芝士和培根 (Channel Helper)
CNBlackListR项目组公开说明:反思与新思路
https://github.com/CNBlackListR/white-book/blob/master/公开说明/反思与新思路.md
消息来源: https://t.me/times001/58253
#未分类
https://github.com/CNBlackListR/white-book/blob/master/公开说明/反思与新思路.md
消息来源: https://t.me/times001/58253
#未分类
芝士和培根
CNBlackListR项目组公开说明:反思与新思路 https://github.com/CNBlackListR/white-book/blob/master/公开说明/反思与新思路.md 消息来源: https://t.me/times001/58253 #未分类
其实虽然对于计算机视觉来说,肯定是比简单的计算机图形学生成算法要耗时的
但是可以考虑有一些算法低劣的 spam bot,没有自动生成图片,沿用老图片在,所以可以保存已经判断为 spam 的图片 hashcode 再发封禁
再不济一点,可以找一下有没有图像的 SimHash 实现,先对比图片像素大小,完全等同就对比哈希码,类似就认为是 spam 图片,或者让机器人自动收集所有是 spam 的图片使用机器学习找出其中类似的像素簇、然后按大小模糊判定再加权回归,是个比执行 OCR 算法要好的方案或许吧(考虑到很少有 Telegram 用户发微信二维码?
二维码的判断对于对面是傻逼的情况也比较好做,扫描一遍检查连续的黑块块隔白块块算出总长度就能判(其实应该找专门的算法吧...
对于关键词列表,可以使用 Trie tree 和分词算法来优化
对于追踪,其实也不必要谁一加进来就立即检查的,或许可以维护一个队列慢慢查?(不过如果 Telegram 没有提供查询用户消息记录的方法,就只能另外弄个记录表实现了,也是有不少开销的)
但是可以考虑有一些算法低劣的 spam bot,没有自动生成图片,沿用老图片在,所以可以保存已经判断为 spam 的图片 hashcode 再发封禁
再不济一点,可以找一下有没有图像的 SimHash 实现,先对比图片像素大小,完全等同就对比哈希码,类似就认为是 spam 图片,或者让机器人自动收集所有是 spam 的图片使用机器学习找出其中类似的像素簇、然后按大小模糊判定再加权回归,是个比执行 OCR 算法要好的方案或许吧(考虑到很少有 Telegram 用户发微信二维码?
二维码的判断对于对面是傻逼的情况也比较好做,扫描一遍检查连续的黑块块隔白块块算出总长度就能判(其实应该找专门的算法吧...
对于关键词列表,可以使用 Trie tree 和分词算法来优化
对于追踪,其实也不必要谁一加进来就立即检查的,或许可以维护一个队列慢慢查?(不过如果 Telegram 没有提供查询用户消息记录的方法,就只能另外弄个记录表实现了,也是有不少开销的)
duangsuse::Echo
其实虽然对于计算机视觉来说,肯定是比简单的计算机图形学生成算法要耗时的 但是可以考虑有一些算法低劣的 spam bot,没有自动生成图片,沿用老图片在,所以可以保存已经判断为 spam 的图片 hashcode 再发封禁 再不济一点,可以找一下有没有图像的 SimHash 实现,先对比图片像素大小,完全等同就对比哈希码,类似就认为是 spam 图片,或者让机器人自动收集所有是 spam 的图片使用机器学习找出其中类似的像素簇、然后按大小模糊判定再加权回归,是个比执行 OCR 算法要好的方案或许吧(考虑到很少有…
那边可见开发人员的技术也是群水逼,为啥不做自然语言处理算法,也能混久点,这么弄和码农一样的行事风格...