44 lines
1.1 KiB
Text
44 lines
1.1 KiB
Text
F perta(atomic)
|
||
-V
|
||
NOBLES = [2, 10, 18, 36, 54, 86, 118]
|
||
INTERTWINED = [0, 0, 0, 0, 0, 57, 89]
|
||
INTERTWINING_SIZE = 14
|
||
LINE_WIDTH = 18
|
||
|
||
V prev_noble = 0
|
||
V row = 0
|
||
Int col
|
||
L(noble) NOBLES
|
||
row = L.index
|
||
I atomic <= noble
|
||
V nb_elem = noble - prev_noble
|
||
V rank = atomic - prev_noble
|
||
I INTERTWINED[row] & atomic C INTERTWINED[row] .. INTERTWINED[row] + INTERTWINING_SIZE
|
||
row += 2
|
||
col = rank + 1
|
||
E
|
||
V nb_empty = LINE_WIDTH - nb_elem
|
||
V inside_left_element_rank = I noble > 2 {2} E 1
|
||
col = rank + (I rank > inside_left_element_rank {nb_empty} E 0)
|
||
L.break
|
||
prev_noble = noble
|
||
R (row + 1, col)
|
||
|
||
V TESTS = [
|
||
(1, (1, 1)),
|
||
(2, (1, 18)),
|
||
(29, (4,11)),
|
||
(42, (5, 6)),
|
||
(58, (8, 5)),
|
||
(59, (8, 6)),
|
||
(57, (8, 4)),
|
||
(71, (8, 18)),
|
||
(72, (6, 4)),
|
||
(89, (9, 4)),
|
||
(90, (9, 5)),
|
||
(103, (9, 18)),
|
||
]
|
||
|
||
L(input, out) TESTS
|
||
V found = perta(input)
|
||
print(‘TEST:#3 -> ’.format(input)‘’String(found)‘’(I found != out {‘ ; ERROR: expected ’out} E ‘’))
|