Skip to content

Instantly share code, notes, and snippets.

@alganet
Created August 8, 2011 20:28
Show Gist options
  • Save alganet/1132654 to your computer and use it in GitHub Desktop.
Save alganet/1132654 to your computer and use it in GitHub Desktop.
Full script for the Google Developer Day Quiz (http://developerquiz.appspot.com) in 39 lines
<?php //Run as command line. Input file as first argument.
const G_FOO = 'aeiou'; //Googlon special letters
const G_INV = 'z'; //Preposition invalidator
const G_PREP = 3; //Preposition size
const G_VERB = 8; //Verb size
const G_ORDER = 'qnbczxjtklmvhrwfsdgp'; //Letter ordering
const G_NUM_MOD = 4; //Pretty number divisor
const G_NUM_MAX = 526593; //Pretty number minimum
$textB = explode(' ', file_get_contents($argv[1]));
print 'Prepositions: ' . count(array_filter($textB, 'is_prep')) . PHP_EOL;
print 'Verbs: ' . count(array_filter($textB, 'is_verb')) . PHP_EOL;
print 'First Person: ' . count(array_filter($textB, 'is_first_person_verb')) . PHP_EOL;
print 'Pretty Numbers: ' . count(array_filter(array_unique($textB), 'is_nice')) . PHP_EOL;
print 'Vocabulary: ' . implode(' ', gsort(array_unique($textB))) . PHP_EOL;
function is_prep($word) {
return G_PREP == strlen($word) && false === stripos(G_FOO, substr($word, -1)) && false === stripos($word, G_INV);
}
function is_verb($word) {
return strlen($word) >= G_VERB && false === stripos(G_FOO, substr($word, -1));
}
function is_first_person_verb($word) {
return is_verb($word) && false === stripos(G_FOO, $word[0]);
}
function is_nice($number) {
$gnumber = as_decimal($number);
return (int) bcmod($gnumber, G_NUM_MOD) === 0 && $gnumber >= G_NUM_MAX;
}
function normalize($word) {
return strtr($word, G_ORDER, '0123456789abcdefghij');
}
function gsort(array $words) {
usort($words, function($a, $b) { return strcasecmp(normalize($a), normalize($b)); });
return $words;
}
function as_decimal($number) {
return base_convert(strrev(normalize($number)), 20, 10);
}
@alganet
Copy link
Author

alganet commented Aug 10, 2011

Os operadores de algumas provas variam. Algumas usam foo pra predicados, algumas usam bar. O mesmo pra verbos. Revisem o código antes de rodar!

@rodrigosetti
Copy link

Gaigalas, ta aí um código em python com 10 linhas a menos: https://gist.github.com/2424838

Pouco legível mas funciona ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment