1. Java / Говнокод #28543

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    static private Double getHashString(String string, Integer foundation){
        Double hash = 0.0 ;
        short [] charsToInteger = getCharArray(string);
        double step = Double.MAX_VALUE / 256 - foundation;
        for (int i = 0; i < charsToInteger.length ; i++ ){
            hash += charsToInteger[i] * step;
            step = step / 2 - 1;
        }
        return hash;
    }
    
    static private short [] getCharArray(String string){
        char [] chars = string.toLowerCase().toCharArray();
        short [] bytes = new short [chars.length];
        for (int i = 0; i < chars.length; i++){
            bytes [i] = (short) (chars[i] & 0x00FF);
            //System.out.println("bytes [" + i + "] = " + bytes[i]);
        }
        return bytes;
    }

    Вычисление сигнатуры строки для её применения в сортировке строк в алфавитном порядке по всем символам
    https://habr.com/ru/post/709406/ / https://itnan.ru/post.php?c=1&p=709406
    https://github.com/Helgi-cell/HashStringAlphabetical

    Запостил: ISO, 08 Января 2023

    Комментарии (43) RSS

    • > Два года назад я выполнял задачу по сортировке строк в алфавитном порядке
      > Решать эту задачу обычным способом желания не было
      > Я решил попробовать реализовать внезапно возникшую идею представления строки в виде числа, то бишь сигнатуры. Причем надо было реализовать эту идею таким образом, чтобы число зависело от символов и их порядка, находящихся в строке. Т.е. сделать так, чтобы сортировка этих чисел была эквивалентна сортировке строк в алфавитном порядке по всем символам этих строк.

      Это охуенно!
      Зато в репозитории есть «HashStringService.java», «HashStringController.java» и «public interface HashStringJpaRepo extends JpaRepository <HashString, Long>».
      Ответить
      • Я прошу прощения, но множество возможных значений Double меньше, чем множество строк.
        Эквивалетно уже сразу не получится
        Ответить
        • В прекрасной статье на «Хабре» там BigInteger. Но код на картинке, а мне лень запускать «OCR».
          P.S. Статью рекомендую прочитать, там просто эпического уровня анскилл.
          Ответить
          • Прежде, чем читать статью, я хочу порассуждать.

            Чтобы решить задачу, нам нужно биекционно отражить множество строк на множество чисел.

            Можно представить себе что строка это N-ичное число , N -- количество букв в алфавите.

            То есть задача сводится к переводу из N-ричной системы в двоичную (для представления в памяти ПК) или в десятичную (с учетом локали).

            Если я верно помню, то для перевода в десятичную каждый разряд умножают на A в степени B, где A это основание числа (в случае ASCII видимо 127) а B -- номер разряда.

            Так что задача решается элементарно, правда для сортировки достаточно больших строк может и не хватить сверхбыстрой памяти.

            Упомянутый выше hash это по-определеию сюръекция, и значит в общем случае не подходит
            Ответить
            • Рома, залогинься...
              Ответить
            • > Чтобы решить задачу, нам нужно биекционно отражить множество строк на множество чисел.

              Достаточно инъекционно, нет? Можно добавить шаг с умножением числа на два и получить невозможность вывода нечетного числа, но сохранить контракт.
              Ответить
      • > «public interface HashStringJpaRepo extends JpaRepository <HashString, Long>»

        Программист на «Лаже», даже «HelloWorld» не напишет без JPA, IoC и AbstractFactory.
        Ответить
    • > неудобные строки

      Неудобные строки, это когда у тебя 2 строки килобайт по 10, одна из которых нормальная, а во второй могут быть дефект[ы] OCR, а это вполне себе нормальные строки.
      Ответить
      • ты сейчас хочешь чтоб он еще и новым блядь методом OCR на сдачу разродился?
        Ответить
    • Что такое тип char ? ... старший байт является просто кодировкой страницы UTF-8 (алфавита страны), а младший байт — кодировкой самого символа (буквы) из таблицы ASCII-кодов.

      ой бляджь просто идите нахуй
      Ответить
      • Что такое компьютер?

        Верхняя часть его состоит из монитора (телевизора) а нижняя из процессора (оперативной памяти)
        Ответить
        • Спасибо!!!!! Наконец-то нашелся человек, способный объяснить понятным и доступным языком, а не то что эти заучки!!!!!!!1
          Ответить
          • Предлагаю игру. Объяснить таким же образом любое околоITшное понятие.
            Я уже объяснил комптютер. Объясни теперь ты что нить
            Ответить
            • Что такое скрам?

              Внешний слой это просто честность (софт скиллы), а внутренний сонаправленность (мыслей программиста и потока байт)
              Ответить
            • Не пошло
              Ответить
        • Что такое айтишник?

          Верхняя часть его состоит из головы (пищеприёмника), а нижняя из ягодиц (точки опоры).
          Ответить
          • Что такое осень?

            Это небо, плачущее небо под ногами.
            Ответить
            • Что такое осень? Это свиньи.
              Это свиньи плещутся в канаве,
              Рядом Чебуратор наблюдает за свиньями,
              Что же будет с Родиной и с нами? ааа,
              Рядом Чебуратор наблюдает за свиньями,
              Что же будет с Родиной и с нами?

              Осень, свиньи яблоки жрут,
              Только пожрали - сразу насрут,
              Только насрали - снова сожрут,
              Вечный круговорот.

              Что зима такое - это дубо,
              Это с дуба помер Чебуратор,
              Вместе с Чебуратором поймали дуба свиньи,
              Весь колхоз и тётушка Аксинья, ааа,
              Вместе с Чебуратором поймали дуба свиньи,
              Весь колхоз и тётушка Аксинья.

              Лето, осень, зима и весна,
              Январь, февраль, март и апрель,
              Вторник, среда, ёбаный в рот,
              Вечный круговорот.
              Ответить
        • Когда мариванна говорит «процессор», она на самом деле проявляет олдскульность, на майнфраймах именно так назывался отдельно стоящий главный ящик.
          Ответить
      • Дальше ещё смешнее:

        >Что из этого возможно получить в виде выгоды? Ну, конечно же возможно! Вообще, старший байт , если мы сортируем список строк (слов) , описываемых одной страницей UTF-8 ASCII кодов, можно отбросить.
        > Он является лишь маркером для выяснения страны происхождения данных строк.

        Теперь мы знаем как отличать дешевые китайские подделки char.
        Ответить
    • > package com.epam.brest.hashstring

      Пхахаха. Дальше можно быдло не читать.

      >@SpringBootTest
      >@ComponentScan("com.epam.brest")
      >@EntityScan("com.epam.brest")
      >@Transactional
      >@EnableJpaRepositories

      Зачем? Зачем?
      Ответить
      • Потому что это джавка, чувак

        А вот спринг МВЦ
        https://github.com/Helgi-cell/HashStringAlphabetical/blob/main/src/main/java/com/epam/brest/hashstring/controller/HashStringController.java

        зы: он троллит, конечно
        https://github.com/Helgi-cell/HashStringAlphabetical/blob/main/src/main/java/com/epam/brest/hashstring/jparepositories/HashStringJpaRepo.java
        Ответить
        • Но зачем лолбоёбу @Transactional?
          Ответить
          • Эта аннотация наскока я помню заворачивает все вызовы к JPA в транзакцию.

            Додик знает, что любое приложение состоит из
            * веб контроллера
            * базы данных

            ну и если тебе надо хеллоу ворлд написать -- он и пишет туда JPA, Spring MVC и прочий Spring.

            Ну и конечно сервис ради DependencyInjeciton:
            https://github.com/Helgi-cell/HashStringAlphabetical/blob/main/src/main/java/com/epam/brest/hashstring/service/HashStringService.java
            Ответить
      • > былло

        Гологубчик, перелогиниться забыл?

        Я кстати, только что по путинскому мосту проехал.
        Ответить
      • Груд епама
        Ответить
    • Вот и результат того, что вчерашние таксисты и слесари с гаражей вкатываются «в айти» в надежде хапнуть легких долларов.

      https://avatars.githubusercontent.com/u/71282399

      Хоумворк.
      https://github.com/Helgi-cell/HomeWork11October
      Ответить
      • Такой молодой, а уже умеет писать идеоматический джава код
        https://github.com/Helgi-cell/HomeWork11October/blob/main/src/main/java/DataModules/PriceShipping.java
        Ответить
        • Кстати ранние коды, у него какие-то более человечные что ли.

          Там вот этих пиздушных геттеров, спрингов и JPA ещё нет, не научили ещё погромировать.

          https://github.com/Helgi-cell/SteelJob/blob/main/src/steelworks/MyInterfaceHat.java

          Статические массивы в интерфейсе, очень мило
          Ответить
          • Такая малось сишечка.

            Ну есть же картинка известная, типа нуб
            a = 2 * weight()


            Мидл
            AbstractFactoryMultiplicationProviderImpl.getInstance().multiplyBy(new WeightProvider().getInstance().getWeight(), new ConstantNumberWrapper(2));


            Сеньйор
            a = 2 * weight()
            Ответить
            • >Программа расчета разверток для изготовления водосточных колен, углов желоба, также расчитывает развертку пирамиды, вальмы для изготовления зонтов вентиляционных и защитных колпаков из жести. Математика полностью моя. Позволяет делать любое количество итераций для более точного расчета шаблона и облегчения использования лекал для перевода значений на листовую сталью Когда была написана ООП еще не знал.... SWING прикручен как оконный интерфейс

              ...
              Ответить
              • Заметь, что пока он оперировал ``double []``, у него реально были нужные и полезные программы

                А как появились ``public BigDecimal getPriceLargeMore()`` так сразу стала какая-то хуйня там про строки

                зы: хотя я бы наверное не рискнул пользоваться водосточным коленом, в расчете которого учавствовал дабл
                Ответить
            • > Ну есть же картинка известная, типа нуб
              Не-не-не. Это слишком просто.
              Эволюция Июнь, Мыдл, Синьор там всё должно только усложняться.

              The Evolution of a Haskell Programmer.html
              Ответить
    • Я тут кстати давеча видал рустню, писаную жаваёбом, а там сплошной Arc (атомик референс каунтер) и клонирование (копирование). Попытался понять, что не так. Так вот:

      ГЦ-блядь никогда не думает, где лежит объект: она просто пишет new, и течет.
      С++ блядь конечно думает: лежит ли объект у меня на стеке, или в векторе? Или может на стеке, а в векторе ссылка? Или я его мувнул в вектор, и больше не могу им пользоваться? А может, я его туда скопировал (что долго)?

      Для джаваёба все эти вопросы не существенны.

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

      У ГЦбляди пухнет маленький мозг, и ГЦ блядь начинает хуярить всё в кучу с RC (atomic он для передачи между тредами) а если что-то не компилируется (ибо всё мувается по умолчанию и оно мувнулось) то тупо клонирует

      В итоге получает говнецо похлеще джавы, и скоро начнет ныть, что нифига это чото не быстро.
      Ответить
      • > итоге получает говнецо похлеще джавы
        Ну да.
        Йажа она конечно тупая, но хотя бы реордеринг в OoO будет.
        А тут атомики наделают фенсов и вообще перепитушня страшная.

        ЗЫ, там растухи рекомендуют Rc.
        Unlike Rc<T>, Arc<T> uses atomic operations for its reference counting. This means that it is thread-safe. The disadvantage is that atomic operations are more expensive than ordinary memory accesses. If you are not sharing reference-counted allocations between threads, consider using Rc<T> for lower overhead.

        Чем не зашло?
        Ответить
        • Я про Arc и говорю.

          В рустне есть:
          * Box это некоторый аналог юника
          * Rc это шарик, как ты понимаешь. Но шарик не потокобезопасный (потому что ты не можешь с двух потоков крутить счетчик) и потому его нельзя между тредами.
          * Arc атомарный шарик, который можно между тредами (там трейт специальный реализуется, позволяющий между потоками копировать)

          Если ты будешь всё хранить в куче и со всем работать через Arc то будет малость не так перформансно, как могло бы быть
          Ответить
    • Вольфраминхо
      Ответить

    Добавить комментарий