Old lady swallowed a fly: Difference between revisions

From Rosetta Code
Content added Content deleted
m (→‎{{header|C}}: ok done with it)
Line 6: Line 6:


char *dict[] = {
char *dict[] = {
"\x6""fly,\x7why\x3\xf,/That wr\xc""and w\xc"
"_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!/",
"_acat_b_n,_h`", " swallow", "There was an old lady who_eed ",
"\x9\x3", "/She\x8""ed the ", "\xe"
"fly - Perhaps she'll die!//\x6", " to catch the ",
", to_e a ", "_a_n_b_m,_", "/I don't know ", "_adog_bcat,_d",
"iggled ", "he_eed ", "spider", "bird",
"\x2""cat\x4""bird,\xb", "There was an old lady who\x8"
"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"
};
};


void writeout(char *s)
int print(char *c, int s)
{
{
do {
do {
if (*s < 32) writeout(dict[(int)*s]);
if (s) s = print(dict[*c - 95], 0);
else putchar(*s == '/' ? '\n' : *s);
else if (*c == '_') s = 1;
else putchar(*c == '/' ? '\n' : *c);
} while (*++s);
} while (*++c);
return s;
}
}


int main()
int main()
{
{
writeout(dict[0]);
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.

Old lady swallowed a fly is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

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

This example is incorrect. Please fix the code and remove this message.

Details: The program does not produce the correct lyrics. (See talk page)

<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>