Sync
This commit is contained in:
parent
6f050a029e
commit
776bba907c
3887 changed files with 59894 additions and 7280 deletions
32
Task/Middle-three-digits/C/middle-three-digits-1.c
Normal file
32
Task/Middle-three-digits/C/middle-three-digits-1.c
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
// we return a static buffer; caller wants it, caller copies it
|
||||
char * mid3(int n)
|
||||
{
|
||||
static char buf[32];
|
||||
int l;
|
||||
sprintf(buf, "%d", n > 0 ? n : -n);
|
||||
l = strlen(buf);
|
||||
if (l < 3 || !(l & 1)) return 0;
|
||||
l = l / 2 - 1;
|
||||
buf[l + 3] = 0;
|
||||
return buf + l;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int x[] = {123, 12345, 1234567, 987654321, 10001, -10001,
|
||||
-123, -100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0,
|
||||
1234567890};
|
||||
|
||||
int i;
|
||||
char *m;
|
||||
for (i = 0; i < sizeof(x)/sizeof(x[0]); i++) {
|
||||
if (!(m = mid3(x[i])))
|
||||
m = "error";
|
||||
printf("%d: %s\n", x[i], m);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
47
Task/Middle-three-digits/C/middle-three-digits-2.c
Normal file
47
Task/Middle-three-digits/C/middle-three-digits-2.c
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
char input[50];
|
||||
int midPoint;
|
||||
|
||||
void midThree(char arg[])
|
||||
{
|
||||
char output[4];
|
||||
for(int i=0; i<3; i++)
|
||||
{
|
||||
output[i] = input[(midPoint-1) + i];
|
||||
}
|
||||
output[3] = '\0';
|
||||
printf("The middle three digits of %s are %s.\n",arg,output);
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
printf("Usage: %s <integer>\n",argv[0]);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(input,"%d",abs(atoi(argv[1])));
|
||||
if(strlen(input) < 3)
|
||||
{
|
||||
printf("Error, %d is too short.\n",atoi(argv[1]));
|
||||
return 1;
|
||||
}
|
||||
else if(strlen(input) % 2 == 0)
|
||||
{
|
||||
printf("Error, %d is even.\n",atoi(argv[1]));
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
midPoint = ((strlen(input) + 1) / 2) - 1;
|
||||
midThree(argv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
91
Task/Middle-three-digits/COBOL/middle-three-digits-1.cobol
Normal file
91
Task/Middle-three-digits/COBOL/middle-three-digits-1.cobol
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
identification division.
|
||||
program-id. middle3.
|
||||
environment division.
|
||||
data division.
|
||||
working-storage section.
|
||||
01 num pic 9(9).
|
||||
88 num-too-small values are -99 thru 99.
|
||||
01 num-disp pic ---------9.
|
||||
|
||||
01 div pic 9(9).
|
||||
01 mod pic 9(9).
|
||||
01 mod-disp pic 9(3).
|
||||
|
||||
01 digit-counter pic 999.
|
||||
01 digit-div pic 9(9).
|
||||
88 no-more-digits value 0.
|
||||
01 digit-mod pic 9(9).
|
||||
88 is-even value 0.
|
||||
|
||||
01 multiplier pic 9(9).
|
||||
|
||||
01 value-items.
|
||||
05 filler pic s9(9) value 123.
|
||||
05 filler pic s9(9) value 12345.
|
||||
05 filler pic s9(9) value 1234567.
|
||||
05 filler pic s9(9) value 987654321.
|
||||
05 filler pic s9(9) value 10001.
|
||||
05 filler pic s9(9) value -10001.
|
||||
05 filler pic s9(9) value -123.
|
||||
05 filler pic s9(9) value -100.
|
||||
05 filler pic s9(9) value 100.
|
||||
05 filler pic s9(9) value -12345.
|
||||
05 filler pic s9(9) value 1.
|
||||
05 filler pic s9(9) value 2.
|
||||
05 filler pic s9(9) value -1.
|
||||
05 filler pic s9(9) value -10.
|
||||
05 filler pic s9(9) value 2002.
|
||||
05 filler pic s9(9) value -2002.
|
||||
05 filler pic s9(9) value 0.
|
||||
|
||||
01 value-array redefines value-items.
|
||||
05 items pic s9(9) occurs 17 times indexed by item.
|
||||
|
||||
01 result pic x(20).
|
||||
|
||||
procedure division.
|
||||
10-main.
|
||||
perform with test after varying item from 1 by 1 until items(item) = 0
|
||||
move items(item) to num
|
||||
move items(item) to num-disp
|
||||
perform 20-check
|
||||
display num-disp " --> " result
|
||||
end-perform.
|
||||
stop run.
|
||||
|
||||
20-check.
|
||||
if num-too-small
|
||||
move "Number too small" to result
|
||||
exit paragraph
|
||||
end-if.
|
||||
|
||||
perform 30-count-digits.
|
||||
divide digit-counter by 2 giving digit-div remainder digit-mod.
|
||||
if is-even
|
||||
move "Even number of digits" to result
|
||||
exit paragraph
|
||||
end-if.
|
||||
|
||||
*> if digit-counter is 5, mul by 10
|
||||
*> if digit-counter is 7, mul by 100
|
||||
*> if digit-counter is 9, mul by 1000
|
||||
|
||||
if digit-counter > 3
|
||||
compute multiplier rounded = 10 ** (((digit-counter - 5) / 2) + 1)
|
||||
divide num by multiplier giving num
|
||||
divide num by 1000 giving div remainder mod
|
||||
move mod to mod-disp
|
||||
else
|
||||
move num to mod-disp
|
||||
end-if.
|
||||
move mod-disp to result.
|
||||
exit paragraph.
|
||||
|
||||
30-count-digits.
|
||||
move zeroes to digit-counter.
|
||||
move num to digit-div.
|
||||
perform with test before until no-more-digits
|
||||
divide digit-div by 10 giving digit-div remainder digit-mod
|
||||
add 1 to digit-counter
|
||||
end-perform.
|
||||
exit paragraph.
|
||||
71
Task/Middle-three-digits/COBOL/middle-three-digits-2.cobol
Normal file
71
Task/Middle-three-digits/COBOL/middle-three-digits-2.cobol
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
identification division.
|
||||
program-id. middle3.
|
||||
environment division.
|
||||
data division.
|
||||
working-storage section.
|
||||
01 value-items.
|
||||
05 filler pic s9(9) value 123.
|
||||
05 filler pic s9(9) value 12345.
|
||||
05 filler pic s9(9) value 1234567.
|
||||
05 filler pic s9(9) value 987654321.
|
||||
05 filler pic s9(9) value 10001.
|
||||
05 filler pic s9(9) value -10001.
|
||||
05 filler pic s9(9) value -123.
|
||||
05 filler pic s9(9) value -100.
|
||||
05 filler pic s9(9) value 100.
|
||||
05 filler pic s9(9) value -12345.
|
||||
05 filler pic s9(9) value 1.
|
||||
05 filler pic s9(9) value 2.
|
||||
05 filler pic s9(9) value -1.
|
||||
05 filler pic s9(9) value -10.
|
||||
05 filler pic s9(9) value 2002.
|
||||
05 filler pic s9(9) value -2002.
|
||||
05 filler pic s9(9) value 0.
|
||||
|
||||
01 value-array redefines value-items.
|
||||
05 items pic s9(9) occurs 17 times indexed by item.
|
||||
|
||||
01 num pic 9(9).
|
||||
01 num-disp pic ---------9.
|
||||
01 num2 pic 9(9).
|
||||
|
||||
01 power pic 9.
|
||||
01 power10 pic 9(16).
|
||||
|
||||
01 three-digits pic 999.
|
||||
|
||||
01 result pic X(20).
|
||||
|
||||
01 flag pic 9.
|
||||
88 done value 1.
|
||||
|
||||
procedure division.
|
||||
01-setup.
|
||||
perform 02-outer with test after varying item from 1 by 1 until items(item) = 0.
|
||||
stop run.
|
||||
|
||||
02-outer.
|
||||
move items(item) to num.
|
||||
move items(item) to num-disp.
|
||||
if num less than 100
|
||||
move "too small" to result
|
||||
else
|
||||
perform 03-inner with test after varying power from 9 by -1 until power = 1 or done
|
||||
end-if.
|
||||
display num-disp " --> " result.
|
||||
exit paragraph.
|
||||
|
||||
03-inner.
|
||||
move 0 to flag.
|
||||
compute power10 = 10 ** power.
|
||||
if num >= power10
|
||||
move 1 to flag
|
||||
if function mod(power,2) = 1
|
||||
move "even number digits" to result
|
||||
else
|
||||
move num to num2
|
||||
compute num2 = num2 / ( 10 ** (( power / 2 ) - 1 ))
|
||||
move function mod(num2,1000) to three-digits
|
||||
move three-digits to result
|
||||
end-if
|
||||
end-if.
|
||||
15
Task/Middle-three-digits/Clojure/middle-three-digits.clj
Normal file
15
Task/Middle-three-digits/Clojure/middle-three-digits.clj
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
(defn middle3 [v]
|
||||
(let [no (Math/abs v)
|
||||
digits (str no)
|
||||
len (count digits)]
|
||||
(cond
|
||||
(< len 3) :too_short
|
||||
(even? len) :no_middle_in_even_no_of_digits
|
||||
:else (let [mid (/ len 2)
|
||||
start (- mid 2)]
|
||||
(apply str
|
||||
(take 3
|
||||
(nthnext digits start)))))))
|
||||
|
||||
(def passes '(123 12345 1234567 987654321 10001 -10001 -123 -100 100 -12345))
|
||||
(def fails '(1 2 -1 -10 2002 -2002 0))
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
(defun mid3 (n)
|
||||
(let ((a (abs n))
|
||||
(hmd)) ; how many digits
|
||||
(labels ((give (fmt &optional x y) (return-from mid3 (format nil fmt x y)))
|
||||
(need (x) (give "Need ~a digits, not ~d." x hmd))
|
||||
(nbr (n) (give "~3,'0d" n)))
|
||||
(when (zerop n) (give "Zero is 1 digit"))
|
||||
(setq hmd (truncate (1+ (log a 10))))
|
||||
(cond ((< hmd 3) (need "3+"))
|
||||
((= hmd 3) (nbr a))
|
||||
((evenp hmd) (need "odd number of"))
|
||||
(t (nbr (mod (truncate a (expt 10 (/ (- hmd 3) 2))) 1000)))))))
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
(loop as n in '(123 12345 1234567 987654321
|
||||
10001 -10001 -123 -100 100 -12345
|
||||
1 2 -1 -10 2002 -2002 0)
|
||||
do (format t "~d:~12t~a~%" n (mid3 n)))
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
% Implemented by Arjun Sunel
|
||||
%
|
||||
-module(middle_three_digits).
|
||||
-export([main/0]).
|
||||
|
||||
|
|
@ -21,38 +21,19 @@ main() ->
|
|||
digits(-2002),
|
||||
digits(0).
|
||||
|
||||
digits(N) when N < 0 ->
|
||||
digits(-N);
|
||||
digits(N) when (N div 100) =:= 0 ->
|
||||
io:format("too small\n");
|
||||
digits(N) ->
|
||||
K=length(integer_to_list(N)),
|
||||
if (K rem 2) =:= 0 ->
|
||||
io:format("even number of digits\n");
|
||||
true ->
|
||||
loop((K-3) div 2 , N)
|
||||
end.
|
||||
|
||||
if N < 0 ->
|
||||
digits(-N);
|
||||
|
||||
(N div 100) =:= 0 ->
|
||||
io:format("too small\n");
|
||||
|
||||
true ->
|
||||
K=length(integer_to_list(N)),
|
||||
|
||||
if (K rem 2) =:= 0 ->
|
||||
io:format("even number of digits\n");
|
||||
true ->
|
||||
loop((K-3) div 2 , N)
|
||||
end
|
||||
|
||||
end.
|
||||
|
||||
loop(0,N) ->
|
||||
if
|
||||
N rem 1000 =:= 0 ->
|
||||
io:format("000\n");
|
||||
|
||||
N rem 1000 < 10 ->
|
||||
io:format("00~w~n",[N rem 1000]);
|
||||
|
||||
N rem 1000 < 100 ->
|
||||
io:format("0~w~n",[N rem 1000]);
|
||||
true ->
|
||||
io:format("~w~n", [N rem 1000])
|
||||
end;
|
||||
|
||||
loop(0, N) ->
|
||||
io:format("~3..0B~n",[N rem 1000]);
|
||||
loop(X,N) when X>0 ->
|
||||
loop(X-1, N div 10).
|
||||
|
|
|
|||
45
Task/Middle-three-digits/FBSL/middle-three-digits.fbsl
Normal file
45
Task/Middle-three-digits/FBSL/middle-three-digits.fbsl
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
#APPTYPE CONSOLE
|
||||
|
||||
DIM numbers AS STRING = "123,12345,1234567,987654321,10001,-10001,-123,-100,100,-12345,1,2,-1,-10,2002,-2002,0"
|
||||
DIM dict[] = Split(numbers, ",")
|
||||
DIM num AS INTEGER
|
||||
DIM num2 AS INTEGER
|
||||
DIM powered AS INTEGER
|
||||
|
||||
FOR DIM i = 0 TO COUNT(dict) - 1
|
||||
num2 = dict[i]
|
||||
num = ABS(num2)
|
||||
IF num < 100 THEN
|
||||
display(num2, "is too small")
|
||||
ELSE
|
||||
FOR DIM j = 9 DOWNTO 1
|
||||
powered = 10 ^ j
|
||||
IF num >= powered THEN
|
||||
IF j MOD 2 = 1 THEN
|
||||
display(num2, "has even number of digits")
|
||||
ELSE
|
||||
display(num2, middle3(num, j))
|
||||
END IF
|
||||
EXIT FOR
|
||||
END IF
|
||||
NEXT
|
||||
END IF
|
||||
NEXT
|
||||
|
||||
PAUSE
|
||||
|
||||
FUNCTION display(num, msg)
|
||||
PRINT LPAD(num, 11, " "), " --> ", msg
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION middle3(n, pwr)
|
||||
DIM power AS INTEGER = (pwr \ 2) - 1
|
||||
DIM m AS INTEGER = n
|
||||
m = m \ (10 ^ power)
|
||||
m = m MOD 1000
|
||||
IF m = 0 THEN
|
||||
RETURN "000"
|
||||
ELSE
|
||||
RETURN m
|
||||
END IF
|
||||
END FUNCTION
|
||||
73
Task/Middle-three-digits/Fortran/middle-three-digits.f
Normal file
73
Task/Middle-three-digits/Fortran/middle-three-digits.f
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
!-*- mode: compilation; default-directory: "/tmp/" -*-
|
||||
!Compilation started at Sat Jun 1 14:48:41
|
||||
!
|
||||
!a=./f && make $a && OMP_NUM_THREADS=2 $a < unixdict.txt # some of the compilation options and redirection from unixdict.txt are vestigial.
|
||||
!gfortran -std=f2008 -Wall -fopenmp -ffree-form -fall-intrinsics -fimplicit-none f.f08 -o f
|
||||
! 123 123
|
||||
! 12345 234
|
||||
! 1234567 345
|
||||
! 987654321 654
|
||||
! 10001 000
|
||||
! -10001 000
|
||||
! -123 123
|
||||
! -100 100
|
||||
! 100 100
|
||||
! -12345 234
|
||||
! 1 Too short
|
||||
! 2 Too short
|
||||
! -1 Too short
|
||||
! -10 Too short
|
||||
! 2002 Digit count too even
|
||||
! -2002 Digit count too even
|
||||
! 0 Too short
|
||||
!
|
||||
!Compilation finished at Sat Jun 1 14:48:41
|
||||
|
||||
|
||||
program MiddleMuddle
|
||||
integer, dimension(17) :: itest, idigits
|
||||
integer :: i, n
|
||||
data itest/123,12345,1234567,987654321,10001,-10001,-123,-100,100,-12345,1,2,-1,-10,2002,-2002,0/
|
||||
do i = 1, size(itest)
|
||||
call antibase(10, abs(itest(i)), idigits, n)
|
||||
write(6,'(i20,2x,a20)') itest(i), classifym3(idigits, n)
|
||||
if (0 .eq. itest(i)) exit
|
||||
end do
|
||||
|
||||
contains
|
||||
|
||||
logical function even(n)
|
||||
integer, intent(in) :: n
|
||||
even = 0 .eq. iand(n,1)
|
||||
end function even
|
||||
|
||||
function classifym3(iarray, n) result(s)
|
||||
integer, dimension(:), intent(in) :: iarray
|
||||
integer, intent(in) :: n
|
||||
character(len=20) :: s
|
||||
integer :: i,m
|
||||
if (n < 3) then
|
||||
s = 'Too short'
|
||||
else if (even(n)) then
|
||||
s = 'Digit count too even'
|
||||
else
|
||||
m = (n+1)/2
|
||||
write(s,'(3i1)')(iarray(i), i=m+1,m-1,-1)
|
||||
end if
|
||||
end function classifym3
|
||||
|
||||
subroutine antibase(base, m, digits, n) ! digits ordered by increasing significance
|
||||
integer, intent(in) :: base, m
|
||||
integer, intent(out) :: n ! the number of digits
|
||||
integer, dimension(:), intent(out) :: digits
|
||||
integer :: em
|
||||
em = m
|
||||
do n=1, size(digits)
|
||||
digits(n) = mod(em, base)
|
||||
em = em / base
|
||||
if (0 .eq. em) return
|
||||
end do
|
||||
stop 'antibase ran out of space to store result'
|
||||
end subroutine antibase
|
||||
|
||||
end program MiddleMuddle
|
||||
26
Task/Middle-three-digits/Go/middle-three-digits-1.go
Normal file
26
Task/Middle-three-digits/Go/middle-three-digits-1.go
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
package m3
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrorLT3 = errors.New("N of at least three digits required.")
|
||||
ErrorEven = errors.New("N with odd number of digits required.")
|
||||
)
|
||||
|
||||
func Digits(i int) (string, error) {
|
||||
if i < 0 {
|
||||
i = -i
|
||||
}
|
||||
if i < 100 {
|
||||
return "", ErrorLT3
|
||||
}
|
||||
s := strconv.Itoa(i)
|
||||
if len(s)%2 == 0 {
|
||||
return "", ErrorEven
|
||||
}
|
||||
m := len(s) / 2
|
||||
return s[m-1 : m+2], nil
|
||||
}
|
||||
59
Task/Middle-three-digits/Go/middle-three-digits-2.go
Normal file
59
Task/Middle-three-digits/Go/middle-three-digits-2.go
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
package m3_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"m3"
|
||||
)
|
||||
|
||||
func TestPassing(t *testing.T) {
|
||||
type s struct {
|
||||
i int
|
||||
m string
|
||||
}
|
||||
tcs := []s{
|
||||
{123, "123"},
|
||||
{12345, "234"},
|
||||
{1234567, "345"},
|
||||
{987654321, "654"},
|
||||
{10001, "000"},
|
||||
{-10001, "000"},
|
||||
}
|
||||
for _, tc := range tcs {
|
||||
m, err := m3.Digits(tc.i)
|
||||
if err != nil {
|
||||
t.Fatalf("d(%d) returned %q.", tc.i, err)
|
||||
}
|
||||
if m != tc.m {
|
||||
t.Fatalf("d(%d) expected %q, got %q.", tc.i, tc.m, m)
|
||||
}
|
||||
t.Logf("d(%d) = %q.", tc.i, m)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFailing(t *testing.T) {
|
||||
type s struct {
|
||||
i int
|
||||
err error
|
||||
}
|
||||
tcs := []s{
|
||||
{1, m3.ErrorLT3},
|
||||
{2, m3.ErrorLT3},
|
||||
{-1, m3.ErrorLT3},
|
||||
{-10, m3.ErrorLT3},
|
||||
{2002, m3.ErrorEven},
|
||||
{-2002, m3.ErrorEven},
|
||||
{0, m3.ErrorLT3},
|
||||
}
|
||||
for _, tc := range tcs {
|
||||
m, err := m3.Digits(tc.i)
|
||||
if err == nil {
|
||||
t.Fatal("d(%d) expected error %q, got non-error %q.",
|
||||
tc.i, tc.err, m)
|
||||
}
|
||||
if err != tc.err {
|
||||
t.Fatal("d(d) expected error %q, got %q", tc.i, tc.err, err)
|
||||
}
|
||||
t.Logf("d(%d) returns %q", tc.i, err)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
def middleThree(Number number) {
|
||||
def text = Math.abs(number) as String
|
||||
assert text.size() >= 3 : "'$number' must be more than 3 numeric digits"
|
||||
assert text.size() % 2 == 1 : "'$number' must have an odd number of digits"
|
||||
|
||||
int start = text.size() / 2 - 1
|
||||
text[start..(start+2)]
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
[123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0].each { number ->
|
||||
def text = (number as String).padLeft(10)
|
||||
try {
|
||||
println "$text: ${middleThree(number)}"
|
||||
} catch(AssertionError error) {
|
||||
println "$text cannot be converted: $error.message"
|
||||
}
|
||||
}
|
||||
12
Task/Middle-three-digits/Icon/middle-three-digits.icon
Normal file
12
Task/Middle-three-digits/Icon/middle-three-digits.icon
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
procedure main(a)
|
||||
every n := !a do write(right(n,15)," -> ",midM(n))
|
||||
end
|
||||
|
||||
procedure midM(n,m)
|
||||
/m := 3
|
||||
n := abs(n)
|
||||
return n ? if (*n >= m) then
|
||||
if (((*n-m) % 2) = 0) then (move((*n - m)/2),move(m))
|
||||
else "wrong number of digits"
|
||||
else "too short"
|
||||
end
|
||||
|
|
@ -1,16 +1,14 @@
|
|||
function middle(s)
|
||||
s = string(abs(s))
|
||||
len = length(s)
|
||||
assert(len >= 3 && len % 2 == 1, "Number of digits must be odd and >= 3")
|
||||
mid = ifloor(len/2)
|
||||
return s[mid:mid+2]
|
||||
function middle(i)
|
||||
let s = string(abs(i)) , l = length(s) , mid = int((l+1)/2)
|
||||
l < 3 ?
|
||||
"error: not enough digits" :
|
||||
iseven(l) ?
|
||||
"error: number of digits is even" :
|
||||
s[mid-1:mid+1]
|
||||
end
|
||||
end
|
||||
passing = [123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345]
|
||||
failing = [1, 2, -1, -10, 2002, -2002, 0]
|
||||
for i in [passing,failing]
|
||||
try
|
||||
println("Number: $i ", "Answer: ",middle(i))
|
||||
catch e
|
||||
println("Number: $i ", "Answer: ",e)
|
||||
end
|
||||
|
||||
for n = [123, 12345, 1234567, 987654321, 10001, -10001, -123,
|
||||
-100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0]
|
||||
println (@sprintf("%10d : ", n), middle(n))
|
||||
end
|
||||
|
|
|
|||
15
Task/Middle-three-digits/MATLAB/middle-three-digits-1.m
Normal file
15
Task/Middle-three-digits/MATLAB/middle-three-digits-1.m
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
function s=middle_three_digits(a)
|
||||
% http://rosettacode.org/wiki/Middle_three_digits
|
||||
|
||||
s=num2str(abs(a));
|
||||
|
||||
if ~mod(length(s),2)
|
||||
s='*** error: number of digits must be odd ***';
|
||||
return;
|
||||
end;
|
||||
if length(s)<3,
|
||||
s='*** error: number of digits must not be smaller than 3 ***';
|
||||
return;
|
||||
end;
|
||||
|
||||
s = s((length(s)+1)/2+[-1:1]);
|
||||
2
Task/Middle-three-digits/MATLAB/middle-three-digits-2.m
Normal file
2
Task/Middle-three-digits/MATLAB/middle-three-digits-2.m
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
x=[123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0];
|
||||
for k=1:length(x); fprintf(1,'%9i:%s\n',x(k),middle_three_digits(x(k)));end;
|
||||
|
|
@ -1 +1 @@
|
|||
digits(n)=eval(Vec(Str(n)))
|
||||
apply(n-> Strprintf("%03d", n), %)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
digits(n)=Vec(apply(n->n-48,Vectorsmall(Str(n))))
|
||||
digits(n)=eval(Vec(Str(n)))
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
digits(n)=Vec(apply(n->n-48,Vectorsmall(Str(n))))
|
||||
|
|
@ -9,8 +9,8 @@ n ='123 12345 1234567 987654321 10001 -10001 -123 -100 100 -12345',
|
|||
exit /*stick a fork in it, we're done.*/
|
||||
/*──────────────────────────────────MIDDLE3 subroutine──────────────────*/
|
||||
middle3: procedure; arg x; numeric digits 1e5; er=' ***error!*** '
|
||||
if datatype(x,'N') then x=abs(x)/1; L=length(x)
|
||||
if datatype(x,'N') then x=abs(x); L=length(x)
|
||||
if \datatype(x,'W') then return er "arg isn't an integer"
|
||||
if L<3 then return er "arg is less then three digits"
|
||||
if L<3 then return er "arg is less than three digits"
|
||||
if L//2==0 then return er "arg isn't an odd number of digits"
|
||||
return substr(x, (L-3)%2+1, 3)
|
||||
|
|
|
|||
|
|
@ -1,30 +1,32 @@
|
|||
// rust 0.8
|
||||
|
||||
fn middle_three_digits(x: int) -> Result<~str, ~str> {
|
||||
let s = int::abs(x).to_str();
|
||||
let s = x.abs().to_str();
|
||||
let len = s.len();
|
||||
if len < 3 {
|
||||
Err(~"Too short")
|
||||
} else if len % 2 == 0 {
|
||||
Err(~"Even number of digits")
|
||||
} else {
|
||||
Ok(s.slice(len/2 - 1, len/2 + 2))
|
||||
Ok(s.slice(len/2 - 1, len/2 + 2).to_owned())
|
||||
}
|
||||
}
|
||||
|
||||
fn print_result(x: int) {
|
||||
io::print(fmt!("middle_three_digits(%?) returned: ", x));
|
||||
print!("middle_three_digits({}) returned: ", x);
|
||||
match middle_three_digits(x) {
|
||||
Ok(move s) => io::println(fmt!("Success, %s", s)),
|
||||
Err(move s) => io::println(fmt!("Failure, %s", s))
|
||||
Ok(s) => println!("Success, {}", s),
|
||||
Err(s) => println!("Failure, {}", s)
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let passing = [123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345];
|
||||
let failing = [1, 2, -1, -10, 2002, -2002, 0];
|
||||
for passing.each |i| {
|
||||
for i in passing.iter() {
|
||||
print_result(*i);
|
||||
}
|
||||
for failing.each |i| {
|
||||
for i in failing.iter() {
|
||||
print_result(*i);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue