---
title: "Romanize: Another Programming Puzzle"
date: 2015-03-06T00:00:00+00:00
draft: false
canonical_url: https://www.viget.com/articles/romanize-another-programming-puzzle/
---

We had such a good time working through our [first programming
challenge](https://viget.com/extend/otp-a-language-agnostic-programming-challenge)
that we decided to put another one together. We had several ideas, but
[Pat](https://viget.com/about/team/preagan)'s idea of converting to and
from Roman numerals won out, and a few hours later,
[Romanize](https://github.com/vigetlabs/romanize) was born.

The name of the game is to write, in a language of your choice, a pair
of programs that work like this:

    > ./deromanize I
    1
    > ./deromanize II
    2
    > ./deromanize MCMIV
    1904

    > ./romanize 1
    I
    > ./romanize 2
    II
    > ./romanize 1904
    MCMIV

It's a deceptively difficult problem, especially if, like me, you only
understand how Roman numerals work in the vaguest sense. And it's one
thing to create a solution that passes the test suite, and another
entirely to write something concise and elegant -- going from Arabic to
Roman, especially, seems to defy refactoring.

We've created working solutions in ~~seven~~ ~~eight~~ ~~nine~~ ten
languages:

-   C (via [Steve132](https://github.com/Steve132))
-   Clojure
-   Elixir
-   Go
-   Haskell (plus check out [this cool
    thing](https://gist.github.com/sgronblo/e3d73a61c5dd968b7d29) from
    [sgronblo](https://github.com/sgronblo) using QuickCheck and Parsec)
-   OCaml
-   Node.js (via [Xylem](https://github.com/Xylem))
-   PHP
-   Ruby
-   Swift (shout out to [wasnotrice](https://github.com/wasnotrice))

What's gonna be number eleven? **You decide!** [Fork the
repo](https://github.com/vigetlabs/romanize) and give it your best shot.
When you're done, send us a PR.
