Skip to content

Instantly share code, notes, and snippets.

View lpestl's full-sized avatar
:octocat:
Focused on Unreal Engine

Michael S. Kataev lpestl

:octocat:
Focused on Unreal Engine
  • Saint Petersburg
  • 23:16 (UTC +03:00)
  • LinkedIn in/lpestl
View GitHub Profile
<?xml version="1.0" encoding="UTF-8"?>
<doublecmd DCVersion="1.0.6 beta" ConfigVersion="10">
<Colors>
<UseCursorBorder>False</UseCursorBorder>
<CursorBorderColor>-2147483635</CursorBorderColor>
<UseFrameCursor>False</UseFrameCursor>
<Foreground>65280</Foreground>
<Background>-2147483640</Background>
<Background2>-2147483640</Background2>
@lpestl
lpestl / ru.po
Created December 12, 2019 13:39
Git errors with Ru localization
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2014-2019
# insolor, 2014
# insolor, 2014
# Чук Таблицоменделеев <aurum444an@gmail.com>, 2019
msgid ""
// Learn more about F# at http://fsharp.org
// See the 'F# Tutorial' project for more help.
open System;
open System.Collections.Generic;
// Метод 01. Простые суммы
let SubArrayWithMaxAbsSum1 (inputArray: int[]) =
// Почему бы не завести два массива для положительных и отрицательных?
let mutable positive = Array.empty
let mutable negative = Array.empty
using System;
using System.Collections.Generic;
using System.Linq;
namespace Task138cs
{
class Program
{
/* Метод 01. Простые суммы */
private static int[] SubArrayWithMaxAbsSum1(int[] inputArray)
@lpestl
lpestl / Task138.cpp
Last active November 12, 2018 05:08
#include <iostream>
#include <vector>
#include <complex>
#include <numeric>
/* Метод 01. Простые суммы */
// Возвращает подмассив с максимальной суммой по модулю
std::vector<int> sub_array_with_max_abs_sum1(const std::vector<int>& input_array)
{
// Почему бы не завести два массива для положительных и отрицательных?
/* 01_1. Факторизация с максимальных цифер */
#include <iostream>
#include <vector>
#include <algorithm>
// Введем ENUM для удобства восприятия, в котором -1 - набор множителей не найден, а 1 - найден оптимаьный набор множителей
enum status { NOT_FOUND = -1, DONE = 1 };
// Рекурсивная функция. Вычисляет очередной текущий множитель и добавляет его в вектор
int factor(unsigned remainder, std::vector<int> &multipliers)
/*
Самое главное что нужно знать, что в односвязном лабиринте к точке выхода ведет всегда только один путь.
Еще один момент, который нужно учитывать, что добраться до выхода можно используя "Правило руки":
"...Один из методов состоит в том, чтобы в каждой узловой точке выбирать одно и то же направление.
Например, можно всегда сворачивать на крайнюю правую ветвь. Если этот путь закончится тупиком, следует вернуться к узловой точке
и выбрать следующую ветвь (если считать справа). Может оказаться, что в результате вы пройдете по каждой ветви дважды — по одному разу
в каждом направлении, но в конце концов вы доберётесь до цели. На обратном пути можно либо продолжать выбирать крайние правые ветви
в каждом узле (и в этом случае вы, вероятно, пройдёте по новым областям лабиринта), либо каждый раз сворачивать на крайнюю левую ветвь
(и тогда вы в точности повторите первоначальный маршрут). Метод выбора одной и той же — правой или левой — ветви я называю
соответственно правилом правой или левой руки..."

Задача: Крыса в лабиринте

image

Представьте, что вы находитесь в лаборатории. Вы исследуете умение крыс ориентироваться в незнакомых лабиринтах. У вас есть конструктор для создания односвязных лабиринтов. Односвязный лабиринт - означает, что лабиринт не содержит замкнутых маршрутов, т.е. таких, которые образуют замкнутую петлю. Замкнутый маршрут возникает в том случае, если существует ограниченный стенками «остров», который не соединяется с другими стенками лабиринта. Чтобы анализировать поведение крысы в лабиринте, вам необходимо заранее знать кратчайший маршрут от точки входа, до сыра, расположенного в этом лабиринте. Так как подсчет длины кратчайшего пути - достаточно рутинная работа, вы решили запрограммировать робо-мышь, которая ищет длинну кратчайшего пути автоматически.
Вашей конечной задачей является подсчет минимального количества шагов, за которые крыса может добраться от точки входа до сыра.

Входные данные

/* 01. Метод "Перебор всех возможных комбинаци слоев" */
#include <iostream>
// рекурсивная функция для подсчета.
// remainder_blocks - оставшееся количество не использованных блоков
// count по ссылке - счетчик для подсчета возможных вариантов
// used_blocks - количество уже используемых блоков
// last_layer_lenght - ширина количества блоков в последнеем слое пирамиды
void calc_top_layers(int remainder_blocks, unsigned long & count, int used_blocks, int last_layer_lenght)
{
// Learn more about F# at http://fsharp.org
// See the 'F# Tutorial' project for more help.
// Функция подсчета всех возможных вариантов пирамид
let CountPosiblePiramids N =
// Рекурсивная функция с параметрами ОСТАТОК блоков, максимальная длинна текщего слоя из блоков и количество возможных пирамид
let rec CalcTopLayer remainder maxLenght count =
// Счетсик делаем изменяемым
let mutable currCount = count
// Если остаток и максимальная длинна корректны
if remainder >= 0 && maxLenght >= 0 then