coprosize/
lib.rs

1// COPROSIZE VERSION 1.0.4 / MIT LICENSE © 2022–2023 PIOTR BAJDEK
2
3// LIBRARY
4
5// CLIPPY LINTS
6
7#![warn(clippy::nursery, clippy::pedantic)]
8#![allow(clippy::too_many_lines, clippy::unreadable_literal)]
9
10// CITATION
11
12pub fn citation() {
13    println!("Bajdek, P., 2023. coprosize (version 1.0.4). [computer software] https://github.com/piotrbajdek/coprosize");
14}
15
16// CARNIVOROUS AMNIOTA
17
18pub fn carnivorous_amniota(diameter: &str) {
19    let reset = "\x1b[0m";
20    let red = "\x1b[31m";
21    let violet = "\x1b[38;5;133m";
22    let yellow = "\x1b[38;5;220m";
23
24    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
25    let power = f64::powf(dcal, 2.4839053017);
26    let mass = 0.0030393430 * power;
27
28    print!("{violet}");
29    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
30    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
31    print!("{mass:.3}");
32    print!(" kg{}", reset.to_owned());
33    println!(" = 0.0030393430 * {}", diameter.to_owned() + "²·⁴⁸³⁹⁰⁵³⁰¹⁷" + violet);
34    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous synapsids and sauropsids" + reset);
35}
36
37// CARNIVOROUS AMPHIBIA
38
39pub fn carnivorous_amphibia(diameter: &str) {
40    let reset = "\x1b[0m";
41    let red = "\x1b[31m";
42    let violet = "\x1b[38;5;133m";
43    let yellow = "\x1b[38;5;220m";
44
45    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
46    let power1 = f64::powi(dcal, 3);
47    let power2 = f64::powi(dcal, 2);
48    let mass = 0.0147514015f64.mul_add(dcal, 0.0004064349f64.mul_add(power1, -0.0041616775 * power2)) - 0.0122201640;
49
50    print!("{violet}");
51    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
52    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
53    print!("{mass:.3}");
54    print!(" kg{}", reset.to_owned());
55    println!(" = 0.0004064349 * {}", diameter.to_owned() + "³ - 0.0041616775 * " + diameter + "² + 0.0147514015 * " + diameter + " - 0.0122201640" + violet);
56    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous batrachians" + reset);
57}
58
59// CARNIVOROUS ARCHOSAURIA
60
61pub fn carnivorous_archosauria(diameter: &str) {
62    let reset = "\x1b[0m";
63    let red = "\x1b[31m";
64    let violet = "\x1b[38;5;133m";
65    let yellow = "\x1b[38;5;220m";
66
67    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
68    let power = f64::powf(dcal, 2.3933363596);
69    let mass = 0.0056582325 * power;
70
71    print!("{violet}");
72    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
73    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
74    print!("{mass:.3}");
75    print!(" kg{}", reset.to_owned());
76    println!(" = 0.0056582325 * {}", diameter.to_owned() + "²·³⁹³³³⁶³⁵⁹⁶" + violet);
77    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous birds and crocodilians" + reset);
78}
79
80// CARNIVOROUS FELIDAE
81
82pub fn carnivorous_felidae(diameter: &str) {
83    let reset = "\x1b[0m";
84    let red = "\x1b[31m";
85    let violet = "\x1b[38;5;133m";
86    let yellow = "\x1b[38;5;220m";
87
88    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
89    let power = f64::powf(dcal, 3.7646426827);
90    let mass = 0.0001836115 * power;
91
92    print!("{violet}");
93    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
94    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
95    print!("{mass:.3}");
96    print!(" kg{}", reset.to_owned());
97    println!(" = 0.0001836115 * {}", diameter.to_owned() + "³·⁷⁶⁴⁶⁴²⁶⁸²⁷" + violet);
98    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous felids" + reset);
99}
100
101// CARNIVOROUS MAMMALIA
102
103pub fn carnivorous_mammalia(diameter: &str) {
104    let reset = "\x1b[0m";
105    let red = "\x1b[31m";
106    let violet = "\x1b[38;5;133m";
107    let yellow = "\x1b[38;5;220m";
108
109    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
110    let power = f64::powf(dcal, 2.6010376216);
111    let mass = 0.0029493394 * power;
112
113    print!("{violet}");
114    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
115    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
116    print!("{mass:.3}");
117    print!(" kg{}", reset.to_owned());
118    println!(" = 0.0029493394 * {}", diameter.to_owned() + "²·⁶⁰¹⁰³⁷⁶²¹⁶" + violet);
119    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous placentals and monotremes" + reset);
120}
121
122// CARNIVOROUS SQUAMATA
123
124pub fn carnivorous_squamata(diameter: &str) {
125    let reset = "\x1b[0m";
126    let red = "\x1b[31m";
127    let violet = "\x1b[38;5;133m";
128    let yellow = "\x1b[38;5;220m";
129
130    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
131    let power = f64::powf(dcal, 2.3414629141);
132    let mass = 0.0004822862 * power;
133
134    print!("{violet}");
135    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
136    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
137    print!("{mass:.3}");
138    print!(" kg{}", reset.to_owned());
139    println!(" = 0.0004822862 * {}", diameter.to_owned() + "²·³⁴¹⁴⁶²⁹¹⁴¹" + violet);
140    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous squamates" + reset);
141}
142
143// CARNIVOROUS TETRAPODA
144
145pub fn carnivorous_tetrapoda(diameter: &str) {
146    let reset = "\x1b[0m";
147    let red = "\x1b[31m";
148    let violet = "\x1b[38;5;133m";
149    let yellow = "\x1b[38;5;220m";
150
151    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
152    let power = f64::powf(dcal, 2.6157600696);
153    let mass = 0.0017879339 * power;
154
155    print!("{violet}");
156    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
157    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
158    print!("{mass:.3}");
159    print!(" kg{}", reset.to_owned());
160    println!(" = 0.0017879339 * {}", diameter.to_owned() + "²·⁶¹⁵⁷⁶⁰⁰⁶⁹⁶" + violet);
161    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous amphibians and amniotes" + reset);
162}
163
164// HERBIVOROUS AFROTHERIA
165
166pub fn herbivorous_afrotheria(diameter: &str) {
167    let reset = "\x1b[0m";
168    let red = "\x1b[31m";
169    let violet = "\x1b[38;5;133m";
170    let yellow = "\x1b[38;5;220m";
171
172    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
173    let power = f64::powf(dcal, 2.7889164772);
174    let mass = 0.0024866807 * power;
175
176    print!("{violet}");
177    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
178    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
179    print!("{mass:.3}");
180    print!(" kg{}", reset.to_owned());
181    println!(" = 0.0024866807 * {}", diameter.to_owned() + "²·⁷⁸⁸⁹¹⁶⁴⁷⁷²" + violet);
182    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous afrotherians" + reset);
183}
184
185// HERBIVOROUS AMNIOTA
186
187pub fn herbivorous_amniota(diameter: &str) {
188    let reset = "\x1b[0m";
189    let red = "\x1b[31m";
190    let violet = "\x1b[38;5;133m";
191    let yellow = "\x1b[38;5;220m";
192
193    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
194    let power = f64::powf(dcal, 2.2123196655);
195    let mass = 0.0733160890 * power;
196
197    print!("{violet}");
198    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
199    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
200    print!("{mass:.3}");
201    print!(" kg{}", reset.to_owned());
202    println!(" = 0.0733160890 * {}", diameter.to_owned() + "²·²¹²³¹⁹⁶⁶⁵⁵" + violet);
203    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous synapsids and sauropsids" + reset);
204}
205
206// HERBIVOROUS ARTIODACTYLA
207
208pub fn herbivorous_artiodactyla(diameter: &str) {
209    let reset = "\x1b[0m";
210    let red = "\x1b[31m";
211    let violet = "\x1b[38;5;133m";
212    let yellow = "\x1b[38;5;220m";
213
214    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
215    let power = f64::powf(dcal, 2.3109191553);
216    let mass = 0.4817803510 * power;
217
218    print!("{violet}");
219    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
220    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
221    print!("{mass:.3}");
222    print!(" kg{}", reset.to_owned());
223    println!(" = 0.4817803510 * {}", diameter.to_owned() + "²·³¹⁰⁹¹⁹¹⁵⁵³" + violet);
224    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous artiodactyls" + reset);
225}
226
227// HERBIVOROUS AVES
228
229pub fn herbivorous_aves(diameter: &str) {
230    let reset = "\x1b[0m";
231    let red = "\x1b[31m";
232    let violet = "\x1b[38;5;133m";
233    let yellow = "\x1b[38;5;220m";
234
235    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
236    let power = f64::powf(dcal, 2.8100206869);
237    let mass = 0.0078389131 * power;
238
239    print!("{violet}");
240    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
241    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
242    print!("{mass:.3}");
243    print!(" kg{}", reset.to_owned());
244    println!(" = 0.0078389131 * {}", diameter.to_owned() + "²·⁸¹⁰⁰²⁰⁶⁸⁶⁹" + violet);
245    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous birds" + reset);
246}
247
248// HERBIVOROUS BOVIDAE
249
250pub fn herbivorous_bovidae(diameter: &str) {
251    let reset = "\x1b[0m";
252    let red = "\x1b[31m";
253    let violet = "\x1b[38;5;133m";
254    let yellow = "\x1b[38;5;220m";
255
256    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
257    let power = f64::powf(dcal, 2.1885588774);
258    let mass = 0.6525042837 * power;
259
260    print!("{violet}");
261    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
262    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
263    print!("{mass:.3}");
264    print!(" kg{}", reset.to_owned());
265    println!(" = 0.6525042837 * {}", diameter.to_owned() + "²·¹⁸⁸⁵⁵⁸⁸⁷⁷⁴" + violet);
266    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous bovids" + reset);
267}
268
269// HERBIVOROUS CERVIDAE
270
271pub fn herbivorous_cervidae(diameter: &str) {
272    let reset = "\x1b[0m";
273    let red = "\x1b[31m";
274    let violet = "\x1b[38;5;133m";
275    let yellow = "\x1b[38;5;220m";
276
277    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
278    let power = f64::powf(dcal, 3.4595227094);
279    let mass = 0.0209279246 * power;
280
281    print!("{violet}");
282    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
283    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
284    print!("{mass:.3}");
285    print!(" kg{}", reset.to_owned());
286    println!(" = 0.0209279246 * {}", diameter.to_owned() + "³·⁴⁵⁹⁵²²⁷⁰⁹⁴" + violet);
287    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous cervids" + reset);
288}
289
290// HERBIVOROUS LAGOMORPHA
291
292pub fn herbivorous_lagomorpha(diameter: &str) {
293    let reset = "\x1b[0m";
294    let red = "\x1b[31m";
295    let violet = "\x1b[38;5;133m";
296    let yellow = "\x1b[38;5;220m";
297
298    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
299    let power = f64::powf(dcal, 2.3225288441);
300    let mass = 0.0083097861 * power;
301
302    print!("{violet}");
303    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
304    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
305    print!("{mass:.3}");
306    print!(" kg{}", reset.to_owned());
307    println!(" = 0.0083097861 * {}", diameter.to_owned() + "²·³²²⁵²⁸⁸⁴⁴¹" + violet);
308    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous lagomorphs" + reset);
309}
310
311// HERBIVOROUS MAMMALIA
312
313pub fn herbivorous_mammalia(diameter: &str) {
314    let reset = "\x1b[0m";
315    let red = "\x1b[31m";
316    let violet = "\x1b[38;5;133m";
317    let yellow = "\x1b[38;5;220m";
318
319    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
320    let power = f64::powf(dcal, 2.1815554929);
321    let mass = 0.0859205551 * power;
322
323    print!("{violet}");
324    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
325    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
326    print!("{mass:.3}");
327    print!(" kg{}", reset.to_owned());
328    println!(" = 0.0859205551 * {}", diameter.to_owned() + "²·¹⁸¹⁵⁵⁵⁴⁹²⁹" + violet);
329    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous placentals and marsupials" + reset);
330}
331
332// HERBIVOROUS MARSUPIALIA
333
334pub fn herbivorous_marsupialia(diameter: &str) {
335    let reset = "\x1b[0m";
336    let red = "\x1b[31m";
337    let violet = "\x1b[38;5;133m";
338    let yellow = "\x1b[38;5;220m";
339
340    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
341    let power = f64::powf(dcal, 2.2193247015);
342    let mass = 0.0224440978 * power;
343
344    print!("{violet}");
345    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
346    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
347    print!("{mass:.3}");
348    print!(" kg{}", reset.to_owned());
349    println!(" = 0.0224440978 * {}", diameter.to_owned() + "²·²¹⁹³²⁴⁷⁰¹⁵" + violet);
350    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous marsupials" + reset);
351}
352
353// HERBIVOROUS PLACENTALIA
354
355pub fn herbivorous_placentalia(diameter: &str) {
356    let reset = "\x1b[0m";
357    let red = "\x1b[31m";
358    let violet = "\x1b[38;5;133m";
359    let yellow = "\x1b[38;5;220m";
360
361    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
362    let power = f64::powf(dcal, 2.2424443852);
363    let mass = 0.0879148644 * power;
364
365    print!("{violet}");
366    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
367    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
368    print!("{mass:.3}");
369    print!(" kg{}", reset.to_owned());
370    println!(" = 0.0879148644 * {}", diameter.to_owned() + "²·²⁴²⁴⁴⁴³⁸⁵²" + violet);
371    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous placentals" + reset);
372}
373
374// HERBIVOROUS REPTILIA
375
376pub fn herbivorous_reptilia(diameter: &str) {
377    let reset = "\x1b[0m";
378    let red = "\x1b[31m";
379    let violet = "\x1b[38;5;133m";
380    let yellow = "\x1b[38;5;220m";
381
382    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
383    let power = f64::powf(dcal, 2.8272692414);
384    let mass = 0.0076217107 * power;
385
386    print!("{violet}");
387    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
388    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
389    print!("{mass:.3}");
390    print!(" kg{}", reset.to_owned());
391    println!(" = 0.0076217107 * {}", diameter.to_owned() + "²·⁸²⁷²⁶⁹²⁴¹⁴" + violet);
392    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous birds and turtles" + reset);
393}
394
395// HERBIVOROUS RODENTIA
396
397pub fn herbivorous_rodentia(diameter: &str) {
398    let reset = "\x1b[0m";
399    let red = "\x1b[31m";
400    let violet = "\x1b[38;5;133m";
401    let yellow = "\x1b[38;5;220m";
402
403    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
404    let power = f64::powf(dcal, 2.2974489103);
405    let mass = 0.0196247359 * power;
406
407    print!("{violet}");
408    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
409    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
410    print!("{mass:.3}");
411    print!(" kg{}", reset.to_owned());
412    println!(" = 0.0196247359 * {}", diameter.to_owned() + "²·²⁹⁷⁴⁴⁸⁹¹⁰³" + violet);
413    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous rodents" + reset);
414}
415
416// OMNIVOROUS AMNIOTA
417
418pub fn omnivorous_amniota(diameter: &str) {
419    let reset = "\x1b[0m";
420    let red = "\x1b[31m";
421    let violet = "\x1b[38;5;133m";
422    let yellow = "\x1b[38;5;220m";
423
424    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
425    let power = f64::powf(dcal, 2.2146716042);
426    let mass = 0.0128321404 * power;
427
428    print!("{violet}");
429    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
430    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
431    print!("{mass:.3}");
432    print!(" kg{}", reset.to_owned());
433    println!(" = 0.0128321404 * {}", diameter.to_owned() + "²·²¹⁴⁶⁷¹⁶⁰⁴²" + violet);
434    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant omnivorous synapsids and sauropsids" + reset);
435}
436
437// OMNIVOROUS ARTIODACTYLA
438
439pub fn omnivorous_artiodactyla(diameter: &str) {
440    let reset = "\x1b[0m";
441    let red = "\x1b[31m";
442    let violet = "\x1b[38;5;133m";
443    let yellow = "\x1b[38;5;220m";
444
445    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
446    let power = f64::powf(dcal, 1.0887395414);
447    let mass = 1.2390608405 * power;
448
449    print!("{violet}");
450    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
451    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
452    print!("{mass:.3}");
453    print!(" kg{}", reset.to_owned());
454    println!(" = 1.2390608405 * {}", diameter.to_owned() + "¹·⁰⁸⁸⁷³⁹⁵⁴¹⁴" + violet);
455    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant omnivorous artiodactyls" + reset);
456}
457
458// OMNIVOROUS AVES
459
460pub fn omnivorous_aves(diameter: &str) {
461    let reset = "\x1b[0m";
462    let red = "\x1b[31m";
463    let violet = "\x1b[38;5;133m";
464    let yellow = "\x1b[38;5;220m";
465
466    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
467    let power = f64::powf(dcal, 3.0157553176);
468    let mass = 0.0014342026 * power;
469
470    print!("{violet}");
471    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
472    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
473    print!("{mass:.3}");
474    print!(" kg{}", reset.to_owned());
475    println!(" = 0.0014342026 * {}", diameter.to_owned() + "³·⁰¹⁵⁷⁵⁵³¹⁷⁶" + violet);
476    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant omnivorous birds" + reset);
477}
478
479// OMNIVOROUS MAMMALIA
480
481pub fn omnivorous_mammalia(diameter: &str) {
482    let reset = "\x1b[0m";
483    let red = "\x1b[31m";
484    let violet = "\x1b[38;5;133m";
485    let yellow = "\x1b[38;5;220m";
486
487    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
488    let power = f64::powf(dcal, 2.0562969771);
489    let mass = 0.0223667325 * power;
490
491    print!("{violet}");
492    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
493    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
494    print!("{mass:.3}");
495    print!(" kg{}", reset.to_owned());
496    println!(" = 0.0223667325 * {}", diameter.to_owned() + "²·⁰⁵⁶²⁹⁶⁹⁷⁷¹" + violet);
497    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant omnivorous placentals and marsupials" + reset);
498}
499
500// OMNIVOROUS RODENTIA
501
502pub fn omnivorous_rodentia(diameter: &str) {
503    let reset = "\x1b[0m";
504    let red = "\x1b[31m";
505    let violet = "\x1b[38;5;133m";
506    let yellow = "\x1b[38;5;220m";
507
508    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
509    let power = f64::powf(dcal, 1.6780088221);
510    let mass = 0.0331020696 * power;
511
512    print!("{violet}");
513    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
514    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
515    print!("{mass:.3}");
516    print!(" kg{}", reset.to_owned());
517    println!(" = 0.0331020696 * {}", diameter.to_owned() + "¹·⁶⁷⁸⁰⁰⁸⁸²²¹" + violet);
518    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant omnivorous rodents" + reset);
519}
520
521// UNSPECIFIED CANIDAE
522
523pub fn unspecified_canidae(diameter: &str) {
524    let reset = "\x1b[0m";
525    let red = "\x1b[31m";
526    let violet = "\x1b[38;5;133m";
527    let yellow = "\x1b[38;5;220m";
528
529    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
530    let power = f64::powf(dcal, 2.0396557894);
531    let mass = 0.0205937247 * power;
532
533    print!("{violet}");
534    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
535    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
536    print!("{mass:.3}");
537    print!(" kg{}", reset.to_owned());
538    println!(" = 0.0205937247 * {}", diameter.to_owned() + "²·⁰³⁹⁶⁵⁵⁷⁸⁹⁴" + violet);
539    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous and omnivorous canids" + reset);
540}
541
542// UNSPECIFIED CARNIVORA
543
544pub fn unspecified_carnivora(diameter: &str) {
545    let reset = "\x1b[0m";
546    let red = "\x1b[31m";
547    let violet = "\x1b[38;5;133m";
548    let yellow = "\x1b[38;5;220m";
549
550    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
551    let power = f64::powf(dcal, 2.8590076963);
552    let mass = 0.0015578285 * power;
553
554    print!("{violet}");
555    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
556    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
557    print!("{mass:.3}");
558    print!(" kg{}", reset.to_owned());
559    println!(" = 0.0015578285 * {}", diameter.to_owned() + "²·⁸⁵⁹⁰⁰⁷⁶⁹⁶³" + violet);
560    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous and omnivorous carnivorans" + reset);
561}
562
563// UNSPECIFIED CRICETIDAE
564
565pub fn unspecified_cricetidae(diameter: &str) {
566    let reset = "\x1b[0m";
567    let red = "\x1b[31m";
568    let violet = "\x1b[38;5;133m";
569    let yellow = "\x1b[38;5;220m";
570
571    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
572    let power = f64::powf(1.8766049284, dcal);
573    let mass = 0.0180745732 * power;
574
575    let dmpw = superscript(diameter);
576
577    print!("{violet}");
578    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
579    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
580    print!("{mass:.3}");
581    print!(" kg{}", reset.to_owned());
582    println!(" = 0.0180745732 * 1.8766049284{}", dmpw + violet);
583    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous and omnivorous cricetids" + reset);
584}
585
586// UNSPECIFIED HERPESTIDAE
587
588pub fn unspecified_herpestidae(diameter: &str) {
589    let reset = "\x1b[0m";
590    let red = "\x1b[31m";
591    let violet = "\x1b[38;5;133m";
592    let yellow = "\x1b[38;5;220m";
593
594    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
595    let power = f64::powf(1.0767216732, dcal);
596    let mass = 0.3503054969 * power;
597
598    let dmpw = superscript(diameter);
599
600    print!("{violet}");
601    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
602    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
603    print!("{mass:.3}");
604    print!(" kg{}", reset.to_owned());
605    println!(" = 0.3503054969 * 1.0767216732{}", dmpw + violet);
606    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous and omnivorous herpestids" + reset);
607}
608
609// UNSPECIFIED MARSUPIALIA
610
611pub fn unspecified_marsupialia(diameter: &str) {
612    let reset = "\x1b[0m";
613    let red = "\x1b[31m";
614    let violet = "\x1b[38;5;133m";
615    let yellow = "\x1b[38;5;220m";
616
617    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
618    let power = f64::powf(dcal, 2.1922202080);
619    let mass = 0.0231733783 * power;
620
621    print!("{violet}");
622    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
623    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
624    print!("{mass:.3}");
625    print!(" kg{}", reset.to_owned());
626    println!(" = 0.0231733783 * {}", diameter.to_owned() + "²·¹⁹²²²⁰²⁰⁸⁰" + violet);
627    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous and omnivorous marsupials" + reset);
628}
629
630// UNSPECIFIED MUSTELIDAE
631
632pub fn unspecified_mustelidae(diameter: &str) {
633    let reset = "\x1b[0m";
634    let red = "\x1b[31m";
635    let violet = "\x1b[38;5;133m";
636    let yellow = "\x1b[38;5;220m";
637
638    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
639    let power = f64::powf(dcal, 2.5225036146);
640    let mass = 0.0038273352 * power;
641
642    print!("{violet}");
643    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
644    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
645    print!("{mass:.3}");
646    print!(" kg{}", reset.to_owned());
647    println!(" = 0.0038273352 * {}", diameter.to_owned() + "²·⁵²²⁵⁰³⁶¹⁴⁶" + violet);
648    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous and omnivorous mustelids" + reset);
649}
650
651// UNSPECIFIED SCIURIDAE
652
653pub fn unspecified_sciuridae(diameter: &str) {
654    let reset = "\x1b[0m";
655    let red = "\x1b[31m";
656    let violet = "\x1b[38;5;133m";
657    let yellow = "\x1b[38;5;220m";
658
659    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
660    let power = f64::powf(1.7069919381, dcal);
661    let mass = 0.0384600726 * power;
662
663    let dmpw = superscript(diameter);
664
665    print!("{violet}");
666    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
667    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
668    print!("{mass:.3}");
669    print!(" kg{}", reset.to_owned());
670    println!(" = 0.0384600726 * 1.7069919381{}", dmpw + violet);
671    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant herbivorous and omnivorous sciurids" + reset);
672}
673
674// UNSPECIFIED TESTUDINES
675
676pub fn unspecified_testudines(diameter: &str) {
677    let reset = "\x1b[0m";
678    let red = "\x1b[31m";
679    let violet = "\x1b[38;5;133m";
680    let yellow = "\x1b[38;5;220m";
681
682    let dcal: f64 = diameter.parse().expect(&(red.to_owned() + "Incorrect diameter value! Program only processes numbers!" + reset));
683    let power = f64::powf(dcal, 2.1345692041);
684    let mass = 0.0251303814 * power;
685
686    print!("{violet}");
687    println!("Coprolite diameter{}", reset.to_owned() + ": " + yellow + diameter + " mm" + violet);
688    print!("Producer's body mass{}", reset.to_owned() + ": " + yellow);
689    print!("{mass:.3}");
690    print!(" kg{}", reset.to_owned());
691    println!(" = 0.0251303814 * {}", diameter.to_owned() + "²·¹³⁴⁵⁶⁹²⁰⁴¹" + violet);
692    println!("Regression model based on{}", reset.to_owned() + ": " + yellow + "extant carnivorous, herbivorous and omnivorous turtles" + reset);
693}
694
695// SUPERSCRIPT
696
697fn superscript(diameter: &str) -> String {
698    let dmpw = &diameter.replace('.', "·").replace('0', "⁰").replace('1', "¹").replace('2', "²").replace('3', "³").replace('4', "⁴").replace('5', "⁵").replace('6', "⁶").replace('7', "⁷").replace('8', "⁸").replace('9', "⁹");
699    dmpw.to_string()
700}