40 lines
1.1 KiB
Plaintext
40 lines
1.1 KiB
Plaintext
// Phase 29ac P3: Pattern7 split-scan near-miss fixup (contract-aligned OK)
|
|
// Origin: phase29ab_pattern7_splitscan_contract_min.hako (else step was i = i + 2)
|
|
// Expect: split("a,b,c", ",") -> length 3
|
|
|
|
static box StringUtils {
|
|
split_from_nearmiss_ok(s, separator) {
|
|
local result = new ArrayBox()
|
|
if separator.length() == 0 {
|
|
result.push(s)
|
|
return result
|
|
}
|
|
|
|
local start = 0
|
|
local i = 0
|
|
loop(i <= s.length() - separator.length()) {
|
|
if s.substring(i, i + separator.length()) == separator {
|
|
result.push(s.substring(start, i))
|
|
start = i + separator.length()
|
|
i = start
|
|
} else {
|
|
// Contract requirement for SplitScan: else step must be i = i + 1.
|
|
i = i + 1
|
|
}
|
|
}
|
|
|
|
if start <= s.length() {
|
|
result.push(s.substring(start, s.length()))
|
|
}
|
|
|
|
return result
|
|
}
|
|
}
|
|
|
|
static box Main {
|
|
main() {
|
|
local result = StringUtils.split_from_nearmiss_ok("a,b,c", ",")
|
|
return result.length()
|
|
}
|
|
}
|