1#![warn(clippy::nursery, clippy::pedantic)]
8#![allow(clippy::too_many_lines, clippy::unreadable_literal)]
9
10pub fn citation() {
13 println!("Bajdek, P., 2023. coprosize (version 1.0.4). [computer software] https://github.com/piotrbajdek/coprosize");
14}
15
16pub 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
37pub 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
59pub 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
80pub 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
101pub 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
122pub 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
143pub 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
164pub 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
185pub 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
206pub 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
227pub 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
248pub 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
269pub 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
290pub 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
311pub 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
332pub 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
353pub 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
374pub 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
395pub 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
416pub 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
437pub 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
458pub 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
479pub 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
500pub 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
521pub 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
542pub 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
563pub 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
586pub 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
609pub 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
630pub 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
651pub 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
674pub 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
695fn 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}