Size: a a a

2020 July 03

E

Eugene in RubyRush
т.к. даже когда идею понял отладка все соки выжмет
источник

А

Александр in RubyRush
причем на мой взгляд достаточно похожая задача сидит в 4 кю https://www.codewars.com/kata/5e1ab1b9fe268c0033680e5f
источник

А

Александр in RubyRush
и я ее (почти) решил
источник

А

Александр in RubyRush
решение в лоб находило правильный ответы за слишком длинное время
источник

А

Александр in RubyRush
аналитическое решение почему-то проваливает часть тестов и я не пойму почему и где я не прав
источник

E

Eugene in RubyRush
Александр
аналитическое решение почему-то проваливает часть тестов и я не пойму почему и где я не прав
типовой процесс решения таких задач )
источник

А

Александр in RubyRush
причем с ростом позиции количество ошибок увеличивается
источник

E

Eugene in RubyRush
не учёл значит некоего крайнего случая
источник

E

Eugene in RubyRush
который раз в N элементов происходит
источник

E

Eugene in RubyRush
https://www.codewars.com/kata/59b47ff18bcb77a4d1000076 - вот это нормальная задача
источник

E

Eugene in RubyRush
просто надо брать и программировать, без того чтобы задумываться над вопросами теории чисел )
источник

E

Eugene in RubyRush
и очков накидывают как положено
источник

E

Eugene in RubyRush
я себе рисовал отладочный интерфейс, где паравозики катались в ASCII-art, как у них )
источник

А

Александр in RubyRush
    Test.assert_equals(solve(999999999999999999), 4) 
   Test.assert_equals(solve(1000000000000000000), 1)
   Test.assert_equals(solve(999999999999999993), 7)


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

А

Александр in RubyRush
у меня даже эксель в такие цифры не умеет
источник

А

Александр in RubyRush
где я мог бы пошагово свой алгоритм проверить
источник

E

Eugene in RubyRush
https://www.codewars.com/kata/5309441451e700dea00000f4 - я эту задачу решил, кажется, ТРЕМЯ способами
источник

E

Eugene in RubyRush
НИ ОДИН ИЗ НИХ не совпадает с контрольным вариантом
источник

E

Eugene in RubyRush
плюс я ещё вообще долго разбирался, чё от меня хотят и чё там за runtime-контекст
источник

А

Александр in RubyRush
у меня идея в целом какая. Берем все однозначные числа. Их 9, длина каждого - 1 символ
Значит длина первого - 1, последнего 9, с шагом 1, сумма первых 9 чисел (1 + 9) / 2 * 9 (сумма арифметической прогрессии) = 45
Если наша позиция больше - вычитаем 45 идем дальше

Длина первого блока для двузначного числа = 9 + 2 = 11, всего двузначных числе 90, длина последнего - 189, сумма прогрессии - 9000
Дальше для 3, 4, 5 значных и так до тех пор пока не получим, что сумма прогрессии для n-значных чисел превышает наш остаток

Дальше вычисляем в каком из блоков для n-значных чисел находится наш ответ

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

Дальше получается уже чуть проще - длина всех 1-значных - 9, всех двузначных - 2*90, трехзначных - 3*900 - в находим казалось бы в конце число, внутри которого на нужной позиции стоит искомая цифра, но...500 правильных тестов и 1000 неправильных...и все неправильные на таких числах что вручную проверять нереально
источник