June 2018 Update

This commit is contained in:
Ingy döt Net 2018-06-22 20:57:24 +00:00
parent ba8067c3b7
commit 22f33d4004
5278 changed files with 84726 additions and 14379 deletions

View file

@ -4,18 +4,15 @@ m3(integer i)
text s;
s = itoa(i);
if (character(s, 0) == '-') {
if (s[0] == '-') {
s = delete(s, 0);
}
if (length(s) < 3) {
if (~s < 3) {
v_integer(i);
v_text(" has not enough digits\n");
} elif (length(s) & 1) {
o_winteger(9, i);
o_text(": ");
o_text(cut(s, length(s) - 3 >> 1, 3));
o_byte('\n');
} elif (~s & 1) {
o_form("/w9/: ~\n", i, cut(s, ~s - 3 >> 1, 3));
} else {
v_integer(i);
v_text(" has an even number of digits\n");

View file

@ -0,0 +1,29 @@
import system'routines.
import extensions.
middleThreeDigits = (:n)<int>
[
literal s := n absolute; literal.
int len := s length.
if(len<3)
[
InvalidArgumentException new:"n must have 3 digits or more"; raise
];
if(len isEven)
[
InvalidArgumentException new:"n must have an odd number of digits"; raise
].
int mid := len / 2.
^ s Substring(mid-1,3).
].
program =
[
(123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0)
forEach(:n)
[
console printLine("middleThreeDigits(",n,"):",middleThreeDigits eval(n) | if(:e)(e message))
]
].

View file

@ -0,0 +1,26 @@
USING: combinators formatting io kernel math math.parser
sequences ;
IN: rosetta-code.middle-three-digits
CONSTANT: test-values { 123 12345 1234567 987654321 10001 -10001
-123 -100 100 -12345 1 2 -1 -10 2002 -2002 0 }
: middle-three ( str -- str' ) [ midpoint@ ] keep
[ [ 1 - ] [ 2 + ] bi ] dip subseq ;
: too-short ( -- ) "Number must have at least three digits."
print ;
: number-even ( -- ) "Number must have an odd number of digits."
print ;
: process ( n -- )
abs number>string {
{ [ dup length 3 < ] [ drop too-short ] }
{ [ dup length even? ] [ drop number-even ] }
[ middle-three print ]
} cond ;
: main ( -- ) test-values [ dup "%9d : " printf process ] each ;
MAIN: main

View file

@ -1,17 +1,16 @@
function middle(i)
s = string(abs(i))
function middle3(n::Integer)
s = dec(abs(n))
l = length(s)
mid = round(Int,(l+1)/2)
l < 3 ?
"error: not enough digits" :
iseven(l) ?
"error: number of digits is even" :
s[mid-1:mid+1]
if iseven(l)
throw(ArgumentError("n must have an odd number of digits"))
elseif l < 3
throw(ArgumentError("n must have 3 digits or more"))
end
mid = (l + 1) ÷ 2
return s[mid-1:mid+1]
end
julia>
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))
@printf("%10d -> %s\n", n, try middle3(n) catch e e.msg end)
end

View file

@ -1,14 +1,16 @@
fun middleThree(x: Int): Int? {
val s = Math.abs(x).toString()
when {
s.length < 3 -> return null // throw Exception("too short!")
s.length % 2 == 0 -> return null // throw Exception("even number of digits")
else -> return ((s.length / 2) - 1).let { s.substring(it, it + 3) }.toInt()
return when {
s.length < 3 -> null // throw Exception("too short!")
s.length % 2 == 0 -> null // throw Exception("even number of digits")
else -> ((s.length / 2) - 1).let { s.substring(it, it + 3) }.toInt()
}
}
println(middleThree(12345)) // 234
println(middleThree(1234)) // null
println(middleThree(1234567)) // 345
println(middleThree(123))// 123
println(middleThree(123555)) //null
fun main(args: Array<String>) {
println(middleThree(12345)) // 234
println(middleThree(1234)) // null
println(middleThree(1234567)) // 345
println(middleThree(123))// 123
println(middleThree(123555)) //null
}

View file

@ -0,0 +1,21 @@
Option Explicit
Sub Main_Middle_three_digits()
Dim Numbers, i&
Numbers = Array(123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, _
100, -12345, 1, 2, -1, -10, 2002, -2002, 0)
For i = 0 To 16
Debug.Print Numbers(i) & " Return : " & Middle3digits(CStr(Numbers(i)))
Next
End Sub
Function Middle3digits(strNb As String) As String
If Left(strNb, 1) = "-" Then strNb = Right(strNb, Len(strNb) - 1)
If Len(strNb) < 3 Then
Middle3digits = "Error ! Number of digits must be >= 3"
ElseIf Len(strNb) Mod 2 = 0 Then
Middle3digits = "Error ! Number of digits must be odd"
Else
Middle3digits = Mid(strNb, 1 + (Len(strNb) - 3) / 2, 3)
End If
End Function