Skip to content

Instantly share code, notes, and snippets.

View KoStard's full-sized avatar
👾

Ruben Kostandyan KoStard

👾
View GitHub Profile
@KoStard
KoStard / merge_all.py
Created July 31, 2022 21:54
Using mkvmerge merge multiple video and audio files in the target directory - useful when working with multiple episodes of the same show
from pathlib import Path
import argparse
import subprocess
parser = argparse.ArgumentParser('Tool to merge list of mkv files with mka files using mkvmerge.\n'\
'The audio files should contain the matching video file name.')
parser.add_argument('input_video_path', help='The path where to find the mkv files')
parser.add_argument('input_audio_path', help='The path where to find the mka files')
parser.add_argument('output_path', help='The path where to save the merged files')
@KoStard
KoStard / csv_splitter.py
Created July 29, 2022 10:07
Split different kinds of CSV files - configure the delimiter, number of lines in each file, etc
from os import mkdir
import pandas as pd
import sys
import argparse
import pathlib
parser = argparse.ArgumentParser(description="Split CSV documents")
parser.add_argument('input_filepath',
help="The input csv file you want to split")
parser.add_argument(
@KoStard
KoStard / ocr_armenian_pdf_to_pdf.py
Created February 7, 2021 19:17
OCR Armenian text from PDF and generate PDF from resullts
"""
python3 convert.py input_file.pdf output_file.pdf
"""
import pdf2image
import io
from PyPDF2 import PdfFileReader, PdfFileWriter
import sys
try:
@KoStard
KoStard / vlc-play-videos-with-external-audio-file.sh
Created December 29, 2020 22:12
How to specify and use external audio track for videos with VLC CLI
# --audio-track= using 1 here, as my video files have audio, but in different language, so after adding the second audio, it's index will become 1 (it's 0 based)
vlc --audio-track=1 \
video_file_path_1 \
:input-slave=external_audio_path_1 \
video_file_path_2 \
:input-slave=external_audio_path_2
#... You can continue this command for as many files you want
# This way you can start VLC with all your files already linked and easily move to next/previous episodes, instead of manually doing "Advanced Open File", specifying the external audio file and changing the track to the new one.
import heapq
class Node: # Trie node
def __init__(self, val=""):
self.mem = [None] * 26
self.count = 0
self.val = val
def register_word(root, word):
node = root
@KoStard
KoStard / lfu_cache.py
Created July 19, 2019 13:26
Implementing LFU Cache with linked lists of linked lists.
class EnhancedLinkedListNode:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
self.next = None
self.prev = None
def remove(self):
if self.prev:
@KoStard
KoStard / lfu_cache.py
Created July 19, 2019 13:26
Implementing LFU Cache with linked lists of linked lists.
class EnhancedLinkedListNode:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
self.next = None
self.prev = None
def remove(self):
if self.prev:
@KoStard
KoStard / avl_tree.py
Created July 18, 2019 15:52
Implemented AVL tree.
"""
Difference between height of left and right childs has to be <=1
"""
class AVLTreeNode:
def __init__(self, val, parent=None):
self.val = val
self.left = None
self.right = None
@KoStard
KoStard / sort_algorithms.py
Created July 18, 2019 12:54
Selection sort, Insertion sort, Shell sort, Merge sort, Quick sort (+in-place), Radix sort
def selection_sort(arr):
"""
Is named selection sort, because we are selecting smallest element each time and putting it as next
Time Complexity - O(N**2)
Space Complexity - O(1)
12.471 seconds for 10_000 numbers
"""
t = mn = 0
for i in range(len(arr)):
mn = i
@KoStard
KoStard / finder.py
Created July 18, 2019 04:32
Checker is a base class for all checkers - it makes all children classes to have same methods.
class Checker:
@staticmethod
def is_this_type(expr):
raise NotImplementedError()
def does_match(self, value):
raise NotImplementedError()
class NameChecker(Checker):