- 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
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
{-# LANGUAGE FlexibleInstances #-}
module Connect where
import Data.List
data Color = Black | White deriving (Show, Eq)
data Start = Begin | End deriving (Show, Eq)
data Tree a = Node a [Tree a] deriving (Eq)
instance Show (Tree (Int,Int)) where
show = showTree 0
showTree :: Int -> Tree (Int,Int) -> String
showTree n (Node a s) = show a ++ "\n" ++ replicate n ' ' ++ concatMap (showTree (n+1)) s
elemTree :: Eq a => a -> Tree a -> Bool
elemTree e (Node a []) = if a == e then True else False
elemTree e (Node a s) = if a == e then True else any (e `elemTree`) s
resultFor :: [String] -> Maybe Color
resultFor = check
charToColor :: Char -> Color
charToColor 'X' = Black
charToColor 'O' = White
charToColor _ = error "Bad data!"
check :: [[Char]] -> Maybe Color
check s = if (null iob || null ioe) && (null ixb || null ixe)
then Nothing
else let whb = any (\t -> any (`elemTree` t) ioe) $ map (go White Begin s []) iob
whe = any (\t -> any (`elemTree` t) iob) $ map (go White End s []) ioe
blb = any (\t -> any (`elemTree` t) ixe) $ map (go Black Begin s []) ixb
ble = any (\t -> any (`elemTree` t) ixb) $ map (go Black End s []) ixe
in if whb || whe then Just White else if blb || ble then Just Black else Nothing
where
iob = map (\y -> (0,y)) $ elemIndices 'O' (s !! 0)
ioe = map (\y -> (length s,y)) $ elemIndices 'O' (last s)
ixb = map (\x -> (x,0)) $ elemIndices 'X' (map head s)
ixe = map (\x -> (x,length (s!!0))) $ elemIndices 'X' (map last s)
search :: Foldable t =>
Color
-> [[Char]] -> t (Int, Int) -> (Int, Int) -> Maybe [(Int, Int)]
search color arr from (cx, cy) = (\x -> if null x then Nothing else Just x) $ map fst $ filter snd $ concatMap
(\x -> map
(\y -> testCell color arr from (cx, cy) (x,y))
(filter (\yy -> yy >= 0 && yy < length (arr!!0)) [cy-1, cy, cy+1]))
(filter (\xx -> xx >= 0 && xx < length arr) [cx-1,cx,cx+1])
testCell :: Foldable t =>
Color
-> [[Char]]
-> t (Int, Int)
-> (Int, Int)
-> (Int, Int)
-> ((Int, Int), Bool)
testCell color arr from (cx, cy) (x,y)
|x == cx && y == cy = ((x,y),False)
|cx - x == 1 && cy - y == 1 = ((x,y),False)
|x - cx == 1 && y - cy == 1 = ((x,y),False)
|(x,y) `elem` from = ((x,y),False)
|arr !! x !! y /= '.' && color == charToColor (arr !! x !! y) = ((x,y),True)
|otherwise = ((x,y),False)
go :: Color
-> Start
-> [[Char]]
-> [(Int, Int)]
-> (Int, Int)
-> Tree (Int, Int)
go c s arr from (x,y)
|(c,s) == (White, Begin) && x == length arr - 1 = Node (x,y) []
|(c,s) == (White, End) && x == 0 = Node (x,y) []
|(c,s) == (Black, Begin) && y == length (arr !! 0) -1 = Node (x,y) []
|(c,s) == (Black, End) && y == 0 = Node (x,y) []
|otherwise = let f = search c arr from (x,y)
in case f of
Nothing -> Node (x,y) []
Just r -> Node (x,y) $ map (go c s arr ((x,y):from)) r
guest 22.03.2016 02:55 # −5
guest 10.02.2017 13:18 # −5
LispGovno 22.03.2016 08:31 # +6
inkanus-gray 22.03.2016 11:34 # +3
Приятный прецедент. Какой язык будем форсить следующим?
LispGovno 22.03.2016 11:47 # 0
> bash (5) Ruby (1)
Там почти ничего нет
Потом дропним ещё что-нибудь, пока не останется только один и я знаю кто.
kegdan 22.03.2016 12:10 # +1
guest 22.03.2016 14:08 # −7
если ты дома под одеялом пишешь на пхп, но это факт твоей биографии
...или постой
речь о крестах?
LispGovno 22.03.2016 14:12 # +1
У меня на ноуте, когда я пишу код, вебкамера включена только для того, чтобы когда я ложился на бок - у меня картинка на экране поворачивалась.
guest 22.03.2016 14:15 # −5
LispGovno 22.03.2016 14:16 # +4
3_14dar 22.03.2016 15:07 # 0
LispGovno 22.03.2016 15:29 # +1
guest 22.03.2016 19:17 # −8
guest 14.02.2017 20:15 # −5
3_14dar 22.03.2016 19:51 # 0
kipar 23.03.2016 09:23 # +2
guest 25.02.2017 06:36 # −5
guest 10.02.2017 16:57 # −5
guest 25.02.2017 10:36 # −5
inkanus-gray 22.03.2016 13:16 # +2
Bash — 192 по состоянию на январь 2016:
http://web.archive.org/web/20160122005904/http://govnokod.ru/bash
Ruby — 157 по состоянию на сентябрь 2015:
http://web.archive.org/web/20150920024531/http://govnokod.ru/ruby?
Ещё почили Ассемблер и Visual Basic:
http://web.archive.org/web/20150315004831/http://govnokod.ru/asm
http://web.archive.org/web/20160122173209/http://govnokod.ru/vb
kegdan 22.03.2016 13:54 # +3
LispGovno 22.03.2016 11:50 # 0
kegdan 22.03.2016 12:12 # 0
Или как руби - есть фанбаза, которая яростно защищает, но юзает чуть реже чем никогда?
guest 31.01.2017 06:31 # −5
Vasiliy 22.03.2016 12:29 # +1
PS как я мог забыть про Lua
LispGovno 22.03.2016 14:05 # +1
Да и
> Rust
наверное
не хочу видеть на говнокоде. Слишком говно для этого сайта
dxd 23.03.2016 14:30 # 0
guest 28.01.2017 16:43 # −5
guest 07.03.2017 00:24 # −5
tucvbif 22.03.2016 23:40 # 0
guest 24.01.2017 10:38 # −5
wvxvw 23.03.2016 10:03 # +1
Если не сделать x := x, то все вызовы doSomething() будут сделаны у последнего элемента sliceOfRefs. Это уже не говоря о необходимости писать _ постоянно.
roman-kashitsyn 23.03.2016 10:52 # +1
Лол что? Если в замыкания x утаскивать (или писать go x.doSomething()), то проблема будет, как в JS. А просто в цикле всё будет ок.
Output:
wvxvw 23.03.2016 13:22 # +1
roman-kashitsyn 23.03.2016 13:43 # 0
capturedX := x
То, что язык позволяет делать shadow локальных переменных - не то чтобы прям серьёзная проблема, кмк. Проблема в том, что завести новую переменную слишком просто?
wvxvw 23.03.2016 16:40 # +2
Более того, от переименования переменной смысл не меняется-то. Какому нормальному человеку прийдет в голову что от присваивания переменной значения это значение будет копироваться? Никому не нужно такое поведение в языке где присваивание во всех остальных ситуациях вполне ожидаемо себя ведет.
roman-kashitsyn 23.03.2016 17:02 # 0
Не надо путать присваивания и объявления с инициализацией.
x := x это по определению var x = x
> присваивание во всех остальных ситуациях вполне ожидаемо себя ведет
Присваивание всегда копирует значение в переменную, во всех ситуациях и контекстах. Просто иногда значением является указатель или его более толстые аналоги.
wvxvw 23.03.2016 17:42 # +1
Любой нормальный человек скажет, что var x = x - это noop, и скорее всего просто удалит эту строчку.
На следующем этапе, когда это неожидано что-то испортит, тот же человек с фанатической преданностью будет в цикле копировать все переменные объявленные вне цилка: потому что умом понять зачем это нужно невозможно.
Ну и если жизнь заставит работать с этим говном, то научится лепить из говна и палок что-то. Так же как это делают на Ц++ и Ко.
3.14159265 23.03.2016 18:57 # +1
У крестанутых еще разница, есть var или нету.
a = b; // simple copy
T c = a; //copy constructor
roman-kashitsyn 23.03.2016 22:19 # 0
Необоснованные обобщения. Некоторые люди всё же привыкли к lexical scope, который разжёван где только можно.
> умом понять зачем это нужно невозможно
Тогда даже scheme обладает описанным фатальным недостатком невозможности понимания. Ведь если класть одну и ту же переменную в замыкания, во всех замыканиях у неё будет одно и тоже значение, вот ведь незадача.
Ну и рациональ вполне доступно описана в доке
https://golang.org/doc/effective_go.html
3.14159265 23.03.2016 18:53 # 0
Только на всю голову крестанутым крестоблядям. У них везде сайтэффекты зарыты, то копирующий конструктор, то еще какой std::move.
guest 10.03.2017 03:22 # −5
guest 21.01.2017 03:42 # −5
inkanus-gray 28.01.2017 19:13 # +1
guest 25.04.2017 14:13 # −5
guest 28.04.2017 09:47 # −5
guest 29.04.2017 04:19 # −5
guest 29.04.2017 05:45 # −5
guest 29.04.2017 16:02 # −5
guest 02.05.2017 12:20 # −5
guest 02.05.2017 15:04 # −5
guest 30.05.2017 00:30 # 0
guest 30.05.2017 01:07 # 0
guest 30.05.2017 01:16 # 0
<a href=http://bolt53.blogspot.ru>заработать на форекс без вложений видео</a>
<a href=http://bolt53.blogspot.ru>хочу заработать в сети без вложений</a>
<a href=http://bolt53.blogspot.ru>как заработать подростку в 13 лет в интернете без вложений</a>
<a href=http://bolt53.blogspot.ru>как заработать в интернете с нуля без вложений и затрат</a>
<a href=http://bolt53.blogspot.ru>как заработать в интернете без вложений скачать</a>
<a href=http://bolt53.blogspot.ru><img>http://s45.radikal.ru/i108/1703/1b/31c45f37a0d7.png</img></a>
Дополнительный доход в интернете, который вполне может стать Вашим постоянным заработком.
Для перехода жмите кнопку
<a href=http://bolt53.blogspot.ru><img>http://s019.radikal.ru/i639/1703/88/f0c798898a35.png</img></a>
<a href=http://bolt53.blogspot.ru>видео реально ли заработать в интернете без вложений</a>
<a href=http://bolt53.blogspot.ru>как заработать в интернете без вложений сидя в декрете</a>
<a href=http://bolt53.blogspot.ru>как заработать на киви кошельке без вложений сайты</a>
<a href=http://bolt53.blogspot.ru>покер где можно заработать реальные деньги без вложений</a>
<a href=http://bolt53.blogspot.ru>работа официально</a>
<a href=http://mikrosaym.blogspot.ru>Выгодный кредит онлайн</a>
<a href=http://bit.ly/2oI4psW>ВЫДАВАЙ МИКРОЗАЙМЫ С ГАРАНТИРОВАННОЙ ДОХОДНОСТЬЮ ОТ 192% ДО 265% ГОДОВЫХ И ЗАБУДЬ О ФИНАНСОВЫХ ПРОБЛЕМАХ</a>
https://mikrosaym.blogspot.ru/ МГНОВЕННОЕ ФИНАНСИРОВАНИЕ ОНЛАЙН
~$$~
guest 30.05.2017 02:44 # 0
guest 30.05.2017 03:15 # 0
guest 30.05.2017 08:37 # 0
guest 30.05.2017 10:02 # 0
guest 30.05.2017 11:27 # 0
guest 30.05.2017 13:51 # 0
guest 30.05.2017 14:32 # 0
guest 30.05.2017 14:39 # 0
guest 30.05.2017 18:01 # 0
guest 30.05.2017 20:47 # 0
guest 30.05.2017 22:15 # 0
guest 01.06.2017 23:39 # 0
guest 02.06.2017 05:56 # 0
guest 02.06.2017 10:30 # 0
guest 02.06.2017 11:44 # 0
guest 02.06.2017 12:21 # 0
guest 02.06.2017 13:58 # 0
guest 02.06.2017 23:13 # 0
guest 03.06.2017 02:49 # 0
guest 03.06.2017 06:15 # 0
guest 03.06.2017 06:25 # 0
guest 03.06.2017 10:46 # 0
guest 03.06.2017 12:28 # 0
guest 03.06.2017 14:47 # 0
guest 03.06.2017 16:35 # 0
guest 03.06.2017 17:07 # 0
guest 03.06.2017 17:37 # 0
guest 03.06.2017 17:53 # 0
guest 03.06.2017 18:51 # 0
guest 03.06.2017 20:27 # 0
inho 03.06.2017 20:38 # 0
3oJIoTou_xyu 24.03.2018 03:56 # 0
guest 03.06.2017 20:42 # 0
guest 03.06.2017 21:01 # 0
guest8 28.12.2018 13:10 # −999
guest8 04.01.2019 10:36 # −999
guest8 04.01.2019 10:38 # −999
guest8 04.01.2019 10:39 # −999
guest8 04.01.2019 10:42 # −999
guest8 04.01.2019 10:45 # −999