# June 2015 Community Challenge

At the end-of-day on Sunday, May 31st, the most-voted post will become the next .

It is June 1, and the top-voted answer is: Decrypt a monoalphabetic substitution cipher

April's Calculator submissions submissions are still rolling in, and May Battleship submissions are starting to arrive, but I felt it'd be prudent that we get a month's challenge decided early so that a challenge can be agreed upon before the month begins (just before).

What should we do this time? Feel free to resubmit non-winning ideas from previous rounds, although new ideas are usually more successful.

• Vote for those answers which interest you
• At the end-of-day on Sunday, May 31st, the most-voted post will become the next .

Once the challenge topic is decided, you can post questions on the main-site related to the challenge. The idea is to run the challenge all the way through June... although nothing stops you from posting an "entry" later than that :)

Disclaimer: Most of this text is borrowed from Mat's Mug.

• Thanks for posting. I was just about to do this today when I spotted this. May 13 '15 at 11:44
• May 31st? Surely it should be June? Jun 16 '15 at 13:09

### Decrypt a monoalphabetic substitution cipher

A monoalphabetic substitution cipher applies a substitution table to the letters in the plaintext (often omitting all non-letters to disguise the word boundaries). For example, if the table is:

plaintext   ABCDEFGHIJKLMNOPQRSTUVWXYZ
ciphertext  RDYBXZWFCTIELAMJPGQVNSOHUK


Then the plaintext HELLO WORLD would be encrypted as FXEEMOMGEB.

Your program should take as input a ciphertext, for example:

UXLIRNXSOPQAKJBJTXSVTJKRHXKKJKLIQQOEBLXRSNJKWQKQKYSAQKLRVQNLJKQD
QRPLJRSEWIRSWQWJHQKTRKKQRWIXSODXNXJSNJTLIQBRNLLIXNXNUIRLXYSAQKLR
VQLJAJTJKEJYKQRAQK


(together with advice from the cryptanalyst, if you wish) and output the plaintext.

Some more examples to test your code on (each is encrypted with a different cipher):

EVSXTTIWGVRMWIXWDXEMHWXDVCWGVSIKXWIRIQIVQFIVUUFIKGXEMLFVVMRVCFMW
XTGIWFBZITGIWITGXEBEXEDVTGIWYVCETWDLIBTIZIWKVLIXCTBUCFTGIWIBKEVQ
FXYIFBOIGVSI

OXZKUSSTSDUKYJUGSDUZIHDZOUSEUIDMOKCUVDAMDXGBDVAOGDKASOLDIAXKDD

TPGNKAPRQXNXOTLWKQOCPEDKOTGXVVXTHPOHSPWHXXTLWXGPOHSXNXKQQXWAGXHN
DOGXHEDHHKRQXH

CYNCWRBNQNGNYPQANYPJQRCRBNCRBNSFYLQCCWRBNQNIBPXBPQRBNYFRJSFKGFYF
YLIBPXBRBNQHPSPRIBCLNXPHBNSQRBNG


### Challenge entries

• May 11 '15 at 11:29
• Encrypted? Those are just village names in Wales :) May 20 '15 at 20:15

Resubmit May's runner-up

# StackSTV

Stack Exchange uses an STV-based system for holding elections. They use the software OpenSTV to host it.

That software is no longer being maintained, and the system is being rebranded as OpaVote, and will no longer be free.

This month's challenge:

Build an implementation of the same STV algorithm used for Stack Exchange moderator elections, that consumes data in the same format that Stack Exchange provides, and produces the same results.

## Algorithm

The actual algorithm use is linked in this Meta.StackExchange question/answer: How are moderator election votes counted, in plain English?

Specifically, using the "Meek STV" algirithm here - in Wikipedia.

## Inputs

For examples of input data, see: Stack Overflow Elections

Typical data looks something like:

10 3
1 1 2 3 0
1 4 5 6 0
1 6 7 2 0
1 3 6 1 0
1 6 8 4 0
1 6 3 2 0
1 4 1 9 0
1 8 9 3 0
1 8 7 3 0
....
1 8 2 1 0
1 9 4 6 0
1 4 8 3 0
1 3 4 8 0
1 4 5 10 0
0
"meagar"
"Raghav Sood"
"Bohemian"
"0x7fffffff"
"Undo"
"bluefeet"
"Matt"
"Jon Clements"
"Siddharth Rout"
"Doorknob"


The format is essentially:

• The number of candidates, and seats on the first line - 10, and 3 represent there are 10 candidates, and 3 positions.
• a list of any candidates that have withdrawn preceded with a negative number - one per line (Stack Exchange won't have these, likely).
• a count of people with a specific combination of votes For example, in the first line: 1 1 2 3 0 that means that one person voted with the combination first-choice candidate 1, second choice candidate 2, third choice candidate 3. The 0 represents the end of that line. Note that combinations can be duplicated, potentially.
• a zero on a line by itself represents the end of the vote section.
• following that, is the names of the candidates, in the order of the choices.

Feel free to implement it in the language of your choice, and to embellish it with GUI, graphs, charts, etc.

• Two months runner-up... how about making this a community project instead? Jun 2 '15 at 1:23

# Chat extension

The goal here is to write a program that Oneboxes GitHub links and allows markdown formatting on multi-line comments.

Markdown code:

*Text* and _Text_ = Italic
**Text** and __Text__ = Bold
***Text*** ___Text___ = Bold & Italic


Examples:

Italic text and Italic text
Bold text and Bold text
Bold italic text and Bold italic text

Onebox example:

• If this challenge ever airs, please link it here! It will greatly help future users. May 25 '15 at 15:54
• @Unihedron Sure, just help spread the word!
– user34073
May 25 '15 at 16:01
• An interesting addition would be to be able to do [badge:badge-name], like how we can do [tag:tag-name].
– user34073
May 25 '15 at 18:56

The idea is to create a simple piece of software for an ancient system, like a DOS program or a tiny NES game. Choose your favorite nostalgic platform and code something for it. If you lack the hardware, use an emulator or virtual-machine to test your program.

(Note: Resubmit)

# Blackjack

Yes, the card game. No, hear me out!

As with many classic programming challenges, there's a deck of cards (usually several!) and shuffling and perhaps sorting involved. That's always fun. And there's all the cardshark jargon :)

At its most basic, there's the trickery of an Ace being worth either 1 or 11, so you sometimes need to track two possible scores for a hand.

Then there's the asymmetry in that there are two "players", but one is the dealer who must draw cards until a score of 17 or higher is reached. Perfectly simple rules for a computer to follow.

Now, while Blackjack is basically about getting closest to 21 without going over, there are many other rules that can be respected or ignored as one sees fit (the title above links to Wikipedia's article on Blackjack, where you'll find lots of stuff).

For the more adventurous there's "splitting": A hand of two cards of equal value may be split into two separate hands. And, depending on the hands and the rules you use, you might then split those two hands again. And while face cards are all worth 10, some rulesets do treat them differently when splitting.

Also, the original "blackjack" meant specifically Ace of Spades + a Jack, but nowadays it usually just means Ace + 10. And by the way, a blackjack is worth 21, but still beats non-blackjack hands worth 21, so straight-up numerical comparison isn't quite enough.

And then there's doubling down: Doubling your bet and receiving exactly 1 more card, but no more.

There's also "insurance" which is a side-bet on the dealer having a blackjack. This makes more sense in a real-life game where the dealer draws a hole card, and the player can attempt to "read" the dealer like in poker. Here, the dealer will probably be your inscrutable computer (since it's no fun to play as the dealer), so insurance probably isn't that interesting. Unless your program is counting cards, perhaps?

In terms of overall scope, there are many options:

• A full game with a dealer and 1 or more positions for the player to play and configurable rules.

• A game that plays itself, learning the best actions to take for a given hand over time, maybe? Tables for the best strategies for given hands already exist, so you can check your results.

• A card counting program that plays the game like Rain Man. It can just track the most likely card to come up next, or think several moves ahead, including splits and doubling down, or tricking the dealer into busting. Just don't bring it near a casino if you value your health.

• A simple game of blackjack against the computer (just hit/stand; no splitting/doubling down etc.).

• A simple scoring function for two or more cards.

And anything in between.

In all, there's should be meat here for any skill level. The house wins.

• Hmm.. make one for NES? ;-) May 25 '15 at 13:33

This month's challenge was for creating "Battleship" implementations. Why don't we roll an extension of this into next month. Let's write Battleship AI and let's improve May's Battleship implementations to take AI plugins.

• I'm not sure why you are assuming that there won't already be AI's in this month's challenge? May 11 '15 at 0:31