在J中模仿`tr`的任何其他方法?

时间:2011-03-04 22:18:20

标签: j

我几周前接过J,差不多同时向公众开放the CodeGolf.SE beta

当在那里使用J时,(我的)经常出现的问题是重新格式化输入和输出以适应问题规范。所以我倾向于使用这样的代码:

( ] ` ('_'"0) ) @. (= & '-')

这个因各种原因未经测试(编辑我错了);预期含义是“将-转换为_”。还经常出现:将换行符转换为空格(和对话),将数字与j合并,更改括号。

这会占用很多字符,并且不便于集成到程序的其余部分。

还有其他方法可以继续吗?最好是更短,但如果它有其他优点我很乐意学习其他任何东西。此外,具有隐含功能正面的解决方案可以减轻很多。

4 个答案:

答案 0 :(得分:6)

有时候使用库方法违反了代码高尔夫的本质,但在字符串库中,charsub方法非常有用:

   '_-' charsub '_123'
 -123
   ('_-', LF, ' ') charsub '_123', LF, '_stuff'
 -123 -stuff

答案 1 :(得分:4)

rplc通常是简单替换的简称:

  'Test123' rplc 'e';'3'
  T3st123

对于特殊情况,修改m}非常短:

 '*' 0} 'aaaa'
 *aaa
 '*' 0 2} 'aaaa'
 *a*a
 '*&' 0 2} 'aaaa'
 *a&a

但是当列表必须是动词时会变得混乱:

b =: 'abcbdebf'
'L' (]g) } b
aLcLdeLf

其中g必须类似于g =: ('b' E. ]) # ('b' E. ]) * [: i. #

还有很多其他“技巧”可以根据具体情况而定。手册中的示例:

  

用大写'A'替换​​小写'a'到'f'   通过'F'在一个只包含'a'到'f'的字符串中:   ('abcdef' i. y) { 'ABCDEF'   扩展前面的例子:将小写'a'替换为   'f'用大写'A'到'F'保留其他字符不变:   (('abcdef' , a.) i. y) { 'ABCDEF' , a.

答案 2 :(得分:1)

我只处理了换行符和CSV,而不是替换的一般情况,但这就是我处理这些问题的方法。我假设Unix行结尾(或行结尾用toJ修复)和最后一行换行。

  • 单行输入:".{:('1 2 3',LF)(尚未使用此内容)
  • 矩形输入:(".;._2) ('1 2 3',LF,'4 5 6',LF)
  • 衣衫褴褛的输入:可能是 (,;._2) (<;._2)(还没有用过它。)
  • 一行,逗号分隔:".;._1}:',',('1,2,3',LF)

这根本不会取代tr,但对行结尾和其他垃圾有帮助。

答案 3 :(得分:1)

您可能需要考虑使用the 8!:2 foreign

   8!:2]_1
-1