Skip to content

Instantly share code, notes, and snippets.

View 1gravity's full-sized avatar

Emanuel Moecklin 1gravity

View GitHub Profile
@1gravity
1gravity / Kotlin.kt
Last active July 7, 2023 17:02
Kotlin 1.9
package com.vivint
enum class Color(val code: Long) {
RED(0xff0000L),
GREEN(0x00ff00L),
BLUE(0x0000ffL)
}
fun main() {
// 1. Stable replacement of the enum class values function
@1gravity
1gravity / trieNoCleanup.kt
Last active September 14, 2022 17:07
Kotlin Trie No Cleanup
override fun delete(key: String) {
key.fold(root) { node, char ->
node.children[char] ?: return
}.value = null
}
@1gravity
1gravity / trieNonRecursiveDelete.kt
Created September 14, 2022 16:34
Kotlin Trie Non-Recursive Delete
override fun delete(key: String) {
// search leaf
key.fold(root) { node, char ->
node.children[char] ?: return
}.let { leaf ->
leaf.value = null
key.foldRight(leaf) { char, current ->
if (current.children.isEmpty() && current.value == null) {
current.parent?.apply { children.remove(char) } ?: return
} else return
@1gravity
1gravity / trieOptimizedDelete.kt
Last active September 14, 2022 15:55
Kotlin Trie Delete Optimized
override fun delete(key: String) {
delete(key, 0, root)
}
private fun delete(key: String, index: Int, node: Node<Value>) {
if (index == key.length)
node.value = null
else node.children[key[index]]?.run {
delete(key, index + 1, this)
if (children.isEmpty() && value == null) node.children.remove(key[index])
@1gravity
1gravity / trieBasicDelete.kt
Last active September 14, 2022 03:32
Kotlin Trie Delete Basic
override fun delete(key: String) {
delete(key, 0, root)
}
private fun delete(key: String, index: Int, node: Node<Value>): Trie.Node<Value>? {
if (index == key.length) {
node.value = null
if (node.children.isEmpty()) return null
return node
}
@1gravity
1gravity / trieOptimizedSearch.kt
Last active September 14, 2022 02:04
Kotlin Trie Search Optimized
override fun search(key: String) = key.fold(root) { node, char ->
node.children[char] ?: return null
}.value
@1gravity
1gravity / trieBasicSearch.kt
Last active September 17, 2022 15:33
Kotlin Trie Basic Search
override fun search(key: String): Value? {
var currentNode = root
for (char in key) {
if (currentNode.children[char] == null) {
return null
}
currentNode = currentNode.children[char]!!
}
@1gravity
1gravity / trieOptimizedIncompleteInsert.kt
Created September 13, 2022 15:51
Kotlin Trie Optimized Incomplete Insert
fun insert(key: String, value: Value) {
key.fold(root) { node, char ->
node.children[char]
}.value = value
}
@1gravity
1gravity / trieOptimizedInsert.kt
Last active September 14, 2022 03:33
Trie Optimized Insert
fun insert(key: String, value: Value) {
key.fold(root) { node, char ->
node.children[char] ?: Node<Value>().also { node.children[char] = it }
}.value = value
}
@1gravity
1gravity / trieBasicInsert.kt
Last active September 17, 2022 15:30
Kotlin Trie Insert Basic
fun insert(key: String, value: Value) {
var currentNode = root
for (char in key) {
if (currentNode.children[char] == null) {
currentNode.children[char] = Node()
}
currentNode = currentNode.children[char]!!
}