Лет 10 назад решал ту же задачу, и получил почти такую же систему! Было несколько отличий только. 1) Букву e я тоже додумался сделать смягчающей, чтобы не писать дифтонг ie, но в йотированной позиции я предлагаю оставлять je. Слова типа redkolesje, jem, rojem читаются интуитивнее в этой системе, чем em, roem, а для сочетания "ье" все равно без j не обойтись. 2) Для твердого знака я предлагаю использовать апостроф, что знакомо по хрущевской азбуке: pod'jezd, s'jezd. Сохраняется возможность передать твердость согласного перед j, которая иначе утрачивается. 3) Из первых двух пунктов вытекает элегантное решение по букве э: в начале слов и после гласных e читается как э: eto, elektrichestvo, koefficijent. После же согласных e читается как э, если отделена апострофом: polit'emigrant, s'ekonomitj. 4) Разбивать дифтонги тоже предлагаю апострофом: idi'ot. H остаётся только для сочетаний sh, ch. 5) Букву щ я думал передавать как shch. С одной стороны, это длинее, чем sch, с другой стороны, слов с сочетанием "шч" гораздо меньше, чем "сч", и перепутать сложнее. Там, где такое сочетание есть, поможет опять апостроф: vesnush'chatyj.
Автор, вы крут. Я зацепился за этот пост, потому что мне показалось, что так не может получиться, и вы наверняка где-то ошиблись и вылезет линия всё равно. Но нет, линия не вылезает. В итоге я два дня искал статьи по теме, и кое-что нашел.
Первое: сама проблема целиком рассматривается в этой статье: https://hal.science/hal-02049558v1/file/Triangle-1.pdf См. Theorem 2, и на 8 странице ваш трюк с делением c на GCD(a,b) с округлением вниз. Но в этой статье все равно в формуле есть линейная сумма до в худшем случае min(cost1, cost2).
Далее женится это довольно прямолинейно, только заменой в сумме j = floor(r/b) - i и переменой порядка суммирования на обратный мы добивается того, что под floor все коэффициенты положительны.
Код:
`
int64_t gcdEx(int64_t a, int64_t b, int64_t &x, int64_t &y) { if (b == 0) { x = 1; y = 0; return a; }
if (b > a) return gcdEx(b, a, y, x);
int64_t xx, yy;
int64_t d = gcdEx(b, a % b, xx, yy);
y = xx - a/b*yy;
x = yy;
return d;
}
int64_t magicSum(int64_t a, int64_t b, int64_t c, int64_t n) { if(!a) return (b / c) * (n + 1);
if(a >= c or b >= c)
return ( ( n * (n + 1) ) / 2) * (a / c) + (n + 1) * (b / c) +
magicSum(a % c, b % c, c, n);
int64_t m = (a * n + b) / c;
return m * n - magicSum(c, c - b - 1, a, m - 1);
}
int64_t countPoints(int64_t a, int64_t b, int64_t c) { if (b < a) { int64_t t = b; b = a; a = t; }
int64_t x0, y0;
int64_t d = gcdEx(a, b, x0, y0);
a /= d;
b /= d;
c /= d;
int64_t q = c / (a * b);
int64_t r = c - q * a * b;
int64_t r_over_b_floor = r / b;
return -a * b * q * q / 2 + (a + b + 1 + 2 * c) * q / 2 + (r_over_b_floor + 1) +
magicSum(b, r - r_over_b_floor * b, a, r_over_b_floor);
Автору: правда, сходите к психотерапевту. Я пошел, когда стало гораздо хуже, лучше бы пошел раньше.
По сути статьи: все верно, такой тренд есть, и, более того, он проявляется отчетливее в каждой компании по мере приближения крендеца. Так что тактически — надо искать другие варианты трудоустройства.
Стратегически, почему это все происходит так? Потому что качество измерить труднее, чем скорость. Чтобы оценить качество когда, начальник сам должен быть кодером, или он должен давать кодеру абсолютный карт-бланш, что означает ситуацию редкого для любой крупной иерархической структуры доверия. Чтобы оценить скорость, достаточно иметь часы на стене. Поэтому и такой результат. Автор пишет, что повторяет ерунду за проджект менеджарми на планерках — именно так и ссучиваются, в том числе и в первую очередь лиды и сениоры, кому есть что терять, а кто не ссучивается, тот уходит. А прожекты тоже, скорее всего, не бараны, а сами между молотом и наковальней, и им, конечно, проще перевалить боль вниз (а если не проще, то вы их не видите, потому что они уже ушли из конторы). Если вы пойдете вверх по цепочке, скорее всего, где-то вы найдете человека, утратившего связь с реальностью, которому его подчиненные только поддакивают, а он им верит, потому что ему психологически удобнее им верить, чем осознать, что то, что он делает, обречено и не имеет смысла. Иногда таким человеком может быть заказчик, а не начальник. Иногда — инвестор. Реже — все доверху прожженные циники, и ведут свой стартап к продаже или даже к IPO. Тогда с реальностью нелады у руководителя из той корпорации, которая их покупает, или непосредственно у жадной и глупой публики. Хотя корпорация сама торгует воздухом в виде своих акций, и без этого героина сама уже не может функционировать, так что, быть может, и она цинична сверху донизу, покупая крутые проектики ради шумихи в СМИ и "перспектив роста", подстегивающих курс акций. А всякие инвестиционные фонды, скупающие эти акции, тоже могут оказаться циниками, ведь чтобы они в свою очередь могли привлекать деньги, им надо что-то показать у себя в портфеле акций, во что-то же им надо инвестироваться и показывать взрывной рост. А тут история точно такая же, как и в разработке: доходность измерить легко, а вот риск — непросто, поэтому ты можешь обосновать с умным лицом, почему Тесла или Убер обанкротится, например, но что ты предложишь взамен? Поэтому наплаву остались только те, кто закрывают глаза и срезают углы, и излучают оптимизм, улыбаются и машут. В итоге этот мусор оседает у крупных банков и пенсионных фондов, которые надеются, что государство американское их в беде не оставит, а также у всяких китайцев, которые это десятилетиями делали вынужденно, вкладывая в Америку вырученные от продажи американцам же товары. Американцы думали, что они китайцев обманывают, а китайцы на самом деле обманывали их, так как им нужны были все эти рынки для того, чтобы освоить технологии. Из-за этого вся свара сейчас. Обрезать канаты все тоже боятся, потому что любое изменение статус-кво сейчас чревато резким падением и толпами с вилами на улицах, поэтому Обама или Трамп — все одно. Китайцы ждут, потому что время играет на них, они планировали все сделать к 2025 году, Трамп своими санкциями это затягивает, но по большому счету ничего поменять не может. Его задача — вытянуть до выборов, а потом можно разгуляться. Задача демократов — прямо противоположная. В странное время мы живем. Либо 1938 год на дворе, либо 1988 — то ли война, то ли перестройка. В любом случае, скоро все эти проблемы уйдут на второй план и уступят более насущным, за 200+ мучиться больше не придется, мы все счастливо обретем смысл, но, вероятно, сильно потеряем в уровне жизни.
Статья совершенно правильно и справедливо изобличает аджайл.
От себя добавлю еще несколько граней проблемы:
Во-первых, не всегда все зло идет от исполнителя. Очень часто оно идет от заказчика, и это для многих главный мотив смотреть в сторону аджайла. Заказчик, неспособный внятно сформулировать свою проблему и требуемые характеристики решения, особенно если он ещё и неспособен понять, что он неспособен — это чума и проклятье, потому что по мере прогресса он будет постоянно менять требования, вносить «маленькие» изменения, не считаясь с глубиной требуемых преобразований, будет вдруг вспоминать «самоочевидные» требования и иначе пить вашу кровь. В аналогии с ремонтом это взбалмошная домохозяйка, которая никак не видит конечного результата, приходит к вам каждый день на стройку и просит «перенести вот сюда розеточку» или ее осеняет новая гениальная идея, что-де надо вот тут все покрыть ламинатом, повесить огромную люстру и забабахать теплый пол, и вот тогда точно совсем шик будет, а на другой день она говорит, что тут нужна плитка, и она не помнит, чтобы она что-то говорила про ламинат. Да, вы можете просто отказаться работать с таким клиентом, но придет мужик с аджайлом и заберет себе этот заказ и эти деньги.
Во-вторых, аджайл очень кстати приходится, когда нужно оправдать полный бардак и ужас. Нигде в аджайле вроде бы неинаписано, что качество должно быть дерьмо, что не нужен кодстайл гайд или не должно в принципе быть никакого планирования сверх двух недель, но вся эта философия (как и полагается настоящей философии) составлена настолько абстрактно, что всяк ищущий да обрящет нужную себе трактовку. Совершенно понятно, что изматывая команду жесткими ежедвухнедельнымт дедлайнами, забив на качество кода и поправ планировпние в пользу одноразовых «костылей» можно в краткосрочной перспективе повысить отдачу — и на это руководители и ведутся. Пока станет очевидно, что код превратился в нечитаемый и нераспутываемый гигантский клубок, словно колтун на теле бродячей собаки, и его можно только выкинуть и написать заново, а лучшие инженеры разбежались, проходит достаточное количество времени. Как говорится в старом советском анекдоте, руководитель от предшественника получает три конверта: в первом надпись «вали всё на меня», во втором — «признай ошибки и проведи реорганизацию», в третьем — «готовь три конверта». Вот на втором этапе аддайл и пригождается, что дает ему непреходящую популярность.
В-третьих, аджайл работает, как секта: настоящий аджайл предусматривает наличие сертифицированного скрам-мастера, как правило — со стороны, и должностенка очень непыльная: знай — ходи, объясняй с умным видом, как другим людям жить надо, а ответственности — никакой. Неудивительно, что пророки размножаются почкованием со страшной скоростью и несут свой свет в массы. В этой роли они конкурируют с индийскими гуру, выступающими в Сбербанке, и санлайтом, утащившим на дно Уралсиб. Это происходит все вполне в духе современных мистических веяний и трудной экономической обстановке. Погреть руки еа чужой беде желающих завсегда хоть отбавляй.
В-чнтвертых, если уж выискивать в аджайла зерна здравого смысла, то надо сказать, что в каком-то облагороженном виде он подходит для опытно-конструкторских разработок и прочей кустарщины. Дело в том, что если ты не знаешь, как сделать то, что тебе надо сделать, то писать детальный план в общем-то бесполезно. Когда ты строишь дом по отточеным технологиям или ваяешь сайты, ты можешь хотя бы примерно все оценить, расписать и распланировать. Если ты делаешь что-то первый раз в истории, какой-нибудь новый, технологически насыщенный продукт с долей исследовательского труда, то никакой альтернативы итеративному подходу нет. Например, если вас заказчик попросит построить дом из пивных бутылок, едва ли вы четко ответите на все вопросы до того, как сможете начать выполнять план — надо брать и пробовать, ввязаться в бой, а там посмотрим. Тут вам пригодится аджайл.
В-пятых, я считаю, что многие проблемы современной разработки ПО идут корнями в принципиально устаревшую технологию создания программ. Вначале компьютеры программировались переключением перемычек, но довольно быстро, по мере роста сложности программ, с этого подхода переключились на перфоленты и перфокарты, а потом и на языки программирования, которые довольно быстро сэволюционировали до Си и потом с++. После этого ничего принципиально не менялось долгое время, а сложность программ продолжала расти, что выливалось во все больший объем кода. Вместо новых прорывов в способах написания кода прогресс пошел в основном по линии усовершенствоаания разделения труда — с помощью паттернов программирования, методологий организации команд, технологий хранения кода и совместной работы над ним, автоматизации тестирования и сборки, и т. п. Но у всего есть предел, и в основе всего — вме те же полотнища текста, что в современном мире визуального, рилтаймового пользовательского интерфейса смотрится весьма и весьма архаично. Последние годы народ ударился в специализировованные под узкие задачи языки программирования — для веб-разработки, для мобильников, для раьоты с данными, — но все они по сути своей примитивнее с++, решают лишь частные проблемы, и плодят многочисленные ограничения, ниши, и тонны скопированного кода. В ту же сторону пошел и сам с++, где с 11 версии в стандарт языка начали сваливать кучу всевозможных частных решений под типовые задачи. По сути, мы видим кризис и острую потребность в новой революции в программировании, нечто, что выведет написание кода на уровень современного CAD-проектирования, например, что-то задействующее современные возможности среды и интерфейсов в полной мере.
Лет 10 назад решал ту же задачу, и получил почти такую же систему! Было несколько отличий только. 1) Букву e я тоже додумался сделать смягчающей, чтобы не писать дифтонг ie, но в йотированной позиции я предлагаю оставлять je. Слова типа redkolesje, jem, rojem читаются интуитивнее в этой системе, чем em, roem, а для сочетания "ье" все равно без j не обойтись. 2) Для твердого знака я предлагаю использовать апостроф, что знакомо по хрущевской азбуке: pod'jezd, s'jezd. Сохраняется возможность передать твердость согласного перед j, которая иначе утрачивается. 3) Из первых двух пунктов вытекает элегантное решение по букве э: в начале слов и после гласных e читается как э: eto, elektrichestvo, koefficijent. После же согласных e читается как э, если отделена апострофом: polit'emigrant, s'ekonomitj. 4) Разбивать дифтонги тоже предлагаю апострофом: idi'ot. H остаётся только для сочетаний sh, ch. 5) Букву щ я думал передавать как shch. С одной стороны, это длинее, чем sch, с другой стороны, слов с сочетанием "шч" гораздо меньше, чем "сч", и перепутать сложнее. Там, где такое сочетание есть, поможет опять апостроф: vesnush'chatyj.
Жаль (
а тут можно менять комменты?
Автор, вы крут. Я зацепился за этот пост, потому что мне показалось, что так не может получиться, и вы наверняка где-то ошиблись и вылезет линия всё равно. Но нет, линия не вылезает. В итоге я два дня искал статьи по теме, и кое-что нашел.
Первое: сама проблема целиком рассматривается в этой статье: https://hal.science/hal-02049558v1/file/Triangle-1.pdf См. Theorem 2, и на 8 странице ваш трюк с делением c на GCD(a,b) с округлением вниз. Но в этой статье все равно в формуле есть линейная сумма до в худшем случае min(cost1, cost2).
Второе: нашел замечательный красивый вывод рекуррентного соотношения для случая более общего, чем у вас, но нужного для формулы из статьи: https://asfjwd.github.io/2020-04-24-floor-sum-ap/
Далее женится это довольно прямолинейно, только заменой в сумме j = floor(r/b) - i и переменой порядка суммирования на обратный мы добивается того, что под floor все коэффициенты положительны.
Код:
`
int64_t gcdEx(int64_t a, int64_t b, int64_t &x, int64_t &y)
{
if (b == 0)
{
x = 1;
y = 0;
return a;
}
}
int64_t magicSum(int64_t a, int64_t b, int64_t c, int64_t n)
{
if(!a)
return (b / c) * (n + 1);
}
int64_t countPoints(int64_t a, int64_t b, int64_t c)
{
if (b < a)
{
int64_t t = b;
b = a;
a = t;
}
}
`
Автору: правда, сходите к психотерапевту. Я пошел, когда стало гораздо хуже, лучше бы пошел раньше.
По сути статьи: все верно, такой тренд есть, и, более того, он проявляется отчетливее в каждой компании по мере приближения крендеца. Так что тактически — надо искать другие варианты трудоустройства.
Стратегически, почему это все происходит так? Потому что качество измерить труднее, чем скорость. Чтобы оценить качество когда, начальник сам должен быть кодером, или он должен давать кодеру абсолютный карт-бланш, что означает ситуацию редкого для любой крупной иерархической структуры доверия. Чтобы оценить скорость, достаточно иметь часы на стене. Поэтому и такой результат. Автор пишет, что повторяет ерунду за проджект менеджарми на планерках — именно так и ссучиваются, в том числе и в первую очередь лиды и сениоры, кому есть что терять, а кто не ссучивается, тот уходит. А прожекты тоже, скорее всего, не бараны, а сами между молотом и наковальней, и им, конечно, проще перевалить боль вниз (а если не проще, то вы их не видите, потому что они уже ушли из конторы). Если вы пойдете вверх по цепочке, скорее всего, где-то вы найдете человека, утратившего связь с реальностью, которому его подчиненные только поддакивают, а он им верит, потому что ему психологически удобнее им верить, чем осознать, что то, что он делает, обречено и не имеет смысла. Иногда таким человеком может быть заказчик, а не начальник. Иногда — инвестор. Реже — все доверху прожженные циники, и ведут свой стартап к продаже или даже к IPO. Тогда с реальностью нелады у руководителя из той корпорации, которая их покупает, или непосредственно у жадной и глупой публики. Хотя корпорация сама торгует воздухом в виде своих акций, и без этого героина сама уже не может функционировать, так что, быть может, и она цинична сверху донизу, покупая крутые проектики ради шумихи в СМИ и "перспектив роста", подстегивающих курс акций. А всякие инвестиционные фонды, скупающие эти акции, тоже могут оказаться циниками, ведь чтобы они в свою очередь могли привлекать деньги, им надо что-то показать у себя в портфеле акций, во что-то же им надо инвестироваться и показывать взрывной рост. А тут история точно такая же, как и в разработке: доходность измерить легко, а вот риск — непросто, поэтому ты можешь обосновать с умным лицом, почему Тесла или Убер обанкротится, например, но что ты предложишь взамен? Поэтому наплаву остались только те, кто закрывают глаза и срезают углы, и излучают оптимизм, улыбаются и машут. В итоге этот мусор оседает у крупных банков и пенсионных фондов, которые надеются, что государство американское их в беде не оставит, а также у всяких китайцев, которые это десятилетиями делали вынужденно, вкладывая в Америку вырученные от продажи американцам же товары. Американцы думали, что они китайцев обманывают, а китайцы на самом деле обманывали их, так как им нужны были все эти рынки для того, чтобы освоить технологии. Из-за этого вся свара сейчас. Обрезать канаты все тоже боятся, потому что любое изменение статус-кво сейчас чревато резким падением и толпами с вилами на улицах, поэтому Обама или Трамп — все одно. Китайцы ждут, потому что время играет на них, они планировали все сделать к 2025 году, Трамп своими санкциями это затягивает, но по большому счету ничего поменять не может. Его задача — вытянуть до выборов, а потом можно разгуляться. Задача демократов — прямо противоположная. В странное время мы живем. Либо 1938 год на дворе, либо 1988 — то ли война, то ли перестройка. В любом случае, скоро все эти проблемы уйдут на второй план и уступят более насущным, за 200+ мучиться больше не придется, мы все счастливо обретем смысл, но, вероятно, сильно потеряем в уровне жизни.
От себя добавлю еще несколько граней проблемы:
Во-первых, не всегда все зло идет от исполнителя. Очень часто оно идет от заказчика, и это для многих главный мотив смотреть в сторону аджайла. Заказчик, неспособный внятно сформулировать свою проблему и требуемые характеристики решения, особенно если он ещё и неспособен понять, что он неспособен — это чума и проклятье, потому что по мере прогресса он будет постоянно менять требования, вносить «маленькие» изменения, не считаясь с глубиной требуемых преобразований, будет вдруг вспоминать «самоочевидные» требования и иначе пить вашу кровь. В аналогии с ремонтом это взбалмошная домохозяйка, которая никак не видит конечного результата, приходит к вам каждый день на стройку и просит «перенести вот сюда розеточку» или ее осеняет новая гениальная идея, что-де надо вот тут все покрыть ламинатом, повесить огромную люстру и забабахать теплый пол, и вот тогда точно совсем шик будет, а на другой день она говорит, что тут нужна плитка, и она не помнит, чтобы она что-то говорила про ламинат. Да, вы можете просто отказаться работать с таким клиентом, но придет мужик с аджайлом и заберет себе этот заказ и эти деньги.
Во-вторых, аджайл очень кстати приходится, когда нужно оправдать полный бардак и ужас. Нигде в аджайле вроде бы неинаписано, что качество должно быть дерьмо, что не нужен кодстайл гайд или не должно в принципе быть никакого планирования сверх двух недель, но вся эта философия (как и полагается настоящей философии) составлена настолько абстрактно, что всяк ищущий да обрящет нужную себе трактовку. Совершенно понятно, что изматывая команду жесткими ежедвухнедельнымт дедлайнами, забив на качество кода и поправ планировпние в пользу одноразовых «костылей» можно в краткосрочной перспективе повысить отдачу — и на это руководители и ведутся. Пока станет очевидно, что код превратился в нечитаемый и нераспутываемый гигантский клубок, словно колтун на теле бродячей собаки, и его можно только выкинуть и написать заново, а лучшие инженеры разбежались, проходит достаточное количество времени. Как говорится в старом советском анекдоте, руководитель от предшественника получает три конверта: в первом надпись «вали всё на меня», во втором — «признай ошибки и проведи реорганизацию», в третьем — «готовь три конверта». Вот на втором этапе аддайл и пригождается, что дает ему непреходящую популярность.
В-третьих, аджайл работает, как секта: настоящий аджайл предусматривает наличие сертифицированного скрам-мастера, как правило — со стороны, и должностенка очень непыльная: знай — ходи, объясняй с умным видом, как другим людям жить надо, а ответственности — никакой. Неудивительно, что пророки размножаются почкованием со страшной скоростью и несут свой свет в массы. В этой роли они конкурируют с индийскими гуру, выступающими в Сбербанке, и санлайтом, утащившим на дно Уралсиб. Это происходит все вполне в духе современных мистических веяний и трудной экономической обстановке. Погреть руки еа чужой беде желающих завсегда хоть отбавляй.
В-чнтвертых, если уж выискивать в аджайла зерна здравого смысла, то надо сказать, что в каком-то облагороженном виде он подходит для опытно-конструкторских разработок и прочей кустарщины. Дело в том, что если ты не знаешь, как сделать то, что тебе надо сделать, то писать детальный план в общем-то бесполезно. Когда ты строишь дом по отточеным технологиям или ваяешь сайты, ты можешь хотя бы примерно все оценить, расписать и распланировать. Если ты делаешь что-то первый раз в истории, какой-нибудь новый, технологически насыщенный продукт с долей исследовательского труда, то никакой альтернативы итеративному подходу нет. Например, если вас заказчик попросит построить дом из пивных бутылок, едва ли вы четко ответите на все вопросы до того, как сможете начать выполнять план — надо брать и пробовать, ввязаться в бой, а там посмотрим. Тут вам пригодится аджайл.
В-пятых, я считаю, что многие проблемы современной разработки ПО идут корнями в принципиально устаревшую технологию создания программ. Вначале компьютеры программировались переключением перемычек, но довольно быстро, по мере роста сложности программ, с этого подхода переключились на перфоленты и перфокарты, а потом и на языки программирования, которые довольно быстро сэволюционировали до Си и потом с++. После этого ничего принципиально не менялось долгое время, а сложность программ продолжала расти, что выливалось во все больший объем кода. Вместо новых прорывов в способах написания кода прогресс пошел в основном по линии усовершенствоаания разделения труда — с помощью паттернов программирования, методологий организации команд, технологий хранения кода и совместной работы над ним, автоматизации тестирования и сборки, и т. п. Но у всего есть предел, и в основе всего — вме те же полотнища текста, что в современном мире визуального, рилтаймового пользовательского интерфейса смотрится весьма и весьма архаично. Последние годы народ ударился в специализировованные под узкие задачи языки программирования — для веб-разработки, для мобильников, для раьоты с данными, — но все они по сути своей примитивнее с++, решают лишь частные проблемы, и плодят многочисленные ограничения, ниши, и тонны скопированного кода. В ту же сторону пошел и сам с++, где с 11 версии в стандарт языка начали сваливать кучу всевозможных частных решений под типовые задачи. По сути, мы видим кризис и острую потребность в новой революции в программировании, нечто, что выведет написание кода на уровень современного CAD-проектирования, например, что-то задействующее современные возможности среды и интерфейсов в полной мере.