template <typename T>PREETY_FUNCTION — StackOverflow
void prints(T obj) { cout << obj << endl; }
template <typename... Arg>
void prints(T obj, Arg... args) { cout << obj; prints(args); }
void prints(std::initializer_list texts) {
for (auto text : texts) cout << text;
cout << endl;
}
Stack Overflow
Variable number of arguments in C++?
How can I write a function that accepts a variable number of arguments? Is this possible, how?
audio_output
68.9 KB
duangsuse::Echo
#task 我来总结一下被鸽子的小项目: LiterateKt (怎么连 class Project(File, Config) 的子项目树模型都总结不出来…… 还总是在 Markdown 语法上纠缠,用 java.util.regex.Pattern 不就可以了,项目都可 # Include,root项目可以有 # LiterateKt ) Bank Editor (稍后会有重写之前的 Qt 周期执行小应用,就是 QSettings 和 QTimer ,顺便包括 rectangle(0,0,p*width…
This media is not supported in your browser
VIEW IN TELEGRAM
不写了不写了…… 不就是个 QSettings 和 QTimer 还有 Gtk# 的 TreeView 使用么…… 模型都是简单的,再复杂不过一个 table grid 而已
来看看别的
嗯……然后我们想弄一个能组合歌词的程序,比如这里有一个示例数据
等我弄完
来看看别的
from re import compile
PAT_LRC_ENTRY = compile(r"[\[<](\d{2}):(\d{2}).(\d{2})[>\]] ?([^<\n]*)")
def readLrc(text):
def readEntry(g): return (int(g[0])*60 + int(g[1]) + int(g[2]) / 100, g[3]) # [mm:ss.xx] content
return [readEntry(e) for e in PAT_LRC_ENTRY.findall(text)] def dumpLrc(lrc_lines):
def header(t, surr="[]"): return "%s%02i:%02i.%02i%s" %(surr[0], t/60, t%60, t%1.0 * 100, surr[1])
return "\n".join([header(lrcs[0][0]) + lrcs[0][1] + " ".join([header(t, "<>") + s for (t, s) in lrcs[1:]]) for lrcs in lrc_lines])
嗯……然后我们想弄一个能组合歌词的程序,比如这里有一个示例数据
[00:32.96]怎<00:33.12>么<00:33.36>大<00:33.76>风<00:34.16>越<00:34.56>狠<00:36.16>我<00:36.56>心<00:36.96>越<00:37.36>荡<00:39.36>幻<00:39.52>如<00:39.68>一<00:40.08>丝<00:40.32>尘<00:40.72>土<00:41.12>随<00:41.28>风<00:41.52>自<00:41.92>由<00:42.16>的<00:42.56>在<00:43.76>狂<00:44.16>舞<00:45.76>我<00:45.92>要<00:46.08>握<00:46.32>紧<00:46.72>手<00:47.12>中<00:47.36>坚<00:47.52>定<00:48.96>却<00:49.12>又<00:49.36>飘<00:49.76>散<00:50.16>的<00:50.56>勇<00:50.96>气<00:52.24>我<00:52.40>会<00:52.56>变<00:52.96>成<00:53.36>巨<00:53.52>人<00:54.16>踏<00:54.40>着<00:54.56>力<00:54.72>气<00:54.96>踩<00:55.36>着<00:55.76>梦然后我们有楼上的 zipWithNext 和 zipTakeWhile 实现
等我弄完
Telegram
duangsuse::Echo
import operator
from functools import partial
吐嘈:functools 里面居然没有 compose 也不支持 partial(print, ..., 1),虽然后来我发现即便 lambda 这个很长但也可以用,emmm
def require(value, p, msg):
if not p(value): raise ValueError(f"{msg}: {value}")
def zipWithNext(xs):
require(xs, lambda…
from functools import partial
吐嘈:functools 里面居然没有 compose 也不支持 partial(print, ..., 1),虽然后来我发现即便 lambda 这个很长但也可以用,emmm
def require(value, p, msg):
if not p(value): raise ValueError(f"{msg}: {value}")
def zipWithNext(xs):
require(xs, lambda…
list 又没有 flatten 又没有 flatMap ,这种烂代码让人怎么活啊……
itertools.starmap 也根本不可以用,我不是要给 transform 函数传 vararg…… 我是要给 result flatten
itertools.starmap 也根本不可以用,我不是要给 transform 函数传 vararg…… 我是要给 result flatten
duangsuse::Echo
准备加入 Hachiko 豪华套餐(迫真)
因为 smf-to-lrc 项目是 Kotlin 写的,不太容易要求用户有 Kotlin 开发环境也不好直接发布 jar 包,公开作为私用脚本算了…… 有心人自然会发现该依赖啥项目,然后具体怎么用
pypi 里都没有一个好的 lrc 解析器,唉,可怜
pypi 里都没有一个好的 lrc 解析器,唉,可怜
duangsuse::Echo
写好啦,那个 zipTakeWhile 居然还浪费了我好长时间调试…… 居然没一遍写对,当然也不能怪我,这个不是流操作的流操作 和 zip 操作本身对定义初始情况的要求经常容易忘记
这货也有 limitation ,输入数据只有音符的 start ,没有 end
意味着每行的最后一个音符,都不知道该在哪停……
根本没有办法解决,因为 LRC 就是只有 start,而我调试的时候用 SRT 的话最后一个字的时间就会不准确
如果输入是 SRT 格式的话就有 start 有 end,移植也很容易只需要
看来我得在 Kotlin 代码上做 hack 了…… 别人又不能用到这个特性,唉。
意味着每行的最后一个音符,都不知道该在哪停……
根本没有办法解决,因为 LRC 就是只有 start,而我调试的时候用 SRT 的话最后一个字的时间就会不准确
如果输入是 SRT 格式的话就有 start 有 end,移植也很容易只需要
max(line, key=lambda it: it[0]).end ,但我不会写 mid 歌词读取……
duangsuse::Echo
这货也有 limitation ,输入数据只有音符的 start ,没有 end 意味着每行的最后一个音符,都不知道该在哪停…… 根本没有办法解决,因为 LRC 就是只有 start,而我调试的时候用 SRT 的话最后一个字的时间就会不准确 如果输入是 SRT 格式的话就有 start 有 end,移植也很容易只需要 max(line, key=lambda it: it[0]).end ,但我不会写 mid 歌词读取…… 看来我得在 Kotlin 代码上做 hack 了…… 别人又不能用到这个特性,唉。
刚才才发现其实如果输出格式是 LRC 的话,这个信息损失也不会有问题啊…… 所以说只是在输出 SRT 预览的时候有问题而已啦