Re: Алгоритм

From
Vovanius Uryvaeff (2:5020/175.2)
To
Pavel P
Date
2002-10-15T21:03:37Z
Area
RU.ALGORITHMS
From: "Vovanius Uryvaeff" <micro-s@vniiofi.ru>

Thu Oct 10 2002 06:37, Pavel P wrote to Vovanius Uryvaeff:
 >>  Компактней надо!  И будет совсем просто!
 >> : Find.Dups ( a n m - ) LOCAL| A M E |
 >>   DUP TO M * OVER TO A  OVER + SWAP  OVER TO E
 >>   DO E I CELL+ ?DO
 >>     I @ J @ =  IF I A - M /MOD SWAP . . J A - M /MOD SWAP . . CR  THEN
 >>   LOOP LOOP ;
 >> CREATE arr 1 , 2 , 3 , 4 ,  5 , 6 , 7 , 8 , 11 , 10 , 9 , 11 ,
 >> arr 4 3 FindDups
 >> :)

 PP> Это намного хуже как по читаемости так и по функциональности, при
 PP> том же количестве строк. Твой пример не будет работать для записи
 PP> непрямоугольного массива типа
 PP> 1
 PP> 2 3
 PP> 4 5 6
 PP> 7 8
 PP> 6
 PP> Что вернет твой алгоритм? Ты его вызвать сможешь?
 PP> Мой вернет - (2,2) (0,4) :)
А мой и не предназначен для для "непрямоугольного массива", он предназначен
для матриц.
А по читаемости с моей точки зрения он и не хуже совсем. Знать просто
синтаксис и основные приемы надо.
А если ты свой массив в виде списка списков реализовал, то и я также могу...
Впрочем это пример того, как я уложился в то-же количество строк, хотя в языке
понятия матриц не было. А если взять либу с матрицами, так я думаю еще короче
будет. Вроде:
REQUIRE M.FIND lib/maxtrix.f
: FindDups ( class.matrix -- )  LOCAL| M | TO M
M M.ITEMS * 0 DO
   I M M@  I 1+ -1  M.FIND  DUP 0< IF DROP ELSE M XY . . I M XY . .  THEN
LOOP ;
1 2 3  4 5 6  7 6 8   3 3 >MATRIX M   M FindDups

все равно нечитаемо?

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)