Рустам
Но если они не совпадут, то должен быть ответ false
Рустам
Тут этот случай игнорируется
Pavel
Мой вопрос можно ли это в более "плоской" форме записать?
за плоскую считается? let checkBrackets s =
let brackets = "[](){}"
let rec loop acc = function
| ch :: t ->
match acc, brackets.IndexOf(ch : char) with
| _, -1 -> loop acc t
| _, i when i % 2 = 0 -> loop (brackets.[i + 1] :: acc) t
| [], _ -> false
| ah :: at, _ -> if ch <> ah then false else loop at t
| [] -> acc = []
loop [] [ yield! s ]
Рустам
Не знаю можно ли считать за плоскую, но довольно интересный конструкт выходит)
Pavel
Pavel
можно даже if убрать
Рустам
На одну меньше чем у меня, но моя легче читается
Рустам
Так как у меня там достаточно примитивная логика
Igor
я поправил, там прежде чем head получить, нужно проверять на не пустой список
Рустам
Да, верно
Рустам
Рустам
👍
Igor
Рустам
Ilya
ch, ah, at, t... Какие хорошие имена.
Рустам
Приёмчик с ...&& loop... понравился
Рустам
Возьму на вооружение
Igor
Igor
вообще я бы конечно от списка отказался. В аккумуляторе даже кажется неправильно так память расходовать, а вот весь текст в список перегнать это уже перебор
Pavel
а теперь самое страшное let checkBrackets (s : string) =
let rec loop acc xs =
match acc, xs with
| _, (ch & (91 | 40 | 123)) :: t -> loop ((ch / 90 + 1 + ch) :: acc) t
| ah :: at, (ch & (93 | 41 | 125)) :: t when ch = ah -> loop at t
| [], (93 | 41 | 125) :: t -> false
| _, _ :: t -> loop acc t
| acc, [] -> acc = []
loop [] [ yield! Seq.map int s ]
Igor
теперь надо натравить на это benchmarkdotnet
Igor
а спаны у меня, потому что у меня net core 3 стоит
Рустам
понял, значит спаны смогли бы сэкономить кучу памяти
Pavel
зачем? и так ясно что toList все сожрет
Igor
но мне кажется спаны раньше добавили, где-то в 2-2.2
Igor
там наверное нугет надо использовать
Ilya
Спаны ещё в 4.5 добавили. Год назад, считайте.
Viacheslav
Ilya
Не, если я не прав, то я не прав. Я в то время ещё с F# знаком не был.
Igor
его и туда и туда добавили, причем я вот недавно где-то читал, что у них разная реализация
Igor
или видео было...
Igor
а тьфу, фигню сказал, увидел 4.5 и подумал про net framework
Pavel
ch, ah, at, t... Какие хорошие имена.
в чем проблема с ними? это стандартные имена в функциональщине https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/list.fs#L206
Рустам
Везде спаны выходят в купе с .net core
Ilya
Рустам
пока не получилось найти как подключить к .net
Igor
https://www.nuget.org/packages/System.Memory/
Viacheslav
Рустам
Рустам
за счёт отсутствия надобности в копировании множества раз подстрок или перевода строки в список?
Pavel
там выборка по символу будет, ничего не аллоциреутся. откуда там увеличению взяться?
Igor
for по символам самое то, спаны у меня только ради функционального подхода
Рустам
Igor
хотя можно было вместо 2-х параметров использовать 3
Igor
массив, индекс и acc
Рустам
[ yield! s ] — но это меня смущает
Рустам
это разве не должно вызвать развёртывание строки в список?
Pavel
Igor
Igor
а ну собственно и acc же еще, там либо рекурсия, либо mutable придется использовать
Igor
спан просто объединяет в себе ссылку на массив и индекс
Igor
и это структура на стеке
Pavel
let checkBrackets (s : string) =
let brackets = "[](){}"
let rec loop acc i =
if i < s.Length then
let ch = s.[i]
match acc, brackets.IndexOf(ch : char) with
| _, -1 -> loop acc (i + 1)
| _, i when i % 2 = 0 -> loop (brackets.[i + 1] :: acc) (i + 1)
| [], _ -> false
| ah :: at, _ -> if ch <> ah then false else loop at (i + 1)
else acc = []
loop [] 0
Pavel
все прекрасно без спанов делается
Рустам
интересно
Igor
я же и сказал, можно передавать индекс, ну наверное спаны лишние
Рустам
мне в принципе понятна логика стоящая за этим, а ощущения как-будто первый раз вижу
Рустам
читая про функциональный подход я как-будто потерял для себя императивные методы)
Vasiliy
Геймдиректор Control рассказал, что Бюро контроля из игры не просто так напоминает Фонд SCP — разработчики действительно вдохновлялись вымышленной организацией.
Оказалось, что людям из администрации сообщества SCP это даже приятно.
https://dtf.ru/games/70964
Shub
Vasiliy
лол. Так они взяли просто идею
Vasiliy
а не лого.
Shub
Ну я в курсе, что когда так делает капитал - то это «просто взяли идею, а не то, что», а когда это делаешь ты - то это плагиат.
Shub
Надо чувствовать разницу
Romɑn
Крылатый
Vasily
Romɑn
Vasily
поясни?
Частая операция отматывания стрима назад
Vasily
Поэтому спаны там прямо ок