--- a/main_solution3/re.scala Sun Sep 15 12:57:59 2024 +0100
+++ b/main_solution3/re.scala Mon Jul 21 16:38:07 2025 +0100
@@ -142,6 +142,34 @@
}
+def draw_rs(rs: List[Rexp], prefix: String) : String = {
+ val rsi = rs.iterator
+ rsi.map(r => draw_r(r, prefix, rsi.hasNext)).mkString
+}
+
+def draw_r(e: Rexp, prefix: String, more: Boolean) : String = {
+ val full_prefix = s"$prefix${if more then "├" else "└"}"
+ val childPrefix = s"$prefix${if more then "│" else " "} "
+ s"\n${full_prefix}" ++
+ (e match {
+ case ZERO => s"0"
+ case ONE => s"1"
+ case CHAR(c) => s"$c"
+ case ALTs(rs) => s"ALTs" ++ draw_rs(rs, childPrefix)
+ case SEQs(rs) => s"SEQs" ++ draw_rs(rs, childPrefix)
+ case STAR(r) => s"STAR" ++ draw_r(r, childPrefix, false)
+ })
+}
+
+def draw(e: Rexp) =
+ draw_r(e, "", false)
+
+
+val re = STAR(STAR("aa" | "aaa"))
+
+for (n <- 1 to 100) {
+ println(s"$n: ${size(ders(("a" * n).toList, re))}")
+}
// some testing data
/*