Az eredeti angol szöveg először 1780 körül jelent meg nyomtatásban. S bár számos változata létezik, ezek többnyire arról szólnak, hogy a versmondó különböző ajándékokat kap az igaz szerelmétől. Minden nap mást és eggyel többet.
A vershez a magyar fordítást Tarbay Ede készítette. Ez a szerkezetében híven őrzi az angol mondóka sajátosságát, tartalmát tekintve azonban más. Ebben ugyanis nem ajándékozásról van szó, hanem különböző állatok és emberek fogalmazzák meg a karácsonyi jókívánságaikat. Naponta egyre többen.
Az alábbiakban arra vállalkozom, hogy egy algoritmus segítségével legenerálom a versike magyar változatát. Ennek ismétlődő részeit csak egyszer írom le, majd ezekre ott és annyiszor hivatkozom, ahol és amennyi alkalommal a versben szükség van rá. Hiszen a programozás során általában fontos szempont, hogy lehetőség szerint elkerüljük a redundanciát és hatékonyan gazdálkodjunk a meglévő adatainkkal.
Az alábbiakban R nyelven (v4.2.2) írt kódot használok a feladat végrehajtásához. A magyarázó szövegek közé ékelt fekete kódblokkok tartalmát az RStudio-ban egymás alá illesztve elvileg bárki által reprodukálható az itt bemutatott műveletsor. A kódblokkok # kezdetű sorai pusztán magyarázó funkcióval bírnak, ezekre a program futtatásakor nincs szükség.
Az algoritmusban először elmentem egy-egy vektorba a karácsony napjait és a köszöntést mondó illetőket.
Ezt követően a for ciklussal végig megyek az 1 és 12 közötti egész számokon, amelyek sorban bekerülnek az i
változóba. Ezek a számok a napokat reprezentálják és indexként szolgálnak a vektorok elemeire való hivatkozásnál. Ha például i=3, akkor a napok[i]
tartalma a “harmadik” szöveg lesz. Mert ez a napok nevű vektor harmadik eleme. Ezt használjuk fel tehát arra, hogy a szövegbe behelyettesítsük a megfelelő napokat. A példánknál maradva a paste("Karácsony", napok[i], "napja van,")
utasítással a “Karácsony harmadik napja van,” szöveg állítható elő.
A vers második sora minden esetben azonos, ezzel különösebb dolgunk nincsen. Ezután a köszöntésre felsorakozottak következnek. A koszontok nevű vektor elemein ugyancsak a for ciklussal megyek végig. Az első napon csak az 1. elemét, aztán rendre a 2–1., 3–1., 4–1. stb. elemeit választom ki. Tehát minden nappal eggyel többet, visszafelé haladva. Ezeket egyenként, a napokhoz hasonló behelyettesítő módszerrel, új sorokba kinyomtatom a képernyőre.
A for cikluson kívül az algoritmusban három függvény fordul elő. A paste()
és a paste0()
függvények használatával különböző karakterláncokat tudunk összefűzni. A kettő között az a különbség, hogy az első egy szóközt tesz ezek közé, a második viszont szorosan egymás mellé helyezi őket. Az előállított szövegrészeket a cat()
függvénnyel íratom ki a képernyőre. Ez abban különbözik – az itt nem használt – print()
függvénytől, hogy a sortöréseket jelző speciális karaktereket (\n
) nem kiírja, hanem az adott ponton ténylegesen megtöri a sorokat.
Lássuk tehát az algoritmust és a végeredményt!
|
|
## Karácsony első napja van,
## köszönt és minden jót kíván
## egy csíz a csupasz körtefán.
##
## Karácsony második napja van,
## köszönt és minden jót kíván
## két gerle és
## egy csíz a csupasz körtefán.
##
## Karácsony harmadik napja van,
## köszönt és minden jót kíván
## három veréb-zenész,
## két gerle és
## egy csíz a csupasz körtefán.
##
## Karácsony negyedik napja van,
## köszönt és minden jót kíván
## négy nyafka macska,
## három veréb-zenész,
## két gerle és
## egy csíz a csupasz körtefán.
##
## Karácsony ötödik napja van,
## köszönt és minden jót kíván
## öt szélkakaska,
## négy nyafka macska,
## három veréb-zenész,
## két gerle és
## egy csíz a csupasz körtefán.
##
## Karácsony hatodik napja van,
## köszönt és minden jót kíván
## hat tyúkanyó,
## öt szélkakaska,
## négy nyafka macska,
## három veréb-zenész,
## két gerle és
## egy csíz a csupasz körtefán.
##
## Karácsony hetedik napja van,
## köszönt és minden jót kíván
## hét hattyú, tolla tiszta hó,
## hat tyúkanyó,
## öt szélkakaska,
## négy nyafka macska,
## három veréb-zenész,
## két gerle és
## egy csíz a csupasz körtefán.
##
## Karácsony nyolcadik napja van,
## köszönt és minden jót kíván
## nyolc nyúl a vadász oldalán,
## hét hattyú, tolla tiszta hó,
## hat tyúkanyó,
## öt szélkakaska,
## négy nyafka macska,
## három veréb-zenész,
## két gerle és
## egy csíz a csupasz körtefán.
##
## Karácsony kilencedik napja van,
## köszönt és minden jót kíván
## kilenc kötényes kisleány,
## nyolc nyúl a vadász oldalán,
## hét hattyú, tolla tiszta hó,
## hat tyúkanyó,
## öt szélkakaska,
## négy nyafka macska,
## három veréb-zenész,
## két gerle és
## egy csíz a csupasz körtefán.
##
## Karácsony tizedik napja van,
## köszönt és minden jót kíván
## tíz tekergő kéményseprő,
## kilenc kötényes kisleány,
## nyolc nyúl a vadász oldalán,
## hét hattyú, tolla tiszta hó,
## hat tyúkanyó,
## öt szélkakaska,
## négy nyafka macska,
## három veréb-zenész,
## két gerle és
## egy csíz a csupasz körtefán.
##
## Karácsony tizenegyedik napja van,
## köszönt és minden jót kíván
## tizenegy táncos, tarka úrnő,
## tíz tekergő kéményseprő,
## kilenc kötényes kisleány,
## nyolc nyúl a vadász oldalán,
## hét hattyú, tolla tiszta hó,
## hat tyúkanyó,
## öt szélkakaska,
## négy nyafka macska,
## három veréb-zenész,
## két gerle és
## egy csíz a csupasz körtefán.
##
## Karácsony tizenkettedik napja van,
## köszönt és minden jót kíván
## tizenkét ugra-bugra úr,
## tizenegy táncos, tarka úrnő,
## tíz tekergő kéményseprő,
## kilenc kötényes kisleány,
## nyolc nyúl a vadász oldalán,
## hét hattyú, tolla tiszta hó,
## hat tyúkanyó,
## öt szélkakaska,
## négy nyafka macska,
## három veréb-zenész,
## két gerle és
## egy csíz a csupasz körtefán.
Ezzel a versikével kívánok A programozó történész blog minden olvasójának kellemes karácsonyi ünnepeket! 🎄🎁😊
Az előző évek karácsonyi posztjai megtekinthetők itt: