Sotva jsem se vrátil z kina, jen stěží můžu uvěřit, že aktuální hodnocení tohoto filmu na CSFD je pouze 63%. Dle mého názoru by nemělo být menší než alespoň 83%. Ve světě Sci-fi žánru je dnes již opravdu těžké přijít s něčím originálním a toto je jeden z mála filmů, kterému se to po delší době opět povedlo, že jsem se z kina vracel pln dojmů a spokojenosti. Velmi zajímavá a originální myšlenka, velmi pěkné zpracování a co se týče fanoušků steampunku – naprostý must-see!
-
Advent of Code v Kotlinu (Den 10.)
Další z ne-úplně lehkých dnů. Nyní již bylo zapotřebí trochy odhadu a víry, že se člověk vydal správnou cestou 🙂 .
-
Advent of Code v Kotlinu (Den 9.)
Den 9., ačkoliv se jevil jednoduše, zákeřnost jeho zadání přišla záhy 🙂 . První část jsem ještě zvládl sám, ale v části druhé jsem měl již perfomance problém. Ačkoliv se mi mé první řešení podařilo zrychlit až 25x, stále to bylo velmi málo. A tak jsem musel zvolit zcela jiný přístup, kde jsem se musel inspirovat řešením ostatních na Kotlin Slacku, což nakonec rychle vedlo ke kýženému cíli:
-
-
Advent of Code v Kotlinu (Den 6.)
V den 6. jsem se pokusil zaměřit se na rychlost řešení, namísto čistého kódu, abych odhadl, jestli bych měl vůbec šanci dostat se do Top 100 v leaderboardu. No, trvalo mi to něco přes 40 min, kde se mi u toho málem roztopil mozek 🙂 . Takže na to prdím, neb to mi za to nestojí … zde je moje řešení pro den 6. a příště se navrátím zpět k důmyslnosti a čistotě řešení samotného:
-
Advent of Code v Kotlinu (Den 4. a 5.)
Zatímco 4. den byl docela masakr, kde mě totálně vypekla knihovna JodaTime – z nějakého důvodu převedla javovský Date špatně, 5. už byl o něco lepší, nicméně výkonnostně nic moc 🙂 (chtělo by to optimalizovat na úkor čitelnosti).
-
-
Advent of Code v Kotlinu (Den 3.)
Dnes už to bylo více tricky a musel jsem sáhnout po své Rojo knihovně, ale zvládlo se to 🙂 .
Část A i B:
@Regex("#(\\d+) @ (\\d+),(\\d+): (\\d+)x(\\d+)") class Claim { @Group(1) var id: Int = 0 @Group(2) var x: Int = 0 @Group(3) var y: Int = 0 @Group(4) var width: Int = 0 @Group(5) var height: Int = 0 } fun main() { val input = File("input3.txt").readText() val claims = Rojo.of(Claim::class.java).matchList(input) val maxWidth = claims.map { it.x + it.width }.max() ?: 0 val maxHeight = claims.map { it.y + it.height }.max() ?: 0 val area = Array(maxWidth) { IntArray(maxHeight) { 0 } } claims.forEach { area.cutOut(it) } val total = area.sumBy { it.count { it == 2 } } println(total) val nonOverlapping = claims.find { claim -> claim.run { (x until x + width).all { posX -> (y until y + height).all { posY -> area.get(posX)[posY] == 1 } } } } println(nonOverlapping?.id) } private fun Array<IntArray>.cutOut(claim: Claim) { claim.run { for (posX in x until x + width) { for (posY in y until y + height) { val row = get(posX) when (row[posY]) { 0 -> row[posY] = 1 1 -> row[posY] = 2 } } } } }