Skip to content

UncleDrema/codewars

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Мои решения задач с Codewars

В данном репозитории не размещается какой-то целый проект, но тут находятся мои решения некоторых задач с сайта Codewars.

Решения задач

Название задачи Сложность Файл Статус Ссылка
Esolang Interpreters #4 - Boolfuck Interpreter 3 kyu Тык Не решена до конца Тык
Rail Fence Cipher: Encoding and Decoding 3 kyu Тык Решена Тык
Evaluate mathematical expressions 2 kyu Тык Решена Тык
Break the pieces 2 kyu Тык Решена Тык
Prime-streaming 2-3 kyu Тык Не решена Тык
Binomial Expansion 3 kyu Тык Решена Тык
Regular Expression for Binary Numbers Divisible by n 1 kyu Тык Не решена Тык
Simpler Interactive Interpreter 2 kyu Тык Решена Тык
Simple Interactive Interpreter 1 kyu Тык Решена Тык
Functional SQL 1 kyu Тык Решена Тык
Change detection decorator 2 kyu Тык Не решена Тык
Debugger 2 kyu Тык Решена Тык
Full Metal Chemist 1 2 kyu Тык Решена Тык

О каждой задаче

Esolang Interpreters #4 - Boolfuck Interpreter

В целом код интерпретатора достаточно простой, больше всего сложностей вызвал побитовый ввод данных и морока с порядком байтов. Программа в целом работает на простых примерах кода на Brainfuck, транслированного в Boolfuck, но с более сложными примерами с циклами возникают проблемы. Надо закончить отладку.

Задача неплоха для 3 kyu, хотя алгоритмически довольно простая

Rail Fence Cipher: Encoding and Decoding

Довольно интересная задача с интересным шифром для кодирования и декодирования. Долго пытался придумать схему, которая на основе числа рельс (здесь и далее рельсами я называю горизонтальные строки) определяла бы номер рельсы каждого символа, но в итоге пришёл к решению другим путём.

На основе числа рельс генерирую шаги, которыми определяется расстояние между буквмаи на каждой рельсе. При этом стоит учитывать, что для не-центральных и не-краевых рельс это расстояние не постоянно, чередуются два шага, названные "первым" и "вторым", которые применяются по очереди, в завимости от того, ближе мы сейчас следующему повороту забора или дальше.

Вспомогательная функция для прохода циклом по всем буквам используется в кодировщике и в декодировщике. Чередование между шагами реализовано максимально наивно через флаг (можно лучше, например брать остаток от деления на 2 в качестве индекса в наборе из 2 шагов).

При этом кодировщик заполняет строку-результат значениями из исходной строки в соответствии с индексами "на заборе", а декодировщик - заполняет предвыделенный буфер (благо размеры строк на входе и выходе одинаковы) буквами из данной строки в соответствии с индексами "на заборе".

Задача простовата для 3 kyu

Evaluate mathematical expressions

Задача классическая, требует написания несложного калькулятора математических выражений с поддержкой одного вида скобок и унарных операций. Все операции определены как произвольные действия, имеющие доступ к стеку. Само вычисление происходит не для инфиксной записи, а для обратной польской записи, преобразование к которой выполнено алгоритмом сортировочной станции Дейкстры.

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

Задача простовата для 2 kyu, думаю лучше подошло бы 3/4 kyu

Break the pieces

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

Но мне на момент решения задачи было дико лень писать всё это, поэтому задача решалась при помощи метода "попробуй заставить ChatGPT сделать то, что тебе нужно". Спустя некоторое время, когда получилось раз двадцать обьяснить Великому ИИ, что он делает не так, результат был получен. Дальше осталось допилить напильником кривые места и добавить стрёмные эвристики (строки 107-111) для определения внутренних и внешних углов.

Но оно того стоило! Классная задача на подумать и подебажить.

Хорошая задача для 2 kyu

Prime streaming

Надо написать генератор простых чисел. Сложность в том, что надо быть готовым выдавать много (порядка миллиона) простых чисел в секунду. Думаю запоминать уже выданные для проверки простоты.

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

Задача спорно подходит под 2-3 kyu, просто надо догадаться о том, что надо предгенерировать все числа

Binomial Expansion

Задача на разложение биномиального коэффициента в степени n на множители.

Было несложно, просто сгенерировал все биномиальные коээфициенты и умножил на a и b из исходного бинома, а потом просто собрал строку.

Задача простовата для 3 kyu

Regular Expression for Binary Numbers Divisible by n

Выглядело страшно, но поискал инфу, поболтал с ChatGPT, отличная идея про представление через стейты остатков от деления, занимаюсь реализацией.

Simpler Interactive Interpreter

В целом несложная задача на интерпретацию REPL с присваиванием переменных и вычислением простых математических выражений.

Больше подошло бы 3 kyu, но оценку можно понять, требуется и распарсить, и привести в обратную польскую нотацию для вычисления выражения

Simple Interactive Interpreter

Старший брат предыдущей задачи, нужно реализовать вложенные присваивания и объявление функций.

Пришлось навалить кучу костылей, не хотелось сильно задумываться вечером, но в целом всё получилось и работает.

Было бы гораздо чище, если бы получилось представить все как функции (и префиксные и инфиксные).

Оправданные 1 kyu сложности, много краевых ситуаций, пришлось немного потыкаться в нейронку для поиска ошибок

Functional SQL

Задача про реализацию языка запросов, вдохновленного SQL, но по применению похожему на LINQ из C# - fluent API для вызовов, типа from, select, group by, where и т.п.

Интересная задача, надо предусмотреть много всего, благо оптимизировать ничего не надо.

когда сделал:

Оказалось сложнее, больше всего времени убил на правильную реализацию группировки, сложно представлять в голове многомерные массивы данных. Но по итогу все написал! Задача классная, 1 kyu оправданно, особенно если бы я переписал код в более красивый вид :)

Как мне кажется не очень сложно для 1 kyu, твердо тянет на 2 kyu

Change detection decorator

Задача про разработку декоратора для классов на Python, который будет отслеживать статус атрибутов классов и полей объектов. Пока забыл как писать декораторы, вспомнил что решал похожую задачу и добавил ниже.

Debugger

Задача про разработку Python-декоратора для отслеживания операций над объектами. Интересно было побольше узнать про возможности метапрограммирования в Python'е, лайк.

По сложности задача скорее 3 kyu, но оправдано повышение сложности из-за редкости и специфичности темы декораторов

Full Metal Chemist 1

Суперская задача на реализацию API работы с молекулами органической химии. Пришлось пободаться и немного похакать тесты, чтобы понять, что работает не так, но по итогу все ошибки исправлены. Не всегда было понятно, что требуется в условии, задача классная.

Абсолютно оправдан 2 kyu, задача сложная как по предметной области, так и по реализации, требующей обработки краевых случаев

About

My solutions to some of Codewars problems

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages