#leetcode #solution #problem #cdylib #monotone #crescendo #926

monotone-crescendo

A library designed for use in WebAssembly that implements solutions to LeetCode #926 NOTE: Only published to crates.io as educational experiment. This crate will not work as is if you try to use it as a dependency due to it's crate-type setting of "cdylib."

5 stable releases

1.0.4 Nov 21, 2021
1.0.0 Nov 19, 2021

#415 in WebAssembly

MIT license

17KB
166 lines

Monotone Crescendo

Rust implementations of LeetCode problem #926, compiled to WebAssembly and invoked via Javascript

See a working demo.

Try It Out Locally

  1. Clone this repository onto your machine.

  2. Install wasm-gc by running cargo install wasm-gc. This is used by build-demo.sh to reduce the size of the compiled wasm binary by removing unneccesary/unused cruft. Even though the wasm-gc project itself says you shouldn't use it in most cases, it still seems to get the wasm file the smallest. I tried using the --gc-sections flag in the compiler options and wasm-gc still got it smaller. I am not making use of wasm-bindgen or wasm-pack in this project, which both attempt to remove cruft when compiling, so I utilized wasm-gc to do it manually.

  3. Run ./build-demo.sh in the repository root. This creates the monotone_crescendo.wasm binary and an index.html file in a directory named demo in the repository root.

  4. cd into demo/ and run an http server. Using python's SimpleHTTPServer, for example:

    cd demo/
    python -m SimpleHTTPServer
    

    The demo will then be available at http://localhost:8000.

Crate Documentation

Detailed documnetation generated via rustdoc can be found alongside the demo.

Acknowledgements

Huge credit to Dr. Richard Apodaca and his blog, depth-first.com, without which I'm not sure I would have been able to make sense of how to read and write from WebAssembly's linear memory without having to dive straight into something like wasm-bindgen.

These two blog posts from Dr. Apodaca were most helpful:

  1. Compiling Rust to WebAssembly: A Simple Example
  2. Rust and WebAssembly from Scratch: Hello World with Strings

Further credit goes to Radu Matei and his blog post, which helped me build upon the concepts I learned from Dr. Apodaca's posts.

The prefix sum solution is the official solution on LeetCode, I only translated it into Rust.

The cumulative solution was posted to LeetCode by tarunbisht, and was translated into Rust by me.

No runtime deps

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy