Skip to content

Instantly share code, notes, and snippets.

@bjackman
Created September 7, 2019 11:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bjackman/4b0ccb3f91a3b9c214872ed518c9ced9 to your computer and use it in GitHub Desktop.
Save bjackman/4b0ccb3f91a3b9c214872ed518c9ced9 to your computer and use it in GitHub Desktop.
// Copyright Chris Patuzzo 2016, Brendan Jackman 2019
// This is a modification of Chris Patuzzo's original Sentient example for
// finding self-enumerating pangrams - you can see the original here:
// https://sentient-lang.org/examples/self-enumerating-pangram
// I've added some comments and extended it
// a) to work on larger values (the original assumed that there would be no
// more than forty of any given letter), and
// b) to also find "near-miss" solutions - because for longer seed texts you
// usually find there are no solutions. This hack lets you write a seed
// text, find near-solutions, then tweak letters in your seed text to make
// it accurately self-enumerating! This massively increases the runtime of
// the program. The measure of a "near" solution is controlled by the maxErr
// and numErrs variables.
// I also made lookupTable start from zero instead of one, this is just for
// convenience of certain added code.
function^ pangram () {
function^ main () {
// Working with values up to 999 so we need 10 bits of our integers. Plus
// the sign bit makes 11
array26<int11> sentenceSeed, letterCounts;
// How "wrong" can a given letter tally be?
int11 maxErr;
// How many letters can have a non-zero error?
int numErrs;
// Now we count up how many of each letter will appear in the overall
// sentence. The key unit of data here is a 26-length array, counting the
// occurences of each letter in a piece of text.
numberOfPlurals = letterCounts.countBy(*moreThanOne?);
// We translate each letterCount into one of those array26s
lettersForEachNumber = letterCounts.map(*lettersForNumberWord);
// Now we flatten the above into a single array26
numberOfEachLetter = lettersForEachNumber.transpose.map(*sum);
// Now we add the "mandatory letter", the "s" for plurals, and the seed text
numberOfEachLetter = numberOfEachLetter.map(*addMandatoryLetter);
numberOfEachLetter = numberOfEachLetter.addArray(sentenceSeed);
numberOfEachLetter = numberOfEachLetter.addPlurals(numberOfPlurals);
// Now we calculate the error in the counts for each letter. The original
// code effectively just required that these values were zero.
// Helpful analogy: [a, b].transpose in Sentient is like zip(a, b) in Python.
errors = [numberOfEachLetter, letterCounts].transpose.map(function^ (pair) {
return pair.first - pair.last;
});
// No error can exceed maxErr
invariant errors.all?(function^ (e) { return abs(e) <= maxErr; });
// There can be no more than numErrs non-zero errors
invariant errors.countBy(function (e) { return e != 0; }) <= numErrs;
// The below are just optimisations
invariant sentenceSeed.all?(*inBounds?);
invariant letterCounts.all?(*inBounds?);
expose sentenceSeed, letterCounts, maxErr, numErrs;
};
function moreThanOne? (n) {
return n > 1;
};
function^ lettersForNumberWord (n) {
// For letter words up to ninety-nine we just use a lookup table. But
// extending the lookup table up to 1000 entries made the computation way
// too slow. So instead this function implements the generation of larger
// number phrases logically. There are four components to the number phrase,
// for example: 999 becomes ["nine", "hundred", "and", "ninety-nine"].
// For phrases that don't include all for components we use lookupTable[0]
// which contains all zeroes (representing the empty string).
// So 100 -> ["one", "hundred", "", ""]
// 21 -> [ "". "", "", "twenty-one"]
// So 101 -> ["one", "hundred", "and", "one"]
hundreds, remainder = n.divmod(100);
parts = [
lookupTable[hundreds],
(hundreds > 0) ? hundredLetters : lookupTable[0],
(hundreds > 0 && remainder > 0) ? andLetters : lookupTable[0],
lookupTable[remainder]
];
// Now we squash the four parts by summing "vertically" like we did for
// lettersForEachNumber.
return parts.transpose.map(*sum);
};
function addMandatoryLetter (n) {
return n + 1;
};
function addArray (self, other) {
return [self, other].transpose.map(*sum);
};
function addPlurals (self, numberOfPlurals) {
return self.map(function^ (n, index) {
return isPlural?(index) ? n + numberOfPlurals : n;
});
};
function isPlural? (index) {
return index == 18; # S
};
function inBounds? (n) {
return n >= 0 && n <= 999;
};
main();
};
hundredLetters = [0, 0, 0, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]; # HUNDRED
andLetters = [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; # AND
lookupTable = [
# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # (zero - does not appear)
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # ONE
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0], # TWO
[0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0], # THREE
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], # FOUR
[0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], # FIVE
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0], # SIX
[0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0], # SEVEN
[0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], # EIGHT
[0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], # NINE
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], # TEN
[0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], # ELEVEN
[0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0], # TWELVE
[0, 0, 0, 0, 2, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0], # THIRTEEN
[0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0], # FOURTEEN
[0, 0, 0, 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], # FIFTEEN
[0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0], # SIXTEEN
[0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0], # SEVENTEEN
[0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], # EIGHTEEN
[0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], # NINETEEN
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 1, 0], # TWENTY
[0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2, 0, 0, 1, 0, 1, 0], # TWENTY-ONE
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 3, 0, 0, 2, 0, 1, 0], # TWENTY-TWO
[0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0, 0, 1, 0, 1, 0], # TWENTY-THREE
[0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 2, 1, 0, 1, 0, 1, 0], # TWENTY-FOUR
[0, 0, 0, 0, 2, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 1, 0], # TWENTY-FIVE
[0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, 0, 0, 1, 1, 1, 0], # TWENTY-SIX
[0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 2, 0, 1, 1, 0, 1, 0], # TWENTY-SEVEN
[0, 0, 0, 0, 2, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 1, 0], # TWENTY-EIGHT
[0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 1, 0], # TWENTY-NINE
[0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 1, 0], # THIRTY
[0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 2, 0, 0, 0, 0, 1, 0], # THIRTY-ONE
[0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 3, 0, 0, 1, 0, 1, 0], # THIRTY-TWO
[0, 0, 0, 0, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 1, 0], # THIRTY-THREE
[0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 2, 1, 0, 0, 0, 1, 0], # THIRTY-FOUR
[0, 0, 0, 0, 1, 1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 1, 0], # THIRTY-FIVE
[0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 1, 1, 0], # THIRTY-SIX
[0, 0, 0, 0, 2, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 1, 0], # THIRTY-SEVEN
[0, 0, 0, 0, 1, 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 1, 0], # THIRTY-EIGHT
[0, 0, 0, 0, 1, 0, 0, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 1, 0], # THIRTY-NINE
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0], # FORTY
[0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0], # FORTY-ONE
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 2, 0, 0, 1, 0, 1, 0], # FORTY-TWO
[0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 2, 0, 0, 0, 0, 1, 0], # FORTY-THREE
[0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 1, 1, 0, 0, 0, 1, 0], # FORTY-FOUR
[0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0], # FORTY-FIVE
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0], # FORTY-SIX
[0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0], # FORTY-SEVEN
[0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 2, 0, 0, 0, 0, 1, 0], # FORTY-EIGHT
[0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 2, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0], # FORTY-NINE
[0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0], # FIFTY
[0, 0, 0, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0], # FIFTY-ONE
[0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 1, 0, 1, 0], # FIFTY-TWO
[0, 0, 0, 0, 2, 2, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 1, 0], # FIFTY-THREE
[0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0], # FIFTY-FOUR
[0, 0, 0, 0, 1, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0], # FIFTY-FIVE
[0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0], # FIFTY-SIX
[0, 0, 0, 0, 2, 2, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0], # FIFTY-SEVEN
[0, 0, 0, 0, 1, 2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0], # FIFTY-EIGHT
[0, 0, 0, 0, 1, 2, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0], # FIFTY-NINE
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0], # SIXTY
[0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0], # SIXTY-ONE
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0, 1, 1, 1, 0], # SIXTY-TWO
[0, 0, 0, 0, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 1, 1, 0], # SIXTY-THREE
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0], # SIXTY-FOUR
[0, 0, 0, 0, 1, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0], # SIXTY-FIVE
[0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 2, 1, 0], # SIXTY-SIX
[0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 1, 0], # SIXTY-SEVEN
[0, 0, 0, 0, 1, 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 1, 1, 0], # SIXTY-EIGHT
[0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0], # SIXTY-NINE
[0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0], # SEVENTY
[0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0], # SEVENTY-ONE
[0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 2, 0, 1, 1, 0, 1, 0], # SEVENTY-TWO
[0, 0, 0, 0, 4, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 1, 0], # SEVENTY-THREE
[0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0], # SEVENTY-FOUR
[0, 0, 0, 0, 3, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 2, 0, 0, 1, 0], # SEVENTY-FIVE
[0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 1, 0, 1, 0, 1, 1, 0], # SEVENTY-SIX
[0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 1, 0, 2, 0, 0, 1, 0], # SEVENTY-SEVEN
[0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 1, 0], # SEVENTY-EIGHT
[0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0], # SEVENTY-NINE
[0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0], # EIGHTY
[0, 0, 0, 0, 2, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0], # EIGHTY-ONE
[0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 1, 0, 1, 0], # EIGHTY-TWO
[0, 0, 0, 0, 3, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 1, 0], # EIGHTY-THREE
[0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0], # EIGHTY-FOUR
[0, 0, 0, 0, 2, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0], # EIGHTY-FIVE
[0, 0, 0, 0, 1, 0, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0], # EIGHTY-SIX
[0, 0, 0, 0, 3, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0], # EIGHTY-SEVEN
[0, 0, 0, 0, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0], # EIGHTY-EIGHT
[0, 0, 0, 0, 2, 0, 1, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0], # EIGHTY-NINE
[0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0], # NINETY
[0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0], # NINETY-ONE
[0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2, 0, 0, 1, 0, 1, 0], # NINETY-TWO
[0, 0, 0, 0, 3, 0, 0, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 1, 0], # NINETY-THREE
[0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 2, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0], # NINETY-FOUR
[0, 0, 0, 0, 2, 1, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0], # NINETY-FIVE
[0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0], # NINETY-SIX
[0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0], # NINETY-SEVEN
[0, 0, 0, 0, 2, 0, 1, 1, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0], # NINETY-EIGHT
[0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0] # NINETY-NINE
];
pangram();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment