Zig-zag matrix: Difference between revisions

Added Qi
(Improve Seed7 example)
(Added Qi)
Line 2,098:
[9, 11, 17, 20, 22],
[10, 18, 19, 23, 24]]</lang>
 
=={{header|Qi}}==
 
This is a purely functional, very inefficient, and straight forward solution.
The code can probably be simplified somewhat.
 
<lang qi>
(define odd? A -> (= 1 (MOD A 2)))
(define even? A -> (= 0 (MOD A 2)))
 
(define zigzag-val
-1 Y N -> (zigzag-val 0 Y N)
X -1 N -> (zigzag-val X 0 N)
N Y N -> (zigzag-val (1- N) Y N)
X N N -> (zigzag-val X (1- N) N)
 
0 0 N -> 0
 
X 0 N -> (1+ (zigzag-val (1- X) 0 N)) where (odd? X)
X 0 N -> (1+ (zigzag-val (1- X) 1 N))
 
0 Y N -> (1+ (zigzag-val 1 (1- Y) N)) where (odd? Y)
0 Y N -> (1+ (zigzag-val 0 (1- Y) N))
 
X Y N -> (1+ (zigzag-val (1- X) (1+ Y) N)) where (or (and (odd? X)
(odd? Y))
(and (even? X)
(even? Y)))
X Y N -> (1+ (zigzag-val (1+ X) (1- Y) N)))
 
(define range
E E -> []
S E -> [S|(range (1+ S) E)])
 
(define zigzag
N -> (map (/. Y
(map (/. X
(zigzag-val X Y N))
(range 0 N)))
(range 0 N)))
</lang>
 
 
=={{header|R}}==
Anonymous user