Time for an 2014 update…

This commit is contained in:
Ingy döt Net 2014-01-17 05:32:22 +00:00
parent 372c577f83
commit 09687c4926
2520 changed files with 34227 additions and 7318 deletions

View file

@ -0,0 +1,13 @@
Numbers:="123,12345,1234567,987654321,10001,-10001,-123,-100,100,-12345,1,2,-1,-10,2002,-2002,0"
Loop, parse, Numbers, `,
{
if A_LoopField is not number
log := log . A_LoopField . "`t: Not a valid number`n"
else if((d:=StrLen(n:=RegExReplace(A_LoopField,"\D")))<3)
log := log . A_LoopField . "`t: Too short`n"
else if(!Mod(d,2))
log := log . A_LoopField . "`t: Not an odd number of digits`n"
else
log := log . A_LoopField . "`t: " . SubStr(n,((d-3)//2)+1,3) . "`n"
}
MsgBox % log

View file

@ -0,0 +1,22 @@
100 DEF FN L(N) = LEN(STR$(INT(ABS(N))))
110 DEF FN N(N) = VAL(MID$(STR$(INT(ABS(N))),(FN L(N)-1)/2,3))
120 DEF FN EVEN(N) = INT(N/2) = N/2
130 FOR I = 1 TO 20
140 READ N
150 PRINT N":",
160 GOSUB 100"MIDDLE THREE DIGITS
170 PRINT R$
180 NEXT
190 END
200 R$ = ""
210 IF FN EVEN(FN L(N)) THEN R$ = "?EVEN,"
220 IF FN L(N) < 3 THEN R$ = R$ + "ONLY " + STR$(FN L(N)) + " DIGIT" + MID$("S",FN L(N) - 1, 1)
230 IF RIGHT$(R$, 1) = "," THEN R$ = LEFT$(R$, LEN(R$) - 1) : RETURN
240 IF LEFT$(R$, 1) = "?" THEN RETURN
250 IF R$ <> "" THEN R$ = "?" + R$ : RETURN
260 R$ = STR$(FN N(N))
270 IF LEN(R$) = 1 THEN R$ = "00" + R$
280 IF LEN(R$) = 2 THEN R$ = "0" + R$
290 RETURN
300 DATA123,12345,1234567,987654321,10001,-10001,-123,-100,100,-12345
310 DATA1,2,-1,-10,2002,-2002,0

View 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

View file

@ -0,0 +1,28 @@
Procedure.s middleThreeDigits(x.q)
Protected x$, digitCount
If x < 0: x = -x: EndIf
x$ = Str(x)
digitCount = Len(x$)
If digitCount < 3
ProcedureReturn "invalid input: too few digits"
ElseIf digitCount % 2 = 0
ProcedureReturn "invalid input: even number of digits"
EndIf
ProcedureReturn Mid(x$,digitCount / 2, 3)
EndProcedure
If OpenConsole()
Define testValues$ = "123 12345 1234567 987654321 10001 -10001 -123 -100 100 -12345 1 2 -1 -10 2002 -2002 0"
Define i, value.q, numTests = CountString(testValues$, " ") + 1
For i = 1 To numTests
value = Val(StringField(testValues$, i, " "))
PrintN(RSet(Str(value), 12, " ") + " : " + middleThreeDigits(value))
Next
Print(#crlf$ + #crlf$ + "Press ENTER to exit"): Input()
CloseConsole()
EndIf

View file

@ -0,0 +1,13 @@
x$ = "123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0"
while word$(x$,i+1,",") <> ""
i = i + 1
a1$ = trim$(word$(x$,i,","))
if left$(a1$,1) = "-" then a$ = mid$(a1$,2) else a$ = a1$
if (len(a$) and 1) = 0 or len(a$) < 3 then
print a1$;chr$(9);" length < 3 or is even"
else
print mid$(a$,((len(a$)-3)/2)+1,3);" ";a1$
end if
wend
end

View file

@ -2,46 +2,55 @@
#include <stdlib.h>
#include <string.h>
char input[50];
int midPoint;
void midThree(char arg[])
{
char output[4];
int midPoint;
arg[0]=='-'?midPoint = ((strlen(arg) + 1) / 2):midPoint = ((strlen(arg) + 1) / 2) - 1;
if(strlen(arg) < 3)
{
printf("Error, %d is too short.\n",atoi(arg));
return ;
}
else if(strlen(arg) == 4 || strlen(arg) == 3)
{
printf("Error, %d has %d digits, no 3 middle digits.\n",atoi(arg),arg[0]=='-'?strlen(arg)-1:strlen(arg));
return ;
}
else{
for(int i=0; i<3; i++)
{
output[i] = input[(midPoint-1) + i];
output[i] = arg[(midPoint-1) + i];
}
output[3] = '\0';
printf("The middle three digits of %s are %s.\n",arg,output);
}
}}
int main(int argc, char * argv[])
{
char input[50];
int x[] = {123, 12345, 1234567, 987654321, 10001, -10001,
-123, -100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0,
1234567890},i;
if(argc < 2)
{
printf("Usage: %s <integer>\n",argv[0]);
printf("Examples with preloaded data shown below :\n");
for(i=0;i<18;i++)
{
midThree(itoa(x[i],argv[0],10));
}
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;
sprintf(input,"%d",atoi(argv[1]));
midThree(argv[1]);
return 0;
}
}
}

View file

@ -1,7 +1,7 @@
import std.stdio, std.traits, std.conv;
import std.stdio, std.traits, std.conv, std.range;
string middleThreeDigits(T)(in T n) if (isIntegral!T) {
auto s = n < 0 ? n.text()[1 .. $] : n.text();
auto s = n < 0 ? n.text().dropOne : n.text();
auto len = s.length;
if (len < 3 || len % 2 == 0)
return "Need odd and >= 3 digits";
@ -15,7 +15,7 @@ void main() {
foreach (n; passing)
writefln("middleThreeDigits(%s): %s", n, middleThreeDigits(n));
immutable failing = [1, 2, -1, -10, 2002, -2002, 0,int.min,int.max];
immutable failing = [1, 2, -1, -10, 2002, -2002, 0, int.min, int.max];
foreach (n; failing)
writefln("middleThreeDigits(%s): %s", n, middleThreeDigits(n));
}

View file

@ -0,0 +1,4 @@
: middle3 ( n1 -- a n2)
abs s>d <# #s #> dup 2/ 0<> over 1 and 0<> and
if 2/ 1- chars + 3 else drop 0 then
;

View file

@ -1,13 +1,26 @@
function middle(i)
let s = string(abs(i)) , l = length(s) , mid = int((l+1)/2)
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
join((s[mid-1],s[mid],s[mid+1]))
end
function dummy(x,y,z=5)
"""
A dummy docstring over two lines
for text coloration.
"""
print("this is just some text to show text", 1.0, 3)
# and comment coloration
// and comment coloration 2
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))

View file

@ -0,0 +1,39 @@
// 32-bit builds of PHP: Integers can be from -2147483648 to 2147483647
// 64-bit builds of PHP: Integers can be from -9223372036854775808 to 9223372036854775807
function middlethree($integer)
{
$int = (int)str_replace('-','',$integer);
$length = strlen($int);
if(is_int($int))
{
if($length >= 3)
{
if($length % 2 == 1)
{
$middle = floor($length / 2) - 1;
return substr($int,$middle, 3);
}
else
{
return 'The value must contain an odd amount of digits...';
}
}
else
{
return 'The value must contain at least three digits...';
}
}
else
{
return 'The value does not appear to be an integer...';
}
}
$numbers = array(123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0);
foreach($numbers as $nums)
{
echo $nums.' : '.middlethree($nums). '<br>';
}

View file

@ -0,0 +1,24 @@
middle: procedure options (main); /* 29 October 2013 */
declare n fixed (15);
declare s character (25) varying;
declare in file input;
open file (in) title ('/MIDDLE.DAT,type(text),recsize(100)');
on endfile (in) stop;
do forever;
get file (in) list (n); put skip list (n);
n = abs(n);
s = trim(n);
if length(s) < 3 then put list ('not possible');
else if mod(length(s), 2) = 0 then put list ('not possible');
else
do;
do while (length(s) > 3);
s = substr(s, 2, length(s)-2);
end;
put list ('The middle three digits are: ' || s);
end;
end;
end middle;

View file

@ -0,0 +1,10 @@
(de middle3digits (N)
(let (Lst (chop (abs N)) Len (length Lst))
(tab (10 -2 -30)
N
":"
(cond
((> 3 Len) "not enough digits")
((bit? 1 Len)
(head 3 (nth Lst (/ Len 2))) )
(T "even number of digits") ) ) ) )

View file

@ -0,0 +1,3 @@
(mapc middle3digits
(123 12345 1234567 987654321 10001 -10001 -123 -100 100 -12345
1 2 -1 -10 2002 -2002 0 ) )

View file

@ -1,16 +1,16 @@
def middle_three_digits(n)
# minus sign doesn't factor into digit count,
# and calling #abs acts as a duck-type assertion
n = n.abs
# minus sign doesn't factor into digit count,
# and calling #abs acts as a duck-type assertion
n = n.abs
# convert to string and find length
l = (s = n.to_s).length
# convert to string and find length
l = (s = n.to_s).length
# check validity
raise ArgumentError, "Number must have at least three digits" if l < 3
raise ArgumentError, "Number must have an odd number of digits" if l % 2 == 0
# check validity
raise ArgumentError, "Number must have at least three digits" if l < 3
raise ArgumentError, "Number must have an odd number of digits" if l.even?
return s[l/2-1,3].to_i
return s[l/2-1,3].to_i
end
samples = [
@ -21,10 +21,10 @@ samples = [
width = samples.map { |n| n.to_s.length }.max
samples.each do |n|
print "%#{width}d: " % n
begin
puts "%03d" % middle_three_digits(n)
rescue ArgumentError => e
puts e.to_s
end
print "%#{width}d: " % n
begin
puts "%03d" % middle_three_digits(n)
rescue ArgumentError => e
puts e
end
end

View file

@ -0,0 +1,24 @@
$include "seed7_05.s7i";
const func string: middle3 (in integer: number) is func
result
var string: middle3 is "";
begin
middle3 := str(abs(number));
if not odd(length(middle3)) or length(middle3) < 3 then
middle3 := "error";
else
middle3 := middle3[succ((length(middle3) - 3) div 2) len 3];
end if;
end func;
const proc: main is func
local
var integer: number is 0;
var string: mid3 is "";
begin
for number range [] (123, 12345, 1234567, 987654321, 10001, -10001, -123,
-100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0) do
writeln(number <& ": " <& middle3(number));
end for;
end func;