leo/examples/hackers-delight/ntzsearchtree
Collin Chin d44457fc32
[Feature] Implement leo execute (#2491)
* bump snarkvm rev

* update default gitignore

* impl leo execute

* bump snarkvm 0.14.5

* modify examples wip

* update run.sh examples

* impl env file

* clippy warning

* fix auction example

* fix auction example env

* generate new private key for new env - tests failing due to env not found err

* commit error changes

* Fix tests; clippy

* Get examples working

* leo build checks that build dir is well formed; clippy

* Clean up

* Update examples/README.md

Co-authored-by: d0cd <pranavsaig@gmail.com>
Signed-off-by: Collin Chin <16715212+collinc97@users.noreply.github.com>

* do not commit .avm files

* use snarkvm commands

---------

Signed-off-by: Collin Chin <16715212+collinc97@users.noreply.github.com>
Co-authored-by: Pranav Gaddamadugu <pranav@aleo.org>
Co-authored-by: d0cd <pranavsaig@gmail.com>
2023-07-19 18:04:09 -07:00
..
build [Feature] Implement leo execute (#2491) 2023-07-19 18:04:09 -07:00
inputs Reorganize hackers delight examples 2022-09-13 17:22:01 +02:00
src More examples 2022-10-06 00:17:51 -07:00
.env [Feature] Implement leo execute (#2491) 2023-07-19 18:04:09 -07:00
.gitignore [Feature] Implement leo execute (#2491) 2023-07-19 18:04:09 -07:00
program.json [Feature] Implement leo execute (#2491) 2023-07-19 18:04:09 -07:00
README.md Reorganize hackers delight examples 2022-09-13 17:22:01 +02:00

src/ntzsearchtree.leo

Build Guide

To compile and run this Leo program, run:

leo run

The Algorithm

An 8-bit version of this algorithm is described in "Hacker's Delight, 2nd edition" by Henry S. Warren, section 5-4, figure 5-22.

This algorithm contains a fully-explicated search tree to find where the lowest order 1 bit is in a 32-bit input, and returns the number of trailing zeros for each case.

In the second half of the function, the low 16 bits are zero, so the masks that select the higher bits are larger. To make the numbers more readable, we multiply the first half constants by 65536u32 which will be constant-folded during Leo compilation and should not increase the resulting circuit size.