Hacker News new | past | comments | ask | show | jobs | submit login

This is a folk algorithm of unknown origin.

All I know is the original author was probably a hacker from Finland and it was originally written in x86 assembly. This is my modernized implementation of his algorithm.

As for solving the BUGFIX-66 puzzles, to fix the bug in the compressor, add

  to = append(to, 0)
on the line after

  loc = len(to)
The original code was not inserting a placeholder for every control byte.

To fix the decompressor, add

  at++
on the line after

  ctrl := int(from[at])
The original code was not stepping past a control byte after loading it.



Doe it literally check for the specific solution?

Writing

    to = append(to, ctrl)
which is functionally equivalent and, in my personal opinion, with clearer intent (ctrl = 0 at that point in the code), returns "incorrect".

In fact, it seems that any placeholder value should work - as it is always overwritten by the final value of ctrl for a given set of bytes at the end; however, the checker rejects this.


Your fix is wrong, so the site rejects it.

Go doesn't do integer type conversions implicitly, to avoid the implicit-type-casting bugs endemic to C. Go (thankfully) doesn't allow an implicit conversion from int to byte. You must do the cast explicitly.

So you would have to say

  to = append(to, byte(ctrl))
and that's correct.

The site builds and executes the code you submit, and any correct solution is accepted.


Thank you!




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: