- 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
Приятный прецедент. Какой язык будем форсить следующим?
> bash (5) Ruby (1)
Там почти ничего нет
Потом дропним ещё что-нибудь, пока не останется только один и я знаю кто.
если ты дома под одеялом пишешь на пхп, но это факт твоей биографии
...или постой
речь о крестах?
У меня на ноуте, когда я пишу код, вебкамера включена только для того, чтобы когда я ложился на бок - у меня картинка на экране поворачивалась.
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
Или как руби - есть фанбаза, которая яростно защищает, но юзает чуть реже чем никогда?
PS как я мог забыть про Lua
Да и
> Rust
наверное
не хочу видеть на говнокоде. Слишком говно для этого сайта
Если не сделать x := x, то все вызовы doSomething() будут сделаны у последнего элемента sliceOfRefs. Это уже не говоря о необходимости писать _ постоянно.
Лол что? Если в замыкания x утаскивать (или писать go x.doSomething()), то проблема будет, как в JS. А просто в цикле всё будет ок.
Output:
capturedX := x
То, что язык позволяет делать shadow локальных переменных - не то чтобы прям серьёзная проблема, кмк. Проблема в том, что завести новую переменную слишком просто?
Более того, от переименования переменной смысл не меняется-то. Какому нормальному человеку прийдет в голову что от присваивания переменной значения это значение будет копироваться? Никому не нужно такое поведение в языке где присваивание во всех остальных ситуациях вполне ожидаемо себя ведет.
Не надо путать присваивания и объявления с инициализацией.
x := x это по определению var x = x
> присваивание во всех остальных ситуациях вполне ожидаемо себя ведет
Присваивание всегда копирует значение в переменную, во всех ситуациях и контекстах. Просто иногда значением является указатель или его более толстые аналоги.
Любой нормальный человек скажет, что var x = x - это noop, и скорее всего просто удалит эту строчку.
На следующем этапе, когда это неожидано что-то испортит, тот же человек с фанатической преданностью будет в цикле копировать все переменные объявленные вне цилка: потому что умом понять зачем это нужно невозможно.
Ну и если жизнь заставит работать с этим говном, то научится лепить из говна и палок что-то. Так же как это делают на Ц++ и Ко.
У крестанутых еще разница, есть var или нету.
a = b; // simple copy
T c = a; //copy constructor
Необоснованные обобщения. Некоторые люди всё же привыкли к lexical scope, который разжёван где только можно.
> умом понять зачем это нужно невозможно
Тогда даже scheme обладает описанным фатальным недостатком невозможности понимания. Ведь если класть одну и ту же переменную в замыкания, во всех замыканиях у неё будет одно и тоже значение, вот ведь незадача.
Ну и рациональ вполне доступно описана в доке
https://golang.org/doc/effective_go.html
Только на всю голову крестанутым крестоблядям. У них везде сайтэффекты зарыты, то копирующий конструктор, то еще какой std::move.
<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/ МГНОВЕННОЕ ФИНАНСИРОВАНИЕ ОНЛАЙН
~$$~