uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 420
Obunachilar
+124 soatlar
+17 kunlar
-430 kunlar
Postlar arxiv
ToCode
1 420
ื–ืืช ื›ื‘ืจ ืœื ื”ื‘ื•ืจื•ืช ืฉืœื ื• ืฉืžืขื›ื‘ืช ืื•ืชื ื• ื ืชืŸ ืกื•ื‘ื• ืž zed ื–ืจืง ืืช ื”ืžืฉืคื˜ ื”ื‘ื ื‘ืจืื™ื•ืŸ ืขืœ ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉืœ ื–ื“, ืื• ื™ื•ืชืจ ื ื›ื•ืŸ ืขืœ ื”ื‘ื—ื™ืจื” ืฉืœื”ื ืœื–ืจื•ืง ืืช Atom ืฉื”ื™ื” ืขื•ืจืš ื”ื˜ืงืกื˜ ืฉื”ื ืขื‘ื“ื• ืขืœื™ื• ืœืคื ื™ ื•ืœื”ืชื—ื™ืœ ื”ื›ืœ ืžื—ื“ืฉ. ื”ื•ื ืืžืจ- "ื”ื’ืขื ื• ืœื ืงื•ื“ื” ืฉื–ื• ื›ื‘ืจ ืœื ื”ื™ืชื” ื”ื‘ื•ืจื•ืช ืฉืœื ื• ืฉืžืขื›ื‘ืช ืื•ืชื ื•, ื–ืืช ื‘ืืžืช ื”ืคืœื˜ืคื•ืจืžื”" ื–ื” ื”ื™ื” ืื—ืจื™ ืฉืœื•ืฉ ืฉื ื™ื ืฉืœ ืขื‘ื•ื“ื” ืขืœ Atom. ืฉืœื•ืฉ ืฉื ื™ื ืฉืœ ื ื™ืกื™ื•ื ื•ืช ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื. ืฉืœื•ืฉ ืฉื ื™ื ืฉืœ ื”ืชืžื•ื“ื“ื•ืช ืขื ื”ืืชื’ืจ ืฉืœ ื›ืชื™ื‘ืช Desktop Application ืžื”ื™ืจ ื‘ื›ืœื™ื ื•ื•ื‘ื™ื™ื. ื”ืื ื”ื™ื” ืขื“ื™ืฃ ืœื• ื”ื ื”ื™ื• ืžืชื—ื™ืœื™ื ืขื Rust ื›ื‘ืจ ื‘ 2014 ื‘ืžืงื•ื ืœื›ืชื•ื‘ ืืช Atom? ื‘ืจื•ืจ ืฉืœื. ืงื•ื“ื ื›ืœ ื›ื™ ืจืืกื˜ ืœื ื”ื™ืชื” ืงื™ื™ืžืช ื‘ 2014, ืื‘ืœ ื™ื•ืชืจ ื—ืฉื•ื‘ ื”ื ืขื•ื“ ืœื ื”ื›ื™ืจื• ืžืกืคื™ืง ื˜ื•ื‘ ืืช ื”ื‘ืขื™ื”, ืขื•ื“ ืœื ื”ื‘ื™ื ื• ืœืขื•ืžืง ืืช ื”ืืœื’ื•ืจื™ืชืžื™ื ืฉืฆืจื™ืš ืœืคืชื— ื‘ืฉื‘ื™ืœ ืœื‘ื ื•ืช ืขื•ืจืš ื˜ืงืกื˜ ื•ืืช ื”ื“ืจื™ืฉื•ืช ื•ื”ืฆืจื›ื™ื ืฉืœ ื”ืžืชื›ื ืชื™ื ืฉืืžื•ืจื™ื ืœื”ืฉืชืžืฉ ื‘ืื•ืชื• ืขื•ืจืš. ื”ืขื‘ื•ื“ื” ืขืœ ืื˜ื•ื, ื™ื—ื“ ืขื ื”ื”ืชืงื“ืžื•ืช ื”ื˜ื›ื ื•ืœื•ื’ื™ืช ืฉืงืจืชื” ื‘ืื•ืชื• ื”ื–ืžืŸ, ื”ื‘ื™ืื• ืื•ืชื ืœื ืงื•ื“ื” ืฉื‘ื” ื”ื™ื” ืขื“ื™ืฃ ืœื”ืชื—ื™ืœ ืžื—ื“ืฉ. ื•ื–ื” ืœืงื— ื˜ื•ื‘ ืœื›ืœ ืคืจื•ื™ืงื˜ ืฉืื ื—ื ื• ื‘ื•ื ื™ื - ื‘ืชื—ื™ืœืช ื”ื“ืจืš, ื›ืฉืื ื—ื ื• ืขื“ื™ื™ืŸ ืœื ืžื›ื™ืจื™ื ืžืกืคื™ืง ืืช ื”ื‘ืขื™ื” ื•ืืช ื”ืขื•ืœื ื”ื˜ื›ื ื•ืœื•ื’ื™ ืฉืœื”, ื–ื” ื‘ืกื“ืจ ืœืงื—ืช ื‘ื—ื™ืจื•ืช ืงืœื•ืช ื›ื“ื™ ืœื”ืชืงื“ื. ื™ื•ืชืจ ืžื‘ืกื“ืจ, ื–ืืช ื”ื“ืจืš ื”ื™ื—ื™ื“ื” ืงื“ื™ืžื”. ืื—ืจื™ ืฉื ืชื’ื‘ืจ ืขืœ ื”ื‘ื•ืจื•ืช ืฉืœื ื• ื•ื ื‘ื™ืŸ ืœืžื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืืช ื”ื›ืœื™ื ื”ืžืชืงื“ืžื™ื ื™ื•ืชืจ ื ื”ื™ื” ื‘ืžืงื•ื ื”ืจื‘ื” ื™ื•ืชืจ ื‘ืฉืœ ื›ื“ื™ ืœืฉืคืจ ืืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื”, ืื• ืœื–ืจื•ืง ื”ื›ืœ ื•ืœื”ืชื—ื™ืœ ืžื—ื“ืฉ ืžืฉื”ื• ื˜ื•ื‘ ื™ื•ืชืจ.

ToCode
1 420
counts match
      case Nil if springs.forall(Set('.', '?').contains(_)) =>
        1
      case Nil =>
        0
      case head :: tail =>
        mem.getOrElseUpdate(s"${springs} ${counts}", {
          val firstDamaged = springs.indexOf('#')
          val end = if (firstDamaged != -1) firstDamaged else springs.length - 1
          0.to(end)
            .map { i => assignGroup(springs.substring(i), head) }
            .collect {
              case Some(springs) => arrangements(mem)(springs, tail)
            }
            .sum
        })



  @main
  def day12part1(): Unit =
    Source.fromResource("day12.txt")
      .getLines()
      .map(unfoldLine(1))
      .map(arrangements())
      .toList
      .sum
      .pipe(println)
}

ื—ืœืง 2 ื—ื“ื™ ื”ืขื™ืŸ ื‘ื™ื ื™ื›ื ื™ื›ืœื• ืœืฉื™ื ืœื‘ ืœืคื•ื ืงืฆื™ื” ื‘ืฉื unfoldLine ืฉื”ืคืขืœืชื™ ืขืœ ื›ืœ ืฉื•ืจื” ื›ื“ื™ ืœืคืฆืœ ืืช ื”ืžื—ืจื•ื–ืช ืœืฉื ื™ ื”ื—ืœืงื™ื ืฉืœื”:
  def unfoldLine(factor: Int)(line: String): (String, List[Int]) =
    line.split(' ') match
      case Array(springs, counts) =>
        val unfoldedCounts = ((counts + ",") * factor).stripSuffix(",")
        val unfoldedSprings = ((springs + "?") * factor).stripSuffix("?")
        (unfoldedSprings, unfoldedCounts.split(',').map(_.toInt).toList)

ืื‘ืœ ื—ื•ืฅ ืžื”ืฉื•ืจื” ื”ืคื•ื ืงืฆื™ื” ืžืงื‘ืœืช ื’ื ืขืจืš ื‘ืฉื factor. ื”ืกื™ื‘ื” ืœืขืจืš ื”ื–ื” ื”ื™ื ื”ื—ืœืง ื”ืฉื ื™ ืฉืœ ื”ืชืจื’ื™ืœ. ื‘ื—ืœืง ื”ืฉื ื™ ืžืกืคืจื™ื ืœื ื• ืฉื‘ืขืฆื ื”ืฉื•ืจื•ืช ืžื›ื•ื•ืฆื•ืช, ื•ืฉื›ืœ ืฉื•ืจื” ืžื™ื™ืฆื’ืช ืžื—ืจื•ื–ืช ืืจื•ื›ื” ืคื™ 5 ืžื–ื• ืฉืžื•ืคื™ืขื” ื‘ืงืœื˜ ื”ืžืงื•ืจื™, ืขื ืกื™ืžื ื™ ืฉืืœื” ืฉืžืคืจื™ื“ื™ื ื‘ื™ืŸ ื›ืœ ืžื•ืคืข. ื›ืœื•ืžืจ ื›ืฉืžื•ืคื™ืขื” ื‘ืงืœื˜ ื”ืฉื•ืจื”:
.# 1
ื”ื ื‘ืขืฆื ืžืชื›ื•ื•ื ื™ื ืฉื”ืงืœื˜ ืฉืœื ื• ื”ื•ื:
.#?.#?.#?.#?.# 1,1,1,1,1
ื ื•, ื‘ื’ืœืœ ืฉื‘ืกืงืืœื” (ื›ืžื• ื‘ืฉืคื•ืช ืจื‘ื•ืช ืื—ืจื•ืช) ืงืœ ืœื”ืืจื™ืš ืžื—ืจื•ื–ืช ืขื ืคืขื•ืœืช ื›ืคืœ, ื”ืฉื™ื ื•ื™ ื”ื ื“ืจืฉ ื‘ืฉื‘ื™ืœ ื”ื—ืœืง ื”ืฉื ื™ ื‘ื•ืฆืข ื‘ืงืœื•ืช ื‘ืชื•ืš ืคื•ื ืงืฆื™ื” ื–ื•, ื•ื‘ื–ื›ื•ืช ื”ืืœื’ื•ืจื™ืชื ื”ื™ืขื™ืœ ืžืกืคื™ืง ื’ื ื”ื—ืœืง ื”ืฉื ื™ ื ืคืชืจ ื‘ื–ืžืŸ ืกื‘ื™ืจ.

ToCode
1 420
ืคื™ืชืจื•ืŸ Advent Of Code 2023 ื™ื•ื 12 ื‘ Scala ืื ื™ ืžืงื•ื•ื” ืฉืœื ื”ืชืขื™ื™ืคืชื ืžื”ื—ื™ื“ื•ืช ืฉืœ ืืจื™ืง, ืื ื™ ื‘ื˜ื•ื— ืœื ื”ืชืขื™ื™ืคืชื™ ื•ืžืžืฉื™ืš (ื’ื ืื ืœืื˜) ื‘ืžื˜ืจื” ืœืกื™ื™ื ื™ื•ื ืื—ื“ ืืช ื›ืœ 25 ื”ื—ื™ื“ื•ืช. ื”ืคื™ืจืกื•ื ื”ื™ื•ื ืžืœื•ื•ื” ื‘ืื•ืคื˜ื™ืžื™ื•ืช ื–ื”ื™ืจื” ืฉื›ืŸ ืื ื—ื ื• ื›ืžืขื˜ ื‘ื—ืฆื™ ื”ื“ืจืš. ื‘ื•ืื• ื ืจืื” ืžื” ืžื—ื›ื” ืœื ื• ื‘ื™ื•ื 12, ืื™ื–ื” ืคื™ืชืจื•ืŸ ืœื ืขื‘ื“ ื•ืžื” ื‘ืกื•ืฃ ื›ืŸ ืคืชืจ ืืช ื”ื—ื™ื“ื”. ื”ืืชื’ืจ - ื”ืฆืœื‘ืช ื ืชื•ื ื™ื ื‘ืืชื’ืจ ื”ื™ื•ื ื›ืœ ืฉื•ืจืช ืงืœื˜ ืžื™ื™ืฆื’ืช ืจืฆืฃ ืฉืœ ืžืขื™ื™ื ื•ืช, ื—ืœืงื ืžืชืคืงื“ื™ื ื•ื—ืœืงื ืžืงื•ืœืงืœื™ื. ื ืกืžืŸ ืืช ื”ืžืงื•ืœืงืœื™ื ื‘ # ื•ืืช ื”ืžืชืคืงื“ื™ื ื‘ื ืงื•ื“ื”. ื”ืžื™ื“ืข ืžื’ื™ืข ื‘ืฉืชื™ ืฆื•ืจื•ืช, ืงื•ื“ื ื›ืœ ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ืžืขื™ื™ื ื•ืช ื”ืžืชืคืงื“ื™ื ื•ื”ืชืงื•ืœื™ื, ืื—ืจื™ื”ื ืจื•ื•ื— ื•ืื– ืจืฉื™ืžื” ืฉืœ ื”ืงื‘ื•ืฆื•ืช ืฉืœ ื”ืชืงื•ืœื™ื. ืœื“ื•ื’ืžื” ืฉื•ืจืช ื”ืงืœื˜ ื”ื‘ืื”:
* .#.### 1,1,3 *
ืžืจืื” ืœื ื• ืฉื™ืฉ ืฉืœื•ืฉ ืงื‘ื•ืฆื•ืช ืฉืœ ืชืงื•ืœื™ื ื”ืจืืฉื•ื ื” ื‘ืื•ืจืš 1, ื”ืฉื ื™ื” ื‘ืื•ืจืš 1 ื•ืื– ืงื‘ื•ืฆื” ืฉืœื™ืฉื™ืช ื‘ืื•ืจืš 3. ืื ื—ื ื• ืจื•ืื™ื ืฉืจืฉื™ืžืช ื”ืžืกืคืจื™ื ืชื•ืืžืช ืœืจืฉื™ืžืช ื”ืกื•ืœืžื™ื•ืช ื•ื”ื ืงื•ื“ื•ืช ื•ื”ื›ืœ ื˜ื•ื‘. ื”ื ื” ืขื•ื“ ืื—ื“:
.#.###.#.###### 1,3,1,6
ื”ื‘ืขื™ื” ื”ื™ื ืฉื‘ืงืœื˜ ื”ืืžื™ืชื™ ื—ืœืง ืžื”ื ืชื•ื ื™ื ื‘ื—ืœืง ื”ืจืืฉื•ืŸ ื ืžื—ืงื• ื•ืœื›ืŸ ืื ื—ื ื• ืœื ื™ื•ื“ืขื™ื ืื ื–ื” ืกื•ืœืžื™ืช ืื• ื ืงื•ื“ื”. ืงืœื˜ ื—ืกืจ ืžืกื•ืžืŸ ื‘ืกื™ืžืŸ ืฉืืœื” ืœืžืฉืœ ื”ืฉื•ืจื” ื”ื–ืืช ืฉืžืชืื™ืžื” ืœืฉื•ืจื” ื”ืจืืฉื•ื ื”:
???.### 1,1,3
ื”ืžืฉื™ืžื” ืฉืœื ื• ื”ื™ื ืœื”ืฉืœื™ื ืืช ื”ืขืจื›ื™ื ื‘ืžืงื•ื ืกื™ืžื ื™ ื”ืฉืืœื”. ืื‘ืœ ืจื’ืข ื™ืฉ ืกื™ื‘ื•ืš - ืจื•ื‘ ื”ื–ืžืŸ ื™ืฉ ื™ื•ืชืจ ืžืื•ืคืฆื™ื” ืื—ืช ืœื”ืฉืœืžื”. ืœืžืฉืœ ื‘ืฉื•ืจื”:
?###???????? 3,2,1
ื›ืœ ื”ื”ืฉืœืžื•ืช ื”ืืœื” ื—ื•ืงื™ื•ืช:
.###.##.#...
.###.##..#..
.###.##...#.
.###.##....#
.###..##.#..
.###..##..#.
.###..##...#
.###...##.#.
.###...##..#
.###....##.#
ืื– ื‘ืžืงื•ื ืœื’ืœื•ืช ื”ืฉืœืžื” ืื—ืช ื—ื•ืงื™ืช ืœื›ืœ ืฉื•ืจื”, ื”ืžืฉื™ืžื” ืฉืœื ื• ื”ื™ื ืœืžืฆื•ื ื›ืžื” ืืคืฉืจื•ื™ื•ืช ื™ืฉ ืœื”ืฉืœืžื” ืœื›ืœ ืฉื•ืจื”, ื•ืื– ืœืกื›ื•ื ืืช ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช. ืื™ืš ืœื ืœืคืชื•ืจ ืืช ื”ืชืจื’ื™ืœ ื›ื™ื•ื•ืŸ ืจืืฉื•ืŸ ืฉื—ืฉื‘ืชื™ ืขืœื™ื• ื›ืฉืจืื™ืชื™ ืืช ื”ืืชื’ืจ ื”ื™ื” ืœืœื›ืช ืขืœ ืคืฉื•ื˜, ื›ืœื•ืžืจ ืื ื™ืฉ 7 ืกื™ืžื ื™ ืฉืืœื” ื‘ืžื—ืจื•ื–ืช ืœื ืกื•ืช ืืช ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ืœื‘ื—ื•ืจ ืกื•ืœืžื™ื•ืช ื•ื ืงื•ื“ื•ืช ื‘ืžืงื•ื ืื•ืชื 7 ืกื™ืžื ื™ ืฉืืœื” ื•ืœืจืื•ืช ืžื” ืžืชืื™ื ืœืจืฉื™ืžืช ื”ืงื‘ื•ืฆื•ืช ืฉื‘ืกื•ืฃ ื”ืฉื•ืจื”. ื•ื–ื” ืขื‘ื“ ื•ื‘ืืžืช ืคืชืจ ืืช ื”ื—ืœืง ื”ืจืืฉื•ืŸ ืฉืœ ื”ืฉืืœื” ืื‘ืœ ื‘ื—ืœืง ื”ืฉื ื™ ื”ื™ื” ืžื•ืงืฉ ืฉื’ืจื ืœืจืขื™ื•ืŸ ืฉืœื™ ืœื”ืชืจืกืง. ืืชื ืžื‘ื™ื ื™ื ื”ื‘ืขื™ื” ื‘ืื•ืชื• ืจืขื™ื•ืŸ ื ืื™ื‘ื™ ื”ื™ื ืกื™ื‘ื•ื›ื™ื•ืช ื–ืžืŸ ื”ืจื™ืฆื” - ืื ื™ืฉ 7 ืกื™ืžื ื™ ืฉืืœื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื ืกื•ืช 2 ื‘ื—ื–ืงืช 7 ืืคืฉืจื•ื™ื•ืช ื›ืœื•ืžืจ 128 ืืคืฉืจื•ื™ื•ืช. ื–ื” ืžืžืฉ ืกื‘ื™ืจ. ืื‘ืœ ืื ื™ืฉ 30 ืกื™ืžื ื™ ืฉืืœื” ื ืฆื˜ืจืš ืœื ืกื•ืช 2 ื‘ื—ื–ืงืช 30 ืืคืฉืจื•ื™ื•ืช ืฉื–ื” ื›ื‘ืจ ื”ืจื‘ื” ื™ื•ืชืจ ืžื“ื™. ืžื” ื›ืŸ ืขื•ื‘ื“ ื”ื“ืจืš ืงื“ื™ืžื” ื”ื™ื ืœื›ืŸ ืœื•ื•ืชืจ ืขืœ ื”ืกื™ื‘ื•ื›ื™ื•ืช ื”ืžืขืจื™ื›ื™ืช ื•ืœืžืฆื•ื ืืœื’ื•ืจื™ืชื ื™ืขื™ืœ ื™ื•ืชืจ. ื“ืจืš ืื—ืช ื›ื–ืืช ืชื”ื™ื” ืœื—ืœืง ื”ื ื™ืกื•ื™ ืฉืœื ื• ืœืฉืœื‘ื™ื - ืชื—ื™ืœื” ื ืžืฆื ืื™ืคื” ืืคืฉืจ ืœืฉื™ื ืืช ื”ืงื‘ื•ืฆื” ื”ืจืืฉื•ื ื”, ื‘ื“ืจืš ื›ืœืœ ื™ื”ื™ื• ืžืกืคืจ ืืคืฉืจื•ื™ื•ืช (ื‘ืžืงืจื” ื”ื’ืจื•ืข ืื•ืจืš ื”ืžื—ืจื•ื–ืช ืืคืฉืจื•ื™ื•ืช) ืื‘ืœ ื–ื” ื‘ืกื“ืจ. ืขื›ืฉื™ื• ืœื›ืœ ืืคืฉืจื•ืช ื ืžืฆื ืื™ืคื” ืืคืฉืจ ืœืฉื™ื ืืช ื”ืงื‘ื•ืฆื” ื”ืฉื ื™ื”, ื•ื’ื ื›ืืŸ ื™ื”ื™ื• ืžืกืคืจ ืืคืฉืจื•ื™ื•ืช, ื•ืื– ื ืžืฉื™ืš ืœื›ืœ ืืคืฉืจื•ืช ืœืžืฆื•ื ื›ืžื” ืืคืฉืจื•ื™ื•ืช ื™ืฉ ืœื ื• ืœืฉื™ื ืืช ื”ืงื‘ื•ืฆื” ื”ืฉืœื™ืฉื™ืช ื•ื›ืš ื”ืœืื”. ื”ืคื™ืชืจื•ืŸ ื”ื–ื” ืžื’ื™ืข ืœืื•ืชื” ืชื•ืฆืื” ืื‘ืœ ื”ื•ื ืขื•ื‘ื“ ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ืจ - ื’ื ื›ื™ ืžืกืคืจ ื”ืฆืขื“ื™ื ืงื˜ืŸ ื™ื•ืชืจ ื•ื’ื ื•ืื•ืœื™ ื‘ืขื™ืงืจ ื›ื™ ืฆืขื“ื™ื ื—ื•ื–ืจื™ื ืขืœ ืขืฆืžื. ืฉื™ืœื•ื‘ Memoization ืžืืคืฉืจ ืœืฆืžืฆื ืžืฉืžืขื•ืชื™ืช ืืช ืžืกืคืจ ื”ื—ื™ืฉื•ื‘ื™ื ื•ืœื”ื’ื™ืข ืœืชื•ืฆืื” ื”ื ื›ื•ื ื” ื‘ื–ืžืŸ ืกื‘ื™ืจ, ื’ื ื‘ืงืœื˜ื™ื ื’ื“ื•ืœื™ื. ืงื•ื“? ื”ื ื” ื‘ืกืงืืœื”-
import scala.io.Source
import scala.util.chaining._
import scala.collection.mutable
object aoc2023day12 {
  val demoInput: String = """???.### 1,1,3
                            |.??..??...?##. 1,1,3
                            |?#?#?#?#?#?#?#? 1,3,1,6
                            |????.#...#... 4,1,1
                            |????.######..#####. 1,6,5
                            |?###???????? 3,2,1""".stripMargin


  def unfoldLine(factor: Int)(line: String): (String, List[Int]) =
    line.split(' ') match
      case Array(springs, counts) =>
        val unfoldedCounts = ((counts + ",") * factor).stripSuffix(",")
        val unfoldedSprings = ((springs + "?") * factor).stripSuffix("?")
        (unfoldedSprings, unfoldedCounts.split(',').map(_.toInt).toList)


  def assignGroup(springs: String, groupSize: Int): Option[String] =
    val startRe = s"""^[#?]{${groupSize}}[.?].*""".r
    val finalRe = s"""^[#?]{${groupSize}}""".r

    if (startRe.matches(springs)) {
      Some(springs.substring(groupSize + 1))
    } else if (finalRe.matches(springs)) {
      Some("")
    } else {
      None
    }


  def arrangements(mem: mutable.HashMap[String, Long] = new mutable.HashMap[String, Long]())(springs: String, counts: List[Int]): Long =

ToCode
1 420
ื™ื•ืชืจ ืžื“ื™ ืื™ื ืคื•ืจืžืฆื™ื” ื—ื‘ืจ ืœื•ืžื“ ืชื›ื ื•ืช ืœื‘ื“ ืžื”ื‘ื™ืช ื›ื“ื™ ืœืžืฆื•ื ืขื‘ื•ื“ื”. ื›ืœ ืคืขื ืฉืื ื—ื ื• ืžื“ื‘ืจื™ื ื”ื•ื ื‘ื ืขื ืกื™ืคื•ืจื™ื ื—ื“ืฉื™ื - "ืฉืžืข ื”ืฉื‘ื•ืข ื”ืชื—ืœืชื™ ืœืœืžื•ื“ Tensor Flow ื›ื™ ื‘ื›ืœ ืžืงื•ื ืฆืจื™ื›ื™ื ืืช ื–ื”" "ืกื™ื™ืžืชื™ ืงื•ืจืก ืคื™ื™ืชื•ืŸ ืฉืœ 40 ืฉืขื•ืช ื•ื™ื“ืื• ื‘ื™ื•ื“ืžื™ - ื”ื™ื” ืžืขื•ืœื” ื•ืœืžื“ืชื™ ื”ืžื•ืŸ" "ืชื’ื™ื“ ืžื” ื“ืขืชืš ืขืœ AWS? ื”ืชื—ืœืชื™ ืœืœืžื•ื“ ืœื”ืกืžื›ื” ืฉืœ CLF-C01 ื›ื™ ื”ื‘ื ืชื™ ืฉื—ื™ื™ื‘ื™ื ืืช ื–ื” ื‘ืฉื‘ื™ืœ ืœื”ืชืงื‘ืœ ืœืขื‘ื•ื“ื” ื› MLOps" ื•ืื ื™ ืžื‘ื™ืŸ ืืช ื”ืงื•ืฉื™. ืืชื” ืœื‘ื“, ืืชื” ืžืกืชื›ืœ ืขืœ ืื™ื ืกื•ืฃ ื—ื•ืžืจ ืฉื™ืฉ ื‘ืื™ื ื˜ืจื ื˜, ื›ืœ ื›ืžื” ื™ืžื™ื ืืชื” ืคื•ื’ืฉ ื‘ืŸ ืื“ื ืื—ืจ ืฉืžืžืœื™ืฅ ืœืš ืขืœ ื”ื“ื‘ืจ ืฉืืชื” ืžืžืฉ ื—ื™ื™ื‘ ืœืœืžื•ื“ ื›ื™ ื›ื›ื” ืชืžืฆื ืขื‘ื•ื“ื” ื”ื›ื™ ืžื”ืจ, ื•ืืชื” ืœื ื™ื•ื“ืข ืžื” ืœืขืฉื•ืช. ืื‘ืœ ื”ื›ื™ ื’ืจื•ืข ื–ื” ืฉืืชื” ืžืจื’ื™ืฉ ืฉืืชื” ื›ื‘ืจ "ืžื‘ื™ืŸ ืืช ื–ื”", ื–ื”ื• ืกื™ื™ืžืช ืงื•ืจืก ืคื™ื™ืชื•ืŸ ืจืื™ืช 40 ืฉืขื•ืช ื•ื™ื“ืื• ื‘ื™ื•ื“ืžื™, ื‘ื ื™ืช 10 ืคืจื•ื™ืงื˜ื™ื ืžื”ืงื•ืจืก ื•ืคืชืจืช ืืช ื›ืœ ื”ืฉื™ืขื•ืจื™ ื‘ื™ืช. ืืชื” ื‘ื˜ื•ื— ืฉืืชื” ื™ื•ื“ืข ืคื™ื™ืชื•ืŸ ืื‘ืœ ืขื“ื™ื™ืŸ ืœื ืžืฆืœื™ื— ืœืžืฆื•ื ืขื‘ื•ื“ื”. ืœื›ืŸ ื”ื‘ืขื™ื” ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืฉืฆืจื™ืš ืœื“ืขืช ืขื•ื“ ื“ื‘ืจื™ื. ืื‘ืœ ืžืขื’ืœ ื”ืงืกืžื™ื ื”ื–ื” ืœื ืžืกืชื™ื™ื. ืœื ืžืฉื ื” ื›ืžื” ื“ื‘ืจื™ื ื—ื“ืฉื™ื ืืชื” ืœื•ืžื“, ืืชื” ืžื•ืฆื ืืช ืขืฆืžืš ื‘ืื•ืชื• ืžืงื•ื. ืืชื” ืขื“ื™ื™ืŸ ืžื—ืคืฉ ืขื‘ื•ื“ื”, ื›ืœ ื“ื‘ืจ ื—ื“ืฉ ืฉืืชื” ืœื•ืžื“ ื’ื•ืจื ืœืš ืœืฉื›ื•ื— ืงืฆืช ืžื”ื“ื‘ืจ ื”ืงื•ื“ื, ื•ื›ืœ ืจืื™ื•ืŸ ืžืžืฉื™ื›ื™ื ืœื‘ืงืฉ ืžืžืš ืœืขื ื•ืช ืขืœ ื“ื‘ืจื™ื ืฉืขื“ื™ื™ืŸ ืœื ืœืžื“ืช. ืžืื™ืคื” ื™ืฉ ื›ืœ ื›ืš ื”ืจื‘ื” ื“ื‘ืจื™ื ื‘ืขื•ืœื ืฉืฆืจื™ืš ืœืœืžื•ื“? ื–ื” ืื™ ืคืขื ื™ื™ื’ืžืจ? ื”ืงื•ืฉื™ ื”ื•ื ืœืจืื•ืช ืฉืขื“ื™ื™ืŸ ืœื ืกื™ื™ืžืช ืœืœืžื•ื“ ืืคื™ืœื• ื“ื‘ืจ ืื—ื“ ื›ืžื• ืฉืฆืจื™ืš. ืฉืงื•ืจืก 40 ืฉืขื•ืช ืคื™ื™ืชื•ืŸ ื•ืคืจื•ื™ืงื˜ื™ื ืฉืœ ื”ืงื•ืจืก ื–ื” ืœื ืžืกืคื™ืง ื›ื“ื™ ืœื“ืขืช ืคื™ื™ืชื•ืŸ. ื”ืืชื’ืจ ื”ื•ื ืœื”ื‘ื™ืŸ ืื™ืš ืœืœืžื•ื“ ืืช ืื•ืชื• ื“ื‘ืจ ื™ื•ืชืจ ืœืขื•ืžืง, ื•ืœืฉืœื‘ ืืช ื”ืœื™ืžื•ื“ ืขื ืขืฉื™ื™ื” ื•ื‘ื ื™ื™ืช ืคืจื•ื™ืงื˜ ื‘ืจืžื” ื’ื‘ื•ื”ื”. ื›ืŸ ื’ื ื‘ 2024, ื”ื“ืจืš ื”ื›ื™ ืžื”ื™ืจื” ืœืžืฆื•ื ืขื‘ื•ื“ื” ื”ื™ื ืœื”ื’ื™ืข ืขื ืชื™ืง ืขื‘ื•ื“ื•ืช ื•ื™ื›ื•ืœืช ืžื•ื›ื—ืช. ืคืจื•ื™ืงื˜ ื’ื ืขื•ื–ืจ ืœืžืงื“ ืืช ื”ืžืืžืฆื™ื ื•ืœื”ื—ืœื™ื˜ ืžื” ืฆืจื™ืš ืœืœืžื•ื“ ืžืชื•ืš ืื™ื ืกื•ืฃ ื—ื•ืžืจื™ ื”ืœื™ืžื•ื“ ืฉื‘ืจืฉืช, ื•ื’ื ืžืจืื” ืœืขื•ืœื ืฉืืชื” ื™ื•ื“ืข ืœื”ืชืžืงื“ ื•ืœื’ืจื•ื ืœื“ื‘ืจื™ื ืœืงืจื•ืช.

ToCode
1 420
ื–ื” ืœื ืžืกืคืจ ื”ืฉื•ืจื•ืช ืžืชื™ ืคื•ื ืงืฆื™ื” ืžืคืกื™ืงื” ืœื”ื™ื•ืช ืคื•ื ืงืฆื™ื”? ื ื ื™ื— ืฉื™ืฉ ืœื ื• ื‘ืขื™ื” ืฉื‘ืฉื‘ื™ืœ ืœืคืชื•ืจ ืื•ืชื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ื•ืฆื™ื ืžืžื—ืจื•ื–ืช ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ืกืคืจื•ืช ืฉื‘ื”. ืื•ืœื™ ืื ื—ื ื• ืœื ื™ื•ื“ืขื™ื ืขื“ื™ื™ืŸ ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืืจื™ื™ื ื•ืจืง ื”ืชื—ืœื ื• ืœืœืžื•ื“ ืคื™ื™ืชื•ืŸ ื•ื—ื•ืฉื‘ื™ื ืœื”ืฉืชืžืฉ ื‘ืœื•ืœืื”, ื•ืœื›ืŸ ื ื›ืชื•ื‘ ืืช ื”ืคื•ื ืงืฆื™ื”:
def to_list_of_digits(s: str) -> list[int]:
    result = []
    for ch in s:
        if ch.isdigit():
            result.append(int(ch))
    return result
ื•ื–ื” ืขื•ื‘ื“! ืื‘ืœ ืื– ืื ื—ื ื• ืžื’ืœื™ื ืฉื‘ืขืฆื ื‘ืคื™ื™ืชื•ืŸ ื™ืฉ ืžื ื’ื ื•ืŸ ืฉื ืงืจื List Comprehension ื•ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื›ืชื•ื‘ ืืช ื”ืคื•ื ืงืฆื™ื” ื‘ืฆื•ืจื” ื”ืจื‘ื” ื™ื•ืชืจ ืงืฆืจื”:
def to_list_of_digits(s: str) -> list[int]:
    return [int(ch) for ch in s if ch.isdigit()]
ืขื›ืฉื™ื• ื”ืฉืืœื” - ื”ืื ื ื™ืฉืืจ ืขื ื”ืคื•ื ืงืฆื™ื”? ืื•ืœื™ ืขื“ื™ืฃ ืœืงื—ืช ืืช ื”ืฉื•ืจื” ื”ืื—ืช ื•ืคืฉื•ื˜ ืœืฉื™ื ืื•ืชื” ื‘ืžืงื•ื ื”ืงืจื™ืื”? ืžื™ ื”ื—ืœื™ื˜ ืฉืฆืจื™ื›ื” ืœื”ื™ื•ืช ื›ื–ืืช ืคื•ื ืงืฆื™ื” ื‘ื›ืœืœ? ื•ืื•ืœื™ ืื ื”ื™ื™ืชื™ ืžืจืืฉ ื™ื•ื“ืข ืขืœ List Comprehension ืœื ื”ื™ื™ืชื™ ื›ื•ืชื‘ ืืช ื–ื” ื›ืคื•ื ืงืฆื™ื”? ื”ืชืฉื•ื‘ื” ืžื•ืจื›ื‘ืช ืื‘ืœ ื›ื“ืื™ ืœื”ืฉืื™ืจ ื‘ืจืืฉ ื›ืžื” ื ืงื•ื“ื•ืช- 1. ื–ื” ืœื ื›ืžื•ืช ื”ืฉื•ืจื•ืช. ืžื” ืฉื”ื•ืคืš ืคื•ื ืงืฆื™ื” ืœืจืขื™ื•ืŸ ื˜ื•ื‘ ื”ื•ื ืฉื”ืคื•ื ืงืฆื™ื” ืžืกืคืจืช ืกื™ืคื•ืจ. ื”ื™ื ืขื•ื–ืจืช ืœื ื• ืœืงืจื•ื ืืช ื”ืงื•ื“. ืคื•ื ืงืฆื™ื” ื ื•ืชื ืช ืฉื ืœืคืขื•ืœื” ืžืกื•ื™ืžืช. ืื ื”ืฉื ื”ื–ื” ื”ื™ื” ื”ื’ื™ื•ื ื™ ื›ืฉื”ื™ื ื”ื™ืชื” ืืจื•ื›ื” ื™ืฉ ืกื™ื›ื•ื™ ื˜ื•ื‘ ืฉื”ื•ื ืขื“ื™ื™ืŸ ื”ื’ื™ื•ื ื™, ื’ื ื›ืฉื”ื™ื ืœื•ืงื—ืช ืฉื•ืจื” ืื—ืช. 2. ืคื•ื ืงืฆื™ื” ืžืืคืฉืจืช ื ืงื•ื“ืช ื‘ื“ื™ืงื” ื•ืžืฉื”ื• ืœื“ื•ืŸ ืขืœื™ื•. ืื ื™ ื™ื›ื•ืœ ืœื”ืกืชื›ืœ ืขืœ ื”ืคื•ื ืงืฆื™ื” ืฉืžื•ืฉื›ืช ืกืคืจื•ืช ืžืžื—ืจื•ื–ืช ื•ืœื‘ื“ื•ืง ืื ื”ื™ื ืขื•ื‘ื“ืช ืขืœ ืžื—ืจื•ื–ื•ืช ืžืกื•ื™ืžื•ืช ืฉืื ื™ ืžื›ื™ืจ, ืื• ืœื”ืชืœื‘ื˜ ืžื” ื”ื™ื ืฆืจื™ื›ื” ืœืขืฉื•ืช ื‘ืžืงืจื™ ืงืฆื”. 3. ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืคื•ื ืงืฆื™ื” ืžืกืคืง ื”ื–ื“ืžื ื•ืช ืœืฉื™ื ื•ื™ ืงืœ ื™ื•ืชืจ - ืื ืžื—ืจ ื ืฆื˜ืจืš ืœื”ื—ืœื™ืฃ ื‘ื›ืœ ืžืงื•ื ื‘ืžืขืจื›ืช ืืช ื”ื”ืชื ื”ื’ื•ืช, ืœืžืฉืœ ื›ื“ื™ ืœืžืฉื•ืš ืžืกืคืจื™ื ืžืœืื™ื ื‘ืžืงื•ื ืกืคืจื•ืช, ื”ืคื•ื ืงืฆื™ื” ืชืืคืฉืจ ืœืขืฉื•ืช ืืช ื–ื” ื‘ืžื”ื™ืจื•ืช ื•ืชื•ืš ืฉื™ื ื•ื™ ืฉืœ ืžืงื•ื ืื—ื“. ื”ืขืชืงืช ืฉื•ืจืช ื”ืงื•ื“ ื•ืฉื›ืคื•ืœื” ื‘ืงื•ื“, ืืคื™ืœื• ืื ื–ื” ืจืง ืฉื•ืจื”, ื’ื•ืจืžืช ืœืฉื™ื ื•ื™ ืœื”ื™ื•ืช ื™ื•ืชืจ ืžืกื•ื‘ืš. ื”ืชืจื—ื™ืฉ ืฉืœ ืคื•ื ืงืฆื™ื•ืช ืืจื•ื›ื•ืช ืžื“ื™ ื‘ืงื•ื“ ื”ื•ื ื”ืจื‘ื” ื™ื•ืชืจ ื ืคื•ืฅ ืžืงื•ื“ ืขื ืคื•ื ืงืฆื™ื•ืช ืงืฆืจื•ืช ืžื“ื™. ืจื•ื‘ ื”ื–ืžืŸ ื”ื ื˜ื™ื™ื” ื”ื˜ื‘ืขื™ืช ืฉืœื ื• ื”ื™ื ืœื ืœื™ื™ืฆืจ ืคื•ื ืงืฆื™ื•ืช ื’ื ื›ืฉืฆืจื™ืš ืื•ืชืŸ. ืœื›ืŸ ืœื ื”ื™ื™ืชื™ ืžืžื”ืจ ืœืžื—ื•ืง ืคื•ื ืงืฆื™ื•ืช, ื’ื ืื ืงื™ืฆืจื ื• ืื•ืชืŸ ืœืฉื•ืจื” ืื• ืฉืชื™ื™ื.

ToCode
1 420
ืžืชื™ ื‘ื›ืœ ื–ืืช ืœืชืจื•ื ืœืคืจื•ื™ืงื˜ ืงื•ื“ ืคืชื•ื—? ื”ื“ื™ื•ืŸ ืขืœ ืชืจื•ืžื•ืช ืœืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื— ื”ืชืขื•ืจืจ ืžื—ื“ืฉ ืœืื—ืจื•ื ื” ื‘ืขืงื‘ื•ืช ืžื‘ื•ืœ ื”ืชืจื•ืžื•ืช ื”ืคื™ืงื˜ื™ื‘ื™ื•ืช ืฉื ืฉืœื—ื• ืœืคืจื•ื™ืงื˜ Express. ืžื“ื•ื‘ืจ ื‘ืžื“ืจื™ืš ื•ื™ื“ืื• ืฉืคื•ืจืกื ื‘ืขืจื•ืฅ ื™ื•ื˜ื™ื•ื‘ ืคื•ืคื•ืœืจื™ ื‘ืžื™ื•ื—ื“ ืฉื”ืกื‘ื™ืจ ืื™ืš ืœืฉืœื•ื— PR ื•ื™ืฆื ืžืฉืœื™ื˜ื”. ืื‘ืœ ืœืžื” ื‘ืขืฆื ืื ื—ื ื• ื˜ื•ืขื™ื ื‘ืกื™ืคื•ืจ ื”ื–ื” ื›ืœ ืคืขื ืžื—ื“ืฉ? ืœืžื” ื›ืœ ื›ืš ืงืฉื” ืœืฉืœื•ื— ืชืจื•ืžื” ื‘ืขืœืช ืžืฉืžืขื•ืช ืœืคืจื•ื™ืงื˜ ืฉืื ื—ื ื• ืื•ื”ื‘ื™ื? ื•ืื™ืš ื›ืŸ ืœืชืจื•ื ืœืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื—? ื”ื“ื‘ืจ ื”ื—ืฉื•ื‘ ืœื–ื›ื•ืจ ื”ื•ื ืฉืชืจื•ืžื” ืœืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื— ื”ื™ื ื›ืฉืœืขืฆืžื” ืœื ืžื˜ืจื”, ื›ืฉื ืฉืคืจื•ืคื™ืœ ื’ื™ื˜ื”ืื‘ ืขื ืขืฉืจื•ืช ืื• ืžืื•ืช ืžืื’ืจื™ื ืื™ื ื• ื”ืžื˜ืจื”. ืžื” ื›ืŸ? ืชืจื•ืžื” ืœืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื— ื”ื™ื ื‘ืขืœืช ืขืจืš ื‘ืžืงืจื™ื ื”ื‘ืื™ื- 1. ื›ืฉื”ื™ื ื‘ืื” ืžืชื•ืš ื”ื™ื›ืจื•ืช ืžืขืžื™ืงื” ืขื ื”ืคืจื•ื™ืงื˜ ื•ื”ืžื’ื‘ืœื•ืช ืฉืœื•. 2. ื›ืฉื”ื™ื ื‘ืื” ืžืชื•ืš ื›ื•ื•ื ื” ืืžื™ืชื™ืช ืœืฉืคืจ ืืช ืžืฆื‘ ื”ืขื ื™ื™ื ื™ื ื‘ืืงื•ืกื™ืกื˜ื ืฉืœ ื”ืคืจื•ื™ืงื˜. ืชืจื•ืžื” ื›ื–ืืช ืœืคืจื•ื™ืงื˜ ืฉืื ืฉื™ื ืžืฉืชืžืฉื™ื ื‘ื• ื™ื›ื•ืœื” ื’ื ืœืฉืคืจ ืืช ื”ืžืฆื‘ ืฉืœ ื”ืชื•ืจื ืžื‘ื—ื™ื ืช ืชืขืกื•ืงื”. ืžื™ ืฉืชื•ืจื ืงื•ื“ ืžืฉืžืขื•ืชื™ ื•ืžื•ืขื™ืœ ืœ numpy ื›ื ืจืื” ื™ื•ื“ืข ื“ื™ ื˜ื•ื‘ numpy ื•ืœื›ืŸ ืื•ืœื™ ืฉื•ื•ื” ืœื™ ืœื’ื™ื™ืก ืื•ืชื• ืœืฆื•ื•ืช. ื”ืชืจื•ืžื” ืœืคืจื•ื™ืงื˜ ื‘ืžืงืจื” ื”ื–ื” ื”ื™ื ืื™ื ื“ื™ืงืฆื™ื” ืœืจืžืช ื”ื™ื›ืจื•ืช ืžืขืžื™ืงื” ืขื ื”ืžืขืจื›ืช ื•ื”ืงื”ื™ืœื”. ืœืืฃ ืื—ื“ ืœื ืื›ืคืช ืฉืืชื ื™ื•ื“ืขื™ื ืœื”ืฉืชืžืฉ ื‘ื›ืคืชื•ืจ ื›ื“ื™ ืœืฉืœื•ื— PR. ืžื” ืฉื—ืฉื•ื‘ ื›ื“ื™ ืœืงื‘ืœ ืขื‘ื•ื“ื” ื”ื•ื ื”ื™ื›ืจื•ืช ืžืขืžื™ืงื” ืขื ืคืจื•ื™ืงื˜, ื™ื›ื•ืœืช ืขื‘ื•ื“ื” ื‘ืฆื•ื•ืช, ื”ื‘ื ื” ืฉืœ ื”ื‘ืขื™ื•ืช ื•ื”ืื™ืœื•ืฆื™ื ืฉืœ ื”ืคืจื•ื™ืงื˜ ื•ื™ืฆื™ืจืช ืงื•ื“ ื—ื“ืฉ ื‘ืชื•ืš ืื•ืชื ืื™ืœื•ืฆื™ื.

ToCode
1 420
ื˜ื™ืค ืคื™ื™ื˜ืกื˜: ืื™ืš ื•ืขืœ ืื™ื–ื” ื‘ื“ื™ืงื•ืช ืœื“ืœื’? ืื—ื“ ื”ืคื™ืฆ'ืจื™ื ื”ื—ืžื•ื“ื™ื ืฉืœ ืคื™ื™ื˜ืกื˜ ื”ื•ื ื”ื™ื›ื•ืœืช "ืœืกืžืŸ" ื‘ื“ื™ืงื•ืช ื‘ื›ืœ ื“ืจืš ืฉืชื‘ื—ืจื•. ื™ื•ืฆืจื™ื ืงื•ื‘ืฅ ื‘ืฉื pytest.ini ืขื ืชื•ื›ืŸ ืฉื ืจืื” ื‘ืขืจืš ื›ื›ื”:
[pytest]
markers =
    integration: integration test
    slow: slow test
    version: tests to run before deploying a new version
ื•ืขื›ืฉื™ื• ืืคืฉืจ ืœืกืžืŸ ื‘ื“ื™ืงื” ืžืื—ืช ื”ืงื˜ื’ื•ืจื™ื•ืช ืขื ื”ืฉื˜ืจื•ื“ืœ ื”ืžืชืื™ื ืœืžืฉืœ:
@pytest.mark.integration
def test_website():
    pass
ื•ืœื”ืจื™ืฅ ืืช ื›ืœ ื”ื‘ื“ื™ืงื•ืช ืฉืžืกื•ืžื ื•ืช ื‘ืงื˜ื’ื•ืจื™ื” integration:
$ pytest -m integration
ืื• ืœื”ืจื™ืฅ ืืช ื›ืœ ื”ื“ื‘ืจื™ื ืฉืœื ืžื”ืงื˜ื’ื•ืจื™ื” ืขื:
$ pytest -m "not integration"
ืคื™ื™ื˜ืกื˜ ื’ื ื›ื•ืœืœ ื”ืžื•ืŸ ืกื™ืžื•ื ื™ื ืžื•ื‘ื ื™ื ืœืžืฉืœ ื”ืกื™ืžื•ืŸ skip ืฉื’ื•ืจื ืœืคื™ื™ื˜ืกื˜ ืœื“ืœื’ ืขืœ ื‘ื“ื™ืงื”, skipif ืฉืžืงื‘ืœ ืชื ืื™ ื•ื’ื•ืจื ืœื“ื™ืœื•ื’ ืขืœ ื‘ื“ื™ืงื” ืจืง ืื ื”ืชื ืื™ ืžืชืงื™ื™ื ื• xfail ืฉืžืกืžืŸ ืฉื‘ื“ื™ืงื” ืฆืจื™ื›ื” ืœื”ื™ื›ืฉืœ (ื•ืœื›ืŸ ืœื ืฆืจื™ืš ืœื”ืชืจื’ืฉ ืžื›ื™ืฉืœื•ืŸ). ืื‘ืœ ื”ืืชื’ืจ ื”ื™ื•ืชืจ ืžืฉืžืขื•ืชื™ ื”ื•ื ืœื ืื™ืš ืœื”ืฉืชืžืฉ ื‘ืคื™ืฆ'ืจ ืืœื ืžืชื™ ืœื”ืฉืชืžืฉ ื‘ื• - ื›ืœื•ืžืจ ืขืœ ืื™ื–ื” ื‘ื“ื™ืงื•ืช ื›ื“ืื™ ืœื“ืœื’ ื•ืื™ื–ื” ืงื˜ื’ื•ืจื™ื•ืช ืœื”ื’ื“ื™ืจ, ืžืชื™ ืœื”ื•ืกื™ืฃ xfail ื•ืžืชื™ skip ื•ืžืชื™ ื‘ื›ืœืœ ืขื“ื™ืฃ ืœืžื—ื•ืง ืืช ื”ื‘ื“ื™ืงื”. ื ื ืกื” ืœืขื ื•ืช ืขืœ ื–ื” ื‘ื›ืžื” ื›ืœืœื™ ืืฆื‘ืข- 1. ืจื•ื‘ ื”ืคื™ืฆ'ืจื™ื ืฉืœ ื‘ื“ื™ืงื•ืช ื”ื ื™ื•ืชืจ ื˜ื•ื‘ื™ื ื›ืฉืœื ืžืฉืชืžืฉื™ื ื‘ื”ื. ื–ื” ื ื›ื•ืŸ ืœื’ื‘ื™ mock-ื™ื, ืœื’ื‘ื™ before ื• after ื•ื›ืŸ ื’ื ืœื’ื‘ื™ ื“ื™ืœื•ื’ื™ื. ืื ืืชื ื™ื›ื•ืœื™ื ื‘ืœื™ ื–ื” ืขื“ื™ืฃ. 2. ืœืคืขืžื™ื ื–ื” ื ื•ื— ืœื”ื’ื“ื™ืจ ืกื˜ ืžืกื•ื™ื ืฉืœ ื‘ื“ื™ืงื•ืช ืฉืฆืจื™ื›ื•ืช ืจื›ื™ื‘ ืชืฉืชื™ืช ื›ื“ื™ ืœืขื‘ื•ื“. ืœื“ื•ื’ืžื” ื‘ื“ื™ืงื•ืช ืื™ื ื˜ื’ืจืฆื™ื” ืฉืฆืจื™ื›ื•ืช ืœืขื‘ื•ื“ ืžื•ืœ ื‘ืกื™ืก ื ืชื•ื ื™ื ื•ืœืคื ื™ ืฉืžืคืขื™ืœื™ื ืื•ืชืŸ ืฆืจื™ืš ืœื”ืขืœื•ืช ืงื•ื ื˜ื™ื™ื ืจ ืฉืœ ื‘ืกื™ืก ื”ื ืชื•ื ื™ื. ืื– ื ื’ื™ื“ ืืช ื”ืืžืช ื”ื›ื™ ื˜ื•ื‘ ืœื“ืื•ื’ ืฉื”ื‘ื“ื™ืงื•ืช ื™ืคืขื™ืœื• ืœืขืฆืžืŸ ืืช ื”ืงื•ื ื˜ื™ื™ื ืจ ืฉืœ ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืื• ื™ืฉืชืžืฉื• ื‘ื’ื™ืจืกืช In Memory ืฉืœ ื‘ืกื™ืก ื”ื ืชื•ื ื™ื, ืื‘ืœ ืœื ืชืžื™ื“ ื–ื” ืืคืฉืจื™. ื‘ืžืฆื‘ื™ื ื›ืืœื” ืฉื•ื•ื” ืœืกืžืŸ ืืช ื”ื‘ื“ื™ืงื•ืช ืฉืฆืจื™ื›ื•ืช ืฉื ืขืฉื” ืžืฉื”ื• ืœืคื ื™ ื›ื“ื™ ืฉืืคืฉืจ ื™ื”ื™ื” ืœืคืขืžื™ื ืœื“ืœื’ ืขืœื™ื”ืŸ. 3. ืœืคืขืžื™ื ื™ืฉ ื‘ื“ื™ืงื•ืช ืฉื ื›ืฉืœื•ืช ืžื“ื™ ืคืขื ืื‘ืœ ื›ืจื’ืข ืื™ืŸ ืœื ื• ื–ืžืŸ ืœื‘ื“ื•ืง ืœืžื”. ื‘ืจื•ื‘ ืžื•ื—ืœื˜ ืฉืœ ื”ืžืงืจื™ื ื›ื“ืื™ ืœืžื—ื•ืง ืืช ื”ื‘ื“ื™ืงื•ืช ื”ืืœื” ื›ื™ ืื ื”ืžื•ืฆืจ ืขื•ื‘ื“ ื›ืžื• ืฉืฆืจื™ืš ื•ื”ื‘ื“ื™ืงื” ืœืคืขืžื™ื ื ื›ืฉืœืช ืื– ื›ื ืจืื” ืฉื™ืฉ ื‘ืขื™ื” ื‘ื‘ื“ื™ืงื” ืื• ืฉื”ื™ื ื‘ื•ื“ืงืช ืžืกืœื•ืœื™ื ืœื ืจืœื•ื•ื ื˜ื™ื™ื. ื•ื‘ื›ืœ ื–ืืช ืื•ืœื™ ื™ืฉ ืื™ื–ื” ืขืจืš ืกื ื˜ื™ืžื ื˜ืœื™ ืœื‘ื“ื™ืงื” ืื• ืกื™ื‘ื” ืื—ืจืช ืœื”ืฉืื™ืจ ืืช ื”ืงื•ื“, ื•ืื– ื ื•ื— ืœืจืื•ืช ืฉื™ืฉ ื‘ื“ื™ืงื” ื›ื–ืืช ืœืžืจื•ืช ืฉื›ืจื’ืข ื”ื™ื ืœื ืขื•ื‘ื“ืช. ืื ื™ ื›ืŸ ื—ื™ื™ื‘ ืœื”ื•ื“ื•ืช ืฉืžื”ื ื™ืกื™ื•ืŸ ืฉืœื™ ื ื“ื™ืจ ืžืื•ื“ ืฉืžื™ืฉื”ื• ืžื•ืฆื ื–ืžืŸ ืœืชืงืŸ ื‘ื“ื™ืงื” ืฉื”ื™ืชื” ื‘ skip. 4. ื‘ื“ืฃ ื”ืชื™ืขื•ื“ ื™ืฉ ื“ื•ื’ืžื” ืœ skipif ืฉืžื“ืœื’ืช ืขืœ ื‘ื“ื™ืงื” ืœืคื™ ืžืขืจื›ืช ื”ืคืขืœื”. ืื™ืฉื™ืช ื›ืฉืื ื™ ื›ื•ืชื‘ ื‘ื“ื™ืงื” ืฉืฆืจื™ื›ื” ืœืจื•ืฅ ืจืง ืขืœ ืžืขืจื›ืช ื”ืคืขืœื” ืžืกื•ื™ืžืช ืื ื™ ืืขื“ื™ืฃ ืœื ืœืจืื•ืช ืื•ืชื” ื‘ skip ืื• ื‘ xfail ื›ื™ ื”ืžืฉืžืขื•ืช ืฉืœ ืกื™ืžื•ื ื™ื ืืœื” ื”ื™ื ื‘ื“ืจืš ื›ืœืœ ืฉื™ืฉ ืื™ื–ื” ื‘ืขื™ื” ื‘ื‘ื“ื™ืงื”. ื‘ืžืงื•ื ื–ื” ื”ื™ื™ืชื™ ื‘ืงื•ื“ ื”ื‘ื“ื™ืงื” ืžื•ืกื™ืฃ ืืช ื”ื‘ื“ื™ืงื” ื•ืžืกืžืŸ "ื”ืฆืœื—ื”" ืื ื–ืืช ืœื ืžืขืจื›ืช ื”ื”ืคืขืœื” ื”ืžืชืื™ืžื”. ืืœื” ื”ื˜ื™ืคื™ื ืฉืœื™ ืœื“ื™ืœื•ื’ื™ื, ืื ื’ื ืœื›ื ื™ืฉ ืฉื™ื˜ื•ืช ืฉืขื•ื–ืจื•ืช ืœื”ืกืชื“ืจ ืขื ื“ื™ืœื•ื’ื™ื ืžื•ื–ืžื ื™ื ืœืฉืชืฃ ื‘ืชื’ื•ื‘ื•ืช ืื• ื‘ื˜ืœื’ืจื.

ToCode
1 420
ื–ื” ืฆืจื™ืš ืœืงื—ืช ืฉื‘ื•ืขื™ื™ื ื’ื ื‘ืฉื™ื—ื” ืขืœ ื–ืžื ื™ื ื›ื“ืื™ ืœื”ื™ื•ืช ื‘ืจื•ืจื™ื. ื›ืฉืืชื” ืื•ืžืจ "ื–ื” ืฆืจื™ืš ืœืงื—ืช ืฉื‘ื•ืขื™ื™ื" ื”ื›ื•ื•ื ื” ืฉ- 1. ืœื ื‘ื“ืงืชื™, ืื‘ืœ ื ืจืื” ืœื™ ืฉื–ื” ืžื” ืฉื”ื™ื” ืœื•ืงื— ืœื™. 2. ืœื ื‘ื“ืงืชื™, ืื‘ืœ ื ืจืื” ืœื™ ืฉืื ื™ ื”ื™ื™ืชื™ ืžืกื™ื™ื ืืช ื–ื” ื‘ืฉื‘ื•ืข ื•ืœืงื—ืชื™ ืžืจื•ื•ื— ื‘ื™ื˜ื—ื•ืŸ. 2. ืื ื™ ืžื•ื›ืŸ ืœืขื‘ื•ื“ ืจืง ืขื ืžืคืชื—ื™ื ืฉืžืฆืœื™ื—ื™ื ืœืกื™ื™ื ืžืฉื™ืžื” ื›ื–ืืช ื‘ืฉื‘ื•ืขื™ื™ื. ืื ื–ื” ื™ื™ืงื— ืœืš ื™ื•ืชืจ ื›ื ืจืื” ืฉื™ืฉ ืœืš ื‘ืขื™ื”. 3. ื”ื“ื“ ืœื™ื™ืŸ ืฉืœื ื• ื›ืœืคื™ ืœืงื•ื— ื—ื™ืฆื•ื ื™ ื“ื•ืจืฉ ืฉื ืกื™ื™ื ืืช ื–ื” ื‘ืฉื‘ื•ืขื™ื™ื. ืื ื™ืฉ ื‘ืขื™ื” ื—ืฉื•ื‘ ืœื”ืจื™ื ื“ื’ืœ ื›ืžื” ืฉื™ื•ืชืจ ืžื”ืจ ื•ื ืจื“ื“ ื—ืœืงื™ื ืžื”ืคื™ืฆ'ืจ. 4. ื‘ืขื™ืงืจื•ืŸ ื–ืืช ืžืฉื™ืžื” ืฉืœ ื™ื•ืžื™ื™ื ืื‘ืœ ืื ื™ ืžืฉืื™ืจ ืœืš ื–ืžืŸ ืœืจื™ืคืงื˜ื•ืจื™ื ื’ ื›ื™ ื”ืชืฉืชื™ืช ืฉืœ ื”ืžืขืจื›ืช ืœื ื‘ื ื•ื™ื” ืœืชืžื•ืš ื‘ืžื ื’ื ื•ืŸ ื”ื–ื”. 5. ื‘ืขื™ืงืจื•ืŸ ื–ืืช ืžืฉื™ืžื” ืฉืœ ื™ื•ืžื™ื™ื ืื‘ืœ ืื ื™ ืžืฉืื™ืจ ืœืš ื–ืžืŸ ืœืžื™ื“ื” ื›ื™ ืื ื™ ื™ื•ื“ืข ืฉืœื ืขื‘ื“ืช ืขื ื”ื—ืœืงื™ื ื”ืืœื” ื‘ืžืขืจื›ืช ืื• ืขื ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื–ืืช ื‘ืขื‘ืจ. 6. ื™ืฉื‘ืชื™ ื›ื‘ืจ ื—ื•ื“ืฉื™ื™ื ืœืขืฉื•ืช Research ืขืœ ื”ืžืฉื™ืžื” ื•ื’ื™ืœื™ืชื™ ื“ืจืš ืžื”ื™ืจื” ืœืคืชื•ืจ ืืช ื”ืืชื’ืจ. ืื ื™ ื™ื•ื“ืข ืฉื–ื” ื ืจืื” ืžืกื•ื‘ืš ืื‘ืœ ืื—ืจื™ ืฉื ืฉื‘ ื–ื” ื™ืจืื” ืžืžืฉ ืคืฉื•ื˜. ืื ืืชื ื‘ืฆื“ ืฉื ื•ืชืŸ ื”ื•ืจืื•ืช ื ืกื• ืœื”ื™ื•ืช ื›ืžื” ืฉืคื—ื•ืช ืžืขื•ืจืคืœื™ื. ื”ื‘ืŸ ืื“ื ืฉืžื•ืœื›ื ืœื ืงื•ืจื ืžื—ืฉื‘ื•ืช ื•ืืชื ื™ื›ื•ืœื™ื ืœื—ืกื•ืš ื”ืจื‘ื” ืžืชื— ืœืฉื ื™ ื”ืฆื“ื“ื™ื ืื ืชื”ื™ื• ื‘ืจื•ืจื™ื. ื•ืื ืืชื ื‘ืฆื“ ืฉืžืงื‘ืœ ืืช ื”ื”ื•ืจืื” ืืœ ืชืชื‘ื™ื™ืฉื• ืœืฉืื•ืœ. ืจื•ื‘ ื”ืกื™ื›ื•ื™ื™ื ืฉื”ื‘ืŸ ืื“ื ืฉืžื•ืœื›ื ืจื•ืฆื” ื‘ื˜ื•ื‘ืชื›ื. ื—ืกื›ื• ืœื›ื•ืœื ืื™ ื”ื‘ื ื” ื•ืชืฉืืœื• ื’ื ืื ื ืจืื” ืœื›ื ืฉื”ื‘ื ืชื ื‘ื“ื™ื•ืง ืžื” ืงื•ืจื” ืฉื.

ToCode
1 420
ืœืžื™ ืฉืชื”ื” - ืื—ืจื™ ืฉืคืจืกืžืชื™ ืืช ื”ืคื™ืชืจื•ืŸ ื”ื‘ื ืชื™ ืฉื”ื‘ืขื™ื” ืฉืœื™ ื‘ื—ืœืง ื”ืฉื ื™ ื”ื™ืชื” ื”ืขื‘ื•ื“ื” ืขื Int-ื™ื ื–ืืช ื‘ืขืฆื ื˜ืขื•ืช ืฉืื ื™ ื›ืœ ื”ื–ืžืŸ ื—ื•ื–ืจ ืขืœื™ื” ื‘ืกืงืืœื”, ืฉืœ ืœื‘ื—ื•ืจ Int ื‘ืžืงื•ื Long (ื”ืกื™ื‘ื” ืฉืื ื™ ืžืžืฉื™ืš ืœื˜ืขื•ืช ื‘ื–ื” ื–ื” ืฉ Long ื”ื•ื ื ื•ื“ื ื™ืง - ืื™ ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ื• ื‘ืชื•ืจ ืื™ื ื“ืงืก ืฉืœ ืจืฉื™ืžื”, ื›ืชื™ื‘ื” ืฉืœ ืžืกืคืจ ืคืฉื•ื˜ ื™ื•ืฆืจืช Int ื•ืฆืจื™ืš ืœื”ื•ืกื™ืฃ L ืื—ืจื™ ื”ืžืกืคืจ ื›ื“ื™ ืฉื™ื”ื™ื” Long ื•ืขื•ื“ ื›ืœ ืžื™ื ื™ ืฉื˜ื•ื™ื•ืช ืฉืœ ืกืงืืœื”) ืื—ืจื™ ืฉืžื—ืœื™ืคื™ื ืืช ื›ืœ ื”ืชื•ื›ื ื™ืช ืœ Long ื’ื ื”ื—ืœืง ื”ืฉื ื™ ื ื•ืชืŸ ืชื•ืฆืื” ื ื›ื•ื ื”

ToCode
1 420
ื‘ื—ืœืง ื”ืฉื ื™ ืฉืœ ื”ืืชื’ืจ ื™ืฉ ืœืขื“ื›ืŸ ืืช ืืœื’ื•ืจื™ืชื ื”ื”ืจื—ื‘ื” ื›ืš ืฉื›ืœ ืฉื•ืจื” ืจื™ืงื” ื•ื›ืœ ืขืžื•ื“ื” ืจื™ืงื” ื‘ืขืฆื ื™ื•ื—ืœืคื• ื‘ืžื™ืœื™ื•ืŸ ืฉื•ืจื•ืช ืื• ืขืžื•ื“ื•ืช. ื‘ื”ืชื—ืœื” ื—ืฉื‘ืชื™ ืฉื™ื”ื™ื” ืžืกืคื™ืง ืœืฉื—ืง ืขื ื”ืžืกืคืจื™ื ื•ืœืฉื ื•ืช ืืช ื‘ืœื•ืง ื”ืžื™ืคื•ื™ ื›ื“ื™ ืœื”ื•ืกื™ืฃ 999,999 ื‘ืžืงื•ื 1, ืื‘ืœ ืœืคื—ื•ืช ืขื‘ื•ืจ ื”ืงืœื˜ ืฉืœื™ ื–ื” ืœื ื ืชืŸ ืขื“ื™ื™ืŸ ืืช ื”ืชืฉื•ื‘ื” ื”ื ื›ื•ื ื”, ืื– ืืฆื˜ืจืš ืœื”ืžืฉื™ืš ืœื—ืคื•ืจ ื›ื“ื™ ืœืžืฆื•ื ืืช ื”ื‘ืื’. ืจืขื™ื•ื ื•ืช ืœืฉื™ืคื•ืจ? ืคื™ืชืจื•ื ื•ืช ื™ืขื™ืœื™ื ื™ื•ืชืจ? ืคื™ืชืจื•ื ื•ืช ื‘ืฉืคื•ืช ืื—ืจื•ืช? ืืœ ืชืชื‘ื™ื™ืฉื• ื•ืฉืชืคื• ื‘ืชื’ื•ื‘ื•ืช ืื• ื‘ื˜ืœื’ืจื.

ToCode
1 420
ืคื™ืชืจื•ืŸ Advent Of Code 2023 ื™ื•ื 11 ื—ืœืง 1 ื‘ืกืงืืœื” ืื ื™ ืžืžืฉื™ืš ืœื”ืชืงื“ื ืœืื˜ ืขื ื”ืืชื’ืจ ืฉืœ ืืจื™ืง ื•ื•ืกื˜ืœ ืื‘ืœ ื–ื” ื‘ืกื“ืจ ื›ื‘ืจ ืืžืจื ื• ืฉื™ืฉ ืขื“ ื“ืฆืžื‘ืจ ื”ื‘ื ืขื“ ืกื˜ ื”ื—ื™ื“ื•ืช ื”ื—ื“ืฉ ื•ื”ื ื” ื›ื‘ืจ ื”ื’ืขื ื• ืœื™ื•ื 11. ื‘ื•ืื• ื ืจืื” ื™ื—ื“ ืืช ื”ืชืจื’ื™ืœ ื•ืืช ื”ืคื™ืชืจื•ืŸ ืฉืœื™ ื‘ืกืงืืœื”, ื•ืืชื ืžื•ื–ืžื ื™ื ืœื”ืฆื™ืข ืชืจื’ื•ืžื™ื ืฉืœ ื”ืคื™ืชืจื•ืŸ ืœืฉืคื•ืช ืื—ืจื•ืช ืื• ืคื™ืชืจื•ื ื•ืช ื—ืœื•ืคื™ื™ื ื•ื˜ื•ื‘ื™ื ื™ื•ืชืจ. ื”ืืชื’ืจ - ื”ื—ืœืœ ื”ืžืชืจื—ื‘ ื”ืืชื’ืจ ื”ื–ื” ื ืจืื” ืœื™ ืžืžืฉ ืคืฉื•ื˜ ื‘ื”ืชื—ืœื” ืขื“ ืฉื”ืชื—ืœืชื™ ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“ ื•ืงืœื˜ืชื™ ืฉืื•ืœื™ ื”ื•ื ื‘ืขืฆื ื™ื•ืชืจ ืžื‘ืœื‘ืœ ืžืžื” ืฉื ื“ืžื”. ื‘ืžืฉื—ืง ืื ื—ื ื• ืžืงื‘ืœื™ื ืงืœื˜ ืฉืžืชืืจ ืืช ื”ื’ืœืงืกื™ื•ืช ื‘ื—ืœืœ, ืกื•ืœืžื™ืช ื”ื™ื ื’ืœืงืกื™ื” ื•ื ืงื•ื“ื” ื”ื™ื ืื–ื•ืจ ืจื™ืง ื‘ื™ื ื™ื”ืŸ:
...#......
.......#..
* ......... *
..........
......#...
.#........
.........#
..........
.......#..
* ...#..... *
ื•ืฆืจื™ืš ืœืžืฆื•ื ืืช ืกื›ื•ื ื”ืžืจื—ืงื™ื ื‘ื™ืŸ ื›ืœ ืฉืชื™ ื’ืœืงืกื™ื•ืช. ื™ืฉ ืจืง ื‘ืขื™ื” ืื—ืช - ืžืื– ืฉืœืงื—ื ื• ืืช ื”ืชืžื•ื ื” ื”ื—ืœืœ ื’ื“ืœ. ื›ืœ ืขืžื•ื“ื” ืจื™ืงื” ื”ืคื›ื” ืœ-2 ืขืžื•ื“ื•ืช ื•ื›ืœ ืฉื•ืจื” ืจื™ืงื” ื”ืคื›ื” ืœืฉืชื™ ืฉื•ืจื•ืช. ืืœื” ื”ืขืžื•ื“ื•ืช ื•ื”ืฉื•ืจื•ืช ื”ืจื™ืงื•ืช:
   v  v  v
 ...#......
 .......#..
 #.........
>..........<
 ......#...
 .#........
 .........#
>..........<
 .......#..
 #...#.....
   ^  ^  ^
ื•ืื—ืจื™ ืฉืžืฉืงืœืœื™ื ืคื ื™ืžื” ืืช ืชื ื•ืขืช ื”ื’ืœืงืกื™ื•ืช ื ื’ืœื” ืฉื”ืชืžื•ื ื” ื”ืืžื™ืชื™ืช ืฉืœ ื”ืžืจื—ืงื™ื ื”ื™ื:
....#........
.........#...
* ............ *
.............
.............
........#....
.#...........
............#
.............
.............
.........#...
* ....#....... *
ืคื™ืชืจื•ืŸ ื‘ืกืงืืœื” ื“ื‘ืจ ืจืืฉื•ืŸ ืฉืืคืฉืจ ืœืฉื™ื ืœื‘ ื”ื•ื ืฉืงืœ ืœืžื“ื•ื“ ืืช ื”ืžืจื—ืง ื‘ื™ืŸ ืฉืชื™ ื’ืœืงืกื™ื•ืช:
  def distance(p1: (Int, Int), p2: (Int, Int)): Int =
      Math.max(p1._1, p2._1) - Math.min(p1._1, p2._1) +
      Math.max(p1._2, p2._2) - Math.min(p1._2, p2._2)

ื˜ืจื™ืง ืฉื ื™ ื”ื•ื ืฉื‘ืกืงืืœื” ืื•ืžื ื ืื™ืŸ ืคื•ื ืงืฆื™ื” ืœืžื›ืคืœื” ืงืจื˜ื–ื™ืช ืื‘ืœ ื“ื™ ืงืœ ืœื›ืชื•ื‘ ืื—ืช:
  implicit class Crossable[X](xs: Iterable[X]) {
    def cross[Y](ys: Iterable[Y]): Iterable[(X, Y)] = for {x <- xs; y <- ys} yield (x, y)
  }
ื•ื›ืš ื ื•ื›ืœ ืœืงื‘ืœ ืจืฉื™ืžื” ืฉืœ ื›ืœ ื”ื’ืœืงืกื™ื•ืช ืžื•ืฆืœื‘ื•ืช ืขื ืขืฆืžืŸ. ื›ืŸ ื™ื”ื™ื• ืœื ื• ื’ื ืฆืžื“ื™ื ืฉืœ ื’ืœืงืกื™ื” ืขื ืื•ืชื” ื’ืœืงืกื™ื” ืื‘ืœ ื–ื” ืœื ื ื•ืจื ื›ื™ ื”ืžืจื—ืง ื™ื”ื™ื” ืืคืก, ื•ื›ืŸ ื›ืœ ืฆืžื“ ื’ืœืงืกื™ื•ืช ื’ื ื™ื•ืคื™ืข ืคืขืžื™ื™ื ืื‘ืœ ื’ื ื–ื” ืœื ื ื•ืจื ื›ื™ ื”ืžืจื—ืง ื™ืฆื ื–ื”ื” ื‘ืฉื ื™ ื”ื—ื™ืฉื•ื‘ื™ื ืื– ืจืง ืฆืจื™ืš ืœื–ื›ื•ืจ ืœื—ืœืง ื‘-2 ืืช ื”ืชื•ืฆืื”. ืขื›ืฉื™ื• ืžื’ื™ืขื™ื ืœืœื‘ ื”ืฉืืœื” ื•ื”ื•ื ืคื™ืขื ื•ื— ื”ืงืœื˜ ื•"ื”ื–ื–ืช" ื”ื—ืœืœ. ื–ืืช ื”ืคื•ื ืงืฆื™ื” ืฉื›ืชื‘ืชื™ ื•ื”ื™ื ื™ืฆืื” ืืจื•ื›ื” ื”ืจื‘ื” ื™ื•ืชืจ ืžืžื” ืฉื“ืžื™ื™ื ืชื™ ืฉืชืฆื:
  def parseInput(input: Source, expansion: Int = 1): Map[(Int, Int), Char] =
    val beforeExpansion = input
      .getLines()
      .zipWithIndex
      .collect {
        case (line: String, index: Int) => line.toList.zipWithIndex.map((ch, column) => (index, column, ch))
      }
      .flatten
      .flatMap {
        case (row, column, ch) => Map((row, column) -> ch)
      }
      .toMap

    val emptyColumnsCounts = beforeExpansion
      .keys
      .map {(i, j) => j}
      .toList
      .sorted
      .scan(0) { (acc, columnNumber) =>
        if (isEmptyColumn(beforeExpansion, columnNumber)) acc + expansion else acc
      }

    val emptyRowCounts = beforeExpansion
      .keys
      .map { (i, j) => i }
      .toList
      .sorted
      .scan(0) { (acc, rowNumber) =>
        if (isEmptyRow(beforeExpansion, rowNumber)) acc + expansion else acc
      }

    val afterExpansion = beforeExpansion.map {
      case ((row, column), ch) =>
        ((row + emptyRowCounts(row), column + emptyColumnsCounts(column)), ch)
    }

    afterExpansion
ื‘ื’ื“ื•ืœ ื‘ืฉื‘ื™ืœ ื”ื”ืจื—ื‘ื” ืื ื™ ืžื—ืฉื‘ ืงื•ื“ื ืœื›ืœ ืขืžื•ื“ื” ื›ืžื” ืขืžื•ื“ื•ืช ืจื™ืงื•ืช ื™ืฉ ืœืคื ื™ื”, ื•ืœื›ืœ ืฉื•ืจื” ื›ืžื” ืฉื•ืจื•ืช ืจื™ืงื•ืช ื™ืฉ ืœืคื ื™ื”. ื–ื” ืžื™ื™ืฆืจ ืฉื ื™ ืžืฉืชื ื™ื emptyRowCounts ื• emptyColumnCounts. ื”ื”ืจื—ื‘ื” ื”ื™ื ื‘ืกืš ื”ื›ืœ ื”ืžื™ืคื•ื™:
    val afterExpansion = beforeExpansion.map {
      case ((row, column), ch) =>
        ((row + emptyRowCounts(row), column + emptyColumnsCounts(column)), ch)
    }
ื•ื”ื—ืœืง ื”ืื—ืจื•ืŸ ื”ื•ื ื—ื™ืฉื•ื‘ ืกื›ื•ื ื”ืžืจื—ืงื™ื:
  @main
  def day11part1(): Unit =
    val map = parseInput(Source.fromResource("day11.txt"))
    val galaxies = map
      .filter { case ((i, j), ch) => ch != '.' }
      .keys
      .toList

    (galaxies cross galaxies)
      .map(distance)
      .sum
      .pipe(_ / 2)
      .pipe(println)