当前位置:  开发笔记 > 编程语言 > 正文

J检查板

如何解决《J检查板》经验,为你挑选了1个好方法。

我需要使用J来打印棋盘,给定一个奇数,我的函数需要创建一个NxN矩阵,并在每个其他框中放置一个“ X”。我已经制作了矩阵,但无法弄清其他每个方框。

到目前为止我有什么

N =: 3 
checker =: (2$N)$ <'X'

如果有人可以提供帮助,我将不胜感激!



1> Dan Bron..:

最简单的方法是使用a:,<'X'代替<'X'

(2$N)$ a:,<'X'

之所以起作用,是因为x $ yreshapey如果*/x大于中的项目数,则会周期性地重用y

话虽这么说,在数组编程中使用基本模式来进行分析可能会更有趣,这将比固定数目的重复或模式更广泛地适用。

尝试这个:

(a:,<'X') {~ 2 | i. ,~ N

例如:

   (a:,<'X') {~ 2|i.,~5
+-+-+-+-+-+
| |X| |X| |
+-+-+-+-+-+
|X| |X| |X|
+-+-+-+-+-+
| |X| |X| |
+-+-+-+-+-+
|X| |X| |X|
+-+-+-+-+-+
| |X| |X| |
+-+-+-+-+-+

从右到左细分:

    y=. ,~ N NB. Duplicate N; ,~5 becomes 5,5

    y=. i.y NB. NxN table of the first N^2 non-negative integers

    y=.2|y NB. y mod 2, so an NxN table of 0 1 0 1 0 1 ...

    y=.(a:,<'X') {~ y NB. Map 0 to ace (empty) and 1 to <'X'

打包成可重复使用的动词:

    显式: cb =: verb def ' (a:,<'X') {~ 2 | i. ,~ y'

    默认 cb =: (a:,<'X') {~ 2 | i.@,~

创建所有可能结果的数组并同时将所有输出索引到其中的这种模式是数组编程的基本原理之一,并广泛用于许多不同的习语中。

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有