LINUX.ORG.RU

Математическая задача

 ,


0

1

Я не знаю, какой раздел лучше подойдёт - этот или games, если что переместите.

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

И так, есть такая игра - cookie clicker, её суть (если опустить несущественные для задачи аспекты - их там много, но давайте их не обсуждать тут) такова: есть некий счёт, и он автоматически растёт каждую секунду на величину cps, которая зависит от того, какой набор «построек» куплен (покупка построек делается как раз с оплатой из этого счёта). Постройки есть разных типов, для удобства представим что их всего два (постройка типа A и постройка типа B). У каждого типа постройки есть:

- цена, стартовая за первый экземпляр, и дальше каждый следующий в k=1.15 раз дороже - геометрическая прогрессия

- прибавка к cps, которая даётся при покупке очередного экземпляра: если купить 10 построек, они дадут в 10 раз больше cps чем если купить одну, то есть каждое следующее добавление одного и того же cps получается дороже

Итого, текущее состояние описывается текущим счётом, количеством построек типа A и количеством построек типа B.

---------- собственно задача ------------

Текущий счёт у нас нулевой (только что всё потратили), и имеется некоторое cps = x0. Для покупки доступны две постройки:

Первая (A), с текущей ценой за штуку y1 и дающая прибавку x1 за ту же штуку.

Вторая (B), с текущей ценой за штуку y2 и дающая прибавку x2 за ту же штуку.

Первая дешевле (y1<y2), даёт меньше cps (x1<x2) и имеет худшее отношение цена/качество (y1/x1>y2/x2). Очевидно, если захотеть купить хоть что-то, то её мы сможем купить раньше - она дешевле. Вопроса два, простой и сложный.

Первый: мы хотим купить одну штуку A и одну штуку B, покупаем как только накопим. В каком порядке их надо купить чтобы быстрее добиться цели?

Второй: мы хотим максимально быстро поднять cps до некоторой неуказанной величины. Сколько раз надо купить постройку A перед первой покупкой постройки B? (формулировка не идеальная но надеюсь понятно о чём речь)

Речь именно про аналитическое решение. В первом вопросе - неравенство, в зависимости от выполнения или невыполнения которого мы выбираем один из двух вариантов ответа. Во втором - формула, которая выразит искомое число через заданные в условии переменные (+ можно задать одно граничное условие). Просто описания алгоритмов и тем более брутфорсы в качестве итогового ответа не годятся.

Найти удовлетворяющий требованиям ответ на второй вопрос мне найти пока не удалось, думаю будет интересно и недоделанные решения посмотреть.

★★★★★

Последнее исправление: firkax (всего исправлений: 1)

ЯННП, если в первом вопросе ты уже ввёл оценочную функцию и составил с ней систему неравенств, то что пошло не так со вторым?

ratvier ★★
()

Тут у тебя аж интегральное уравнение будет как минимум. Потому как сумма_на_счету(t) = ∫cps(t)dt - цена_всех_А(t) - цена_всех_B(t) сходу. При этом cps(t) = начальное_значение + количество_A(t)*x1 + количество_B(t)*x2 Ну и т.д.

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Нет, с этим проще. cps меняется дискретно только в моменты покупок, так что интеграл сводится к сумме произведений неизменного между двумя покупками cps на время, которое потребовалось на накопление счёта. При этом сам счёт нам в целом и не нужен, нужно только знать сколько времени потребуется на набор одной единственной нужной величины (цены планируемой покупки) в нём.

Хотя может быть просто запись уравнения без предварительного анализа происходящего и даст какие-то дополнительные пути решения, но я их не увидел.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 3)
Ответ на: комментарий от firkax

Ну так-то да. Считай сколько времени надо на покупку первого A и сколько на покупку первого B с дефолтным cps, потом считаешь за сколько времени они отобьются в том и другом случае c увеличенным cps. Складываешь времена, смотришь что быстрее.

Но ты же хотел прям аналитическое решение. :)

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Это если про первый вопрос речь - там всего два варианта ответа и к ним можно неравенство составить. Во втором же вариантов ответа бесконечное количество и сравнивать придётся много раз в цикле, а это уже не аналитическое решение, да.

firkax ★★★★★
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)