Skip to content

Commit

Permalink
fix: P2D
Browse files Browse the repository at this point in the history
The previous implementation could give an incorrect result when the
first node was not a root node.

Example:

P2D 0 2 2

correctly returns:

0 1 0    0 2 1

However

P2D 1 1

returns

1 0    0 1

Therefore, it says that no permutation is necessary to have the
depth-first traversal.

The reason is that, in the matrix `(-1+d)↑⍤0 1⊢⌽z`, a zero can either
mean the index of a node or an element used to fill the empty positions.

In the last example, `(-1+d)↑⍤0 1⊢⌽z` is:

1 0  <- path of the node is 1 0
1 0  <- path of the node is 1

Grade Up says that rows of this matrix are already sorted.

A quick fix is just to add one to the matrix z. Therefore,
we have instead `(-1+d)↑⍤0 1⊢⌽1+z)` which is in our example:

2 1
2 0

And we have the expected result:

>> P2D 1 1

1 0     1 0

Notes:
- There are no issue when the first node is a root node.
- There is no issue when `⎕IO` is equal to 1. Actually, the value we
  need to add to z is `1 - ⎕IO`, if we wanted a solution that works
  for any value of `⎕IO`.
  • Loading branch information
axiles committed Apr 29, 2024
1 parent cd5e8b6 commit aca314e
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion cmp/util.apl
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ assert←{

D2P{0=: p2{p[][]}p}
P2D{z d,z _{pd+p[z,]} d((-1+d)0 1z)}
P2D{z d,z _{pd+p[z,]} d((-1+d)0 11+z)}

opsys{'Win' 'Lin' 'Mac'3'.'⎕WG'APLVersion'}
put{
Expand Down

0 comments on commit aca314e

Please sign in to comment.