RosettaCodeData/Task/Twelve-statements/Ring/twelve-statements.ring
2026-04-30 12:34:36 -04:00

49 lines
1.4 KiB
Text

nStatements = 12
T = list(nStatements)
Pass = list(nStatements)
for tryVal = 0 to (2**nStatements) - 1
# 1. Postulate answer: Extract bits into T array
for stmt = 1 to 12
if (tryVal & (2**(stmt-1))) != 0
T[stmt] = 1
else
T[stmt] = 0
ok
next
# 2. Test consistency (Ring: True = 1, False = 0)
Pass[1] = (T[1] = (nStatements = 12))
Pass[2] = (T[2] = (sum_range(T, 7, 12) = 3))
Pass[3] = (T[3] = ((T[2]+T[4]+T[6]+T[8]+T[10]+T[12]) = 2))
Pass[4] = (T[4] = ((not T[5]) or (T[6] and T[7])))
Pass[5] = (T[5] = ((not T[2]) and (not T[3]) and (not T[4])))
Pass[6] = (T[6] = ((T[1]+T[3]+T[5]+T[7]+T[9]+T[11]) = 4))
Pass[7] = (T[7] = (T[2] != T[3])) # XOR replacement
Pass[8] = (T[8] = ((not T[7]) or (T[5] and T[6])))
Pass[9] = (T[9] = (sum_range(T, 1, 6) = 3))
Pass[10] = (T[10] = (T[11] and T[12]))
Pass[11] = (T[11] = (sum_range(T, 7, 9) = 1))
Pass[12] = (T[12] = (sum_range(T, 1, 11) = 4))
# 3. Check if all statements pass
totalPass = 0
for p in Pass totalPass += p next
if totalPass = 12
see "Solution! True statements: "
for i = 1 to 12
if T[i] = 1 see "" + i + " " ok
next
see nl
ok
next
# Helper function to sum elements in a specific range
func sum_range lst, start, stop
val = 0
for i = start to stop
val += lst[i]
next
return val