Old lady swallowed a fly: Difference between revisions
m (→{{header|C}}: ok done with it) |
m (→{{header|C}}) |
||
Line 6: | Line 6: | ||
char *dict[] = { |
char *dict[] = { |
||
" |
"_fa fly,_c _m,/That wr_kand w_kand t_kinside her;_`_n;/" |
||
"How absurd_g_n!_h`cat;/Fancy that_gcat!_ddog;/What a" |
|||
"and t\xcinside her;\x1""bird;/How absurd\xa" |
|||
" hog_gdog!_jcow,_ihow s_la cow;_acow_bdog,_jhorse.../" |
|||
"bird!\xb\x1""cat;/Fancy that\xa""cat!\x5\x9 \x3" |
|||
"She's dead, of course!/", "_a_m_bfly;_c ", "/S_lthe ", |
|||
"dog;/What a hog\xa""dog;\xd""cow,\x7how\xe""cow;\x2" |
|||
" to catch the ", "_iwhy s_la fly - Perhaps she'll die!//_fa", |
|||
"cow\x4""dog,\xdhorse.../She's dead, of course!/", |
|||
⚫ | |||
"\x9\x3", "/She\x8""ed the ", "\xe" |
|||
" |
", to_e a ", "_a_n_b_m,_", "/I don't know ", "_adog_bcat,_d", |
||
"iggled ", "he_eed ", "spider", "bird", |
|||
⚫ | |||
"ed a ", "/I don't know ", " swallow", "\x2\xf\x4" |
|||
"fly;\x7why", ", to\x8 a ", "\x2""bird\x4\xf,", "iggled ", |
|||
"\x2""dog\x4""cat,\x5\x1", " she\x8""ed a ", "spider" |
|||
}; |
}; |
||
int print(char *c, int s) |
|||
{ |
{ |
||
do { |
do { |
||
if ( |
if (s) s = print(dict[*c - 95], 0); |
||
else |
else if (*c == '_') s = 1; |
||
else putchar(*c == '/' ? '\n' : *c); |
|||
} while (*++ |
} while (*++c); |
||
return s; |
|||
} |
} |
||
int main() |
int main() |
||
{ |
{ |
||
print(dict[0], 0); |
|||
return 0; |
return 0; |
||
}</lang> |
}</lang> |
Revision as of 08:28, 17 August 2011
Present a program which emits the lyrics to the song I Knew an Old Lady Who Swallowed a Fly, taking advantage of the repetitive structure of the song's lyrics.
C
Boring, ad hoc dictionary based decompression. The encoder was arguably more interesting, though. <lang c>#include <stdio.h>
char *dict[] = { "_fa fly,_c _m,/That wr_kand w_kand t_kinside her;_`_n;/" "How absurd_g_n!_h`cat;/Fancy that_gcat!_ddog;/What a" " hog_gdog!_jcow,_ihow s_la cow;_acow_bdog,_jhorse.../" "She's dead, of course!/", "_a_m_bfly;_c ", "/S_lthe ", " to catch the ", "_iwhy s_la fly - Perhaps she'll die!//_fa", "_acat_b_n,_h`", " swallow", "There was an old lady who_eed ", ", to_e a ", "_a_n_b_m,_", "/I don't know ", "_adog_bcat,_d", "iggled ", "he_eed ", "spider", "bird", };
int print(char *c, int s) { do { if (s) s = print(dict[*c - 95], 0); else if (*c == '_') s = 1; else putchar(*c == '/' ? '\n' : *c); } while (*++c); return s; }
int main() { print(dict[0], 0); return 0; }</lang>
PHP
<lang php><?php
$swallowed = array(
array('swallowed' => 'fly.', 'reason' => "I don't know why she swallowed the fly."), array('swallowed' => 'spider,', 'aside' => "which wiggled and jiggled and tickled inside her.", 'reason' => "She swallowed the spider to catch the fly"), array('swallowed' => 'bird.', 'aside' => "How absurd! To swallow a bird!", 'reason' => "She swallowed the bird to catch the spider,"), array('swallowed' => 'cat.', 'aside' => "Imagine that! To swallow a cat!", 'reason' => "She swallowed the cat to catch the bird."), array('swallowed' => 'dog.', 'aside' => "What a hog! To swallow a dog!", 'reason' => "She swallowed the dog to catch the cat."), array('swallowed' => 'horse', 'aside' => "She's dead, of course. She swallowed a horse!", 'reason' => "She swallowed the horse to catch the dog."));
foreach($swallowed as $creature) {
print "I knew an old lady who swallowed a " . $creature['swallowed'] . "\n"; if(array_key_exists('aside', $creature)) print $creature['aside'] . "\n";
$reversed = array_reverse($swallowed); $history = array_slice($reversed, array_search($creature, $reversed));
foreach($history as $note) { print $note['reason'] . "\n"; }
if($swallowed[count($swallowed) - 1] == $creature) print "But she sure died!\n"; else print "Perhaps she'll die." . "\n\n";
}</lang>