ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 420
Obunachilar
+124 soatlar
+17 kunlar
-430 kunlar
Postlar arxiv
1 420
ืืืช ืืืจ ืื ืืืืจืืช ืฉืื ื ืฉืืขืืืช ืืืชื ื
ื ืชื ืกืืื ื zed ืืจืง ืืช ืืืฉืคื ืืื ืืจืืืื ืขื ืืืื ืืืืืื ืฉื ืื, ืื ืืืชืจ ื ืืื ืขื ืืืืืจื ืฉืืื ืืืจืืง ืืช Atom ืฉืืื ืขืืจื ืืืงืกื ืฉืื ืขืืื ืขืืื ืืคื ื ืืืืชืืื ืืื ืืืืฉ. ืืื ืืืจ-
"ืืืขื ื ืื ืงืืื ืฉืื ืืืจ ืื ืืืชื ืืืืจืืช ืฉืื ื ืฉืืขืืืช ืืืชื ื, ืืืช ืืืืช ืืคืืืคืืจืื"
ืื ืืื ืืืจื ืฉืืืฉ ืฉื ืื ืฉื ืขืืืื ืขื Atom. ืฉืืืฉ ืฉื ืื ืฉื ื ืืกืืื ืืช ืืฉืคืจ ืืช ืืืืฆืืขืื. ืฉืืืฉ ืฉื ืื ืฉื ืืชืืืืืืช ืขื ืืืชืืจ ืฉื ืืชืืืช Desktop Application ืืืืจ ืืืืื ืืืืืื.
ืืื ืืื ืขืืืฃ ืื ืื ืืื ืืชืืืืื ืขื Rust ืืืจ ื 2014 ืืืงืื ืืืชืื ืืช Atom? ืืจืืจ ืฉืื. ืงืืื ืื ืื ืจืืกื ืื ืืืชื ืงืืืืช ื 2014, ืืื ืืืชืจ ืืฉืื ืื ืขืื ืื ืืืืจื ืืกืคืืง ืืื ืืช ืืืขืื, ืขืื ืื ืืืื ื ืืขืืืง ืืช ืืืืืืจืืชืืื ืฉืฆืจืื ืืคืชื ืืฉืืื ืืื ืืช ืขืืจื ืืงืกื ืืืช ืืืจืืฉืืช ืืืฆืจืืื ืฉื ืืืชืื ืชืื ืฉืืืืจืื ืืืฉืชืืฉ ืืืืชื ืขืืจื. ืืขืืืื ืขื ืืืื, ืืื ืขื ืืืชืงืืืืช ืืืื ืืืืืืช ืฉืงืจืชื ืืืืชื ืืืื, ืืืืื ืืืชื ืื ืงืืื ืฉืื ืืื ืขืืืฃ ืืืชืืื ืืืืฉ.
ืืื ืืงื ืืื ืืื ืคืจืืืงื ืฉืื ืื ื ืืื ืื - ืืชืืืืช ืืืจื, ืืฉืื ืื ื ืขืืืื ืื ืืืืจืื ืืกืคืืง ืืช ืืืขืื ืืืช ืืขืืื ืืืื ืืืืื ืฉืื, ืื ืืกืืจ ืืงืืช ืืืืจืืช ืงืืืช ืืื ืืืชืงืื. ืืืชืจ ืืืกืืจ, ืืืช ืืืจื ืืืืืื ืงืืืื. ืืืจื ืฉื ืชืืืจ ืขื ืืืืจืืช ืฉืื ื ืื ืืื ืืื ืื ืื ื ืฆืจืืืื ืืช ืืืืื ืืืชืงืืืื ืืืชืจ ื ืืื ืืืงืื ืืจืื ืืืชืจ ืืฉื ืืื ืืฉืคืจ ืืช ืืืื ืืืืืื, ืื ืืืจืืง ืืื ืืืืชืืื ืืืืฉ ืืฉืื ืืื ืืืชืจ.
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
ื ื, ืืืื ืฉืืกืงืืื (ืืื ืืฉืคืืช ืจืืืช ืืืจืืช) ืงื ืืืืจืื ืืืจืืืช ืขื ืคืขืืืช ืืคื, ืืฉืื ืื ืื ืืจืฉ ืืฉืืื ืืืืง ืืฉื ื ืืืฆืข ืืงืืืช ืืชืื ืคืื ืงืฆืื ืื, ืืืืืืช ืืืืืืจืืชื ืืืขืื ืืกืคืืง ืื ืืืืง ืืฉื ื ื ืคืชืจ ืืืื ืกืืืจ.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 =1 420
ืืืชืจ ืืื ืืื ืคืืจืืฆืื
ืืืจ ืืืื ืชืื ืืช ืืื ืืืืืช ืืื ืืืฆืื ืขืืืื. ืื ืคืขื ืฉืื ืื ื ืืืืจืื ืืื ืื ืขื ืกืืคืืจืื ืืืฉืื -
"ืฉืืข ืืฉืืืข ืืชืืืชื ืืืืื Tensor Flow ืื ืืื ืืงืื ืฆืจืืืื ืืช ืื"
"ืกืืืืชื ืงืืจืก ืคืืืชืื ืฉื 40 ืฉืขืืช ืืืืื ืืืืืื - ืืื ืืขืืื ืืืืืชื ืืืื"
"ืชืืื ืื ืืขืชื ืขื AWS? ืืชืืืชื ืืืืื ืืืกืืื ืฉื CLF-C01 ืื ืืื ืชื ืฉืืืืืื ืืช ืื ืืฉืืื ืืืชืงืื ืืขืืืื ื MLOps"
ืืื ื ืืืื ืืช ืืงืืฉื. ืืชื ืืื, ืืชื ืืกืชืื ืขื ืืื ืกืืฃ ืืืืจ ืฉืืฉ ืืืื ืืจื ื, ืื ืืื ืืืื ืืชื ืคืืืฉ ืื ืืื ืืืจ ืฉืืืืืฅ ืื ืขื ืืืืจ ืฉืืชื ืืืฉ ืืืื ืืืืื ืื ืืื ืชืืฆื ืขืืืื ืืื ืืืจ, ืืืชื ืื ืืืืข ืื ืืขืฉืืช. ืืื ืืื ืืจืืข ืื ืฉืืชื ืืจืืืฉ ืฉืืชื ืืืจ "ืืืื ืืช ืื", ืืื ืกืืืืช ืงืืจืก ืคืืืชืื ืจืืืช 40 ืฉืขืืช ืืืืื ืืืืืื, ืื ืืช 10 ืคืจืืืงืืื ืืืงืืจืก ืืคืชืจืช ืืช ืื ืืฉืืขืืจื ืืืช. ืืชื ืืืื ืฉืืชื ืืืืข ืคืืืชืื ืืื ืขืืืื ืื ืืฆืืื ืืืฆืื ืขืืืื. ืืื ืืืขืื ืืืืืช ืืืืืช ืฉืฆืจืื ืืืขืช ืขืื ืืืจืื.
ืืื ืืขืื ืืงืกืืื ืืื ืื ืืกืชืืื.
ืื ืืฉื ื ืืื ืืืจืื ืืืฉืื ืืชื ืืืื, ืืชื ืืืฆื ืืช ืขืฆืื ืืืืชื ืืงืื. ืืชื ืขืืืื ืืืคืฉ ืขืืืื, ืื ืืืจ ืืืฉ ืฉืืชื ืืืื ืืืจื ืื ืืฉืืื ืงืฆืช ืืืืืจ ืืงืืื, ืืื ืจืืืื ืืืฉืืืื ืืืงืฉ ืืื ืืขื ืืช ืขื ืืืจืื ืฉืขืืืื ืื ืืืืช. ืืืืคื ืืฉ ืื ืื ืืจืื ืืืจืื ืืขืืื ืฉืฆืจืื ืืืืื? ืื ืื ืคืขื ืืืืืจ?
ืืงืืฉื ืืื ืืจืืืช ืฉืขืืืื ืื ืกืืืืช ืืืืื ืืคืืื ืืืจ ืืื ืืื ืฉืฆืจืื. ืฉืงืืจืก 40 ืฉืขืืช ืคืืืชืื ืืคืจืืืงืืื ืฉื ืืงืืจืก ืื ืื ืืกืคืืง ืืื ืืืขืช ืคืืืชืื. ืืืชืืจ ืืื ืืืืื ืืื ืืืืื ืืช ืืืชื ืืืจ ืืืชืจ ืืขืืืง, ืืืฉืื ืืช ืืืืืื ืขื ืขืฉืืื ืืื ืืืช ืคืจืืืงื ืืจืื ืืืืื.
ืื ืื ื 2024, ืืืจื ืืื ืืืืจื ืืืฆืื ืขืืืื ืืื ืืืืืข ืขื ืชืืง ืขืืืืืช ืืืืืืช ืืืืืช. ืคืจืืืงื ืื ืขืืืจ ืืืงื ืืช ืืืืืฆืื ืืืืืืื ืื ืฆืจืื ืืืืื ืืชืื ืืื ืกืืฃ ืืืืจื ืืืืืื ืฉืืจืฉืช, ืืื ืืจืื ืืขืืื ืฉืืชื ืืืืข ืืืชืืงื ืืืืจืื ืืืืจืื ืืงืจืืช.
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. ืฉืืืืฉ ืืืืจ ืืคืื ืงืฆืื ืืกืคืง ืืืืื ืืช ืืฉืื ืื ืงื ืืืชืจ - ืื ืืืจ ื ืฆืืจื ืืืืืืฃ ืืื ืืงืื ืืืขืจืืช ืืช ืืืชื ืืืืช, ืืืฉื ืืื ืืืฉืื ืืกืคืจืื ืืืืื ืืืงืื ืกืคืจืืช, ืืคืื ืงืฆืื ืชืืคืฉืจ ืืขืฉืืช ืืช ืื ืืืืืจืืช ืืชืื ืฉืื ืื ืฉื ืืงืื ืืื. ืืขืชืงืช ืฉืืจืช ืืงืื ืืฉืืคืืื ืืงืื, ืืคืืื ืื ืื ืจืง ืฉืืจื, ืืืจืืช ืืฉืื ืื ืืืืืช ืืืชืจ ืืกืืื.
ืืชืจืืืฉ ืฉื ืคืื ืงืฆืืืช ืืจืืืืช ืืื ืืงืื ืืื ืืจืื ืืืชืจ ื ืคืืฅ ืืงืื ืขื ืคืื ืงืฆืืืช ืงืฆืจืืช ืืื. ืจืื ืืืื ืื ืืืื ืืืืขืืช ืฉืื ื ืืื ืื ืืืืฆืจ ืคืื ืงืฆืืืช ืื ืืฉืฆืจืื ืืืชื. ืืื ืื ืืืืชื ืืืืจ ืืืืืง ืคืื ืงืฆืืืช, ืื ืื ืงืืฆืจื ื ืืืชื ืืฉืืจื ืื ืฉืชืืื.1 420
ืืชื ืืื ืืืช ืืชืจืื ืืคืจืืืงื ืงืื ืคืชืื?
ืืืืื ืขื ืชืจืืืืช ืืคืจืืืงืื ืงืื ืคืชืื ืืชืขืืจืจ ืืืืฉ ืืืืจืื ื ืืขืงืืืช ืืืื ืืชืจืืืืช ืืคืืงืืืืืืช ืฉื ืฉืืื ืืคืจืืืงื Express. ืืืืืจ ืืืืจืื ืืืืื ืฉืคืืจืกื ืืขืจืืฅ ืืืืืื ืคืืคืืืจื ืืืืืื ืฉืืกืืืจ ืืื ืืฉืืื PR ืืืฆื ืืฉืืืื.
ืืื ืืื ืืขืฆื ืื ืื ื ืืืขืื ืืกืืคืืจ ืืื ืื ืคืขื ืืืืฉ? ืืื ืื ืื ืงืฉื ืืฉืืื ืชืจืืื ืืขืืช ืืฉืืขืืช ืืคืจืืืงื ืฉืื ืื ื ืืืืืื? ืืืื ืื ืืชืจืื ืืคืจืืืงืื ืงืื ืคืชืื?
ืืืืจ ืืืฉืื ืืืืืจ ืืื ืฉืชืจืืื ืืคืจืืืงืื ืงืื ืคืชืื ืืื ืืฉืืขืฆืื ืื ืืืจื, ืืฉื ืฉืคืจืืคืื ืืืืืื ืขื ืขืฉืจืืช ืื ืืืืช ืืืืจืื ืืื ื ืืืืจื. ืื ืื? ืชืจืืื ืืคืจืืืงืื ืงืื ืคืชืื ืืื ืืขืืช ืขืจื ืืืงืจืื ืืืืื-
1. ืืฉืืื ืืื ืืชืื ืืืืจืืช ืืขืืืงื ืขื ืืคืจืืืงื ืืืืืืืืช ืฉืื.
2. ืืฉืืื ืืื ืืชืื ืืืื ื ืืืืชืืช ืืฉืคืจ ืืช ืืฆื ืืขื ืืื ืื ืืืงืืกืืกืื ืฉื ืืคืจืืืงื.
ืชืจืืื ืืืืช ืืคืจืืืงื ืฉืื ืฉืื ืืฉืชืืฉืื ืื ืืืืื ืื ืืฉืคืจ ืืช ืืืฆื ืฉื ืืชืืจื ืืืืื ืช ืชืขืกืืงื. ืื ืฉืชืืจื ืงืื ืืฉืืขืืชื ืืืืขืื ื numpy ืื ืจืื ืืืืข ืื ืืื numpy ืืืื ืืืื ืฉืืื ืื ืืืืืก ืืืชื ืืฆืืืช. ืืชืจืืื ืืคืจืืืงื ืืืงืจื ืืื ืืื ืืื ืืืงืฆืื ืืจืืช ืืืืจืืช ืืขืืืงื ืขื ืืืขืจืืช ืืืงืืืื. ืืืฃ ืืื ืื ืืืคืช ืฉืืชื ืืืืขืื ืืืฉืชืืฉ ืืืคืชืืจ ืืื ืืฉืืื PR. ืื ืฉืืฉืื ืืื ืืงืื ืขืืืื ืืื ืืืืจืืช ืืขืืืงื ืขื ืคืจืืืงื, ืืืืืช ืขืืืื ืืฆืืืช, ืืื ื ืฉื ืืืขืืืช ืืืืืืืฆืื ืฉื ืืคืจืืืงื ืืืฆืืจืช ืงืื ืืืฉ ืืชืื ืืืชื ืืืืืฆืื.
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 ืื ืืืฉืืขืืช ืฉื ืกืืืื ืื ืืื ืืื ืืืจื ืืื ืฉืืฉ ืืืื ืืขืื ืืืืืงื. ืืืงืื ืื ืืืืชื ืืงืื ืืืืืงื ืืืกืืฃ ืืช ืืืืืงื ืืืกืื "ืืฆืืื" ืื ืืืช ืื ืืขืจืืช ืืืคืขืื ืืืชืืืื.
ืืื ืืืืคืื ืฉืื ืืืืืืืื, ืื ืื ืืื ืืฉ ืฉืืืืช ืฉืขืืืจืืช ืืืกืชืืจ ืขื ืืืืืืื ืืืืื ืื ืืฉืชืฃ ืืชืืืืืช ืื ืืืืืจื.1 420
ืื ืฆืจืื ืืงืืช ืฉืืืขืืื
ืื ืืฉืืื ืขื ืืื ืื ืืืื ืืืืืช ืืจืืจืื. ืืฉืืชื ืืืืจ "ืื ืฆืจืื ืืงืืช ืฉืืืขืืื" ืืืืื ื ืฉ-
1. ืื ืืืงืชื, ืืื ื ืจืื ืื ืฉืื ืื ืฉืืื ืืืงื ืื.
2. ืื ืืืงืชื, ืืื ื ืจืื ืื ืฉืื ื ืืืืชื ืืกืืื ืืช ืื ืืฉืืืข ืืืงืืชื ืืจืืื ืืืืืื.
2. ืื ื ืืืื ืืขืืื ืจืง ืขื ืืคืชืืื ืฉืืฆืืืืื ืืกืืื ืืฉืืื ืืืืช ืืฉืืืขืืื. ืื ืื ืืืงื ืื ืืืชืจ ืื ืจืื ืฉืืฉ ืื ืืขืื.
3. ืืื ืืืื ืฉืื ื ืืืคื ืืงืื ืืืฆืื ื ืืืจืฉ ืฉื ืกืืื ืืช ืื ืืฉืืืขืืื. ืื ืืฉ ืืขืื ืืฉืื ืืืจืื ืืื ืืื ืฉืืืชืจ ืืืจ ืื ืจืื ืืืงืื ืืืคืืฆ'ืจ.
4. ืืขืืงืจืื ืืืช ืืฉืืื ืฉื ืืืืืื ืืื ืื ื ืืฉืืืจ ืื ืืื ืืจืืคืงืืืจืื ื ืื ืืชืฉืชืืช ืฉื ืืืขืจืืช ืื ืื ืืื ืืชืืื ืืื ืื ืื ืืื.
5. ืืขืืงืจืื ืืืช ืืฉืืื ืฉื ืืืืืื ืืื ืื ื ืืฉืืืจ ืื ืืื ืืืืื ืื ืื ื ืืืืข ืฉืื ืขืืืช ืขื ืืืืงืื ืืืื ืืืขืจืืช ืื ืขื ืืืื ืืืืืื ืืืืช ืืขืืจ.
6. ืืฉืืชื ืืืจ ืืืืฉืืื ืืขืฉืืช Research ืขื ืืืฉืืื ืืืืืืชื ืืจื ืืืืจื ืืคืชืืจ ืืช ืืืชืืจ. ืื ื ืืืืข ืฉืื ื ืจืื ืืกืืื ืืื ืืืจื ืฉื ืฉื ืื ืืจืื ืืืฉ ืคืฉืื.
ืื ืืชื ืืฆื ืฉื ืืชื ืืืจืืืช ื ืกื ืืืืืช ืืื ืฉืคืืืช ืืขืืจืคืืื. ืืื ืืื ืฉืืืืื ืื ืงืืจื ืืืฉืืืช ืืืชื ืืืืืื ืืืกืื ืืจืื ืืชื ืืฉื ื ืืฆืืืื ืื ืชืืื ืืจืืจืื. ืืื ืืชื ืืฆื ืฉืืงืื ืืช ืืืืจืื ืื ืชืชืืืืฉื ืืฉืืื. ืจืื ืืกืืืืืื ืฉืืื ืืื ืฉืืืืื ืจืืฆื ืืืืืชืื. ืืกืื ืืืืื ืื ืืื ื ืืชืฉืืื ืื ืื ื ืจืื ืืื ืฉืืื ืชื ืืืืืง ืื ืงืืจื ืฉื.
1 420
ืืื ืฉืชืื - ืืืจื ืฉืคืจืกืืชื ืืช ืืคืืชืจืื ืืื ืชื ืฉืืืขืื ืฉืื ืืืืง ืืฉื ื ืืืชื ืืขืืืื ืขื Int-ืื
ืืืช ืืขืฆื ืืขืืช ืฉืื ื ืื ืืืื ืืืืจ ืขืืื ืืกืงืืื, ืฉื ืืืืืจ Int ืืืงืื Long
(ืืกืืื ืฉืื ื ืืืฉืื ืืืขืืช ืืื ืื ืฉ Long ืืื ื ืืื ืืง - ืื ืืคืฉืจ ืืืฉืชืืฉ ืื ืืชืืจ ืืื ืืงืก ืฉื ืจืฉืืื, ืืชืืื ืฉื ืืกืคืจ ืคืฉืื ืืืฆืจืช Int ืืฆืจืื ืืืืกืืฃ L ืืืจื ืืืกืคืจ ืืื ืฉืืืื Long ืืขืื ืื ืืื ื ืฉืืืืืช ืฉื ืกืงืืื)
ืืืจื ืฉืืืืืคืื ืืช ืื ืืชืืื ืืช ื Long ืื ืืืืง ืืฉื ื ื ืืชื ืชืืฆืื ื ืืื ื
1 420
ืืืืง ืืฉื ื ืฉื ืืืชืืจ ืืฉ ืืขืืื ืืช ืืืืืจืืชื ืืืจืืื ืื ืฉืื ืฉืืจื ืจืืงื ืืื ืขืืืื ืจืืงื ืืขืฆื ืืืืืคื ืืืืืืื ืฉืืจืืช ืื ืขืืืืืช. ืืืชืืื ืืฉืืชื ืฉืืืื ืืกืคืืง ืืฉืืง ืขื ืืืกืคืจืื ืืืฉื ืืช ืืช ืืืืง ืืืืคืื ืืื ืืืืกืืฃ 999,999 ืืืงืื 1, ืืื ืืคืืืช ืขืืืจ ืืงืื ืฉืื ืื ืื ื ืชื ืขืืืื ืืช ืืชืฉืืื ืื ืืื ื, ืื ืืฆืืจื ืืืืฉืื ืืืคืืจ ืืื ืืืฆืื ืืช ืืืื.
ืจืขืืื ืืช ืืฉืืคืืจ? ืคืืชืจืื ืืช ืืขืืืื ืืืชืจ? ืคืืชืจืื ืืช ืืฉืคืืช ืืืจืืช? ืื ืชืชืืืืฉื ืืฉืชืคื ืืชืืืืืช ืื ืืืืืจื.
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)
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
