Hacker News new | past | comments | ask | show | jobs | submit login
T * sin (t) ≈ Christmas tree (github.com)
266 points by adamnemecek 7 months ago | hide | past | web | favorite | 18 comments

Neat idea. Hidden within the ReadMe file, someone re-wrote this tree in Wolfram but made it ornamented looking. [0]

Going further, the same author of the latter tree had a post picked by staff titled “Random Snowflake Generator Based on Cellular Automaton.”[1] Another very cool idea for this time of the year.



http://dwitter.net has rad minimalist christmas trees every year. best bit is it’s easy to remix them!

How on earth does this one work? The code is just a bunch of escaped kanji?!


It is not just kanji. For instance, the 3rd character is ⡸ (a braille character). I suspect what happened is that the author choose the characters needed based entirely on their unicode value, and it just so happened that many of them fell into the kanji region of Unicode[0].

Anyway, what is going on is that each character takes 4 decimal digits to encode its Unicode value.

When you escape it, the characters are replaced by their unicode values expressed in decimal, so the string looks like:


At this point, it uses a regex to change it from being a sequence of 4 hexadecimal digit characters to 2 hexadecimal digit characters, so the string becomes "%77%69%74%68%..."

At this point, it escapes the string. Giving the intended script of


Essentially, what is going on is that the rules state there is a 140 character limit. Most people interperat that as a 140 byte limit, however, in exchange for 48 bytes of overhead, you can actually pack 2 bytes into a character, which gives 184 bytes of usable payload. Which is good for this submission, as the unencoded payload is exactly 184 characters (and 184 bytes).

[0] A quick search says that 4E00-9FFF is CJK (Chinese, Japanese and Korean) Unified Ideographs, and that is not the only Unicode block that seems to be devoted to CJK.

Combined with the fact that that the lower ascii characters are control characters that would't be used in a script, and you end up with almost all CJK characters. If you actually wanted to be entirely CJK, it probably wouldn't be that difficult to fudge the characters around so it fits.

It's abusing Unicode character counting to fit more bytes of source code.

Nice. A spiral with decreasing radius essentially. On a side note, I wonder what configuration/distribution of magnetic force will make a charged particle move like this.

A charged particle moving at an angle to a magnetic field like that found at the ends of a solenoid (increasing field strength) would produce the desired motion.

Example: https://s3-us-west-2.amazonaws.com/courses-images/wp-content...

Thank You! I'll explore it soon when I get some time.

Suggestion: to make the tree self-similar at the vertex point, use [x, y] = t * [cos, sin] ( k * ln(t) ). The constant k determines the tightness of the spiral winding.

Another way to describe it: the spiral's uphill slope stays constant.

e^it is a spiral.

t*e^it wraps the spiral round a the cone |x|=t.

Inspired by this I threw this together (warning: contains music)


Yea, too much code but I'm lazy

Here's a smaller one


but it's missing the motion at the moment.

If you appreciate other kinds of trees, here's a fractal pot leaf written in PostScript:


Obligatory mention that this shape could also be represented as a dual quaternion.

And is a dual quaternion simpler than a sine wave?

It’s more general and composes nicely.

An octernian?

There should be a unicode "sextuple-u" character so you can express "www" in one letter (and five fewer syllables). Think of all the time and bandwidth that would save!

Nope, it’s not an octonion, it’s a dual quaternion.

The nice think about dual quaternions is that they compose. So you could then connect this screw to another screw in a smooth fashion.

Very cool! Simple and elegant.

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