. Added a new section about my academic achievements. Strictly speaking, they are not "works", but they are still something I did. Close enough. Also, added an arXiv link for Egalitarian Price.
I've created a lot of things, for a wide range of "created" and "things". Here's a collection of them that I can recall. Feel free to contact me if you find something not listed.
I have written many pieces of nonfiction, "serious" writing. Some of them are academic papers, coming from an academic background. Others aren't as academic, but I still wrote them for some purpose.
Academic publications
Bit-Complexity of Classical Solutions of Linear Evolutionary Systems of Partial Differential Equations
Ivan Koswara, Gleb Pogudin, Svetlana Selivanova, Martin Ziegler Journal of Complexity, Vol. 76, 2023.
A project that my supervisor (Martin Ziegler) worked on with a few colleagues, including me. I contributed on a specific part of this project, which became my masters thesis.
Layman explanation
The general problem tackled by this paper is about partial differential equations. We want to approximate the solution by dividing space and time into discrete steps, i.e. we sample the solution at regular intervals and turn the differential equation into a difference equation, which can be solved by raising a matrix to a power.
The problem with approximation is that errors can easily accumulate. In "normal" programming, there is often a floating-point data type to handle real numbers crudely. This is usually good enough for some basic purposes, but when we want more precision and correctness, we have to do something custom.
There is a branch of theoretical computer science that deals with the computability of real numbers, usually called exact arithmetic. Ultimately, the question is simply, how much precision do we need to approximate the solution of a PDE, and how efficient can we do it?
To see how this problem is not so clear, note the following. Obviously we can get more precision by sampling more points in space. Say, we want to get one extra bit of precision; then we halve the step size. But this means we sample twice as many points in space, and this causes the matrix to be twice as large in each dimension. The problem grows exponentially.
The part I worked on is about a special case of PDEs: the PDE is circular. In this case, the matrix becomes a circulant matrix, which further reduces down to a polynomial. My problem becomes about raising a polynomial to some exponential power. However, due to the circular property, I had to sum up the coefficients of not just one term, but many terms; exponentially many terms, in fact.
Since this problem is derived from PDEs, the polynomial also has some specific properties, such as the sum of coefficients being 1. I took advantage of it: I managed to apply probabilistic theory techniques to show that the coefficient for some exponent would be too small and could be approximated by 0, meaning I only had to compute a small number of the terms.
Egalitarian Price of Fairness of Indivisible Goods
Karen Frilya Celine, Muhammad Ayaz Dzulfikar, Ivan Adrian Koswara PRICAI 2023: Trends in Artificial Intelligence, 2024.
A research project for a course that I and my friends did. The professor liked it and encouraged us to present it at a conference, so we did and got it published.
It's funny that we ended up publishing this in a conference about artificial intelligence, because this has nothing to do with it. But it's still published, and it's still a chance for us to make our names out there.
We aimed for a 12-page paper for the conference, but it was accepted for a 6-page track instead. We cut a lot of content and detail for the conference. We later posted the 12-page version to arXiv [2402.16145].
Layman explanation
The general problem is about the concept of price of fairness in fair division.
When we want to allocate a number of goods to some players, we are balancing various goals. We can optimize the social welfare, e.g. the total utility/value obtained by the players. However, this might lead to an absurdly unfair allocation, where many players feel they don't get a fair share. Alternately, we can try to appease everyone by making the division fair. However, the social welfare might end up being low as a result.
Price of fairness is invented to capture this concept. In short, this is the ratio of the maximum social welfare we can achieve if we don't have to make things fair, divided by the maximum social welfare if we do have to make things fair. A high price of fairness represents a huge cost to appease everyone.
This is a relatively recent concept that was invented in 2011. There have been several results about this in the past. Specifically, there is a paper about utilitarian price of fairness for divisible goods; about egalitarian price of fairness for divisible goods; and about utilitarian price of fairness for indivisible goods. Clearly, there's something missing.
The professor of the course pointed this to us, and we decided to pursue it. We investigated the egalitarian price of fairness for indivisible goods. Egalitarian welfare means the lowest utility obtained by the players, and we want to maximize this minimum. Indivisible goods means the goods are discrete and cannot be split arbitrarily; think of houses and computers, instead of cakes and parcels of land.
We looked at several properties: three fairness properties and two properties about maximizing another kind of welfare. For each one, we gave lower and upper bounds of the price of fairness. The proofs were diverse; several proofs were simply about giving a construction, while other proofs were more involved. One of the trickiest proofs, which we were proud to come up with, was about showing that the egalitarian price of fairness of RR (an allocation obtained by using the round-robin algorithm) is at most 2n−1 (where n is the number of players).
Being exposed to puzzles for a long time, I end up having a lot of opinions about them. This question is something that's been in my mind, and after several circumstances, I ended up writing my thoughts about it.
You can read the piece yourself. In summary, though, my definition is much more strict than others; when others think something is a bad puzzle, I simply think it's not a puzzle at all. Some important aspects include having to be authored by a human and having to convey some idea, because a puzzle is a medium of communication.
Writing hunt puzzles isn't easy. But the thing bugging me is that, a lot of people say this is because "finding ideas is hard". I disagree with this strongly; I think ideas are easy to come with if you're willing to devote the time for it, although it may take a lot of iteration to shape an idea to the final product.
I wrote this piece as a result, where I described several examples in which I managed to force myself to come up with ideas on the spot. It didn't help; if any, I believe people ended up just being mad at me. I still stand by the opinion in this piece, though.
Another MIT Mystery Hunt came and went. By tradition, excited solvers wanted to write a recap of their experience to share with the world. For the 2023 edition, I wrote mine about a month late. This time, I think this is one of the earliest recaps.
What makes the recap interesting is that I was hunting with my team, ⛎ UNICODE EQUIVALENCE. For many, this team seems to be full of mysteries; how did it form, why is it a powerhouse? And my writing reveals a bit of UE's internals. (It's nothing too weird; it's just a team of people with good chemistry, and we organize our work well.)
It also includes my opinion on the state of MITMH at the end of the piece, with some rather harsh words. MITMH is something dear to some people, and the fact that I'm willfully going against traditions ended up rubbing some people wrong. It's my piece, though, and I still stand by my opinion.
My only regret is not checking with UE whether what I was sharing would be okay. I did later clarify that the piece was entirely my opinion and beliefs, not anyone else's or UE's.
I presented a talk on ThinkyCon, named Mathematics for Puzzles, where I presented some examples of mathematical theory found in puzzles. I'm happy the talk was received well.
That said, while preparing for the talk, I realized I had a lot of examples. Due to time constraints, I only picked a few of them for the talk. What about the other examples, though?
This article has the examples I discussed in my talk, and more. It's not simply a direct transcription of the talk; I also took the chance to re-organize things. If you've watched the talk, a good chunk of the material will be familiar, but there's plenty of new stuff.
Games and puzzles are hard. But how hard? There have been quite a lot of results on the computational complexity of games and puzzles, and I used to collect them and put them in a list. It's an interesting way to compare if a game is particularly harder than another, or compare how games are proven to be hard.
That was years ago, though. My interest on the project died off, and I didn't touch it for quite a long time. Finally I decided to face the reality that this project is abandoned, I'm no longer motivated to do it. I wonder if anyone else keeps any similar list...
One day, someone shared a particular new theory for Heyawake puzzles on Twitter. It was unfortunately in Japanese, but I could look at the images and had the mathematical ability to analyze and reconstruct the proof, so I wrote a translated version as a Twitter thread, and then another version that became this piece.
Since then, a few other people went beyond by writing up even cleaner and more comprehensive guides of this theory (and Heyawake puzzles in general). I decided I could leave the task to them. I linked a few of those inside the page as a post-mortem update, but otherwise, the page is no longer maintained.
Academic achievements
I achieved numerous things, primarily in mathematics and competitive programming. Strictly speaking, they are not "works", but they are still things I did, so I figured they are close enough.
Mathematics
I recognized my mathematical talent very early on. My school life involved a lot of participating in math competitions.
The first competition I would have participated in was... I think it was called International Mathematical & Science Olympiad, for primary school students. It took place in Jakarta that year. However, I got sick with some sort of disease and I had to miss the competition entirely. I participated in a lot more after that, though.
The most notable one is gold medalist in Olimpiade Sains Nasional 2011. This is the Indonesian national-level competition of science fields; I participated in the mathematics part, of course. The medallists were invited to a training camp for the International Mathmeatical Olympiad.
The next most notable one is participation in International Mathematical Olympiad 2012. I went through the training camp and was one of the six chosen to represent Indonesia in the international stage. Unfortunately, I didn't perform very well there.
Click for a story about my IMO participation
One of the problems (Problem 4) was a functional equation with, I believe, pretty bad edge cases. I did manage to solve it and wrote up a solution for it. Then I went to the other problems.
Some time later, after failing to get anywhere with the others, I returned back to this problem. I felt it was written pretty badly; the structure was off. So I rewrote it from scratch. The problem is, this had a big hole that I missed. So I submitted the revised solution, with the original solution among my scratch papers that I had to hand back in.
During the appeal process, my team leader informed me that my solution was wrong and would have only gotten 1 point (out of 7). But the graders found my original solution in my drafts. They were confused because that solution was correct (or at worst, almost correct). They decided to give me 6 points for that problem.
The morale? Don't bother writing up clean solutions for competitions.
(Also, later I got a fever at the time of the closing ceremony and ended up skipping it.)
Besides these, I participated in numerous competitions, organized by universities, academic organizations, and so on. Some of them were even international, where the problem papers were distributed to various participating countries.
Click for a story about one "buzzer"-type competition
One of the competitions I took part in was a team-based competition. Our school fielded a team comprising of me and two others. I had a friend from another school that also participated here, and our team and his team went to the finals (along with three others I weren't familiar with).
The finals were a buzzer-type competition, where teams would buzz in and answer to score points, and the team with the highest score would win. The last five questions were "betting" questions. Every team would bet an amount of points, and only the one that bet the highest got a chance to answer. If correct, they would get their bet; if wrong, they would lose half.
During the penultimate question, we didn't have the highest bet; it's my friend's team that did. While waiting for them to answer, we calculated our points. Our team had 2750 points. His team would get 2500 points if they got this right. (All other teams were out of the running; I think they were below 1000.)
I asked my team. There were two options: either we could answer or we could let my friend's team to answer. If we wanted to keep our lead, we would have to bet less than 500 points, but my friend's team would be able to bet more safely and then it all depended on whether they got it right or not. If we wanted to take matters to our own hands, we had to bet high, but that would risk us falling to second place. Were we ready to take the risk?
We decided we did. We would win on our own hands. We bet 2510 points, to audible gasps from the audience. (My friend's team bet 1250 points. I have no idea what they were thinking, but well.)
We got the problem. I unfortunately forgot what the problem was. But after I stated my answer to the judge, I remembered them smiling before saying, "Correct, 2510 points for [my team]".
That moment will live in my head for a long time.
Competitive programming
I learned about competitive programming somewhere during the training camp for International Mathematical Olympiad, from jonathanirvings (Twitter — yes, also a speedrunner nowadays) that was also training for International Olympiad in Informatics at the same hotel. I was introduced to Codeforces and other competitions, and I started participating in them.
I generally use Python. (Very early on, I used PHP.) I recognize that this is a roadblock, because Python is considered slow, and competitive programming problems are usually set with a C++ solution in mind and have time limits that reflect that. For me, competitive programming is mostly just a hobby, and I value algorithm correctness quite highly. If I could, I would participate in "programming competitions" where one had to write up the algorithm in pseudocode and prove its correctness and complexity.
Some of my achievements:
Google Code Jam
Year
Round 1
Round 2
Round 3
2014
188
620
-
2015
629
164
185
2016
661
39
68
2017
12
74
(missed)
2018
557
1238
-
2019
360
291
350
2020
50
567
35
2021
223
1227
-
2022
71
136
345
Rank in each GCJ round
Google used to run an annual competition, culminating in an on-site finals at Google's Headquarters for cash prize. Unfortunately, the 2023 installment was canceled and they announced the website would shut down later that year.
I participated every year from 2014 to its last contest in 2022. My best showing was in 2020, where I got 35th in Round 3 (out of 500 or so). Only the top 25 advanced to the finals, but I'm proud of my performance anyway.
These are team competitions (although you may participate solo), and the problems are sometimes bizarre. Unlike many programming competitions, the input is given to you beforehand, and inspecting it is valid, including if you want to solve some cases by hand. And unlike many programming competitions, some problems test out-of-the-box thinking, including utilizing glitches in programming languages, processing images and music, and more.
I participated every year from 2014 to 2018, where the contest then disappeared without any news of whether it would return. I was part of two teams, although both included jonathanirvings and only the third member was different. Our best showing was in 2018, where we ranked 14th, although we generally performed really well every year.
Generally I'm great with problems that are much more mathematical in nature, while my teammates are better with the more usual problems, so we complemented each other well.
Puzzles and games
As a big fan of puzzles, I have written a lot of them. Logic puzzles? Hunt puzzles? Puzzle games? Yes.
Warning: There may be spoilers in my comments about each puzzle. I believe the comments shouldn't spoil much about the puzzles; for example, I might just mention something that should also be pretty clear when you first open the puzzle. That said, I'm warning in advance, and if you want to avoid spoilers entirely, try your best at not reading the comments.
I love writing logic puzzles, and I have written a lot of them. I realize that they are spread out over various places: my puzzle blogs (now all abandoned), various contests and sets, and other places online. I took all of them and put them together on a single page.
The ultimate goal is that it will be comprehensive. Every single logic puzzle I've written should be in there, possibly with a few exceptions for exceptionally bad puzzles that I don't want to republish. It is a long work, but I'm slowly chipping away at it.
Everything about my logic puzzle output will be available in the above link, so I won't duplicate them here. The rest are for my non-logic puzzles (or at least, not pure logic).
Hunt puzzles
Besides logic puzzles, I also write hunt puzzles: puzzles where you generally have no instructions and you have to figure out what to do, so that you arrive at a single answer — usually an English word or phrase.
Most of my hunt puzzles have heavy logic flavor, such as logic puzzles with a secret twist.
My first ever hunt puzzle was part of the biggest hunt of the year. Being mostly a logic person, it is logic-related, although it has some aha to discover.
This puzzle isn't very good by my modern standards, but it was a valuable experience to try writing a hunt puzzle.
Published , for Galactic Puzzle Hunt 2018, co-written with Anderson Wang
As part of ✈✈✈ Galactic Trendsetters ✈✈✈, I was invited to write for Galactic Puzzle Hunt, and I decided to go for more hunt puzzle writing.
Naturally, it's more logic puzzle stuff, although the aha is different from Polyglot. Also, it turns out to be quite a big, meaty puzzle that took solvers a lot of hours.
I think the puzzle is great to solve casually. This also taught me to scope my puzzles better.
As explained on the solution page, I wrote all the logic puzzles and Anderson wrote the word searches. That wasn't entirely it, though. Since Anderson was well-versed at hunt puzzles, he helped immensely in guiding the direction of this hunt puzzle. (I could write the logic puzzles, but putting them together into a cohesive hunt puzzle was harder.)
Puzzlers Club has an annual Secret Solver event. It's like the Christmas tradition Secret Santa, but instead of buying a gift, it's writing a puzzle. (And we eventually reveal the author of each puzzle.)
In 2018, I was assigned to write for betaveros. Normally I'm hesitant in writing hunt puzzles, but because betaveros was a good friend of mine, I knew him well enough to be able to not only write a puzzle, but a whole mini-hunt set.
I didn't give the set any particular name, so this is just based on the file name that I sent.
It's a file because I sent it directly. I recognize having to download a file now is bothersome, though. In the future, I might look into converting this into pages here on my website.
After 2018, I wrote more for GPH in the next installment. I actually wrote two puzzles.
This is my first foray of going completely out of my comfort zone. There is nothing logicky about this. It involves words, and I generally don't like words. (Although I don't like researching topics like history and pop culture even more.)
I think the puzzle is ultimately not very remarkable, but I'm still happy to have tried something new.
Published , for Galactic Puzzle Hunt 2019, co-written with Anderson Wang and Alex Pei
My other contribution to GPH 2019.
Once again, it's logic-related. That said, after all the logic is done, there is a step involving words, and I'm happy I had help from people in the writing team to flesh that part out.
In fact, I had even more help than that. I forgot what the exact circumstances were, but I remember I was very busy at this point. I felt I didn't particularly contribute many logic puzzles, although I did some.
Silph Puzzle Hunt was a successor of Smogon Puzzle Hunt, and the hunt as a whole generally had a Pokémon theme — although that doesn't mean the individual puzzles were themed. It was also run by some of my online friends, so I was invited to write, after previously having solved a few installments of it when it was Smogon-based.
This is not logic-related at all. I'm also not sure how much I can say without spoiling a lot about the puzzle. I guess I can say, this puzzle came from an observation I had. I tried various ways to execute the idea and failing a lot for not having the experience and patience to research. I ultimately decided a word search was the most suitable way for me to do this idea.
Published , for Silph Puzzle Hunt, co-written with lovemathboy
This puzzle, also part of Silph Puzzle Hunt, was actually mostly lovemathboy's. I was just invited to write one of its logic components. Although, after we figured out another logic component was too unexciting and lame, we replaced it and I wrote another for it.
I think my contribution here would be a fine logic puzzle on its own, but I don't want to spoil the surprise.
Games and custom levels
I've created several games. Right now, all games I made were written in PuzzleScript, a scripting language to easily write the kind of games that's common with puzzle games (hence the name). All of these are pretty old, but I'm still pretty happy with them.
In addition, I've also created several custom levels for various games.
The first PuzzleScript game I wrote. The core concept is about merging blocks of the same number together, with two 5's merging into nothing, and the goal is to get rid of everything. All blocks move at the same time, which makes the game to resemble Threes to some extent.
I believe this was released along with an "easy version" with completely different puzzles, but I don't think I have that version any more.
It's pretty decent. I've learned things about game design from doing this. For example, having multiple objects move together tends to be hard to visualize. I also wish I did better with the level design. But I'm still happy I did this.
Back when I was active in the PuzzleScript community, I saw someone sharing their game about magnetic blocks that repel each other. The level design for that game was... very lacking, and I decided to take it on my own to devise better levels, as well as handle some edge cases.
I think my levels ended up being more interesting. The original had a lot of Sokoban-y block pushing, but without the tight space that made it hard, so it was just boring. My levels had a whole lot more blocks and interactions between them.
There are certainly things I would change if I were to update the game now. Although, again, my time is spent elsewhere. I'm still pretty happy that I did something, though.
A puzzle game about rock, paper, and scissors. It's a Sokoban-like where you have to make your way out with these obstacles along the way. Rocks are heavy and you can't push multiple rocks at once. Paper is sticky, and pieces of paper stick together to form one larger block. Scissors are sharp and you can't push them from their sharp side. And they interact with each other in the obvious way, allowing you to annihilate objects to make your way out.
I'm really proud of the concept and I think it's rich in ideas. Although, for whatever reason, the levels were designed to be "three-fold": reach the exit, collect an optional collectible, and do both at once. The game doesn't keep track of this for you; you just do it yourself. That part is a bit weird.
I think the main thing I regret from this is the level design. A lot of the levels aren't very inspired; I believe the only one I'm very happy with was the last level out of 18. If I ever revisit this game in the future, making better levels is definitely my top priority. But I'm still happy with the concept and I think it's worth playing.
JAM3 Game, or "Just Another Match 3 Game". It's not exactly your usual puzzle game; it's reminiscent of those casual games like Bejeweled and Candy Crush. But also, somehow it's puzzly.
The motivation behind creating this game was actually to find something I would be able to stream. Creating a usual puzzle game on stream was a bit awkward, because the puzzles would be clearly spoiled on stream, so I was looking for something involving random generation. And this came to my mind. I don't believe I actually ended up streaming it.
I think it's pretty crude. It might be interesting to play as something unusual, but I wish I had done it better.
Published by Zachtronics, official level published
Level name:(NEXUS 17.135.0) SEQUENCE GAP INTERPOLATOR
A programming game about using Assembly-like instructions on synchronous nodes on a grid. Made by Zachtronics, one of the most well-known developers of the programming game genre; they created SpaceChem.
In June 2015, they made a level editor for TIS-100 and called for submissions to make a bonus campaign. I submitted a level, which got accepted as part of the 25-level act.
In short, you're given a sequence of consecutive numbers, with one missing. Find the missing number. I believe the sequences are 4–5 numbers long.
It's actually slightly changed from my original design. The original design had the sequence to start at 1. I don't mind the change, since the smart solution I had in mind is still present. Have fun solving it and competing with others for the leaderboard!
A puzzle game about a robot that can store and release cubes of various materials with distinct properties.
I found this game and the possibilities captivated me. I wrote a few levels and published them on the Steam Workshop.
One of the projects I had in mind was the following. I had an idea about making "evil" versions of in-game levels that were much harder to solve. I managed to write two of them, but then my motivation died off and I haven't picked it up since.
A lot of my levels involved building giant structures. This might have been interesting the first time, but it started to get tiring and cumbersome. Also, I learned of a random bug in the game where the undo would reset the entire level progress, so a long level would just lead to frustration.
I think my levels are worth at least looking at. If you want to play them, make sure you have the patience — and the calm to not get enraged if you encounter the bug.
Super Mario Maker 2
Published by Nintendo, unofficial level
My level: Back and Forth (R8H-174-52G)
I do like Mario games, and I'm intrigued at the idea of a level editor, so I got this game.
Mario levels span a very broad range. Official-like levels, Kaizo levels with precision and surprise, artistic levels that play themselves, and so on. For me, since I like puzzles, I decided to make one that was relatively puzzly.
My level needs quite a lot of precision, but there is absolutely no surprise whatsoever. Everything in the level is right there, and you can even climb to the roof of the level, so you can look at the whole thing and plan ahead before you begin. In fact, I can show you a screenshot of the main part of the level; I posted it on Twitter.
I haven't really got into the game any more, so I'm not sure how well it's received. I think, like a lot of custom levels in many games, it might just be lost in the swamp. I do remember showing a friend this level though, and they were frustrated by it (in a good way).
Creative writing
Furry fandom and my alternate universe
A lot of my creative writing is related to my furry identity; in particular, my alternate universe where my characters live. I occasionally write about them. Everything related to this AU can be found inside my furry page.
Other stories
I also wrote some other stories separate from my furry continuity.
A light-hearted short story, a fanfiction about Tails and Cream from the Sonic the Hedgehog franchise. What's that sound from Tails' workshop?
God, this was written when I was still in high school, when I was still such a big fan of these two characters that made up my username. I remember I asked my English teacher to help review it so I could improve. (If you look at the reviews on FF.Net, you'll find it.)
The adult me would say this story had cringe writing, and it's not wrong. But it does add a bit to the charm, with the cuteness and innocence of the story. Besides, this is a stepping stone for my future endeavor in writing, and creative work in general. However silly it is, I'm glad I wrote it.
A living story that basically recaps a D&D campaign I'm playing in.
The history behind this story is unusual. I'm playing in a D&D campaign with my character, Vee the artificer. The campaign itself is unusual, because we have like 10–15 players split into several groups, each one having an independent campaign in the same world. My group has me as the main character, with a few supporting characters played by some friends.
I found myself wanting to summarize and recap my campaign, so I began to write this story. As the campaign is still going, the story is also still going, although I haven't kept it up to date (I believe the last thing recorded was a session in February 2023, and we've done around 10 sessions after that).
The story itself, as it is, has quite a lot of details. I might end up rewriting and cleaning it up to summarize it better. But if you're curious about my campaign, you can see it from my point of view by reading this.