Авторски архив
* Триъгълник в квадрат
Публикувано на 25 октомври 2023 в раздел Вероятности.
Нека е даден квадрат [mathi]ABCD[/mathi] чиято страна е с дължина [mathi]a[/mathi]. Избираме произволна точка [mathi]P[/mathi] вътре в квадрата. Каква е вероятността [mathi]\triangle ABP[/mathi] да е тъпоъгълен? Прочети още...
* Страниране
Публикувано на 17 октомври 2023 в раздел Бази от Данни.
Когато информацията на някоя страница е много, понякога решаваме да направим т.нар. страниране. Това означава да покажем първите няколко записа и след тях да поставим връзки към следваща страница, на която ще се покажат следващите няколко записа. Тоест даваме възможност на потребителят да прелиства напред-назад като в книга, вместо да му изсипваме цялото съдържание накуп. Как се постига това в MySQL/MariaDB? Прочети още...
* Нестандартна задача с претегляния на монети
Публикувано на 28 септември 2023 в раздел Математика.
* Играта с плувеца и гоблина
Публикувано на 06 юли 2023 в раздел УКИ.
Дадено е кръгло езеро. Един плувец влиза да се къпе в него. Изведнъж на брега се появява гоблин. За щастие лошият гоблин не може да плува. За нещастие той е много по-бърз от плувеца. Прочети още...
* Монитори и семафори в Java
Публикувано на 04 юли 2023 в раздел ПИК3 Java.
Вече съм показвал няколко примери с употребата на монитори. Зад кадър в тях стои т.нар. мютекс (mutex) - представете си го като ключалка (променлива със стойности „отключено“ и „заключено“). Идеята е, че когато някоя нишка заключи мютекса, други могат да видят това и съответно да спрат и да изчакат, докато тя си свърши работата. Мониторите автоматизират този процес, като организират централизирано управлявана опашка за изчакване на ресурсите. Това се прави чрез синхронизирани блокове или синхронизирани методи. Тук просто ще припомня с елементарен пример. Прочети още...
* Бързо степенуване
Публикувано на 03 юли 2023 в раздел Информатика.
Степенуването е основна математическа операция и е очаквано да се използва често. Интуитивната реализация на алгоритъм за изчисление на [mathi]x^{n}[/mathi] би била „умножаваме [mathi]x[/mathi] по себе си [mathi]n[/mathi] на брой пъти“. Тоест нещо подобно на следното: Прочети още...
* Алгоритъм на Флажоле-Мартин за определяне на кардиналност на мултимножество
Публикувано на 29 юни 2023 в раздел Информатика.
Мултимножествата са множества, за които повторенията от елементи се отчитат и са от значение. Например мултимножеството {1, 1, 1, 2} е различно от мултимножеството {1, 1, 2}, защото имат различни елементи в него. Подредбата обаче няма значение. За такива множества често ни интересува т.нар. кардиналност (мощност): броят на различните елементи. Или казано по-просто - ако вземем едно цялото количество от всички обекти в едно мултимножество, колко от тях са различни? Прочети още...
* Ограничено наследими (sealed) класове
Публикувано на 29 май 2023 в раздел ПИК3 Java.
Преди Java 17 в езика се следваше подход за наследяване, в който или всеки интерфейс/клас може да бъде разширяван (наследяван) от всеки с extends, или това е забранено чрез ключова дума final. С включването на новата ключова дума sealed се въвеждат ограничено наследими класове. Те дават разрешителен списък, с който се изреждат ограничено количество интерфейси/класове от същия пакет, които могат да имплементират/наследяват текущия. Прочети още...
* Игра на Пексесо в Java – упражнение за събития и обхождане на LinkedList
Публикувано на 17 май 2023 в раздел УКИ.
Ще създадем опростен вариант на играта Пексесо. На игралното поле са разположени четен брой карти с еднакви гърбове (при нашия вариант ще бъдат 20 на брой). Всяка една карта има точно една карта-двойник (двете имат една и съща картинка на лицевата страна). Играчът обръща две карти, след което:
- ако картинките им не са еднакви, той ги връща обратно с гърба нагоре;
- ако картинките им са еднакви, ги оставя с лицето нагоре.
Целта на играта е с максимално малко ходове да се обърнат всички карти с лицето нагоре. Прочети още...
* Упражнение за структура от данни Queue
Публикувано на 16 май 2023 в раздел УКИ.
Ще надградим проекта, в който се упражняваше структурата от данни стек, като реализираме по-разширен вариант на играта Война. При нея вместо картите да се премахват от тестетата на играчите, всяка спечелена ръка се връща най-отдолу в тестето на този, който е спечелил. Засега за опростяване на играта ще се отклоним от пълния ѝ вариант, като при равенство (когато получим карти с една и съща стойност) ще приемем, че битката печели чрез цвета във възходящ ред: спатия, каро, купа, пика (в истинската игра не е така). Ще печели играчът, който прибере всички карти. Ще използваме оригиналният дизайн със съвсем леки модификации - dealsValue вече ще започва да брои от 0 и ще се увеличава нагоре, като този брояч вече ще има смисъл на „колко на брой хода са направени от началото на играта“. Прочети още...