A sheep–goat hybrid is the hybrid offspring of a sheep and a goat. Although sheep and goats seem similar and can be mated, they belong to different genera in the subfamily Caprinae1 of the family Bovidae2. Sheep belong to the genus Ovis3 and have 54 chromosomes, while goats belong to the genus Capra4 and have 60 chromosomes.
Despite widespread shared pasturing of goats and sheep, hybrids are very rare, indicating the genetic distance between the two species. Supposedly, most sheep–goat hybrids die as embryos. Hybrid male mammals are often sterile, demonstrating a phenomenon known as Haldane's rule5. The Haldane phenomenon may apply even when the parent species have the same number of chromosomes, as in most cat-species hybrids. Hybrid female fertility tends to decrease with increasing divergence in chromosome similarity between parent species. Presumably, this is due to mismatch problems during meiosis and the resulting production of eggs with unbalanced genetic complements.
A lamb of a female sheep (ewe) and a male goat is called a geep. A lamb of a female goat (goatee) and a male sheep (ram) is called a shoat. Both hybrids were thought to be sterile, but on December 29, 2012 two lambs were born in the Netherlands from fertilization by a geep. Analogous, the crossing between a male lion (Panthera leo) and a female tiger (Panthera tigris) is called a liger. In this case, the liger has parents in the same genus but of different species.
Write two functions that can be used to invent names for the offspring that results from crossing two distinct species:
A function split that takes a word $$w$$ (str) containing only letters (both uppercase and lowercase letters are allowed). The function must split $$w$$ in a prefix (str) and a suffix (str), where the prefix is formed by the longest sequence of consonants at the start of the word. The consonants are the letters that differ from a, e, i, o and u. The function must return a tuple containing the prefix and the suffix of the word, and should stick to the original use of uppercase and lowercase letters in the word.
A function hybridize that takes two words $$w_1$$ and $$w_2$$ containing only letters (both uppercase and lowercase letters are allowed). The function must return a tuple containing two words (str): i) the concatenation of the prefix of $$w_1$$ and the suffix of $$w_2$$ and ii) the concatenation of the prefix of $$w_2$$ and the suffix of $$w_1$$. Prefixes and suffixes of $$w_1$$ and $$w_2$$ must be determined using the function split.
Below, in the editor where you can submit a solution for this assignment, we have already constructed a skeleton for the source code. Before you get started, we recommend to take a look at the video on test-driven development6 where you will learn to work with doctests. This will make you understand the two last statements in the skeleton and the role played by the docstrings that we have already defined in the skeleton for the requested functions.
>>> split('sheep')
('sh', 'eep')
>>> split('goat')
('g', 'oat')
>>> hybridize('sheep', 'goat')
('shoat', 'geep')
>>> hybridize('jaguar', 'leopard')
('jeopard', 'laguar')
>>> hybridize('zebra', 'horse')
('zorse', 'hebra')
Mine OM, Kedikilwe K, Ndebele RT, Nsoso SJ (2000). Sheep-goat hybrid born under natural conditions. Small ruminant research: the journal of the International Goat Association 37(1-2) 141-145. 7
Stewart-Scott IA, Pearce PD, Dewes HF, Thompson JW (1990). A case of a sheep-goat hybrid in New Zealand. New Zealand veterinary journal 38(1), 7-9. 8
Tucker EM, Denis B, Kilgour L (1989). Blood genetic marker studies of a sheep-goat hybrid and its back-cross offspring. Animal genetics 20(2), 179-186. 9