两个 Extra

This commit is contained in:
SOR
2026-09-23 10:52:33 +08:00
parent 9e00d89e03
commit 8254afe14b
4 changed files with 82 additions and 0 deletions
@@ -18,9 +18,11 @@ object CatalogStructure {
arrayOf( arrayOf(
"${Classification.ALPHABET}.We need a variable, oh, maybe many", "${Classification.ALPHABET}.We need a variable, oh, maybe many",
"${Classification.EXTRA}.More strange variables", "${Classification.EXTRA}.More strange variables",
"${Classification.EXTRA}.More unpredictable variables",
), ),
arrayOf( arrayOf(
"${Classification.ALPHABET}.You need a function, not a mathematical one", "${Classification.ALPHABET}.You need a function, not a mathematical one",
"${Classification.EXTRA}.More expressive functions",
) )
) )
@@ -0,0 +1,32 @@
@file:SkipCompile(skip = true)
@file:Suppress("ClassName")
package io.github.sor2171.puzzles.extra
import io.github.sor2171.puzzles.annotation.SkipCompile
import org.junit.jupiter.api.Test
/**
* 本关考察你对 `infix` 和 `operator` 函数的理解。
*/
class `More expressive functions` {
// write start 1
// write end 1
@Test
fun puzzle() {
val laugh = "Ha" repeatBy 3
assert(laugh == "HaHaHa")
val message = "42" repeatBy 2
assert(message == "4242")
val exclamation = "!" * 4
assert(exclamation == "!!!!")
val combined = ("Yo" repeatBy 2) + ("~" * 3)
assert(combined == "YoYo~~~")
}
}
@@ -8,6 +8,8 @@ import org.junit.jupiter.api.Test
/** /**
* 本关考察你对无符号数字的理解。 * 本关考察你对无符号数字的理解。
*
* 共两个编写区域。
*/ */
class `More strange variables` { class `More strange variables` {
// write start 1 // write start 1
@@ -0,0 +1,46 @@
@file:SkipCompile(skip = true)
@file:Suppress("ClassName")
package io.github.sor2171.puzzles.extra
import io.github.sor2171.puzzles.annotation.SkipCompile
import org.junit.jupiter.api.Test
/**
* 很多初学者认为 `val` 就是“不可变”,但其实它只是“只读(Read-Only)”。
* 此外,Kotlin 还提供了属性委托,比如只有在首次访问时才初始化的 `by lazy`。
* 本关考察你对 Kotlin 属性(Property)、自定义 Getter 与惰性委托机制的理解。
*
* 共两个编写区域。
*/
class `More unpredictable variables` {
private var accessCount = 0
var evalTimes = 0
val dynamicValue: Int
get() {
// write start 1
// write end 1
}
val lazyGreet: String by lazy {
// write start 2
// write end 2
}
@Test
fun puzzle() {
val first = dynamicValue
val second = dynamicValue
assert(first == 1 && second == 2)
assert(dynamicValue == 3)
assert(evalTimes == 0)
assert(lazyGreet == "Hello, Alien!")
assert(evalTimes == 1)
assert(lazyGreet == "Hello, Alien!")
assert(evalTimes == 1)
}
}