7

几周前我拿起了 J,大约在CodeGolf.SE 测试版向公众开放的同时。

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

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

由于各种原因,这个未经测试(如果错了,请编辑我);预期的意思是“转换-_”。也经常出现:将换行符转换为空格(和相反),将数字与 合并j,更改括号。

这占用了相当多的字符,并且不方便集成到程序的其余部分。

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

4

4 回答 4

6

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

   '_-' charsub '_123'
 -123
   ('_-', LF, ' ') charsub '_123', LF, '_stuff'
 -123 -stuff
于 2011-03-05T06:51:37.647 回答
4

rplc通常是简单替换的缩写:

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

对于特殊情况, Amendm}非常简短:

 '*' 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”到“f”的字符串中将小写“a”到“f”替换为大写“A”到“F”: ('abcdef' i. y) { 'ABCDEF' 扩展前面的示例:将小写“a”到“f”替换为大写'A' 到 'F' 保持其他字符不变: (('abcdef' , a.) i. y) { 'ABCDEF' , a.

于 2011-03-06T20:08:37.930 回答
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,但确实有助于行尾和其他垃圾。

于 2011-03-23T16:09:00.417 回答
1

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

   8!:2]_1
-1
于 2011-03-25T13:32:22.947 回答