From: Evan Hanson Date: 2010-03-02T02:39:13+09:00 Subject: Re: [QUIZ] Music Theory (#229) --001636ed667c19353c0480c0baad Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable So, this is my first post to the list, my solution to 229. I'm still gettin= g the hang of Ruby, so any tips you might have are more than welcome. My script probably doesn't have the most extensive chord dictionary, but I designed i= t so that it'd be easy to add new definitions. Anyway, it was fun. Ruby is great. Actually, one of the toughest parts abou= t this problem was deciding what degrees of the chord are implied by a given symbol. I'm a jazz musician, and we just play whatever the hell we want, so= I wasn't sure on the specifics of a few of them. Again, suggestions are welcome. -- Evan On Fri, Feb 26, 2010 at 11:36 AM, Daniel Moore wrote: > -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-= =3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- > > The three rules of Ruby Quiz: > > 1. =A0Please do not post any solutions or spoiler discussion for this > quiz until 48 hours have elapsed from the time this message was > sent. > > 2. =A0Support Ruby Quiz by submitting ideas and responses > as often as you can. > > 3. =A0Enjoy! > > Suggestion: =A0A [QUIZ] in the subject of emails about the problem > helps everyone on Ruby Talk follow the discussion. =A0Please reply to > the original quiz message, if you can. > > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > > RSS Feed: http://rubyquiz.strd6.com/quizzes.rss > > Suggestions?: http://rubyquiz.strd6.com/suggestions > > -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-= =3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- > > ## Music Theory (#229) > > Do-Re-Me Rubyists, > > I have a musician friend, let's call him Steve. Steve wants to be a > legendary guitarist. He practices every day, learning new chords and > techniques. But he has a problem. > > Steve bought all the books, but it's too much trouble to flip through > them when he's practicing. He tried all sorts of ways to solve this > problem: adhesive notes that adhered to everything, big music stands > that kept getting knocked over, websites with loud and annoying video > advertisements... everything. He even tried enlisting the help of his > trusty cat, Pajamas, to turn the pages, yet nothing worked. > > He's trying to learn Amaj7 so he can be cool like his hero, Herman Li, > but Pajamas clawed out that part of his book. Steve is programmer, so > he knows that when solving a problem it should be solved once and > forever. Steve wants to write a program where someone can type in > Amaj7 and see the notes that comprise the chord. Not only Amaj7 but > Dsus2 as well. In fact, any chord at all. > > Steve, because he is a proper programmer, is lazy. He came to me and > asked if I could send this out on the "weekly" Ruby Quiz. Anything to > help a friend! > > Your task is to create a program that will accept strings like: Amaj7, > Dsus2, Aminor, C, C9, G#dim, Ebadd9, etc. The output will be the notes > that make up the chord, for example > > Cmajor =3D> C E G > Ebdim7 =3D> Eb Gb A C > > Have fun! And thanks for helping Steve out! > > -- > -Daniel > http://rubyquiz.strd6.com > > --001636ed667c19353c0480c0baad Content-Type: application/x-gzip; name="evanhanson.tar.gz" Content-Disposition: attachment; filename="evanhanson.tar.gz" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g69jyb5m0 H4sIAET1i0sAA+1abVPbSLbOZ/+KBt8tw44jMJBQyQ6ZFbYA14JhbZNsikttSXYbK9GLVy8QJpP7 2+9zTrestrHJpmpnb90t9YSxrD593vv00+1O4yDP/DiyEu/F79V20Q5fvaLP1uGrXfMTbW937+D1 i1Zr/2Dv8HBv9+DgxW7rYP/VwQux+7tpZLQ8zdxEiBfy3o2mbpTG0Wq67/X/P231jZ08TXY8P9pJ cu+xVqvX6qKPJ/HX3P9V1Pf23oiX4iJP/ZEYTmWcPKIf/yZ+IAW3tyItcwg9o0S6mRxzz8DNxN6h OJGe2Ntt7TbF7pu3B3tv918L+0K0B0OQu3k2jRPFyIGPxRk7GT0ydP1Ai7iPplEa/fmOXlmjOCQ5 8ewx8e+mGWkgpTjvtp3ewIEBbMNw6qcC/1yR+uEMyqajxJ9lIptCpyyBkABqpmIE6WORPoZeHKQY F/ifpdjseOGmgFqbduh+OtwUfpTFGCr9BI9j/94f524gohgcLNHNxMgljT0pkjwS0gclEWYycUeZ fy+DR2LmsjZKjQfQCFjrJnd5KKPMIqfaYiIfhPziksLpW7bjv4S1YzhYbDqeUona0TvheOJUiGNP dFYRnxzW3yhSJj4RkCHagkbZ3qoB7fDQe7U5H6BITz0IYG3apregPAyW7lhMkjgUgZzAs7HgoFji L1LOlLf9SITwGgU7FY9x3sAwuD1O/eiOfOiS9DXWnqZ5euCOx2QF9DmFRh1h/1OUNtEy126EAKUI djwRbuj5d7mfPTYRjJk/k6LxW4PiR9HLUyQuTEjlzE2QHhRyjE/iOONgK0P9LBVhPPYnvkwQ/hOE VsdsjRGduUtZtc4653d+sz0jWh3BdGTAhPwmHtyIPQwrF/NWcHYi23V2bUGlEarVnUSO0YyF4QiB tCwLszWU9B2mhRzBf8AbUoyl52auF8jtpviEoihmgTtiB9BkQwjxpIWO/RGp7CaPitKTQfzQFJM4 wCfFlEgncRK6SIPzGFokYDFzM8yHKEXqB4GI72WS+GNMy9ANAsyWOEJ8tqR1Z4lNleAe6ghClmdi 83Bz26K6U4Pbc8zlC3dWqwnoPEGogomVTt1kltbIbzeNdqPZaNfxvw790YODvxP6oy+n9EcPNv3R w3HjFkMlMtTkOUF9MFl2PM3S8QyWp55maXua5bG3wFLgsy6+fv36xHmmMO5T0r4SvRGkVHKUsji/ m1KcR/AX4lhTadIIGzpd/vCwhRDHCfIAYib+JJsilE8bypRL1TxLfFeLJDZ+1FjPxqCKk8b3qC4M lVYTuJ8azxKE3yM4MERM4jxZY6tptfySySiF6+c2vzKZLPL3VJ/qQiIsddeXulP/i9n92mC82EWh lfeo91NVPcfSDfRiwLOo4PDG5CBHcTQ2dHtTCucgLBPUlwnYhWU/FcnGGuatlmGZduycr+pc5xSw JYKVQ1v7JdslZ9Gw/cbKrrEfrkzKUvaTKMe89BrTCWziNVOkYCOWxMaHq/xn0GuvcxwXtD1s/Pgw N78rjXQ/mcOW9MICV/qfHfzMNC+bMXxvMezLs4pW0MZKAQXFT6Yrn1U2fL3aiascHq5x+DNeO1xd Y9ZRq/lsUn8nKqEa8sM5EJc58H21aJ1bRf2E8MJw0LOEoaJc4/Un1LkxK1VGmNWWyb4V6xgm17dv 32o1XidHgZumogdIRGsmVvbk7+5oJNMUwONt5Ib8GnAR1TZL8lFGyJcBVOx9kqNM4SiCCXdAx5EA EXCDJfquTzANYMzWuNhJkjhhXj6vhooLSQC4jxoZ8Ocovov8X+XY0guqH/mZ7wZ4tUXE27WaKg13 ksBTJPkruFHnzW6zdSs2/kfs3NgvT2+/tr7taOckpMqiGk3R6Eb34DwutdhoML0GD6q+Z7TCSpYF U0AMFomPdVtgcK7k/5lNOCqV0G/zEDR4D4SjUY0F6Cy/qAGFjBGgFrkRPgeGijI3UMWOubUs62Xr 1kqBabd2rJ1tS7qjqRjH4rfoN20crCdqcXSE5aRBfo04tTd0vwxSchD313U/a2MQyB/wkc6gIpO0 t+rihOpGGVagTEadOpClRoVfXh6JVuk+K829ja2d+g6ENrZph1V4VX3+RMYxOWEsU+6APftUMOHj dhySNWp9nuTRRoHTSvsLdX5apY73jDr11er0JbYB99JQSO029ez4LB8XdhnNhbngp8wDezSX568k etr5dpqKgPG2h2kCHU7qmGRypnboi9lTZ4NRBKCLPyaCYkIlSr2NLTBWRSGRWZ5EbAfp8hcoGMkH 7ke6joJ8LH/RGavTjXQ6wjSr76hsKlxT5vmN9qqaCZxgJhEvMXOaeUIZrhRCO5N0S5eKhdp7c5nR VmXx39MyeIvhKDmoCPBWniI+r1tF2jyNUk2BzZWREnaz5IWv+xwzHa92Ezs+ChZzoLME1sMsbGrk Fh6aYh6Mz/CQGQH10uLDiRt8wjpdRLbY1G1kIjiIl6J1a5pNe5S5cpDHdVTBZe4f8q6u2ONRmcMG BROE9zNwL9Uj7EAfkVB4NcKEoeWHDMRecM653GPRekMKHymtVKYUJu7NDTT2ZQbaXR6o3lpFyTAH EUx5btAiOS+Aa9XaX6vWynH8cq1S64csEisotlang1U68Qq+dsirlUMKbLM8jF+usoJh3Fohr9cJ WTmMX64UolDLWjGHz2TKypH69TO58tywZ+AQH46tAD5q478Mefjk5p+CPOZRD51UNejIRczchE6r aGp9Hwgxi20DCJVHWvMqnc4CP0MtYVqGDyUquql7t7/sFMWcKW92b3UpZ15HjAapCM27y0L+PFAw 7dNYwdB0ftKmijW+pqWSubdVSONV1xrLQGZ8plfwgCfcPOBzMw6vOvgoTGF+lgxn2eMv2hwtgY4x DFXoYDebJnwKM1epKYI4/kzl0MUufhrTMTOvMZgzSYoiTRwLXKgPuqggFs8eHSXmUeYHSJPQzYDT aE2hYzhaETDx9TJXV7o90KIQxvdSHaxiOLNLeEUXW4oTG7OtlzZaBGDMDQdJRUTbpywf5zN++TCl A/0NYbpjHGu0h5cYsEAvtNq0NKvddrnwEzn8jI+SE39LA38kN8TL1nz5/h6GXEoNBKzkqhmUGtyg 77ZEu2GBdgs/WLM8nap0tVJosBU29Tee5VaBc4yXBdydq8tOIKBHT5RyNbM/j/x/GCWFoARFKxVw G2ynE2UVkXkxYM31fC1GCzEPm4qYWsKpW1n3laC8MGwqpt5WtM0bNiPy/LkGdSqYw79CJO4jLefz ipBqnYrnJzppl67WJ2LnaVUKDZ4KRqUA6H5ZnLaPi8kTG3Wvkc4ZLKA2Ohc+EpubhoMMXagX6DwC 1NnEf9+KIRZJmM1DZBRvIKhVW1kWvaKkqw0YgE/htZRRzvOgnfkUaE/NaBqAvEOBIsOhhILrwCWZ q+GlsW9WQtod5+TUPn5a5efoj4NjlOSlHlUR6ElXBHfGuxSmZsgNpO7tiF9K5C3eGlBdFU8qCXhV IMti8HZRWjdAwjb++DZxC3vY18bGVRZTGVtfPxkFfDbOsCRF5ZJoxcaUtJK0b92H9j7C34Lm9LlX M0vBjbw1VyzYceOLP7A9gYzusumtMa/nidueytHnVP1AJIvVmeKpw2VuGUjMPEKqMOrjiDJh5xVT E6/YxZiTc2FHU+YbFHg6WZniucnKCqyYrJrFD09WlVc6ZUuV/qXzFb5hveriA+cVlmTjN1X6UQQx sfun760U00G8E7s1zkTzldqwz3KkdOMUkRK0ORT0U2RQIC3El8EVn+0QfuEhnrzzI51EPJzhHs8u 4g8Esm3NrcWUHuVLOU8/6UmTgbTghdS9k0u5Zpi38BsyGajV4fGbDvXOAaYGiAQIpgAGP3Pvu/+O 6MfA7JF+6KRf+hpknvziZ9sUCrXsK3iI8ABvpbSYhrONbbFxpEesNl+NoXjBrk08lP5QaPNf5A36 +7++JfGf2/Stid9VBt3yeU33elbe/9ndo7tB6v7P69arQ7r/s9863K3u//w7Wnt+i2ZrtK0v6RjX cMTPyzdv3tVs4BMektLExiacdpy1vhz7VKw9vs7AVShP+YgsjfNkpE7CPZ9vDdDdAOyd+GdPVAL6 RK2vqW3ViK+DNPk0ciaT0M9osZkl8b0/ptsZfH9n4SiKDnF8fQiVUEHP3nIN+aNYVIrvf2htRvEY lHR7IZFzpOV6tLWaXyzS1QkrG7YtTXXBIgA/YmPK1MeupUIQClDphzKx1igCgYYvCkVg5DhXly5+ B1304qw5jeMRF2O3CNcOIqF+PcVGVGKPHKSl1zlUxNg0ozCupy88MQxw5xcXxM9xcudG/q8s4h10 Twz5CqGAkrbAhJ+Ya5ykEP9o3sVB/aczGUoUqBMS/lF+yoofeMfQFklYbKroGkw8yR4oF3RqAbvI EeUWhvqUcQllVaTyK03ZltrwrDsQg8uT4Qe77wg8X/Uv33c7TkccfxTDM0e0L68+9runZ0Nxdnne cfoDYfc6eNsb9rvH18NLvNi0Bxi5SR01u/dROH+76juDgbjsi+7F1XkXzMC9b/eGXWfQFN1e+/y6 0+2dNgUYiN7lUJx3L7pDkA0vmyxUD6uVw8Tlibhw+u0zfLWPu+fd4UdW5KQ77JGsEwizxZXdH3bb 1+d2X1xd968uBw5gkFPrdAftc7t74XQsSIdE4bx3ekMxOLPPz8XPyya+E8cOVLKPzx3Ft/cRLPpO e0jKl09t+AnanDfF4Mppd+nB+ZsD1e3+xyZZDy8NnL9egwidomNf2KfOoLb1HQcgAu3rvnNBGsLq wfXxYNgdXg8dcXp52WG3Dpz+e6xhgz/Vzi8H7JvrgdOEhKHNgsECjhn8iZ6PrwdddlG3N3T6/eur Yfeytw1TP8AJ0NHG0A7H7rJHplIALvsfiSn5gF3dFB/OHLzvk/s49ja5YIAcaA9NMshDSgwNG0XP OT3vnjq9tkO9l8TlQ3fgbCMy3QERdJXYDzZkXrPJlALQSj12B7UiP5scN9E9EXbnfZfU1sSI9KCr s4Jd1j7T7rYqGFW1qlWtalWrWtWqVrWqVa1qVata1apWtapVrWpVq1rVqla1qlWtalWrWtWqVrWq /We1/wWK1Ex/AFAAAA== --001636ed667c19353c0480c0baad--