i think this took me (1 person) like 40 hours max? all built in the last week, though i spent more time than i should have on it haha. quite ai-assisted, that's how most of the layout like the editor, player controls, even eval server got set up.
i spent way too much time on things like the language itself, map generation, and figuring how to only recompute the sim on material code changes vs whitespace and comments (it assembles to "bytecode" with debouncing! and the sim component takes the bytecode as a prop).
we'll see if good ROI, we definitely intend to run more of these types of challenges in the future, so much of this work won't go to waste
Hey, I'm the one who built this particular challenge!
I had no clue, but thanks for the book lead! It didn't come up directly, but SimCity 2000 and especially SimCity 4 had a huge impact on me growing up / I still spin up SimCity 4 from time to time, so I imagine there's a massive indirect influence haha.
This is actually all built in nextjs/react, though the initial sketches of the sim had no visualization and were just running in my terminal using bunjs
Moment | Distributed Systems Engineer, Product Engineer | ONSITE NYC | Full-time | https://moment.com | $200k–$325k + equity
Moment is building core infrastructure for fixed-income, the world's largest asset class (4M+ instruments, $150T total market). We work with some of the largest financial institutions to bring all of their fixed-income operations into a single platform.
Cool things we've built include a liquidity-aware portfolio optimizer, high-cardinality market data pipelines, and a best-in-class trading system and ledger. Backend stack is generally Go/Kafka/Postgres on ECS, though some of the quant-ier services are built in Python. Frontend stack is NextJS. Company stack is Slack/Linear/Notion.
Roles:
- Distributed systems engineer: build features + scale systems to model, optimize, and support an idiosyncratic, complicated domain
- Product engineer: build beautiful, powerful interfaces that put these new capabilities in the hands of asset managers, financial advisors, traders, and more.
Trying to represent sudoku as an integer program leads to a natural way to represent the board: a 9x9x9 boolean grid where x and y are the board dimensions and z is the number in each square.
You end up with three symmetric constraints + the box constraint:
- The sum along any x, y, or z row is 1 (one of each number per row, one of each number per column, and one number per square)
- The sum of each 3x3x1 box slice is 1 (one of each number per box)
I really like the symmetry between the row sum constraints here. And it does pretty neatly align with the way many people solve Sudoku by writing little numbers in the squares to represent possible values before pruning impossible ones.
That representation of a Sudoku is elegant, but I think it is not the most natural representation. The base constraint programming style will use a variable per square with domain 1-9, and then 27 all_different constraints. This representation is a lot closer to how people talk about the rules of Sudoku, which in my mind makes it more natural.
A full MiniZinc program would look like this
int: n = 3;
int: s = n*n;
set of int: S = 1..s;
array[S, S] of opt S: puzzle;
array[S, S] of var S: board;
% Sudoku constraints
constraint forall(row in S) ( all_different(board[row, ..]) );
constraint forall(col in S) ( all_different(board[.., col]) );
constraint forall(r, c in {1, 4, 7}) (
all_different(board[r..<r+n, c..<c+n])
);
% Set up puzzle
constraint forall (r, c in S where occurs(puzzle[r, c])) (
board[r, c] = puzzle[r, c]
);
solve satisfy;
Moment | Distributed Systems Engineer, Product Engineer | ONSITE NYC | Full-time | https://moment.com | $200k–$325k + equity
Moment is building core infrastructure for fixed-income, the world's largest asset class (4M+ instruments, $150T total market). We work with some of the largest financial institutions to bring all of their fixed-income operations into a single platform.
Cool things we've built include a liquidity-aware portfolio optimizer, high-cardinality market data pipelines, and a best-in-class trading system and ledger. Backend stack is generally Go/Kafka/Postgres on ECS, though some of the quant-ier services are built in Python. Frontend stack is NextJS. Company stack is Slack/Linear/Notion.
Roles:
- Distributed systems engineer: build features + scale systems to model, optimize, and support an idiosyncratic, complicated domain
- Product engineer: build beautiful, powerful interfaces that put these new capabilities in the hands of asset managers, financial advisors, traders, and more.
> To review or adjust your AutoPay settings, click here.
> You can review or adjust your AutoPay settings at any time.
I honestly find the latter more confusing. It reads like documentation, so I'm primed to think that the link will take me to a documentation page about autopay settings rather than to my personal account settings. The former is very clear that it is prompting me to take an account action if I desire.