|
LeetCode in Java
|
|||
---|---|---|---|
#18+
оператор минус не использовать! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 14:37 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
вопрос - к чему все это и зачем - так и остался без ответа.. вот это, например, Valentin Kolesnikov Задача сложения двух чисел не использую операторы + и -. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
немедленно после первого написания могло бы выглядеть так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Или даже как-то так (это уже вопрос "философии") Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 14:44 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
Мы на системотехнике оптимизировали сумматор. Там кажется вводится параллелизм для групп 4х битов (квартет) и суммирование идёт группами. 4х4 = 16. Булева функция. 8 входов и 5 выходов. 4 бита результат и бит переноса в следующую группу. Разумеется сабж - не решение Литкодов а просто ускорение последовательной операции суммы с переносом. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 16:05 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
Оптимизация, там где речь про скорость - сам по себе мутный, привязанный к исторически случайной частности вопрос, и улучшения того, что называют "качеством кода" не предполагает. "Улучшение" кода - это обычно что-то другое - либо повышение читаемости, либо появление такого качества, которое не обязательно связано со скоростью, а, как вариант, с увеличением степени полезного повторного использования кода, например - расширением области или удобства применимости конкретного фрагмента кода на другие типы данных, по отношению к которым требуется алгоритм того же сорта. способ потенциально ускорить - это, например, дописать private static int plusOneChecked Но насчет того - несомненно ли это улучшение - до вечера пятницы вряд ли удастся договориться. Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 16:38 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
В аннотации проекта написано Java Solution for LeetCode algorithm problems, continually updating. Тоесть - решение как таковое. Отлично. Тогда то что ты предлагаешь - это рефакторинг. Рефакторинг - полезный. Я за него голосую +1 и надеюсь Валентин его затащит в свой код. Вообще конечно жаль что проект поднят именно под Java. Красивых Single-Line solutions тут не сделаешь. Вот если-бы была Scala - то даааа. Короче дальше идём под флагом улучшений кода в части хотя-бы уменьшения букв. Конечно до языка APL доходить не будем, но такой рекурсивный реплейсмент - я думаю пойдет. Главное чтоб студент на собеседовании смог пояснить что это означает. Я разумеется предполагаю что он зашел в гитхаб и стянул решение себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 16:55 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
mayton ... Тогда то что ты предлагаешь - это рефакторинг. ... Не-не. Рефакторинг не может начаться раньше того, как ты дошел, или тебя довели до состояния полного разрушения личности перед лицом невыполнимости задачи. Тогда, чтобы не убить кого-нибудь, или не убиться самому, ты придумываешь "рефакторинг" для укрепления нервной системы, в надежде, что вдруг, после переставления шашек жизнь сама наладится. Рефакторинг, это когда понятия "верх" и "низ" у программы давно перепутались, и уже никто не знает, где они были. PS Я ничего не предлагаю вообще. Я лишь следую завету, гласящему, что первым пером написанная программа еще не написана. Ее необходимо переписать после этого не менее двух раз (по Бруксу двух, а чуть более молодые товарищи говорят - "мы не знаем, сколько раз потребуется") Это не рефакторинг. Это нормальный , без кардилогической скорой помощи, такой процесс встречного движения "сверху вниз" и "снизу вверх", в результате которого самому создателю более менее становится ясно - где же у программы верх, а где низ. Рефакторинг же возникает только после того, как программа признается негодной к работе во вновь обнаруженных обстоятельствах. При нормальном движение - программа в каждой своей инкарнации - годная , но по тем или иным причинам - следующая версия годнее предыдущей. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 17:27 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
Хорошо. Но я не согласен с термином оптимизация . В моём понимании оптимизация - измеряема. Тоесть мы можем посчитать speedup приложения после процесса о. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 17:46 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
booby, Не. Я думаю что рефакторинг это как восстановление днк во время сна человека. Это планомерный процесс улучшения продукта. Это как выделение 10 проц времени на саморазвиие. Или 5 проц денег на рекламу продукта. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 17:49 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
Книгописатели (толи Фаулер толи Боб я их путаю) говорят что рефакторинг нельзя начинать пока нет модульных тестов. Поскольку там есть какое-то базовое покрытие https://github.com/javadev/LeetCode-in-Java/blob/main/src/test/java/g0301_0400/s0371_sum_of_two_integers/SolutionTest.java и вообще я знаю что Валентин - человек скурпулёзный и заведомо думает о тестах то я думаю что рефакторить можно. И то улучшение которое предлагает booby - это есть рефакторинг нацеленный на уменьшение количества строк кода с сохранением читаемости. Если какие-то ветви алгоритма не закрыты зеленым маркером coverage - то можно просто добавить больше кейсов. По поводу читаемости - можно голосовать. Я другого способа не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 17:56 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, у меня рефлекс устойчивый выработался - когда я включаю кино на ютубе, и человек сразу после представления заявляет - "Я люблю заниматься оптимизацией" - то для меня обычно этого достаточно, чтобы дальше не смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 17:57 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
mayton ... нацеленный на уменьшение количества строк кода с сохранением читаемости. ... Нет . Конкретно в данном случае это самый что ни на есть "школьный" пример выделения повторно применяемого кода в самостоятельную функцию. Ввиду его очевидной повторности, а значит, полезности такого выделения. Все прочее - случайный (почти) результат этого процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:01 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
booby, поздно друг. Ты представлен к медали. Тебя ждут памятные подарки и почетная грамота. P.S. Чудак-человек. Сделал полезное дело и ... отнекивается. Я дескыть "глаз пристелямши..." Ну йомайо... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:03 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
оно, спасибо, конечно... к "пристрелянному глазу" имею тенденцию скорее с пиететом чаще, чем со смехом относится. Мой глаз в этом плане всегда был недостаточно тренирован. И особенно с учетом знания физиологии зрения - картинка всегда создается урывочными концентрациями внимания на отдельных точечных фрагментах. Чтобы понять, что же за картина - надо несколько раз посмотреть и обнаружить при следующих просмотрах то, что не видел в предыдущих. Нетренированный глаз вообще не знает, с какого конца рассматривать, и, чем больше тренирован, тем выше вероятность, что наработанная траектория движения при просмотре, и выбор точек останова дадут больше информации для принятия решения. Но не смотреть повторно - значит, скорее всего, так и оставить картину без ясного понимания, что же увидел или написал. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:13 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
booby PetroNotC Sharp, у меня рефлекс устойчивый выработался - когда я включаю кино на ютубе, и человек сразу после представления заявляет - "Я люблю заниматься оптимизацией" - то для меня обычно этого достаточно, чтобы дальше не смотреть. Ну пусть любит. Только ограничивать себя надо. Я вот тоже водку люблю). Но если он маньяк оптимизатор то согласен)) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2021, 18:23 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
попробуем провести еще одну не оптимизацию и не рефакторинг с целью избавления от умения вычислять обратное по сложению число. В сумматоре, в исходной версии которого первый и второй параметры - значения складываемых разрядов, а третий - входящий знак переноса, история разбивается на два случая по отношению к полученному знаку переноса. 1) пусть он ноль, сохраняя порядок входных параметров из исходной версии sum, видим следующее abcarry_in carry_out r00000010011000111010 выходные значения вычисляются так: carry_out = a & b; r = a ^ b; или, с использованием ранее вычисленного carry_out: r = (~carry_out) & (a | b); 2) при carry_in = 1 : abcarry_in carry_out r00101011101011011111 то есть carry_out = a | b; r = (a & b) | (~(a | b)); или, с использованием ранее вычисленного carry_out: r = (~carry_out) | (a & b); В обоих случаях возврат, эквивалентный исходному, формируется как return ((carry_out<<1) | r); с сохранением порядка смысловых параметров и результата получаем примерно такое: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
избавляться от plusOne для вычисления exp и count ( exp = plusOne(exp); count = plusOne(count);) можно по разному: для count вместо сложения можно перейти к сдвигу на 1 разряд влево, а от exp, может быть, я предпочел бы вообще отказаться и перешел бы к заполнению битов предварительного результата в обратном порядке, сдвигая его на 1 влево и всегда заполняя младший разряд. Тогда последней операцией при слежении за младшим разрядом должен стать вызов одного из подходящих под "не использовать плюс и минус" вариантов функции обращения битов. Вероятно, я бы сменил тактику со слежения за младшим битом на слежение за старшим, путем путем высекания (a <<1) & 2147483147, cдвигая налево текущее значение пока сдвигаемый также налево на единицу count не превысит 2147483147, тогда реверсный вариант формирования результата автоматически давал бы правильный выходной результат. Выписывать полный код мне неохота. Прошу прощения. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 01:03 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
Последнюю часть мутно написал. В общем, перед слежением за старшим разрядом, надо предварительно развернуть циклическим сдвигом на 32 разряда оба слагаемых. Тогда пазл соберется правильно от старших разрядов. Или оставить все как есть при слежении за младшим, и тем же сдвигом вращать только результат. exp исчезнет в обоих случаях. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 01:53 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
mayton Так было-бы интереснее. Длинная арифметика. Код: java 1.
Есть такой проект. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 02:22 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
Valentin Kolesnikov mayton Так было-бы интереснее. Длинная арифметика. Код: java 1.
Есть такой проект. По сумме двух целых чисел. Насколько я понимаю этот стикер, Код: java 1.
задача может быть задана на собеседовании? Или выдана в качестве тестового задания. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 12:15 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
А вот как работают сумматоры в системотехнике http://texnic.ru/tools/cif_ms/8.html В топике что-бы мы не придумывали - мы создаем имплементацию последовательного сумматора. Кстати мой вариант с параллельным суммированием квартетов битов тут не показан. Зато показан абсолютно параллельный сумматор (комплексность последнего правого элемента просто поражает воображение). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 12:28 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
mayton, сумматоры на java моделировать, не сильно благодарная задача с первого взгляда, имхо. городить объекты там, где в других языках достаточно выходных параметров - сердце кровью обливается. В ее варианте "безопасной объектно-ориентированности" нужно долго думать, чтобы что-то не смешное на объектах нагородить. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 12:46 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
"Программировать на интерпретаторах - себя не уважать". Или умерьте осетра категоричности или выжгите калёным железом всё, начиная с /bin/sh и SIM-карт. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 12:55 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
mayton Valentin Kolesnikov По сумме двух целых чисел. Насколько я понимаю этот стикер, Код: java 1.
задача может быть задана на собеседовании? Или выдана в качестве тестового задания. Это список тэгов. Обычно спрашивают не само решение а то как ты его объясняешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 13:04 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
Такую задачу могут спросить. Нужно понимать как хранятся данные. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 13:07 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
Я обычно так делал. Код: java 1.
И пустую коллекцию создавал. Иначе во всех листовых узлах будет 26 пустых элементов. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 13:15 |
|
LeetCode in Java
|
|||
---|---|---|---|
#18+
Basil A. Sidorov ... ... умерьте осетра ... осетры разные нужны, и многие из них даже важны. Но идеально каждый осетр плавает в своем специфическом контексте. Осетр в бассейне неправильного размера может выглядеь вполне нелепо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 14:31 |
|
|
Start [/forum/topic.php?fid=59&msg=40120681&tid=2120230]: |
0ms |
get settings: |
6ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
34ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
387ms |
get tp. blocked users: |
0ms |
others: | 8ms |
total: | 445ms |
0 / 0 |