Pull to refresh
40
Тензин Константин@tenzink

Пользователь

0,7
Rating
2
Subscribers
Send message

Да бог с ним с хешем, тем более, что сейчас вы его поправили. Теперь, правда, документация некорректна. Там уже O(n), и не то, чтобы реализация быстрая.

Теперь возьмём ds_push. Каждый вызов делает новую строку (с новой аллокацией памяти), что совсем необязательною Иногда хочется расширять строку, добавляя в конец элементы. Но ваша строка такой API не предоставляет в отличии от критикуемой вами стандартной библиотеки. При этом с ds_push очень легко словить утечку, а при использовании в цикле получить O(n^2). Но страдать с несуразностями этого API вы предоставляете пользователю.

Беда вашего подхода не в том, что реализация строки УГ - это нормально для экспериментов в период обучения. Нормально и то, что вы пока сами не осознаёте, насколько эта реализация ужасна.

Проблема в том, что вы огульно охаиваете другие решения, не пытаясь разобраться в том, какие осознанные решения были приняты и как они повлияли на реализацию.

Уровень реализации не соответствует уровню пафоса. Хеш одинаковых строк должен быть одинаковым - в вашей реализации это не так. Пока, к сожалению, не тянет даже на учебную поделку.

Вы меня с кем-то перепутали. Я не писал, что "родители, дедушки и бабушки заменят школу"

Ну откуда берётся такое желание всё взять и запретить, да ещё как часто бывает, прикрываясь аргументацией о защите детей?

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

Можно подумать, что ребёнок без школы находится в вакууме. В плане социализации он как минимум уже находится в социуме - родители, бабушки/дедушки, близкие друзья. Имбовое место для прокачки - песочница. Ребёнок часто ходит в какие-нибудь секции (спорт/музыка и т.п.), у него есть друзья во дворе ещё с детского сада. Если ребёнок ведёт активную жизнь вне дома, то в смысле развития социальных навыков школа вполне заменима

Чисто по фану, чтобы чуть меньше тошнило от коверканья русского языка

; Даны два массива целых чисел произвольной длины.\
; Найди их пересечение с учётом повторяющихся элементов.\
; Порядок элементов в результате не важен.\
;
; Первый массив: [1, 2, 3, 2, 0, 2]
; Второй массив: [5, 1, 2, 7, 3, 2]
; Результат: [1, 2, 2, 3]

подключи список
подключи математику

функция возьми_первый_массив(): список[целых] = (
    (1 2 3 2 0 2)
)

функция возьми_второй_массив(): список[целых] = (
    (5 1 2 7 3 2)
)

функция выполни(): список[целых] = (
    функция найди_общие_значения(): список[целых] = (
        верни (
            возьми_первый_массив()
            |> список.оставь_без_повторов()
            |> список.пересеки_с(
                возьми_второй_массив()
                |> список.оставь_без_повторов()
            )
        )
    )

    функция посчитай_вхождения(
        значения: целое
        в_массиве: список[целых]
    ): целое = (
        верни (
            в_массиве
            |> список.оставь(
                функция проверь(
                    элемент: целое
                    по_индексу: целое
                ): логическое = (
                    элемент = значения
                )
            )
            |> список.посчитай()
        )
    )

    функция сопоставь_значения_с_кратностью():
        список[пар[целых]]
    = (
        верни (
            найди_общие_значения()
            |> список.преобразуй(
                функция сопоставь(
                    значение: целое
                    по_индексу: целое
                ): пара[целых] = (
                    (
                        значение
                        математика.выбери_меньшее(
                            посчитай_вхождения(
                                значения: значение
                                в_массиве: возьми_первый_массив()
                            )
                            посчитай_вхождения(
                                значения: значение
                                в_массиве: возьми_второй_массив()
                            )
                        )
                    )
                )
            )
        )
    )

    верни (
        сопоставь_значения_с_кратностью()
        |> список.сверни(
            функция добавь(
                в_результат: список[целых]
                значение_с_кратностью: пара[целых]
                по_индексу: целое
            ): список[целых] = (
                функция повтори_значение(): список[целых] = (
                    верни список.повтори(
                        значение: значение_с_кратностью[0]
                        раз: значение_с_кратностью[1]
                    )
                )

                верни список.соедини(
                    в_результат
                    с: повтори_значение()
                )
            )
            начиная_с: ()
        )
    )
)

выполни()

Русский язык - отдельное спорное решение.

Начнём с "эффекта зловещей долины". Код типа такого `список сложить(один, два, три)` лично у меня вызывает только брезгливость. Если это русский, то пусть будет хотя бы `сложи список (...)`. Иначе это воспринимается как безграмотность и издевательство над русским языком.

С практической точки зрения кодировать неудобно. Вероятней всего не избежать частого переключения раскладок.

И тут уже кто-то приводил аргумент, что язык математики не локализуют (синус, интеграл, и т.п.). Мне симпатична такая аналогия

Поскольку критериев выбора синтаксиса у вас всё равно нет, то рекомендую посмотреть ещё в одну сторону. Самый красивый синтаксис который я видел, это в семействе ML-языков (Ocaml, Standard ML of New Jersey) или на худой конец в Haskell

В очередной раз о пользе plan mode и проверкой вручную или с помощью другой модельки

Ну ok, раз речь про "Невероятно быстрый алгоритм нахождения простых делителей огромных составных чисел", то сколько ваш алгоритм будет факторизовать вот такое не слишком огромное число?

3597284440855924544760705321078319513881289134853978802171066623680480235229732988761104885629809631999005054189544840315407267231713401943322212324974300752954681286642512935564763772827324008300407016109060076912152536812782569409805382513070413043
Скрытый текст

Число получено как перемножение вот этих двух чисел из интернета (гугл говорит, что оба простые)

a=5280842695870597262871829916036347793181048105944727626357078127619420046530136938413905659102954019
b=681195151612611689484381505082728530227937846992253495686317828427132018802795367772173239804088945451030304776802491083558288394588076833648046982897

Не факт. Им вполне могли выкатить счет. Не знаю их конкретный случай, но сомневаюсь, что у там была страховка с включенной эвакуацией вертолетом

Скачивайте карты мира от Генштаба СССР. Они уже 80 лет как не устаревают.

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

А поделитесь примерами? Такое не на слуху, интересно было бы посмотреть

С такой подготовкой как у них, даже то что они сделали, уже превысило мои ожидания. Могли бы и дальше ломиться "до победного".

Даже если они расчитывали на 5ч прогулку, поллитра на человека это очень мало. Хорошо, хоть хватило ума развернуться и вызвать спасателей

Лесной пожар, кажется, тоже подходит под ваше определение живого.

Стандарт C++98 короче. А вот код, сопоставимый по производительности и функционалу, будет более многословным и намного менее читабельным по сравнению с C++11/14/... Потребуется возвращать результат через выходные параметры, работать с индексами или итераторами для обхода коллекции, явно прописывать типы в прикладном коде. В общем - страшный сон, который хочется поскорее забыть.

Если современный C++ позволяет писать код, приближающийся по читабельности к python, то C++98 недостаточно выразителен - там приходится страдать и писать кучу обслуживающего кода, не относящегося напрямую к логике алгоритма

Смена компилятора, даже внутри одной линейки, это сложно для нетривиальной кодовой базы. Ошибки компиляции только вершина айсберга, да и бороться с ними не так сложно. Гораздо опасней UB, которые могут проявляться по разному. То есть код успешно будет собираться, но приложение собранное одном компилятором работает "нормально", а собранное другим периодически крешится

Это в большей степени не про обратную совместимость, хотя и в рамках одной линейки компиляторов от версии к версии подобные приколы бывают. Лечится только тестированием сборок под разными компиляторами, санитайзерами, статическими анализаторами и т.п.

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

Давно, будучи студентом, наткнулся на такой язык, как Standard ML of New Jersey. Помню, что это был эстетический восторг.

Он не слишком известен и скорее академический. Из ближайших родственников - это OCaml. Семейство ML-языков сильно повлияло на Haskell / F# и на индустрию в целом (алгебраические типы, Continuation‑Passing Style, вывод типов Hindley‑Milner и т.п.). Интересно наблюдать, как через десятки лет идеи оттуда проникают, трансформируясь по пути, в современные mainstream языки (Rust/C++/Python/Kotlin/...).

Интересно было бы пофантазировать, каково изучать в качестве первого языка что-то типа OCaml.

1
23 ...

Information

Rating
2,180-th
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity