Рубрика «нестандартные решения»
Кораллы, жара, российский смартфон: как я собрал самое неожиданное рабочее место
2025-07-28 в 11:22, admin, рубрики: android, linux, египет, нестандартные решения, путешествие, российский софт
Находим случайный seed, решающий задачу с LeetCode
2024-07-31 в 13:00, admin, рубрики: leetcode, ruvds_переводы, задачи для программистов, нестандартные решения, случайные числа, хэш-функции, челлендж
У меня есть хобби — решать задачи LeetCode непредназначенным для этого образом, часто при помощи запутанных однострочников. Такие самостоятельно накладываемые ограничения делают задачки интереснее и заставляют искать нестандартные решения.
Одним из ежедневных челленджей LeetCode была такая задача (я немного упростил её для понятности):
Есть список из
уникальных строк битов, каждая из которых имеет длину
. Сгенерировать новую строку длиной
, отсутствующую в этом списке.
Например, если у нас есть список "010", "110", "111", то возможным решением будет "001". Задача с LeetCode имеет большой набор тестов — 183 тестовых сценариев с , а точную формулировку задачи можно найти здесь.
Я решил её, подобрав такое случайное порождающее значение (seed), что случайно генерируемые строки битов проходили бы все тестовые сценарии. Вот код решения:
class Solution:
def findDifferentBinaryString(self, nums: List[str]) -> str:
random.seed((69299878 + sum(ord(c)*(i*j+111) for (i, n) in enumerate(nums) for (j, c) in enumerate(n))) % 999999999)
return ''.join(random.choice('01') for _ in nums)
Можете попробовать это решение самостоятельно (оно должно работать, если LeetCode не обновил свой набор тестов. Если это произошло, сообщите мне об этом).
Ниже я расскажу, как это сделал.Читать полностью »
Мозговой штурм: как смотреть на задачи под другим углом
2019-05-27 в 8:11, admin, рубрики: brainstorming, мозг, мозговой штурм, неординарность, нестандартные решения, оригинальность, разработка игр, Совершенный кодМозговой штурм с помощью транспонирования
Иногда я захожу в тупик и мне приходится искать способы думать над задачей под другим углом. Бывают задачи, которые можно отобразить в виде матрицы или таблицы. Их структура выглядит примерно так:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | A1 | B1 | C1 | D1 | E1 |
| 2 | A2 | B2 | C2 | D2 | E2 |
| 3 | A3 | B3 | C3 | D3 | E3 |
| 4 | A4 | B4 | C4 | D4 | E4 |
| 5 | A5 | B5 | C5 | D5 | E5 |
Ячейки, с которыми я работаю, выстроены в столбцы и строки. Давайте возьмём пример из простой игры:
| Attack | Defend | Special | |
|---|---|---|---|
| Fighter | sword | armor | slam |
| Mage | fireball | reflect | freeze |
| Thief | dagger | dodge | disarm |
Строки — это классы персонажей: воин, маг, вор.
Столбцы — это типы действий: нападение, защита, особое действие.
Матрица содержит весь код для обработки каждого из типов действий для каждого типа персонажа.
Как выглядит код? Обычно подобные структуры упорядочивают в такие модули:
Fighterбудет содержать код для обработки ударов мечом, снижения урона с помощью брони и особого мощного удара.Mageбудет содержать код обработки фаерболов, отражения урона и особую атаку заморозкой.Thiefбудет содержать код для обработки атак кинжалом, избегания урона уклонением и особую обезоруживающую атаку.
Иногда бывает полезно транспонировать матрицу. Мы можем упорядочить её по другой осиЧитать полностью »
Вариант работы с кешем без доступа к бэкенду на примере Yii2
2016-08-04 в 8:07, admin, рубрики: memcached, yii, yii 2, нестандартные решенияЯ веб-разработчик и не так давно (подрабатывая на стороне от основной работы) мне пришлось решать довольно нестандартную в наших кругах задачу: разработать фронтенд на Yii2 к сайту, весь бэкенд которого написан на древнегреческом ASP VBScript (простите, я уже забыл, как правильно это писать: просто ASP, или просто VBScript?).
Читать полностью »
