- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
--Поиск минимальной выпуклой оболочки
import Data.List; import Data.Ord
--общие функции и типы
data Point = P{x::Float,y::Float}
deriving (Show,Eq)
getRotate a b c = baX * cbY - baY * cbX
where baX = x b - x a; baY = y b - y a;
cbX = x c - x b; cbY = y c - y b;
sortFunc a b c
|k < 0 = LT
|k == 0 = compare (long a c) (long a b)
|k > 0 = GT
where k = getRotate a b c
long a b = (x b - x a)*(x b - x a) + (y b - y a)*(y b - y a)
getLeftPoint = minimumBy (comparing x)
--Джарвис
getMBOJarvis l = mboJ fp l fp
where fp = getLeftPoint l
mboJ current list fp
|getRotate current next fp > 0 = []
|True = current : mboJ next listWOC fp
where listWOC = filter ((/=)current) list;
next = minimumBy (sortFunc current) listWOC;
--Грехем
getMBOGragam = tail.throwGraham.sortGraham
sortGraham list = fp:sortBy (sortFunc fp) list
where fp = getLeftPoint list
throwGraham (f:s:t) = mboG (s:f:[]) t
mboG fs@(f:s:st) sn@(h:t)
|sortFunc s f h == GT = mboG (s:st) sn
|True = mboG(h:fs) t
mboG fs@(f:st) sn@(h:t) = mboG(h:fs) t
mboG l [] = l
--тесты
testList1 = [P 0 (-1), P (-1) 0, P 0 1,P 1 0,P (-0.5) (-0.5),P 0.5 (-0.5),P (-0.5) 0.5,P 0.5 0.5,P 0 0]
testList2 = [P 0 0, P 1 0, P 0 1,P 2 0,P 1 1,P 0 2,P 2 1,P 1 2,P 2 2]
testJ1 = mapM_ print $ getMBOJarvis testList1
testG1 = mapM_ print $ getMBOGragam testList1
testJ2 = mapM_ print $ getMBOJarvis testList2
testG2 = mapM_ print $ getMBOGragam testList2
kegdan 07.03.2015 20:23 # +2
LispGovno 07.03.2015 21:47 # +6
kegdan 07.03.2015 21:49 # +1
chtulhu 09.03.2015 11:56 # +1
kegdan 09.03.2015 15:14 # +1
Да и у меня основная цель - не атрофировать фунцианальщину.
dxd 09.03.2015 23:08 # +1
roman-kashitsyn 10.03.2015 10:07 # +1
Вообще на окамле довольно просто лабы писать, там ведь от эффектов никто не ограждает, пиши себе в матрицы сколько влезет, и производительность предсказуемая.
С хацкелем хардкорнее - там половину нормальных алгоритмов (классические линейные строковые вроде КМП, обходы графов, преобразования матриц, деревья фенвика, тыщи их) без монады ST не изобразишь, а ленивость добавляет веселья при оптимизации.
dxd 10.03.2015 16:43 # +1
LispGovno 07.03.2015 21:50 # +2
OK, Jarvis
LispGovno 07.03.2015 21:53 # +2
LispGovno 07.03.2015 21:57 # +1
Abbath 08.03.2015 06:23 # +1
2) Используй otherwise
3) Почему s : f : [] вместо [s, f] ?
4) Почему ((/=) current) вместо (current /=) ?
kegdan 08.03.2015 10:40 # +1
3 и 4 - хз, на автомате писал
roman-kashitsyn 08.03.2015 14:46 # +5
кофейном?
Xom94ok 08.03.2015 16:47 # +4
> кофейном?
на детерминированном или недетерминированном кофейном автомате?
bormand 08.03.2015 16:50 # +4
kegdan 08.03.2015 17:43 # +5
Xom94ok 08.03.2015 17:53 # +3
wvxvw 08.03.2015 18:26 # +5
Xom94ok 08.03.2015 19:59 # +1
bormand 08.03.2015 20:03 # +6
kegdan 08.03.2015 20:43 # +5
bat 26.10.2019 07:11 # 0
gost 08.03.2015 15:13 # +1
1024-- 08.03.2015 16:00 # +1
chtulhu 09.03.2015 12:00 # +1
Это была лаба по вычислительной геометрии?
Удалось потроллить? :)
kegdan 09.03.2015 15:03 # +1
Есть такое
codemonkey 09.03.2015 14:00 # +1
3.14159265 20.11.2017 17:39 # +2
С хацкелом тоже самое. Пришёл выебщик сдавать лабу на экзотическом языке, и сходу получил десяток колких вопросов.
Fike 09.03.2015 17:31 # +3
shit 13.04.2018 14:08 # +2
http://code.jsoftware.com/wiki/Studio/IdiosyncraticIntroduction
bormand 13.04.2018 18:04 # +2
shit 13.04.2018 18:08 # +1
А вообще, мне нравится loopless code, но синтаксис J — ет писдес
bormand 13.04.2018 18:09 # +1
kegdan 13.04.2018 18:15 # +1
shit 13.04.2018 18:19 # +1
Во чьо компилил? В ДЖэй ?
kegdan 13.04.2018 18:21 # +1
bormand 13.04.2018 18:22 # +1
kegdan 13.04.2018 18:29 # +1
bormand 13.04.2018 19:46 # +2
shit 13.04.2018 19:52 # +1
bormand 13.04.2018 19:56 # +3
kegdan 13.04.2018 20:05 # +2
Я плюшевый тюлень.
И телом нежным впитываю тень.
В шабата день.
Отвень.
bormand 13.04.2018 20:13 # +2
Ваш этот J интерпретатор.
На нём Кегдану не дано.
Слепить брейнфака конпелятор.
shit 13.04.2018 21:25 # +1
bormand 13.04.2018 21:31 # +1
shit 13.04.2018 21:35 # +1
bormand 13.04.2018 21:37 # +3
shit 13.04.2018 21:53 # +2
вызывает из коробки глагол по индексу.
ЗЫ. 9: и тп — это глагол, кот-й возвращает константу
bormand 15.04.2018 00:44 # +1
I_AM_SHIT 15.04.2018 07:14 # +2
А в тацитной эта хня не нужна, векторный же язык, можно с помощью рангов ибашить поэлементно или построчно.
ЗЫ. ещё есть ^: для возведения глагола в степень. Можно въебать бесконечную степень, и глагол будет ибашить пока результат не перестанет меняться.
bormand 15.04.2018 08:58 # +1
I_AM_SHIT 15.04.2018 14:25 # +1
shit 13.04.2018 22:30 # +1
SemaReal 13.04.2018 22:46 # +1
shit 13.04.2018 22:49 # +3
SemaReal 13.04.2018 23:03 # 0
shit 13.04.2018 23:06 # +1
kegdan 13.04.2018 18:18 # +1
guestinxo 26.10.2019 01:42 # 0