Dating agency: Difference between revisions
Content added Content deleted
(→{{header|Wren}}: Tweak.) |
|||
Line 19: | Line 19: | ||
This task is intended as a bit of fun as well as a simple exercise in object modelling so hopefully it won't offend anyone! |
This task is intended as a bit of fun as well as a simple exercise in object modelling so hopefully it won't offend anyone! |
||
<br><br> |
<br><br> |
||
=={{header|Phix}}== |
|||
{{trans|Wren}} |
|||
Nowt fancy here, but at least I made some notes as I was translating things:<br> |
|||
Fields are private by default and need to be made explicitly public, whereas methods |
|||
are the other way round and need to be made explicitly private when that is wanted. |
|||
Phix classes don't really play nice with functions like apply and filter, hence the need |
|||
for several little shims (new_lady/lady_names/sailor_love). There is no equivalent to the |
|||
implicit "toString", and no plans for one, though you could easily write an explicit one. |
|||
The "Lady lady = ladies[i]; lady.name" programming style is generally preferred: trying to |
|||
use say "ladies[i].name" simply will not work, instead "class x = ladies[i]; x.name" is |
|||
the correct way to write generic class code in Phix, should you genuinely need that. |
|||
No attempt has even been started on transpilation of class based code to JavaScript. |
|||
Booleans in Phix are just integers, and need to be printed with %t rather than %s. |
|||
Of course all this is open source, yada-yada-ya. |
|||
<!--<lang Phix>(phixonline)--> |
|||
<span style="color: #008080;">without</span> <span style="color: #008080;">javascript_semantics</span> |
|||
<span style="color: #008080;">include</span> <span style="color: #000000;">structs</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">digital_root</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">assert</span><span style="color: #0000FF;">(</span><span style="color: #000000;">n</span><span style="color: #0000FF;">>=</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">while</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">></span><span style="color: #000000;">9</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #004080;">integer</span> <span style="color: #000000;">tot</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> |
|||
<span style="color: #008080;">while</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">></span><span style="color: #000000;">0</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #000000;">tot</span> <span style="color: #0000FF;">+=</span> <span style="color: #7060A8;">remainder</span><span style="color: #0000FF;">(</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">10</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">floor</span><span style="color: #0000FF;">(</span><span style="color: #000000;">n</span><span style="color: #0000FF;">/</span><span style="color: #000000;">10</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span> |
|||
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">tot</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">n</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">class</span> <span style="color: #000000;">Lady</span> |
|||
<span style="color: #008080;">public</span> <span style="color: #004080;">string</span> <span style="color: #000000;">name</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">lovable</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #7060A8;">odd</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">sum</span><span style="color: #0000FF;">(</span><span style="color: #000000;">name</span><span style="color: #0000FF;">))</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">love</span><span style="color: #0000FF;">(</span><span style="color: #008080;">class</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">get_struct_name</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)!=</span><span style="color: #008000;">"Sailor"</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #004600;">null</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> <span style="color: #000080;font-style:italic;">// indeterminate</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">digital_root</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">sum</span><span style="color: #0000FF;">(</span><span style="color: #000000;">name</span><span style="color: #0000FF;">))</span> <span style="color: #0000FF;">></span> <span style="color: #000000;">4</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">class</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">new_lady</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">name</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Lady</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">name</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">lady_names</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">ladies</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ladies</span><span style="color: #0000FF;">))</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #000000;">Lady</span> <span style="color: #000000;">lady</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ladies</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #000000;">res</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">lady</span><span style="color: #0000FF;">.</span><span style="color: #000000;">name</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #008000;">", "</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">class</span> <span style="color: #000000;">Sailor</span> |
|||
<span style="color: #008080;">public</span> <span style="color: #004080;">string</span> <span style="color: #000000;">name</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">love</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Lady</span> <span style="color: #000000;">l</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">get_struct_name</span><span style="color: #0000FF;">(</span><span style="color: #000000;">l</span><span style="color: #0000FF;">)!=</span><span style="color: #008000;">"Lady"</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #004600;">null</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> <span style="color: #000080;font-style:italic;">// indeterminate</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">l</span><span style="color: #0000FF;">.</span><span style="color: #000000;">lovable</span><span style="color: #0000FF;">()</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">class</span> |
|||
<span style="color: #008080;">constant</span> <span style="color: #000000;">names</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"Ada"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Crystal"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Elena"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Euphoria"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Janet"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Julia"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Lily"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Miranda"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Perl"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Ruby"</span><span style="color: #0000FF;">},</span> |
|||
<span style="color: #000000;">ladies</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">apply</span><span style="color: #0000FF;">(</span><span style="color: #000000;">names</span><span style="color: #0000FF;">,</span><span style="color: #000000;">new_lady</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #000000;">Sailor</span> <span style="color: #000000;">sailor</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"Pascal"</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">eligibles</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span> |
|||
<span style="color: #008080;">function</span> <span style="color: #000000;">sailor_love</span><span style="color: #0000FF;">(</span><span style="color: #000000;">Lady</span> <span style="color: #000000;">lady</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">return</span> <span style="color: #000000;">sailor</span><span style="color: #0000FF;">.</span><span style="color: #000000;">love</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lady</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%-10s %-12s %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"lady"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"loves sailor"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"lovable"</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%-10s %-12s %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"----"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"------------"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"-------"</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ladies</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span> |
|||
<span style="color: #000000;">Lady</span> <span style="color: #000000;">lady</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">ladies</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> |
|||
<span style="color: #004080;">bool</span> <span style="color: #000000;">lovesSailor</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">lady</span><span style="color: #0000FF;">.</span><span style="color: #000000;">love</span><span style="color: #0000FF;">(</span><span style="color: #000000;">sailor</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">lovesSailor</span> <span style="color: #008080;">then</span> <span style="color: #000000;">eligibles</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">eligibles</span><span style="color: #0000FF;">,</span><span style="color: #000000;">lady</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%-10s %-12t %t\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">lady</span><span style="color: #0000FF;">.</span><span style="color: #000000;">name</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">lovesSailor</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">lady</span><span style="color: #0000FF;">.</span><span style="color: #000000;">lovable</span><span style="color: #0000FF;">()})</span> |
|||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nBased on this analysis:"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nThe dating agency should suggest the following ladies:\n"</span><span style="color: #0000FF;">)</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">lady_names</span><span style="color: #0000FF;">(</span><span style="color: #000000;">eligibles</span><span style="color: #0000FF;">))</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nand %s should offer to date these ones:\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">sailor</span><span style="color: #0000FF;">.</span><span style="color: #000000;">name</span><span style="color: #0000FF;">})</span> |
|||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">lady_names</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">filter</span><span style="color: #0000FF;">(</span><span style="color: #000000;">eligibles</span><span style="color: #0000FF;">,</span><span style="color: #000000;">sailor_love</span><span style="color: #0000FF;">)))</span> |
|||
<!--</lang>--> |
|||
{{out}} |
|||
<pre> |
|||
lady loves sailor lovable |
|||
---- ------------ ------- |
|||
Ada false false |
|||
Crystal true false |
|||
Elena true true |
|||
Euphoria false true |
|||
Janet false false |
|||
Julia true true |
|||
Lily true false |
|||
Miranda true false |
|||
Perl true true |
|||
Ruby false false |
|||
Based on this analysis: |
|||
The dating agency should suggest the following ladies: |
|||
Crystal, Elena, Julia, Lily, Miranda, Perl |
|||
and Pascal should offer to date these ones: |
|||
Elena, Julia, Perl |
|||
</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |
||
{{libheader|Wren-math}} |
{{libheader|Wren-math}} |