?

Log in

Yorool-GUI's blog
Recent Entries 
8th-Jan-2017 10:07 pm - Прощай пиздобол
лысый

Отписываюсь нахер от носителя жилета. Ибо масштаб вранья стал зашкаливать. http://awas1952.livejournal.com/7250479.html

20th-Dec-2016 12:49 pm - четное дерево
лысый
Решил эту штуку (https://www.hackerrank.com/challenges/even-tree, см репост ниже) на Rust-е, ушло около получаса на думание и часа 4 на программирование - правда заметную часть времени читал доки и боролся с borrow checker-ом.
Кстати, borrow checker действительно помогает. Обратите внимание на split_at_mut в calc_weights. Rust мне не позволил получить доступ на запись к элементам массива i и j вот таким образом:

let from = &mut v[i];
let to = &mut v[j];

что логично - это я про себя думаю, что это разные элементы массива. Но ведь возможно, что i == j и компилятор мне об этом напомнил. Пришлось сначала получить раздельный доступ к двум половинкам массива, гарантировав, что v[i] и v[j] различны

под катом решение
кодCollapse )

update: почитал другие решения - ну да, нет у меня опыта работы с графами, можно было куда лаконичнее сделать. Ну и ладно, и так неплохо получилось

Originally posted by avva at четное дерево
https://www.hackerrank.com/challenges/even-tree

По-русски: написать программу, которая получает с стандартного входа описание дерева, и печатает максимальное количество ребер, которые можно убрать так, чтобы дерево превратилось в лес, в котором в каждой компоненте связности четное число вершин. Пример и точное описание входа/выхода по ссылке.

По-моему, неплохой пример задачи для программистов, которая где-то на уровне интервью в Гугле. Мне сразу несколько вещей в ней нравится:

- надо знать/помнить что-то из теории (граф, дерево, компонента связности), но не глубокие вещи и не сложные алгоритмы, а достаточно для того, чтобы могло включиться алгоритмическое мышление
- надо сначала подумать, как собственно найти искомое, подход "прямиком" слишком трудоемкий
- сам выбираешь структуры данных, нет очевидно верного выбора, можно по-разному
- нужно сесть и написать с нуля работающий код, проверка проблемы "не знаю, как начать"

Я думаю, что если кто-то садится за эту проблему и меньше чем за час у него есть работающий код, то этот человек находится в хорошей форме в плане идти на технические интервью в Гугл/Фейсбук/Амазон итд. Все равно стоит готовиться, плюс еще есть интервью по system design, но для алго/кодинг это неплохие шансы, мне кажется. Конечно, люди, которые занимаются программистскими соревнованиями, щелкают такие задачки за 5-10 минут без проблем, но это другой случай, они натасканы на это. Я говорю про "просто программиста", который сомневается, идти ли на интервью и что там будет.

(чтобы проверить себя, я сел за эту задачу вчера, когда прочитал про нее. У меня был готова программа за 45 минут, включая проверку и отладку. Я пользовался https://repl.it/ для отладки, т.к. под рукой не было компилятора).
6th-Dec-2016 12:43 am - Westworld
лысый

Досмотрели сабж. Под катом спойлер:

Читать далее…Collapse )

лысый
progenes: А можно идиотский вопрос? Вот дают переводчику книжку. Так он ее сначала читает всю, а потом начинает переводить или переводит по ходу чтения?
vitus_wagner: По-моему, это зависит от того, насколько он сильно кушать хочет. Если сильно - то сразу начинает переводить.
p_govorun: А вот художнику ещё проще. Он начинает рисовать, не читая, а когда нарисует, то читать и вовсе незачем.

Отсюда
26th-Sep-2016 12:58 am(no subject)
лысый

Вассерман посмел отклониться от генеральной линии. Носители скреп его поправляют. В комментах пир духа!
http://awas1952.livejournal.com/6847431.html

лысый

А что, были сомнения, что так все и будет? Я хорошо помню, как ездил в университет с московского до появления этих ужасных маршруток,  которым не место в нашем прекрасном городе.  Больше не хочу. А хипстеры-урбанисты пусть идут лесом.
http://sapojnik.livejournal.com/2263118.html

лысый
Ну то, что в кино перед сеансом за наши же деньги нам крутят рекламу, это уже привычно. Но сегодня я встретил новую ступень мудачества, граничащего с идиотизмом и стрельбой себе в ногу:
встречайте Юлмарт:



Т.е. я к ним прихожу по ссылке с яндекс-маркета, с конкретной целью поиска товара. Они за меня уже отдали деньги яндексу, я иму нужен. Они знают, зачем я пришел и значит могут конвертировать мой визит в покупку. И что же они делают - пытаются заработать копеечку на нетаргетированной рекламе, открывающейся на весь экран, да еще и с хорошенько спрятанной кнопкой закрытия в лучшем порно-стиле.

Мне одному это напоминает бизнес по русски - украсть вагон водки, продать, а деньги пропить?
24th-May-2016 08:57 am(no subject)
лысый

Забавно, что то, что казалось у Азимова натяжкой и условностью - утверждение, что три закона прописаны прямо в структуру позитронного мозга и не могут быть изменены без разработки всего с нуля - оказалось правдой. Просто слова "позитронный мозг" надо заменить на "обученная нейронная сеть"

14th-Feb-2016 02:24 am - об Rust
лысый
Решил я попробовать эту штуку. Впечатление от чтения документации очень хорошие. Будто взяли Haskell и выкинули оттуда то, что все равно слишком сложно для реальной жизни - ленивость, запрет побочных эффектов (к черту монады, стрелки и прочий матан), каррирование и вообще упор на извращения над функциями. Но оставили лямбды, замыкания, тайпклассы (тут они называются traits), паттерн матчинг и вообще представление программы как набора выражений.

Но вот в реальности все пока не так здорово.

Что я хотел сделать: написать на Rust клиент для Evernote.

Оказалось, что Evernote использует для внешних клиентов протокол Thrift - некая реализация RPC, как я понял. Протокол для конкретного приложения описывается файлами с расширением .thrift, из которых строятся исходники библиотеки для любого популярного языка. Кроме Rust-а, увы.

Есть реализация компилятора thrift для Rust-а от компании terminal.com, которые Rust активно используют у себя. Но реализация сырая, под windows по умолчанию не собирается, а собранная выдает искодники на Rust, которые без правок не компилируются.

И я почти прошел все грабли, добавил все недостающие определения в сгенерированные Rust-файлы и почти собрал реализацию Evernote-протокола на Rust, но уперся в итоге в тупик, из которого хорошего выхода не нашел.

Итак мне выдается ошибка
error: the trait `thrift::protocol::ThriftTyped` is not implemented for the type `ordered_float::OrderedFloat` [E0277]

Смотрю - да действительно, они этот Trait (это примерно то же, что интерфейс в яве или чисто виртуальный класс в C++) для OrderedFloat не реализуют. Т.е. они определяют этот трейт для кучи типов:

...
impl ThriftTyped for i32 { fn typ(&self) -> Type { Type::I32 } }
impl ThriftTyped for i64 { fn typ(&self) -> Type { Type::I64 } }
impl ThriftTyped for f64 { fn typ(&self) -> Type { Type::Double } }
impl ThriftTyped for () { fn typ(&self) -> Type { Type::Void } }
impl ThriftTyped for String { fn typ(&self) -> Type { Type::String } }
impl ThriftTyped for Vec { fn typ(&self) -> Type { Type::String } }
impl ThriftTyped for Vec { fn typ(&self) -> Type { Type::List } }
...


но вот OrderedFloat среди них нет. Ну ок думаю, определю его в сгенерированном файле сам, прямо перед использованием.
Пишу что-то вроде
impl ThriftTyped for OrderedFloat { fn typ(&self) -> Type { Type::Double } }

и - херак - получаю ошибку
error: the impl does not reference any types defined in this crate; only traits defined in the current crate can be implemented for arbitrary types [E0117]

Ну да, я читал в документации об этом запрете. Чтобы избежать запутанного и непредсказуемого кода, они разрешили реализовывать трейт для типа или там, где определен сам тип, или там, где определен трейт. Т.е. я не могу взять и сказать, например, что тип i32 теперь реализует оператор '+' (а операторы тоже можно перегружать через специальные трейты) как '-' - потому что не я объявлял i32 и не я объявлял трейт Add.

Но блин, вот мне прям щас надо сделать патч, а сделать я его не могу - точнее могу, если буду править прямо библиотеку, где этот ThriftTyped объявлен. Может я так и сделаю, но скорее всего брошу эту затею - что-то костылей уже многовато.
This page was loaded Jan 17th 2017, 9:12 pm GMT.