Skip to content

Instantly share code, notes, and snippets.

View LostInKadath's full-sized avatar

LostInKadath LostInKadath

View GitHub Profile
@LostInKadath
LostInKadath / break_my_balls.cpp
Created January 10, 2019 15:04
Найти минимальное число бросков, за которое можно определить, с какого этажа N-этажного здания разбиваются шарики, при наличии двух шариков
#include <iostream>
#include <iterator>
using namespace std;
int CountThrows(int stairs)
{
if (stairs < 1) // Для дома из 0 этажей решение очевидно.
return 0;
else if (stairs == 1) // Бросок с первого этажа.
return 1;
@LostInKadath
LostInKadath / task148.cpp
Created December 23, 2018 09:50
Перенести нулевые элементы в конец массива, не меняя порядок ненулевых элементов
#include <iostream>
#include <vector>
#include <VectorUtils> // my own lib, for `operator<<(const std::vector<T>&)`
/* https://t.me/unilecs
* Задача 148.
* Перенести нулевые элементы в конец массива, не меняя порядок ненулевых элементов.
* Дополнительное условие - inplace-метод, дополнительную память использовать нельзя.
*
* Решение топорное. Мы просто идем с начала массива и затираем нулевые элементы ближайшими справа ненулевыми.
void foo(int *a, size_t n)
{
if (!a || !n)
return;
int first = 0, last = 0;
int first_ = 0, last_ = 0;
for (size_t i = 1; i < n; ++i)
{
@LostInKadath
LostInKadath / task146.py
Created December 16, 2018 15:00
Расчет идеального движения упругого мяча в плоскопараллельном поле притяжения
from math import sin, cos, atan2, pi
def print_params(i, t, x, y, vx, vy):
print('''Step {}:\
\ttime = {:.3f} sec,\
\tx = {:.3f} m,\
\ty = {:.3f} m,\
\tvx = {:.3f} m/s,\
\tvy = {:.3f} m/s,\
\tv = {:.3f} m/s,\
@LostInKadath
LostInKadath / task144.cpp
Last active December 11, 2018 12:18
Найти количество способов разложения натурального числа N на слагаемые, не превышающие K
/**https://t.me/unilecs
Задача 144. Найти количество способов разложения натурального числа N на слагаемые, на превышающие K.
Способы, отличающиеся порядком слагаемых, считать различными.
Решение основано на рекурсивном подходе.
Мы заводим массив слагаемых `numbers` - очевидно, он будет иметь размерность N (N единиц-слагаемых максимум).
Далее работаем с этим массивом, начиная с первого слагаемого, следующим образом:
- мы заполняем текущую ячейку единицей и рекурсивно решаем задачу для входных данных (N-1) и K;
- после получения решения для единицы ставим на ее место двойку и рекурсивно решаем задачу для (N-2) и K;
- ...
@LostInKadath
LostInKadath / task143.py
Last active December 11, 2018 08:35
Построить пирамиду заданной высоты из натуральных чисел, расположенных по спирали
'''https://t.me/unilecs
Задача 143. Построить пирамиду заданной высоты из натуральных чисел, расположенных по спирали.
Ничего сложного - создаем пустую матрицу. Выставляем границы.
А дальше - внимательная игра с индексами.
Для удобства основание пирамиды совпадает с верхней границей матрицы.
Три цикла счетчика - по основанию матрицы, по правой границе и по диагонали.
Для печати выполнена процедура, выдающая на печать только ненулевые элементы матрицы.
Самому стыдно за такое сырое решение, прошу на ревью не выносить. =)
@LostInKadath
LostInKadath / sevens.txt
Last active November 28, 2018 13:00
Найти количество нулей на конце суммы ряда 7^1 + 7^2 + ... + 7^100.
Решение:
Последние цифры элементов степенного ряда повторяются и в сумме дают 0 на конце:
{7, 9, 3, 1}.
Значит, у нас есть цикличность с периодом в четыре элемента. Первая четверка:
7^1 + 7^2 + 7^3 + 7^4 = 2800.
Преобразуем ряд, вынеся эту четверку за скобки:
7^1 + 7^2 + ... + 7^100 =
= (7^1 + 7^2 + 7^3 + 7^4) * (1 + 7^4 + 7^8 + ... + 7^96) =
= 2800 * (1 + 7^4 + 7^8 + ... + 7^96).
@LostInKadath
LostInKadath / task142.py
Last active November 27, 2018 18:19
Вернуть максимум из чисел, заданных строками
'''https://t.me/unilecs
0. Принимаем кортеж чисел;
1. Ищем максимальное по длине;
2. Среди чисел, длина которых равна максимальной, ищем лексикографически максимальное.
'''
def task142(*numbers):
max_length = len(max(numbers, key=len))
return max(number for number in numbers if len(number) == max_length)
@LostInKadath
LostInKadath / task141.py
Last active November 25, 2018 10:55
Определить количество выигрышных направлений для лотерейного билета
'''https://t.me/unilecs
Задача 141. Определить количество выигрышных направлений для заданного лотерейного билета.
Лотерейный билет представляет собой прямоугольную числовую матрицу.
Для каждой клетки существуют четыре направления: вверх, вниз, влево, вправо.
Направление считается выигрышным для данной клетки, если в этом направлении нет чисел, больших числа в клетке или равных ему.
Если выбрана клетка на границе лотерейного билета, то направление к границе автоматически считается выигрышным.
Необходимо определить количество выигрышных направлений для заданного лотерейного билета.
'''
@LostInKadath
LostInKadath / task140.py
Created November 16, 2018 20:21
Определить, задает ли строка ход шахматного коня
'''https://t.me/unilecs
Задача 140. Определить, задает ли строка возможный ход шахматного коня.
Задача простая, решение тоже.
Перво-наперво валидируем полученную строку. Она должна разбиваться дефисом на два двухсимвольных токена,
каждый из которых состоит из буквы и цифры. Буква может быть только в диапазоне 'abcdefgh', цифра - в '12345678'.
Затем мы считаем разность между буквами и разность между цифрами с помощью ASCII-кода символов.
Ход шахматного коня имеет структуру - два поля в одном направлении и одно поле в другом.
Проверяем две полученные разности на соответствие одному из кортежей (1, 2) или (2, 1).
Получаем ответ.