社区讨论

水一份Ruby的短代码

P1928外星密码参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lua2iuxd
此快照首次捕获于
2024/03/28 01:16
2 年前
此快照最后确认于
2024/03/28 14:08
2 年前
查看原帖
我想应该是最短的,虽然完全没压。
有了Ruby的“正则”表达式,只要把语法写出来,调用几下就做完了。就是这方法的效率其实很低,因为这只是个“正则”表达式,显然没有提供解析到子表达式时的回调,每个子表达式都只能重新解析。甚至于前面的数字也不能直接捕获,否则会被子表达式的捕获所覆盖。
RUBY
grammer = /(\[(\d+(?:[[:alpha:]]|\g<1>)*)\])/

expand = -> text {
  text.gsub(grammer) {
    n = $2[/\d+/].to_i
    expand[$'] * n
  }
}

puts expand[gets]

回复

1 条回复,欢迎继续交流。

正在加载回复...