Challenge 2: Observable Property — Solution import kotlin.properties.Delegates class ShoppingCart { var itemCount: Int by Delegates.observable(0) { property, old, new -> println("${property.name} changed from $old to $new") } } fun main() { val cart = ShoppingCart() cart.itemCount = 1 cart.itemCount = 3 cart.itemCount = 2 } /* Output: itemCount changed from 0 to 1 itemCount changed from 1 to 3 itemCount changed from 3 to 2 Notes: - Delegates.observable(0) { ... } takes the initial value (0) as its first argument, then a callback that fires on every subsequent reassignment. - The callback receives the KProperty itself (property.name gives "itemCount"), the old value, and the new value — all three are useful for building a generic logging/reactive delegate. - Each of the three assignments in main() triggers one callback invocation, in order. */