还有其他方法可以在 J 中模拟“tr”吗?

发布于 2024-10-20 12:48:45 字数 452 浏览 3 评论 0原文

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

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

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

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

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

还有其他方法可以继续吗?最好更短,但如果它有其他优点,我很乐意学习其他东西。此外,具有隐含函数相反的解决方案也会减轻很多负担。

I picked up J a few weeks ago, about the same time the CodeGolf.SE beta opened to the public.

A recurrent issue (of mine) when using J over there is reformatting input and output to fit the problem specifications. So I tend to use code like this:

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

This one untested for various reasons (edit me if wrong); intended meaning is "convert - to _". Also come up frequently: convert newlines to spaces (and converse), merge numbers with j, change brackets.

This takes up quite a few characters, and is not that convenient to integrate to the rest of the program.

Is there any other way to proceed with this? Preferably shorter, but I'm happy to learn anything else if it's got other advantages. Also, a solution with an implied functional obverse would relieve a lot.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

烟凡古楼 2024-10-27 12:48:45

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

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

It sometimes goes against the nature of code golf to use library methods, but in the string library, the charsub method is pretty useful:

   '_-' charsub '_123'
 -123
   ('_-', LF, ' ') charsub '_123', LF, '_stuff'
 -123 -stuff
很酷不放纵 2024-10-27 12:48:45

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

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

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

rplc is generally short for simple replacements:

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

Amend m} is very short for special cases:

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

but becomes messy when the list has to be a verb:

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

where g has to be something like g =: ('b' E. ]) # ('b' E. ]) * [: i. #.

There are a lot of other "tricks" that work on a case by case basis. Example from the manual:

To replace lowercase 'a' through 'f' with uppercase 'A'
through 'F' in a string that contains only 'a' through 'f':
('abcdef' i. y) { 'ABCDEF'
Extending the previous example: to replace lowercase 'a' through
'f' with uppercase 'A' through 'F' leaving other characters unchanged:
(('abcdef' , a.) i. y) { 'ABCDEF' , a.

阿楠 2024-10-27 12:48:45

我只处理了换行符和 CSV,而不是一般的替换情况,但以下是我处理它们的方式。我假设 Unix 行结尾(或用 toJ 固定的行结尾)带有最后换行符。

  • 单行输入:".{:('1 2 3',LF)(还没有使用这个)
  • 矩形输入:(".;._2) (' 1 2 3',LF,'4 5 6',LF)
  • 参差不齐的输入:可能是 (,;._2)(<; ;._2) (还没有使用过这个。)
  • 一行,逗号分隔:".;._1}:',',('1,2,3',LF)< /code>

这根本不会取代 tr,但确实有助于处理行结尾和其他垃圾。

I've only dealt with the newlines and CSV, rather than the general case of replacement, but here's how I've handled those. I assume Unix line endings (or line endings fixed with toJ) with a final line feed.

  • Single lines of input: ".{:('1 2 3',LF) (Haven't gotten to use this yet)
  • Rectangular input: (".;._2) ('1 2 3',LF,'4 5 6',LF)
  • Ragged input: probably (,;._2) or (<;._2) (Haven't used this yet either.)
  • One line, comma separated: ".;._1}:',',('1,2,3',LF)

This doesn't replace tr at all, but does help with line endings and other garbage.

别理我 2024-10-27 12:48:45

您可能需要考虑使用8!:2 外国

   8!:2]_1
-1

You might want to consider using the 8!:2 foreign:

   8!:2]_1
-1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文