Skip to content

Instantly share code, notes, and snippets.

View saftacatalinmihai's full-sized avatar
🏠
Working from home

Safta Catalin Mihai saftacatalinmihai

🏠
Working from home
View GitHub Profile
@saftacatalinmihai
saftacatalinmihai / aoc_day7.scala
Created December 9, 2023 21:39
Advent of code day 7
import scala.collection.immutable
object Aoc7:
enum Type extends Enum[Type]:
case HighCard, OnePair, TwoPairs, ThreeOfAKind, FullHouse, FourOfAKind, FiveOfAKind
final case class Hand(cards: List[Card], bid: Int, withJokers: Boolean = false):
override def toString: String = s"Hand(${cards.mkString(",")}, $bid)"
@saftacatalinmihai
saftacatalinmihai / aoc_day6.scala
Created December 9, 2023 21:35
Advent of code day 6
object Aoc6:
final case class Boat(buttonPressTime: Int):
def distance(timeAllowed: BigInt): BigInt =
val travelTime = timeAllowed - buttonPressTime
buttonPressTime * travelTime
final case class Race(timeAllowed: Int, record: BigInt)
def parse1(input: List[String]): List[Race] =
@saftacatalinmihai
saftacatalinmihai / aoc_day9.scala
Last active December 9, 2023 16:36
Advent of code day 9
object Aoc9:
//0 3 6 9 12 15
//1 3 6 10 15 21
//10 13 16 21 30 45
def parse(input: List[String]): List[List[Int]] =
input.map(_.split(" ").map(_.toInt).toList)
private def derivative(input: List[Int]): List[Int]=
input.zip(input.tail).map((a, b) => b - a)
@saftacatalinmihai
saftacatalinmihai / aoc_day8.scala
Created December 8, 2023 13:13
Advent of code day 8
import scala.annotation.tailrec
object Aoc8:
def parse(input: List[String]) =
val pattern = input.head.split("").toList
val rules = input.tail.tail.map(_.split(" = ").toList).map { case List(start, lr) =>
val Array(l,r) = lr.split(", ")
start -> (l.stripMargin('('), r.dropRight(1))
}.toMap
(pattern, rules)
@saftacatalinmihai
saftacatalinmihai / aoc_day3.scala
Created December 4, 2023 10:04
Advent of code day 3
import scala.annotation.tailrec
import scala.math.*
final case class Pos(i: Int, j: Int)
final case class PartNumber(num: Int, start: Pos, end: Pos) {
def isNear(p: Pos, maxI: Int, maxJ: Int): Boolean =
val searchArea = for
i <- max(0, start.i-1) to min(end.i + 1, maxI)
j <- max(0, start.j-1) to min(end.j + 1, maxJ)
if ! (i == start.i && (start.j to end.j).contains(j))
import scala.math.*
final case class Card(id: Int, winning: Set[Int], my: Set[Int]) {
def winningScore: Int =
val winningNumbersInMyCard = my.intersect(winning)
if (winningNumbersInMyCard.nonEmpty) 1 << winningNumbersInMyCard.size - 1
else 0
def matching: Int = my.intersect(winning).size
}
@saftacatalinmihai
saftacatalinmihai / aoc_day2.scala
Created December 3, 2023 08:51
aoc_day2.scala
import scala.math._
final case class Game(id: Int, plays: List[Play]) {
lazy val minSet: Play =
plays.reduce{ case (Play(r1,g1,b1), Play(r2,g2,b2)) =>
Play(max(r1, r2), max(g1, g2), max(b1, b2))
}
def pow: Int = minSet.red * minSet.green * minSet.blue
}
@saftacatalinmihai
saftacatalinmihai / aoc_day1.scala
Last active December 1, 2023 20:42
AOC day 1
object Aoc1:
def findNumbersFirstAndLast(line:String): Int =
val nums = line.filter(_.isDigit).map(_.asDigit)
val first = nums.head
val last = nums.reverse.head
s"$first$last".toInt
private val word2Number = Map(
"0" -> 0, "1" -> 1, "2" -> 2, "3" -> 3, "4" -> 4, "5" -> 5, "6" -> 6, "7" -> 7, "8" -> 8, "9" -> 9,
@saftacatalinmihai
saftacatalinmihai / extract-file-section.sh
Last active February 11, 2023 18:07
Quick and dirty way to extract a section of a file that's yaml or json or any file format that uses indentation to contain a section
#!/usr/bin/env bash
# assign the file, start string, and stop string to variables
file=$1
start_string=$2
stop_string=$3
# flag to track if we are inside the desired section
inside=false
@saftacatalinmihai
saftacatalinmihai / interp.scala
Last active March 23, 2022 16:46
Untyped Lambda Calculus interpreter in scala
package lang
object lambdaCalc extends App {
sealed trait Token
object Token {
final case object Lparen extends Token
final case object Rparen extends Token
final case object Dot extends Token
final case object Backslash extends Token