因子 84 * 0.9 = 76.5
USE: regexp
[ R/ [_a-zA-Z]\w*/ R/ _.*/ [ matches? 1 0 ? ] bi-curry@ bi 0 = 1 2 ? / ]
在侦听器(repl)上运行,定义一个采用字符串并输出{0 | 1/2 | 1}。
将其定义为97个字符:
USE: regexp
: v ( s -- n ) R/ [_a-zA-Z]\w*/ R/ _.*/ [ matches? 1 0 ? ] bi-curry@ bi 0 = 1 2 ? / ;
它是如何工作的:
R/ [_a-zA-Z]\w*/ R/ _.*/
定义两个正则表达式。bi-curry@
将报价部分地应用于[ matches? 1 0 ? ]
每个正则表达式,在堆栈上保留两个咖喱式报价。bi
将每个引号应用于参数字符串。
这些(引用的报价)中的每一个都保留1或0,具体取决于它们是否匹配。第一个匹配格式正确的名称,第二个匹配名称以下划线开头。
0 = 1 2 ? /
如果最后一个值是0,则将其替换为1;如果是1,则将其替换为2。然后,将第一个值(1或0,有效或无效)除以第二个值(2或1,是否以下划线开头) 。
哎呀!任何缩小的指标都值得赞赏...
而且我讨厌正则表达式!
PS。
{ 0 } [ "" v ] unit-test
{ 0 } [ "" v ] unit-test
{ 0 } [ "1" v ] unit-test
{ 0 } [ "1var" v ] unit-test
{ 0 } [ "var$" v ] unit-test
{ 0 } [ "foo var" v ] unit-test
{ 1 } [ "v" v ] unit-test
{ 1 } [ "var" v ] unit-test
{ 1 } [ "var_i_able" v ] unit-test
{ 1 } [ "v4r14bl3" v ] unit-test
{ 1/2 } [ "_" v ] unit-test
{ 1/2 } [ "_v" v ] unit-test
{ 1/2 } [ "_var" v ] unit-test
{ 1/2 } [ "_var_i_able" v ] unit-test
{ 1/2 } [ "_v4r14bl3" v ] unit-test
所有测试通过;)