2017-12-02 28 views
2

我涉足我的腳J和,讓球滾動指定模式的數據,決定寫一個函數:生成以下爲J

  • 得到整數N;
  • 吐出遵循此模式的表:

(例如用於N = 4

1 
0 1 
0 0 1 
0 0 0 1 

即零的各行數從0增加至N - 1

然而,作爲新手,我卡住了。爲N = 4情況下我現在的吃力(和不正確)解決方案是這樣的:

(4 # ,: 0 1) #~/"1 1 (1 ,.~/ i.4) 
1 0 0 0 
0 1 0 0 
0 0 1 0 
0 0 0 1 

而且與它的問題是雙重的:

  • 它沒有足夠的一般,看上去有點難看(括號和"使用);
  • 尾隨零 - 據我所知,J中的所有數組都是齊次的,所以在我的情況下,每行都應該裝盒。

就像是:

┌───────┐ 
│1  │ 
├───────┤ 
│0 1 │ 
├───────┤ 
│0 0 1 │ 
├───────┤ 
│0 0 0 1│ 
└───────┘ 

或者我應該使用哪一個將與空間,而不是零來填充字符串(例如'0 0 1')。

那麼,我親切地問這裏是:

  • 請提供與解釋這項任務慣用Ĵ解決方案;
  • 批評我的嘗試,並指出如何完成。

在此先感謝!

回答

2

與J中的諸多挑戰一樣,有時候最好將注意力集中在結果上並找到實現目標的不同方式。在這種情況下,你最初的做法是創建一個單位矩陣。我會用

=/[email protected]:i. 4 
1 0 0 0 
0 1 0 0 
0 0 1 0 
0 0 0 1 

你已經正確識別問題與尾隨0的,事實上,殲意志墊出0的避免破爛陣列。因爲每一行都是獨立的,所以拳擊避免了這種填充。

因此,請先創建您的列表。我會用反超,以獲得額外的0

4{.1 
1 0 0 0 

下一行使用1:從1動詞和箱子追上返回1至4

(>:@:i. <@:{."0 1:) 4 
+-+---+-----+-------+ 
|1|1 0|1 0 0|1 0 0 0| 
+-+---+-----+-------+ 

因爲我們希望這是顛倒,然後製成字符串,我們將":@:|[email protected]:添加到過程中。

(>:@:i. <@:":@:|[email protected]:{."0 1:) 4 
+-+---+-----+-------+ 
|1|0 1|0 0 1|0 0 0 1| 
+-+---+-----+-------+ 

然後我們拆箱

>@:(>:@:i. <@:":@:|[email protected]:{."0 1:) 4 
1  
0 1  
0 0 1 
0 0 0 1 

我不知道這是每個人都可以解決這個問題的方式,但它的工作原理。

另一種不使用拳擊並使用二元j的解決方案。 (園區)和

1j4 # 1 
1 0 0 0 0 
    (1 j. 4) # 1 
1 0 0 0 0 
    (1 #~ 1 j. ]) 4 
1 0 0 0 0 

所以,我創建一個列表中i. 4每個整數,然後反轉他們,讓他們爲字符串的事實。由於它們現在是字符串,所以額外的填充是用空格完成的。

(1 ":@:|[email protected]:#~ 1 j. ])"[email protected]:i. 4 
1  
0 1  
0 0 1 
0 0 0 1 

這一步一步作爲希望解釋更好一點。

i.4 
0 1 2 3 

,然後將其施加到(1 ":@:|[email protected]:#~ 1 j. ])原子的時間,因此使用的"0 打破什麼括號內繼續。我先拿右邊的三個動詞構成一個叉子。

(1 j. ])"[email protected]:i.4 
1 1j1 1j2 1j3 

現在,有效,讓我

1 ":@:|[email protected]:#~ 1 1j1 1j2 1j3 

叉的中間齒成爲作用於兩個名詞arguments.The ~交換參數的動詞。所以它變成相當於

1 1j1 1j2 1j3 ":@:|[email protected]:# 1 

這是因爲方式@:作品是一樣的

": |. 1 1j1 1j2 1j3 # 1 

因爲叉使用"0改變我怎麼還沒有表現出這些組件的結果這些論據被髮送到中間齒輪並在稍後彙集。我希望在這裏有足夠的空間,有些人揮手說明可能就足夠了

從默認到明確的跳轉可能是一個很大的問題,因此,明確編寫相同的動詞可能會更好它更有意義。

lowerTriangle =: 3 : 0 
​rightArg=. i. y 
​complexCopy=. 1 j. rightArg 
​1 (":@:|[email protected]:#~)"0 complexCopy 
​) 
    lowerTriangle 4 
1  
0 1  
0 0 1 
0 0 0 1 
    lowerTriangle 5 
1   
0 1  
0 0 1  
0 0 0 1 
0 0 0 0 1 

看看當你「滾球」時會發生什麼?我想關於J的事情是,無論你從哪裏開始,球都會沿着一個非常陡峭的斜坡下坡。令人興奮的,呃?

+0

這裏有很多見解,關於身份矩陣的事實確實讓人大開眼界,我真的很喜歡複雜原子的訣竅!然而,我很難一次消化所有這些東西,我需要安排一些認真的上師冥想會議:^) – 9214

+0

好的,我大部分都能理解'@:'之間的部分,但是無法獲得大局。如果你一步一步解釋你的第二個例子,我將不勝感激。 – 9214

+0

男孩,叉子的創作是一個令人心動的東西(這是我無法得到的部分)。非常感謝你的解釋和明確的版本。標記爲答案。 P.S.對於弱小的新手來說,球感覺像是西西弗斯的巨石。 – 9214