Перейти к публикации
  • Сейчас на странице   Всего пользователей: 1   (0 пользователей, 1 гость)

Rooster

Программирование[11]

var  

292 пользователя проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

(изменено)
  mercury23 написал 02.11.2024 в 19:41:

мужики, я (пока) не погромист, и встал с задачей

 

короче задача - посчитать количество чисел от 1 до 2^63 с суммой цифр, равной 159

 

я допёр, что 2^63 это 19значное число, максимальная сумма цифр 19-значного числа это 171

18значного числа 162

17значного числа 153

 

таким образом это 18-19значные числа

 

если просто пробежать от 699 999 999 999 999 999 (минимальное 18значное число, сумма цифр которого 159) до 2^63 пробежать и посчитать сумму цифр, даже если это многопоточкой на 8 потоков на 8ядерном пека разбить, будет считаться несколько лет

 

обращался к чат гпт, он посоветовал сделать массив m*n, где m - количество цифр в числе, а n - сумма цифр в числе

и в теории этот массив можно заполнить, левый его верхний угол выглядит как-то так:

 

1    1    1     1      1      1      1    
1    2    3     4      5      6      7    
1    3    6     10   15    21    28   
1    4    10   20   35    56    84   
1    5    15   35   70    126  210  
1    6    21   56   126  252  462  

 

данное решение в ячейке [19][159] найдёт количество 19значных чисел, сумма цифр которых 159

в ячейке [18][159] найдёт количество 18значных чисел, сумма цифр которых 159

 

но если это сложить, то мы получим сумму цифр от 1 до 10^19 - 1

а 2^63 несколько меньше

 

короче я встрял, 300к наносеки помогите позязя 

 

@Zhenek если поможешь хотя бы на 2/3 или даже 1/2 решить задачу, буду очень признателен

 

Показать больше  

не думал просто расписать все варианты того как можно получить число 159 суммой цифр, а затем посчитать количество перестановок?

если это только 18 и 19 числа то там не так уж и много вариантов, а перестановки считают по комбинаторной формуле


Изменено пользователем Just.Doit

 

очень крутые котейки


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
(изменено)
  Just.Doit написал 02.11.2024 в 20:03:
  mercury23 написал 02.11.2024 в 19:41:

не думал просто расписать все варианты того как можно получить число 159 суммой цифр, а затем посчитать количество перестановок?

если это только 18 и 19 числа то там не так уж и много вариантов

была такая идея

 

если бы число было близко к 171, то есть 170 или 169, то можно было бы перебрать, типа для 170 тасовать восьмерку, для 169  две восьмёрки или 1 семёрку

159 далековато от 171 и слишком дохуища перебрать наверное

 

помимо этого, это не решает проблему того, что число должно быть меньше 9223372036854775808 (2^63)

я про то, что для суммы в 170:

9 899 999 999 999 999 999 не подходит к примеру

8 999 999 999 999 999 999 подходит, так как меньше 2^63

 

p.s. фактически мне чатгпт решил задачу, только не до 9223372036854775808, а до 9 999 999 999 999 999 999


Изменено пользователем mercury23

Поделиться сообщением


Ссылка на сообщение
  mercury23 написал 02.11.2024 в 19:41:

мужики, я (пока) не погромист, и встал с задачей

 

короче задача - посчитать количество чисел от 1 до 2^63 с суммой цифр, равной 159

 

я допёр, что 2^63 это 19значное число, максимальная сумма цифр 19-значного числа это 171

18значного числа 162

17значного числа 153

 

таким образом это 18-19значные числа

 

если просто пробежать от 699 999 999 999 999 999 (минимальное 18значное число, сумма цифр которого 159) до 2^63 пробежать и посчитать сумму цифр, даже если это многопоточкой на 8 потоков на 8ядерном пека разбить, будет считаться несколько лет

 

обращался к чат гпт, он посоветовал сделать массив m*n, где m - количество цифр в числе, а n - сумма цифр в числе

и в теории этот массив можно заполнить, левый его верхний угол выглядит как-то так:

 

1    1    1     1      1      1      1    
1    2    3     4      5      6      7    
1    3    6     10   15    21    28   
1    4    10   20   35    56    84   
1    5    15   35   70    126  210  
1    6    21   56   126  252  462  

 

данное решение в ячейке [19][159] найдёт количество 19значных чисел, сумма цифр которых 159

в ячейке [18][159] найдёт количество 18значных чисел, сумма цифр которых 159

 

но если это сложить, то мы получим сумму цифр от 1 до 10^19 - 1

а 2^63 несколько меньше (на 8%, и находит 84 миллиона вместо ответа в 34 миллиона с копейками)

 

короче я встрял, 300к наносеки помогите позязя 

 

@Zhenek если поможешь хотя бы на 2/3 или даже 1/2 решить задачу, буду очень признателен

 

Показать больше  

Откуда задача-то?


WoW POE

Поделиться сообщением


Ссылка на сообщение
  mercury23 написал 02.11.2024 в 20:10:
  Just.Doit написал 02.11.2024 в 20:03:

была такая идея

 

если бы число было близко к 171, то есть 170 или 169, то можно было бы перебрать, типа для 170 тасовать восьмерку, для 169  две восьмёрки или 1 семёрку

159 далековато от 171 и слишком дохуища перебрать наверное

 

помимо этого, это не решает проблему того, что число должно быть меньше 9223372036854775808 (2^63)

я про то, что для суммы в 170:

9 899 999 999 999 999 999 не подходит к примеру

8 999 999 999 999 999 999 подходит, так как меньше 2^63

 

Показать больше  

 

> и слишком дохуища перебрать наверное

по прикидке - не очень. там их штук 100-200, кажется

их даже все можно расписать в качестве массивов

> помимо этого, это не решает проблему того, что число должно быть меньше

ну это уже вторая часть задачи. тоже решаемая кмк.


 

очень крутые котейки


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
  Zhenek написал 02.11.2024 в 20:17:
  mercury23 написал 02.11.2024 в 19:41:

Откуда задача-то?

собес джуна на галеру

 

школьник спросил знакомый :omegalul:

я ему накодил подсчёт суммы цифр в цикле через рекурсию, за 3 минуты программа до 20 миллионов доползла, добавил к рекурсии кеш рекурсии, сильно быстрее не стало:ponimau: 

сказал что подумаю на выходных и вот, сижу 5й час в ахуе 

Поделиться сообщением


Ссылка на сообщение

я не знаю, за покраску кнопок готовы пол миллиона платить

когда этот школьник вырастет, ему чем платить будут? ввп россии?

 


VyMEtE8XtOI.jpg

  лучшая цитата финта+жизненная

Поделиться сообщением


Ссылка на сообщение
  mercury23 написал 02.11.2024 в 20:28:
  Zhenek написал 02.11.2024 в 20:17:

собес джуна на галеру

 

школьник спросил знакомый :omegalul:

я ему накодил подсчёт суммы цифр в цикле через рекурсию, за 3 минуты программа до 20 миллионов доползла, добавил к рекурсии кеш рекурсии, сильно быстрее не стало:ponimau: 

сказал что подумаю на выходных и вот, сижу 5й час в ахуе 

Бля. Я к сожалению в таком не спец, однако верю, что это именно про то, что тебе нужно

 

https://stackoverflow.com/questions/22394257/how-to-count-integers-between-large-a-and-b-with-a-certain-property?noredirect=1&lq=1

mercury23 понравилось это

WoW POE

Поделиться сообщением


Ссылка на сообщение
  Just.Doit написал 02.11.2024 в 20:19:
  mercury23 написал 02.11.2024 в 20:10:

 

> и слишком дохуища перебрать наверное

по прикидке - не очень. там их штук 100-200, кажется

их даже все можно расписать в качестве массивов

> помимо этого, это не решает проблему того, что число должно быть меньше

ну это уже вторая часть задачи. тоже решаемая кмк.

Показать больше  

я попробую завтра, правда не понял пока как организовать перебор, но ниче, разберусь наверное, чатгпт поможет, надеюсь

  scarppy написал 02.11.2024 в 20:29:

я не знаю, за покраску кнопок готовы пол миллиона платить

когда этот школьник вырастет, ему чем платить будут? ввп россии?

 

он в итмо на курсы ходит, хочет на кафедру парфёнова поступать, короче немного нестандартный школьник

  Zhenek написал 02.11.2024 в 20:31:
  mercury23 написал 02.11.2024 в 20:28:
Показать больше  

Бля. Я к сожалению в таком не спец, однако верю, что это именно про то, что тебе нужно

 

https://stackoverflow.com/questions/22394257/how-to-count-integers-between-large-a-and-b-with-a-certain-property?noredirect=1&lq=1

сяп, ща почитаю

scarppy понравилось это

Поделиться сообщением


Ссылка на сообщение
  mercury23 написал 02.11.2024 в 19:41:

 помогите позязя 

  Показать содержимое

Рабочка

mercury23 понравилось это

 

DB


Я - гений, ёпта


22

Поделиться сообщением


Ссылка на сообщение
  mercury23 написал 02.11.2024 в 20:33:
  Zhenek написал 02.11.2024 в 20:31:

сяп, ща почитаю

Сам уже решай, на 1/2 или на 2/3 помог :onneponimaet:


WoW POE

Поделиться сообщением


Ссылка на сообщение
(изменено)
  Zhenek написал 02.11.2024 в 20:46:
  mercury23 написал 02.11.2024 в 20:33:

Сам уже решай, на 1/2 или на 2/3 помог :onneponimaet:

там в твоей ссылке есть решение, для примера сумма цифр 60

 

вроде на 3/3 помог, получается:EZ::kaifstelish:

  Arzanis написал 02.11.2024 в 20:45:
  mercury23 написал 02.11.2024 в 19:41:
  Показать содержимое

Рабочка

спасибо, завтра почитаю если с решением с стек оверфлоу затуплю

 

сабж можно клоз, всем огромная благодарность


Изменено пользователем mercury23

Поделиться сообщением


Ссылка на сообщение

Таки LLM много че изменили, в другое время пришлось бы сидеть и думать, а щас, за 1 минуту тебе выдается результат, да возможно не самый оптимальный/красивый, но все же...

 

def count_numbers_with_digit_sum(limit, target_sum):
    limit_digits = [int(d) for d in str(limit)]
    memo = {}

    def dp(pos, sum_so_far, tight, isStart):
        if sum_so_far > target_sum:
            return 0
        if pos == len(limit_digits):
            return int(isStart and sum_so_far == target_sum)
        key = (pos, sum_so_far, tight, isStart)
        if key in memo:
            return memo[key]
        total = 0
        max_digit = limit_digits[pos] if tight else 9
        for digit in range(0, max_digit + 1):
            new_tight = tight and (digit == limit_digits[pos])
            new_isStart = isStart or digit != 0
            if not new_isStart:
                # Leading zeros, don't add to sum
                total += dp(pos + 1, sum_so_far, new_tight, new_isStart)
            else:
                total += dp(pos + 1, sum_so_far + digit, new_tight, new_isStart)
        memo[key] = total
        return total

    return dp(0, 0, True, False)

def main():
    limit = 2 ** 63
    target_sum = 159
    result = count_numbers_with_digit_sum(limit, target_sum)
    print(result)

if __name__ == "__main__":
    main()

 

mercury23 понравилось это

Поделиться сообщением


Ссылка на сообщение

Ну это классическая задачка на динамику, под такие задачки даже более узкую тему придумали digit dp 

 

  Drakonian написал 02.11.2024 в 22:53:

не самый оптимальный/красивый

Ну да в питоне есть memo из коробки – декоратор @cache имбовая штука для решения дп задачек на литкоде 

mercury23 понравилось это

 

Поделиться сообщением


Ссылка на сообщение
  mercury23 написал 02.11.2024 в 20:33:

чатгпт поможет

Так сразу спросил бы у него в чем проблема

Поделиться сообщением


Ссылка на сообщение
  thousand cursed enemies написал 02.11.2024 в 08:49:

На хаскеле и ассемблере пишут конченные долбоебы. Русвермы. 

haskell прям заебись на самом деле

 

я тут его в рамках курса по ФП прохожу и в целом мне кажется можно поставить

этого персонажа на пьедестал 'языки на которых приятно писать код' на равне с лиспом

 

но чтобы оценить охуенность происходящего, надо конечно почитать что-нибудь

хотя бы на тему формального интуиционистского исчисления высказываний

 

там (в теории доказательств) одна теорема [double negation translation], вернее её конструктивное доказательство

является предтечей хаскельных монад и монадических операций, а конкретно continuation monad

Поделиться сообщением


Ссылка на сообщение

как выглядят те самые хаскел и лисп программисты в 2024 году

spacer.png

Kurku понравилось это

Поделиться сообщением


Ссылка на сообщение

ну я не курю разве что, но в остальном ровно так я/мой рабочий стол и выглядят :onneponimaet:

  Drakonian написал 02.11.2024 в 22:53:

Таки LLM много че изменили, в другое время пришлось бы сидеть и думать, а щас, за 1 минуту тебе выдается результат, да возможно не самый оптимальный/красивый, но все же...

прикольно кстати, реально работает

но код конечно говно ваще мешанина)

 

по-человечески у нас задача делится на две части:

1. подсчет ответа на отрезке [0, 10^k - 1] (тривиально)

2. подсчет на произвольном отрезке [0, b] через пункт 1

 

  Показать содержимое

Поделиться сообщением


Ссылка на сообщение
  Kurku написал 03.11.2024 в 11:07:

ну я не курю разве что, но в остальном ровно так я/мой рабочий стол и выглядят :onneponimaet:

сочувствую

то ли дело мобильные разработчики, на маке с чистым столом (жена отполировала), еще и пыль иногда собирается от простоя 

Поделиться сообщением


Ссылка на сообщение
  Arzanis написал 30.10.2024 в 14:22:

Кто работает в ВТБ меньше чем за 500, тот лох.

я как то собесился в втб на фронтенд чисто по приколу тех собес пройти, изи прошел но не хотел идти к ним как раз из за этой хуеты с анальным зондированием и вармами хуярмами
когда речь зашла об офере чисто по приколу сказал надо 800к что на тот момент было очень дохуя (в районе 2х лет назад), они подумали и согласились ,и было типа 500 в месяц нал остальное годовой премией добивается
я все равно послал нах их бля

Arzanis и scarppy понравилось это

Поделиться сообщением


Ссылка на сообщение
(изменено)
  Tia написал 03.11.2024 в 20:28:
  Arzanis написал 30.10.2024 в 14:22:

я как то собесился в втб на фронтенд чисто по приколу тех собес пройти, изи прошел но не хотел идти к ним как раз из за этой хуеты с анальным зондированием и вармами хуярмами
когда речь зашла об офере чисто по приколу сказал надо 800к что на тот момент было очень дохуя (в районе 2х лет назад), они подумали и согласились ,и было типа 500 в месяц нал остальное годовой премией добивается
я все равно послал нах их бля

 

дурак

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


Изменено пользователем universal

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.


×
×
  • Создать...