Skip to content

Instantly share code, notes, and snippets.

View iharkatkavets's full-sized avatar
💻
Code is like humor: when you have to explain it, it’s bad

Ihar Katkavets iharkatkavets

💻
Code is like humor: when you have to explain it, it’s bad
View GitHub Profile
@iharkatkavets
iharkatkavets / main.swift
Last active April 10, 2026 19:49
1115. Print FooBar Alternately (Swift version)
//
// The problem repeats the LC problem '1115. Print FooBar Alternately'
// https://leetcode.com/problems/print-in-order
// Implement your solution inside the `FooBar` class.
// Test with: swift main.swift
final class FooBar: Sendable {
let n: Int
@iharkatkavets
iharkatkavets / ReDoS.swift
Created April 5, 2026 16:46
Benchmarks to measure '𝚁𝚎𝚐𝚞𝚕𝚊𝚛 𝙴𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 𝙳𝚎𝚗𝚒𝚊𝚕 𝚘𝚏 𝚂𝚎𝚛𝚟𝚒𝚌𝚎 (𝚁𝚎𝙳𝚘𝚂)'
// Inspired from Medium post
// Decrypt Go: Why Is Go’s Regexp So Slow, and Why That’s Actually Smart
//
// https://pub.huizhou92.com/decrypt-go-why-is-gos-regexp-so-slow-and-why-that-s-actually-smart-32fedad4bd9c
//
// to run:
// swift package init --type executable --name ReDoS
// cp curr_gist Sources/ReDoS/ReDoS.swift
// swift run -c release -q ReDoS
@iharkatkavets
iharkatkavets / main.swift
Created March 30, 2026 19:22
1114. Print in Order (Swift version)
import Foundation
import Synchronization
// The problem repeats the LC problem '1114. Print in Order'
// https://leetcode.com/problems/print-in-order
// Implement your solution inside the `Foo` class.
// Test with: swift main.swift
final class Foo: Sendable {
init() {
@iharkatkavets
iharkatkavets / main.rs
Created July 20, 2025 13:58
Count words problem, compare Rust/Swift performance
use std::{collections::HashMap, env, fs, io};
use unicode_general_category::GeneralCategory;
use unicode_general_category::get_general_category;
fn main() {
if env::args().len() != 2 {
println!("Use {} <FILE_PATH>", env::args().nth(0).unwrap());
return;
}
@iharkatkavets
iharkatkavets / task001.swift
Created April 25, 2025 20:40
Task related to understanding Swift structured concurrency
import Foundation
// TASK
// Complete function `process(...)`
func processData(_ v: Int) async throws -> Int {
print("<-start \"\(v)\"...")
let s: Int = 5 // .random(in: 0...10)
try await Task.sleep(for: .seconds(s))
print("->finish \"\(v)\" (took \(s) sec).")
@iharkatkavets
iharkatkavets / install_swift_on_raspberrypi.md
Created September 23, 2023 08:07
Install `swift` on Raspberry Pi

All next stepts are performed in Raspberry Pi environment

  1. Create a temporary directory
cd ~ && mkdir swift5.9 && cd !$
  1. Download the latest Swift version for ARM architecture(aarch64). On the moment of preparing the manual the latest version is 5.9
wget https://download.swift.org/swift-5.9-branch/ubuntu2004-aarch64/swift-5.9-DEVELOPMENT-SNAPSHOT-2023-09-21-a/swift-5.9-DEVELOPMENT-SNAPSHOT-2023-09-21-a-ubuntu20.04-aarch64.tar.gz
  1. Extract the acrhive
@iharkatkavets
iharkatkavets / neovim_on_raspberrypi.md
Last active September 23, 2023 07:04
Install `neovim` on Raspberry Pi

All the next steps are performed on RaspberryPi machine in console

  1. Download the latest version of neovim from official repository. At the moment of writing the manual the latest version is 0.9.2
cd ~ && mkdir neovim-install && cd !$
wget 'https://github.com/neovim/neovim/archive/refs/tags/v0.9.2.tar.gz'
  1. Extract the downloaded archive and navigate inside
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdbool.h>
#include <strings.h>
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
@iharkatkavets
iharkatkavets / readme.md
Created October 26, 2020 21:58 — forked from lgg/keepass-file-format-explained.md
Keepass file format explained

Keepass file format explained

I’m currently working (I’m just at the beginning, and I’m quite slow) on a personal project that will use Keepass files (kdb and kdbx).
I tried to find some documentation about .kdb and .kdbx format, but I didn’t find anything, even in the Keepass official website. I you want to know how these file formats are structured, you must read Keepass’s source code. So I wrote this article that explains how Keepass file format are structured, maybe it will help someone.

@iharkatkavets
iharkatkavets / gist:7d632e87b3af27a4952561122398a8d1
Created October 24, 2020 12:29 — forked from msmuenchen/gist:9318327
KeePass v2.x (KDBX v3.x) file format
Convention: Byte array notation as it would appear in a hexeditor.
= Layout=
KDBX files, the keepass database files, are layout as follows:
1) Bytes 0-3: Primary identifier, common across all kdbx versions:
private static $sigByte1=[0x03,0xD9,0xA2,0x9A];
2) Bytes 4-7: Secondary identifier. Byte 4 can be used to identify the file version (0x67 is latest, 0x66 is the KeePass 2 pre-release format and 0x55 is KeePass 1)