Files
2023-10-24 20:48:09 -04:00

57 lines
1.8 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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.