Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
43
Task/Middle-three-digits/Ada/middle-three-digits.adb
Normal file
43
Task/Middle-three-digits/Ada/middle-three-digits.adb
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
with Ada.Text_IO;
|
||||
|
||||
procedure Middle_Three_Digits is
|
||||
|
||||
Impossible: exception;
|
||||
|
||||
function Middle_String(I: Integer; Middle_Size: Positive) return String is
|
||||
S: constant String := Integer'Image(I);
|
||||
First: Natural := S'First;
|
||||
Full_Size, Border: Natural;
|
||||
begin
|
||||
while S(First) not in '0' .. '9' loop -- skip leading blanks and minus
|
||||
First := First + 1;
|
||||
end loop;
|
||||
Full_Size := S'Last-First+1;
|
||||
if (Full_Size < Middle_Size) or (Full_Size mod 2 = 0) then
|
||||
raise Impossible;
|
||||
else
|
||||
Border := (Full_Size - Middle_Size)/2;
|
||||
return S(First+Border .. First+Border+Middle_Size-1);
|
||||
end if;
|
||||
end Middle_String;
|
||||
|
||||
Inputs: array(Positive range <>) of Integer :=
|
||||
(123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345,
|
||||
1, 2, -1, -10, 2002, -2002, 0);
|
||||
Error_Message: constant String := "number of digits must be >= 3 and odd";
|
||||
|
||||
package IIO is new Ada.Text_IO.Integer_IO(Integer);
|
||||
|
||||
begin
|
||||
for I in Inputs'Range loop
|
||||
IIO.Put(Inputs(I), Width => 9);
|
||||
Ada.Text_IO.Put(": ");
|
||||
begin
|
||||
Ada.Text_IO.Put(Middle_String(Inputs(I), 3));
|
||||
exception
|
||||
when Impossible => Ada.Text_IO.Put("****" & Error_Message & "****");
|
||||
end;
|
||||
Ada.Text_IO.New_Line;
|
||||
end loop;
|
||||
|
||||
end Middle_Three_Digits;
|
||||
15
Task/Middle-three-digits/ArkScript/middle-three-digits.ark
Normal file
15
Task/Middle-three-digits/ArkScript/middle-three-digits.ark
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
(import std.Math)
|
||||
(import std.String)
|
||||
|
||||
(let middle_three_digits (fun (i) {
|
||||
(let s (toString (math:abs i)))
|
||||
(if (and (math:odd (len s)) (>= (len s) 3))
|
||||
(string:slice s (- (/ (len s) 2) 1) 3)
|
||||
"Need odd and at least 3 digits") }))
|
||||
|
||||
(import std.List :forEach)
|
||||
|
||||
(forEach [123 12345 1234567 987654321 10001 -10001 -123 -100 100 -12345]
|
||||
(fun (x) (print (middle_three_digits x))))
|
||||
(forEach [1 2 -1 -10 2002 -2002 0]
|
||||
(fun (x) (print (middle_three_digits x))))
|
||||
91
Task/Middle-three-digits/COBOL/middle-three-digits-1.cob
Normal file
91
Task/Middle-three-digits/COBOL/middle-three-digits-1.cob
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.cob
Normal file
71
Task/Middle-three-digits/COBOL/middle-three-digits-2.cob
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.
|
||||
23
Task/Middle-three-digits/Crystal/middle-three-digits.cr
Normal file
23
Task/Middle-three-digits/Crystal/middle-three-digits.cr
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
struct Int
|
||||
def mtd
|
||||
n = self.abs
|
||||
raise "Not enough digits" unless n >= 100
|
||||
ds = n.digits
|
||||
raise "Even digits" unless ds.size.odd?
|
||||
ds[ds.size // 2 - 1, 3].reverse
|
||||
end
|
||||
end
|
||||
|
||||
puts "Should succeed:"
|
||||
[123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345].each do |n|
|
||||
printf "%10d: %s\n", n, n.mtd
|
||||
end
|
||||
puts "Should fail:"
|
||||
[1, 2, -1, -10, 2002, -2002, 0].each do |n|
|
||||
printf "%10d: ", n
|
||||
begin
|
||||
puts n.mtd
|
||||
rescue ex
|
||||
puts ex.message
|
||||
end
|
||||
end
|
||||
19
Task/Middle-three-digits/Pluto/middle-three-digits.pluto
Normal file
19
Task/Middle-three-digits/Pluto/middle-three-digits.pluto
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
local fmt = require "fmt"
|
||||
|
||||
local function middle3(n)
|
||||
if n < 0 then n = -n end
|
||||
local s = tostring(n)
|
||||
local c = #s
|
||||
if c < 3 then return $"Minimum is 3 digits, only has {c}." end
|
||||
if c % 2 == 0 then return $"Number of digits must be odd, {c} is even." end
|
||||
if c == 3 then return s end
|
||||
local d = (c - 1) / 2
|
||||
return s:sub(d, d + 2)
|
||||
end
|
||||
|
||||
local a = {123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345,
|
||||
1, 2, -1, -10, 2002, -2002, 0}
|
||||
|
||||
for a as e do
|
||||
fmt.print("%9d -> %s", e, middle3(e))
|
||||
end
|
||||
24
Task/Middle-three-digits/PowerShell/middle-three-digits.ps1
Normal file
24
Task/Middle-three-digits/PowerShell/middle-three-digits.ps1
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
function middle3($inp){
|
||||
|
||||
$str = [Math]::abs($inp)
|
||||
|
||||
$leng = "$str".length
|
||||
|
||||
if ($leng -lt 3){
|
||||
Write-host $inp": [ERROR] too short."
|
||||
Return
|
||||
}
|
||||
if (($leng % 2) -eq 0){
|
||||
Write-host $inp": [ERROR] even number of digits."
|
||||
} else {
|
||||
$trimmer = ($leng - 3) / 2
|
||||
$ans = "$str".subString($trimmer,3)
|
||||
|
||||
Write-host $inp": $ans"
|
||||
}
|
||||
Return
|
||||
}
|
||||
|
||||
$sample = 123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0
|
||||
|
||||
foreach ($x in $sample){middle3 $x}
|
||||
36
Task/Middle-three-digits/R/middle-three-digits.r
Normal file
36
Task/Middle-three-digits/R/middle-three-digits.r
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#Simple method
|
||||
options(scipen=99)
|
||||
|
||||
middle3digits <- function(n){
|
||||
s <- abs(n) |> as.character()
|
||||
k <- nchar(s)
|
||||
if(k<3) stop("not enough digits")
|
||||
if(k%%2==0) stop("even number of digits")
|
||||
substr(s, (k-1)/2, (k+3)/2)
|
||||
}
|
||||
|
||||
#Alternate method without disabling scientific notation
|
||||
numdigits <- function(n) ifelse(log10(n)%%1==0,
|
||||
1+log10(n),
|
||||
ceiling(log10(n)))
|
||||
|
||||
middle3digits <- function(n){
|
||||
n <- abs(n)
|
||||
k <- numdigits(n)
|
||||
if(k<3|is.na(k)) stop("not enough digits")
|
||||
if(k%%2==0) stop("even number of digits")
|
||||
pow10 <- 10^((k-3)/2)
|
||||
mid <- (n%/%pow10)%%1000
|
||||
if(mid<100){
|
||||
mid <- as.character(mid)
|
||||
mid_pad <- paste0(c(rep(0, 3-nchar(mid)), mid), collapse="")
|
||||
return(mid_pad)
|
||||
}
|
||||
return(as.character(mid))
|
||||
}
|
||||
|
||||
#Testing examples
|
||||
test_nums <- c(123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345)
|
||||
test_errors <- c(1, 2, -1, -10, 2002, -2002, 0)
|
||||
cat(sapply(test_nums, middle3digits))
|
||||
for(n in test_errors) try(middle3digits(n))
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
proc middleThree n {
|
||||
if {$n < 0} {
|
||||
set n [expr {-$n}]
|
||||
}
|
||||
set idx [expr {[string length $n] - 2}]
|
||||
if {$idx % 2 == 0} {
|
||||
error "no middle three digits: input is of even length"
|
||||
}
|
||||
if {$idx < 1} {
|
||||
error "no middle three digits: insufficient digits"
|
||||
}
|
||||
set idx [expr {$idx / 2}]
|
||||
string range $n $idx [expr {$idx+2}]
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
foreach n {
|
||||
123 12345 1234567 987654321 10001 -10001 -123 -100 100 -12345
|
||||
1 2 -1 -10 2002 -2002 0
|
||||
} {
|
||||
if {[catch {
|
||||
set mid [middleThree $n]
|
||||
} msg]} then {
|
||||
puts "error for ${n}: $msg"
|
||||
} else {
|
||||
puts "found for ${n}: $mid"
|
||||
}
|
||||
}
|
||||
91
Task/Middle-three-digits/Tcl/middle-three-digits.tcl
Normal file
91
Task/Middle-three-digits/Tcl/middle-three-digits.tcl
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
#!/usr/bin/env tclsh
|
||||
|
||||
# output middle 3 digits or error
|
||||
|
||||
# good integers
|
||||
set good {123 12345 1234567 987654321 10001 -10001 -123 -100 100 -12345}
|
||||
|
||||
# bad integers
|
||||
set bad {doggy 1 2 -1 -10 2002 -2002 0}
|
||||
|
||||
proc middle_3 {num} {
|
||||
|
||||
# error messages
|
||||
array set error {
|
||||
notint {(not an integer)}
|
||||
short {(number < 3 digits)}
|
||||
even {(even number of digits)}
|
||||
zero {(zero length entry)}
|
||||
{unknown} {(unknown error)}
|
||||
}
|
||||
|
||||
set err 0
|
||||
|
||||
# must be integer
|
||||
if { ! [string is integer $num] } {
|
||||
set err 1
|
||||
set errstr $error(notint)
|
||||
}
|
||||
|
||||
# work with positive val
|
||||
if { $num < 0 } { set num [expr {abs($num)} ] }
|
||||
|
||||
# how many digits
|
||||
set dlen [string length $num]
|
||||
|
||||
if {$dlen < 3} {
|
||||
set err 1
|
||||
set errstr $error(short)
|
||||
}
|
||||
|
||||
if {$dlen % 2 == 0} {
|
||||
set err 1
|
||||
set errstr $error(even)
|
||||
}
|
||||
|
||||
if {$err} {
|
||||
|
||||
# " (err)"
|
||||
set output [format "%*s%s" 10 "" "$errstr"]
|
||||
|
||||
} else {
|
||||
|
||||
# split into list of each letter
|
||||
set letters [split $num ""]
|
||||
|
||||
# middle of list
|
||||
set mid [expr {$dlen / 2}]
|
||||
|
||||
# get 3 in the middle
|
||||
set a [lindex $letters [expr {$mid-1} ] ]
|
||||
set b [lindex $letters [expr {$mid} ] ]
|
||||
set c [lindex $letters [expr {$mid+1} ] ]
|
||||
|
||||
# " 123"
|
||||
set output [format "%*s%d" 10 "" "$a$b$c"]
|
||||
}
|
||||
|
||||
return $output
|
||||
}
|
||||
|
||||
|
||||
|
||||
# start here
|
||||
|
||||
puts stdout "test good list:\n"
|
||||
puts stdout "${good}"
|
||||
|
||||
foreach num $good {
|
||||
set n [middle_3 $num ]
|
||||
puts stdout "$num:\t$n"
|
||||
}
|
||||
|
||||
puts ""
|
||||
puts stdout "test bad list:\n"
|
||||
puts stdout "${bad}"
|
||||
|
||||
foreach num $bad {
|
||||
set n [middle_3 $num ]
|
||||
|
||||
puts stdout "$num:\t$n"
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
[123 12345 1234567 987654321 10001 ¯10001 ¯123 ¯100 100 ¯12345
|
||||
1 2 ¯1 ¯10 2002 ¯2002 0]
|
||||
[ 123 12345 1234567 987654321 10001 ¯10001 ¯123 ¯100 100 ¯12345
|
||||
1 2 ¯1 ¯10 2002 ¯2002 0]
|
||||
Mid ← (
|
||||
⍤("too short")≥3.⧻.°□°⋕⌵
|
||||
⍤("even length")≠0◿2.
|
||||
⍤"too short"⊸≥3⊸⧻°⋕⌵
|
||||
⍤"even length"≠0⊸◿2
|
||||
↘¯⟜↘⌊÷2-3
|
||||
)
|
||||
⍉⊟⟜≡⍚⍣(Mid|⊂"Error: "◌) # Convert each
|
||||
|
|
|
|||
|
|
@ -1,21 +1,17 @@
|
|||
import math
|
||||
|
||||
const
|
||||
(
|
||||
valid = [123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345]
|
||||
invalid = [1, 2, -1, -10, 2002, -2002, 0]
|
||||
)
|
||||
const valid = [123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345]
|
||||
const invalid = [1, 2, -1, -10, 2002, -2002, 0]
|
||||
|
||||
fn main() {
|
||||
for elem in valid {println(middle(elem))}
|
||||
for elem in invalid {println(middle(elem))}
|
||||
for elem in valid { println(middle(elem)) }
|
||||
for elem in invalid { println(middle(elem)) }
|
||||
}
|
||||
|
||||
|
||||
fn middle(num int) string {
|
||||
mut strip := math.abs(num).str()
|
||||
if strip.len < 3 {return 'Error: $num has less than 3 digits'}
|
||||
if strip.len % 2 == 0 {return 'Error: $num has an even number of digits'}
|
||||
if strip.len < 3 { return "Error: $num has less than 3 digits" }
|
||||
if strip.len % 2 == 0 { return "Error: $num has an even number of digits" }
|
||||
start := (strip.len / 2) - 1
|
||||
return strip.substr(start, start + 3)
|
||||
}
|
||||
|
|
|
|||
21
Task/Middle-three-digits/VBScript/middle-three-digits.vbs
Normal file
21
Task/Middle-three-digits/VBScript/middle-three-digits.vbs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
'http://rosettacode.org/wiki/Middle_three_digits
|
||||
|
||||
Function mid3n(n)
|
||||
'Remove the number's sign.
|
||||
n = CStr(Abs(n))
|
||||
If Len(n) < 3 Or Len(n) Mod 2 = 0 Then
|
||||
mid3n = "Invalid: Either the length of n < 3 or an even number."
|
||||
ElseIf Round(Len(n)/2) > Len(n)/2 Then
|
||||
mid3n = Mid(n,Round(Len(n)/2)-1,3)
|
||||
Else
|
||||
mid3n = Mid(n,Round(Len(n)/2),3)
|
||||
End If
|
||||
End Function
|
||||
|
||||
'Calling the function.
|
||||
arrn = Array(123,12345,1234567,987654321,10001,-10001,-123,-100,100,-12345,_
|
||||
1,2,-1,-10,2002,-2002,0)
|
||||
For Each n In arrn
|
||||
WScript.StdOut.Write n & ": " & mid3n(n)
|
||||
WScript.StdOut.WriteLine
|
||||
Next
|
||||
Loading…
Add table
Add a link
Reference in a new issue