Age | Commit message (Collapse) | Author | Files | Lines |
|
While it took me awhile to implement, this exercise was definitely worth
doing. I think there should be a more elegant way to construct the tree using
maybe a stack, but I couldn't find it.
All of this was part of a larger effort to search a string for a variety of
patterns. The solution is to compile the string into a suffix tree and then
search the suffix tree for each of the patterns.
I'm glad I didn't gloss over this exercise.
|
|
Prefer initializing `result` to an empty array of size `m`, which makes the
algorithm a bit more elegant.
|
|
Tonight I learned that random sample where each element in the sampling corpus
has an equal likelihood of being chosen is a brand of algorithms known as
"reservoir sampling".
- Implement random.shuffle(..)
- Implement random.choice(..)
Surprisingly, candidates are expected to encounter problems like this during
interviews.
|
|
Given an input like "gello" suggest an correction like "hello".
This is a proof-of-concept problem for writing a simplistic auto-correction
algorithm for a mobile device.
|
|
This algorithm is pretty interesting because it runs in linear time with respect
to the length of the `corpus` string. It does this by using a sliding window
hash. This hash -- because it's a sliding window -- runs in constant time for
each iteration; we're only adding and subtracting one character each time and
not re-hashing the whole "window".
When our hashes match, only then do we compare the "window" to the
`pattern`. String comparisons are linear because they compare each character to
each character one at a time. But because we only compare strings when are
hashes match (a check which runs in constant time), this spares us the
performance hit.
|
|
Instead of calling `filter(..)`.
|
|
Support the optimally performance solution of which I'm aware.
|
|
I have encountered this problem 3x in the wild thus far:
1. www.InterviewCake.com
2. Cracking the Coding Interview
3. www.Pramp.com
|
|
Firstly, implement a function that adds two arguments together... without using
the `+` operator. I need to drill this problem. Thankfully I took a Coursera
course that taught me how to make a half-adder and a full-adder, but the
recommended solution for this is a bit more difficult.
|
|
I was always curious how hashing functions were implemented, so I read about the
"polynomial rolling hash function", and I decided implementing it would be a
good exercise. After writing that, writing a hash table was simple.
|
|
As with most linked list questions, this one involves an arcane trick from the
neck-bearded playbook.
|
|
Write a function to modify an array of integers in-place such that all of the
zeroes in the array are at the end, and the order of the other integers is not
changed.
|
|
After seeing the solution that my book advocated, I implemented it using
recursion.
|
|
Write a random number generator for [0,7) using only a random number generator
for [0,5). Ensure the results are uniformly distributed.
|
|
This solution operates in O(n) time instead of O(n*log(n)) time, which
surprisingly isn't *that* big of a difference...
Consider a size of n of 10M...
1) ~10s
2) ~0.5s
So, yes, the O(n*log(n)) will take 100x longer to complete, but for an enormous
input size of 10M elements, it can still complete in under a minute. The
difference between that and the second, faster, algorithm, is just 9s.
|
|
Write a function that returns the indices demarcating a substring, which if
sorted, would make the entire array sorted.
|
|
Defining the insert (or "siftup") function described in the "Programming Pearls"
book.
|
|
Write a function that reads a string of compressed XML and outputs the
decompressed version.
Note to self: Now that I'm growing more comfortable writing parsers, I'd like to
become equally comfortable writing pretty-printers.
|
|
Write a function that verifies whether or not a tic-tac-toe board is valid.
|
|
Write a function to compute the highest stack of boxes that can be created from
a list of boxes.
|
|
After a five year hiatus, I decided to attempt to solve the famous N queens
problem again. This time, instead of modeling the chess board using a
`[[Bool]]`, I'm using `[Integer]` where the `Integer` indicates which column has
a queen. This is a bit lighter in RAM.
|
|
Adding some documentation for my future self.
|
|
Add attempts at solving coding problems to Briefcase.
|
|
Group Emacs dependencies like ivy together.
|
|
Making progress...
|
|
Add spacing to the bottom to make space for the footer.
|
|
Add spacing to help the app breathe.
|
|
I could have and should have broken this change into smaller pieces, but when I
came up for air, I had changed too much, and most of the changes are
intermingled. Oh well... this is an exciting change!
Include habits for:
- Morning
- Evening
- Payday (the 25th)
- First of the Month
- First of the Year
Since the Morning and Evening routines might be a bit noisy, I'm excluding them
from the output using a flag, `include{Morning,Evening}`, which I support in the
UI to toggle their visibility.
I made *much* more progress on this app that I expected to today, and I *think*
-- short of supporting a database and a server -- I'm close to
being *completely* finished.
Wahoo!
|
|
Add a simple button to clear all completed tasks.
|
|
Show the number of minutes remaining before completing all of the tasks.
|
|
Instead of accepting `List (String, Int)`, accept `List Strategy` where
`Strategy` defines whether or not the string of selectors should be applied to
the element.
I'm also renaming it `class` so I can just use `Utils.class`; `tailwind` has
little to do with the function itself.
|
|
Include:
- habitType: Daily, Weekly, Yearly... what's the trigger?
- minutesDuration: Estimation of how long it'll take to complete
|
|
Here's what I watched:
- Ran
- Children of Heaven
- Lawrence of Arabia
Only 78/250 movies to go!
|
|
- Change header to blue
- Change habit to gray when completed
- Prefer app font for footer instead of monospaced font
|
|
Create UI.elm to house components like `button`, which is a simple HTML button
with `focus:outline-none` applied as a `class`, which is an accessibility
feature that I don't need for this touch-screen application.
I like this pattern more than my more opinionated patterns for UI modules in Elm
where I'd define all of the arguments as a record type (i.e. kwargs).
|
|
Use the Google Fonts API to fetch a handwritten font, which gives the app a
modicum of personality. There are more "best practices" ways to do this, such
as:
- Download the font once, and include it in the bundle
- Extend the Tailwind configure to recognize the font
- Ditch the inline <style> block
But I don't need the performance benefits that the first bullet provides. And
the second two bullets are more relevant for a larger application with more than
one font. So I think in this case, the easiest solution is best.
Also:
- Use `container` and `mx-auto` to constrain content for wide screens
|
|
Allow users to browse the habits of the other days of the week.
|
|
This ensures us that our view is consistent within ~1 minute of reality.
|
|
- Increase font size for header
- Prefer a bulleted list
- Reduce horizontal padding
|
|
With personal information and information about the project's stack.
|
|
Since Warm Yin Yoga is at 15:00, it's difficult to attend that *and* nap.
|
|
Created a small MVP for digitizing my weekly habits. Much more to come.
Lots of things happening:
- Copied the boilerplate to get started
- Added a brief project-level README
- Outlined my ambitions in design.md
See README and design.md for more context on this project.
|
|
Instead of calling this manually.
|
|
When `keybindings` requires `window-manager`, the `evil-want-integration`
warning emerges. If I remove the `evil` dependency from `window-manager`, it
resolves the issue.
|
|
This is another (overdue) change about which I'm quite excited. Add
spell-checking to my Git commit buffers. :)
|
|
Thankfully `general` made this change super easy and maintainable to support.
|
|
I was tired of using `arandr` to manually configure my monitor positions, so I
encoded the settings in Elisp in the `display.el` module.
TL;DR:
- Drop support for `position` kwarg in `display-register` macro
- Support `coords` kwarg in `display-register`.
- `defconst` the `xrandr` arguments and command in `display-register`.
- Define `display-arrangement` macro that consumes the `xrandr` arguments that
`display-register` defines to create an interactive function,
`display-arrange-<NAME>`, which -- when invoked -- runs one xrandr command to
configure a display "arrangement".
|
|
Why didn't I configure this earlier? For years, my workflow involved checking a
buffer's major mode and then extending that major-mode's hook. Confusingly (to
me), the `major-mode` for `COMMIT_EDITMSG` is `text-mode`, and I didn't want to
disable `company-mode` for *all* `text-mode` buffers, which is what the
following would have done:
```elisp
(add-hook 'text-mode-hook (lambda () (company-mode -1))
```
Thankfully I recently invested some time into learning more about Emacs's
offline help system, `Info-mode`, so -- putting that knowledge to work -- I ran
`info-apropos` and searched "magit commit". After ~5 minutes of reading I knew
the recommended way of configuring this was to modify `git-commit-setup-hook`.
How validating!
|
|
Assuming (hoping) that this doesn't break anything.
|
|
Since "Briefcase" doesn't exist, `window-manager--switch` fails and so does
`exwm-init-hook`. It'd be nice to catch these errors earlier...
|