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)