Middle three digits: Difference between revisions
Content added Content deleted
TechAscent (talk | contribs) |
|||
Line 1,966: | Line 1,966: | ||
=={{header|Common Lisp}}== |
=={{header|Common Lisp}}== |
||
===Solution #1=== |
|||
<syntaxhighlight lang="lisp"> |
<syntaxhighlight lang="lisp"> |
||
(defun mid3 (n) |
(defun mid3 (n) |
||
Line 2,007: | Line 2,008: | ||
-2002: Need odd number of digits, not 4. |
-2002: Need odd number of digits, not 4. |
||
0: Zero is 1 digit</pre> |
0: Zero is 1 digit</pre> |
||
===Solution #2=== |
|||
<syntaxhighlight lang="lisp"> |
|||
(defun mid3 (i) |
|||
(let ((ch-vec (coerce (format nil "~A" (abs i)) 'vector))) |
|||
(when (evenp (length ch-vec)) |
|||
(return-from mid3 |
|||
(format nil "Error: The number representation must have an odd ~ |
|||
number of digits."))) |
|||
(when (and (< i 100) |
|||
(> i -100)) |
|||
(return-from mid3 |
|||
(format nil "Error: Must be >= 100 or <= -100."))) |
|||
(let ((half (/ (1- (length ch-vec)) 2))) |
|||
(return-from mid3 (format nil "~A~A~A" |
|||
(elt ch-vec (1- half)) |
|||
(elt ch-vec half) |
|||
(elt ch-vec (1+ half)))) |
|||
))) |
|||
</syntaxhighlight> |
|||
Test code: |
|||
<syntaxhighlight lang="lisp"> |
|||
(defun test-mid3 () |
|||
(let ((test-lst (list 123 |
|||
12345 |
|||
1234567 |
|||
987654321 |
|||
10001 |
|||
-10001 |
|||
-123 |
|||
-100 |
|||
100 |
|||
-12345 |
|||
1 |
|||
2 |
|||
-1 |
|||
-10 |
|||
2002 |
|||
-2002 |
|||
0 |
|||
))) |
|||
(labels |
|||
((run-tests (lst) |
|||
(cond ((null lst) |
|||
nil) |
|||
(t |
|||
(format t "~A ~15T ~A~%" (first lst) (mid3 (first lst))) |
|||
(run-tests (rest lst)))))) |
|||
(run-tests test-lst))) |
|||
(values) |
|||
) |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
123 123 |
|||
12345 234 |
|||
1234567 345 |
|||
987654321 654 |
|||
10001 000 |
|||
-10001 000 |
|||
-123 123 |
|||
-100 100 |
|||
100 100 |
|||
-12345 234 |
|||
1 Error: Must be >= 100 or <= -100. |
|||
2 Error: Must be >= 100 or <= -100. |
|||
-1 Error: Must be >= 100 or <= -100. |
|||
-10 Error: The number representation must have an odd number of digits. |
|||
2002 Error: The number representation must have an odd number of digits. |
|||
-2002 Error: The number representation must have an odd number of digits. |
|||
0 Error: Must be >= 100 or <= -100. |
|||
</pre> |
|||
=={{header|D}}== |
=={{header|D}}== |