Conjugate a Latin verb: Difference between revisions
m (→{{header|REXX}}: added the computer programming language REXX.) |
(→{{header|Wren}}: Added an extended version.) |
||
Line 89: | Line 89: | ||
datis |
datis |
||
dant |
dant |
||
</pre> |
|||
<br> |
|||
The following extended version can deal with regular verbs of all four conjugations. To distinguish 2nd and 3rd conjugations, an over-bar is placed above the penultimate 'e' in a second conjugation infinitive but accents are otherwise ignored. |
|||
<lang ecmascript>var endings = [ |
|||
[ "o", "as", "at", "amus", "atis", "ant"], |
|||
["eo", "es", "et", "emus", "etis", "ent"], |
|||
[ "o", "is", "it", "imus", "itis", "unt"], |
|||
["io", "is", "it", "imus", "itis", "iunt"] |
|||
] |
|||
var infinEndings = ["are", "ēre", "ere", "ire"] |
|||
var conjugate = Fn.new { |infinitive| |
|||
var letters = infinitive.toList |
|||
var infinEnding = letters[-3..-1].join() |
|||
var conj = infinEndings.indexOf(infinEnding) |
|||
if (conj == -1) Fiber.abort("Infinitive ending -%(infinEnding) not recognized.") |
|||
var stem = letters[0..-4].join() |
|||
System.print("Present indicative tense, active voice, of '%(infinitive)':") |
|||
for (ending in endings[conj]) System.print(" " + stem + ending) |
|||
System.print() |
|||
} |
|||
for (infinitive in ["amare", "vidēre", "ducere", "audire"]) conjugate.call(infinitive)</lang> |
|||
{{out}} |
|||
<pre> |
|||
Present indicative tense, active voice, of 'amare': |
|||
amo |
|||
amas |
|||
amat |
|||
amamus |
|||
amatis |
|||
amant |
|||
Present indicative tense, active voice, of 'vidēre': |
|||
video |
|||
vides |
|||
videt |
|||
videmus |
|||
videtis |
|||
vident |
|||
Present indicative tense, active voice, of 'ducere': |
|||
duco |
|||
ducis |
|||
ducit |
|||
ducimus |
|||
ducitis |
|||
ducunt |
|||
Present indicative tense, active voice, of 'audire': |
|||
audio |
|||
audis |
|||
audit |
|||
audimus |
|||
auditis |
|||
audiunt |
|||
</pre> |
</pre> |
Revision as of 19:06, 16 September 2021
You are encouraged to solve this task according to the task description, using any language you may know.
Basic Data Operation
This is a basic data operation. It represents a fundamental action on a basic data type.
You may see other such operations in the Basic Data Operations category, or:
Integer Operations
Arithmetic |
Comparison
Boolean Operations
Bitwise |
Logical
String Operations
Concatenation |
Interpolation |
Comparison |
Matching
Memory Operations
Pointers & references |
Addresses
- Task
- Given the input: "amare", output the following, each on its own line:
amo amas amat amamus amatis amant
REXX
Checks were also made to ensure the Latin verb has only Latin letters (upper and/or lower case). <lang rexx>/*REXX pgm conjugates (to the terminal) a Latin verb when given a first conjugation verb*/ parse arg verbs if verbs= | verbs="," then verbs= 'amare dare' suffix= 'o as at amus atis ant' /*a list of six Latin verb suffixes. */
- = words(verbs) /*obtain the # of Latin verbs specified*/
do j=1 for #; say /*process each " " " */ $= word(verbs, j); $$= $; upper $$ /*obtain one of the " " " */ if \datatype($, 'M') then call ser "the following isn't a Latin verb: " $ L= length($) /*obtain the length of a Latin verb. */ if L<4 then call ser 'length of Latin verb is too short: ' $ if right($$, 3)\=='ARE' then call ser "the following isn't a Latin verb: " $ stem= left($, length($) - 3) /*obtain the stem of the Latin verb. */ say center(' present indicative tense of "'$'"', 50, "─")
do k=1 for words(suffix) /*display each of the verb suffixes. */ say left(,21) stem || word(suffix, k) /*display a Latin verb stem with auffix*/ end /*k*/ say end /*j*/
exit 0 /*stick a fork in it, we're all done. */ /*──────────────────────────────────────────────────────────────────────────────────────*/ ser: say; say '***error*** ' arg(1); say; exit 13</lang>
- output when using the default inputs:
─────── present indicative tense of "amare"─────── amo amas amat amamus amatis amant ─────── present indicative tense of "dare"──────── do das dat damus datis dant
Wren
<lang ecmascript>var conjugate = Fn.new { |infinitive|
if (!infinitive.endsWith("are")) Fiber.abort("Not a first conjugation verb.") var stem = infinitive[0..-4] System.print("Present indicative tense of '%(infinitive)':") for (ending in ["o", "as", "at", "amus", "atis", "ant"]) { System.print(" " + stem + ending) } System.print()
}
for (infinitive in ["amare", "dare"]) conjugate.call(infinitive)</lang>
- Output:
Present indicative tense of 'amare': amo amas amat amamus amatis amant Present indicative tense of 'dare': do das dat damus datis dant
The following extended version can deal with regular verbs of all four conjugations. To distinguish 2nd and 3rd conjugations, an over-bar is placed above the penultimate 'e' in a second conjugation infinitive but accents are otherwise ignored.
<lang ecmascript>var endings = [
[ "o", "as", "at", "amus", "atis", "ant"], ["eo", "es", "et", "emus", "etis", "ent"], [ "o", "is", "it", "imus", "itis", "unt"], ["io", "is", "it", "imus", "itis", "iunt"]
]
var infinEndings = ["are", "ēre", "ere", "ire"]
var conjugate = Fn.new { |infinitive|
var letters = infinitive.toList var infinEnding = letters[-3..-1].join() var conj = infinEndings.indexOf(infinEnding) if (conj == -1) Fiber.abort("Infinitive ending -%(infinEnding) not recognized.") var stem = letters[0..-4].join() System.print("Present indicative tense, active voice, of '%(infinitive)':") for (ending in endings[conj]) System.print(" " + stem + ending) System.print()
}
for (infinitive in ["amare", "vidēre", "ducere", "audire"]) conjugate.call(infinitive)</lang>
- Output:
Present indicative tense, active voice, of 'amare': amo amas amat amamus amatis amant Present indicative tense, active voice, of 'vidēre': video vides videt videmus videtis vident Present indicative tense, active voice, of 'ducere': duco ducis ducit ducimus ducitis ducunt Present indicative tense, active voice, of 'audire': audio audis audit audimus auditis audiunt