Quick Rebrief To briefly summarize the last three posts in this series on “GroupSort”, in Part 1, we proposed the problem, and came up with a brute-force algorithm to come up with the ideal solution (I’ve previously called it “the naive algorithm”, but I feel this is a little misleading – “brute force” is a better description). We found that this algorithm worked well (duh) for small values, but for real-world class-sizes — as small as about 20 people — it would simply never compute in a reasonable time. So in Part 2, I sketched out the “team-captain algorithm” that…

Part 1: Naive algorithm Part 2: “Team Captain” algorithm For this next part, I wanted to make some tools to better put our data in context, as it comes out from our two algorithms, the naive but perfect algorithm, and our homemade “team-captain” style algorithm. We left off with just simple, single-integer values to compare against each other, and we saw that the team-captain algorithm fared worse (there were typically 2-3 times as many pairing overlaps as with the naive output), but how much worse is this? We’re going to get a bigger look at the data here, by introducing…

In the last post, we wrote a naive algorithm to sort a set of users into groups of a specified size, minimizing the number of “repeat pairs” of group members, as given in a pairing history variable. In other words, you’re trying to put students into rooming configurations, and you want students who’ve been roomed together before to be less likely to roomed together again. We want to maximize the pairing diversity because meeting new people is fun and a memorable part of your formative years. But our algorithm failed those students, because it could only realistically run for numbers up to about 10 students, before the computation…

A few years back, a teacher friend of mine asked me if I could write a program to solve a problem for him. His school travels, so they’re spending every night in hotels, and need to group the students into rooms. Ideally, the students will be with new people as often as possible, and not just sharing rooms with the same people every hotel. Adding to the complexity, the rooms can be of varying size, and the number of nights in each hotel will differ slightly. The problem, then, is this: By the end of the trip, we want each…

The newly announced game in the Zelda series, Breath of the Wild, among other open-world features, for the first time allows the player to hunt wild animals in order to acquire food, which is this game’s way of accumulating life energy (represented by “hearts” in the series). Contrast this against how previous Zelda games have handled non-combatant animals, and we can see a stark 180° turn in the series’ messaging. Every previous game punished the player, playfully, for attacking animals who were no threat to Link, the game’s ever-silent protagonist (with a few limited exceptions). Attack the cuccos (chickens), and they’d…

Vaclav Smil’s Should We Eat Meat? should have had a different title. This is a question that is scarcely seriously addressed, and certainly never clearly answered by its author. Smil’s strength is meticulously collecting and communicating statistics and figures. The first, and longer, part of the book (at least it felt longer; the tactile feel of where in a book you are is lost when reading on an eReader) presents in a dry and straightforward manner the raw numbers of animal agriculture’s impact on the environment. Numbers include land usage, greenhouse gas emissions, relative nutritional output per unit feed input, and numbers you…

2015 was not a hugely productive year for me. I’ll get to that in another post. But one thing that stands out as something I’d been Meaning To Do™, and then actually did, was to create my first functional Twitter bot. It turned into a project I’m actually pretty proud of, and it continues to be one that I monitor and maintain. This won’t be an overly technical post, but I’d love to talk through the thought process and fine-tuning that went into creating @VegAssist, the Vegan Assistant. Automating a Hobby Sometime last year it occurred to me that a…

Breakfast is a highly skippable meal for me. In the ideal world, I’d eat it every day. It’s a wonderful meal. But it requires a certain amount of good habit-keeping in the morning, and here is where a javelin pierces my heel. Every day is a new promise to myself that the next morning will be different – I’ll just get up with the alarm, which is carefully set to give me ample time in the morning to do what needs to be done, and have plenty of time extra to make a decent breakfast, and get some early work…

DISCLAIMER: This, for me, is an exercise in curiosity. I am not a mathematician, a professional game developer, or anyone with anything more than a rudimentary knowledge of art theory (pertaining to the theory of perspective). I probably do a lot of things in inefficient ways. For me, the fun is in using what I know to derive things, and arrive at fun conclusions. With that…. The Journey Begins My pseudo3D journey started about a year ago while working on a game for a local annual game jam, TOJam. At the time my fifth TOJam, I was responsible for graphics…