Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@zantetsuken88
Last active August 1, 2018 10:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zantetsuken88/4f949493ddc383dc2fe9e11171eefb4f to your computer and use it in GitHub Desktop.
Save zantetsuken88/4f949493ddc383dc2fe9e11171eefb4f to your computer and use it in GitHub Desktop.

Proverb

For want of a horseshoe nail, a kingdom was lost, or so the saying goes.

Given a list of inputs, generate the relevant proverb. For example, given the list ["nail", "shoe", "horse", "rider", "message", "battle", "kingdom"], you will output the full text of this proverbial rhyme:

For want of a nail the shoe was lost.
For want of a shoe the horse was lost.
For want of a horse the rider was lost.
For want of a rider the message was lost.
For want of a message the battle was lost.
For want of a battle the kingdom was lost.
And all for the want of a nail.

Note that the list of inputs may vary; your solution should be able to handle lists of arbitrary length and content. No line of the output text should be a static, unchanging string; all should vary according to the input given.

Running the tests You can run all the tests for an exercise by entering

$ gradle test in your terminal.

Source Wikipedia http://en.wikipedia.org/wiki/For_Want_of_a_Nail

Submitting Incomplete Solutions It's possible to submit an incomplete solution so you can see how others have completed the exercise.

class Proverb {
private String[] words;
Proverb(String[] words) {
this.words = words;
}
String recite() {
StringBuilder proverb = new StringBuilder();
if (words.length != 0) {
for (int i = 0; i < (words.length - 1); i++) {
String lost = words[i + 1];
proverb.append("For want of a " + words[i] + " the " + lost + " was lost.\n");
}
proverb.append("And all for the want of a " + words[0] + ".");
}
return proverb.toString();
}
}
import org.junit.Ignore;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class ProverbTest {
@Test
public void zeroWordsAreGiven() {
String[] words = new String[0];
String proverb = new Proverb(words).recite(),
expected = "";
assertThat(proverb, is(expected));
}
@Ignore("Remove to run test")
@Test
public void singlePieceOfProverb() {
String[] words = new String[]{"nail"};
String proverb = new Proverb(words).recite(),
expected = "And all for the want of a nail.";
assertThat(proverb, is(expected));
}
@Ignore("Remove to run test")
@Test
public void twoPiecesOfProverb() {
String[] words = new String[]{"nail", "shoe"};
String proverb = new Proverb(words).recite(),
expected = "For want of a nail the shoe was lost.\n" +
"And all for the want of a nail.";
assertThat(proverb, is(expected));
}
@Ignore("Remove to run test")
@Test
public void shortChainOfConsequences() {
String[] words = new String[]{"nail", "shoe", "horse"};
String proverb = new Proverb(words).recite(),
expected = "For want of a nail the shoe was lost.\n" +
"For want of a shoe the horse was lost.\n" +
"And all for the want of a nail.";
assertThat(proverb, is(expected));
}
@Ignore("Remove to run test")
@Test
public void fullProverb() {
String[] words = new String[]{"nail", "shoe", "horse", "rider", "message", "battle", "kingdom"};
String proverb = new Proverb(words).recite(),
expected = "For want of a nail the shoe was lost.\n" +
"For want of a shoe the horse was lost.\n" +
"For want of a horse the rider was lost.\n" +
"For want of a rider the message was lost.\n" +
"For want of a message the battle was lost.\n" +
"For want of a battle the kingdom was lost.\n" +
"And all for the want of a nail.";
assertThat(proverb, is(expected));
}
@Ignore("Remove to run test")
@Test
public void fourPiecesModernizedProverb() {
String[] words = new String[]{"pin", "gun", "soldier", "battle"};
String proverb = new Proverb(words).recite(),
expected = "For want of a pin the gun was lost.\n" +
"For want of a gun the soldier was lost.\n" +
"For want of a soldier the battle was lost.\n" +
"And all for the want of a pin.";
assertThat(proverb, is(expected));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment