A recent Python upload here gave me the inspiration to do a bash version... This is a little tongue-in-cheek but an enjoyable bit of fun.

It took around 11 seconds to prove 90000000000 had a perfect square of 300000...

It is a stand alone program and has a degree of INPUT error correction...

It was done on a MacBook Pro, OSX 10.7.5, default bash terminal and should work on Linux flavours but it is untested...

Enjoy finding simple solutions to often very difficult problems...

Bazza...

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | ```
#!/bin/bash
# perfect_square <number>
number=$1
if [ "$number" -eq "$number" ] > /dev/null 2>&1
then
if [ $number -lt 0 ]
then
echo "Warning! Integer is negative!!!"
echo "Set input integer to the DEMO value of 99..."
number=99
fi
else
echo "Invalid Argument! Set input integer to the DEMO value of 100..."
number=100
fi
series=1
square=1
root=1
while true
do
if [ $square -le $number ]
then
if [ $square -eq $number ]
then
echo "$number is the perfect square of $root..."
exit 0
fi
root=$((root+1))
series=$((series+2))
square=$((square+series))
else
echo "Integer $number is not a perfect square..."
exit 1
fi
done
exit 0
# Last login: Tue Sep 16 20:12:27 on ttys000
# AMIGA:barrywalker~> chmod 755 perfect_square
# AMIGA:barrywalker~> ./perfect_square ierooeirt
# Invalid Argument! Set input integer to the DEMO value of 100...
# 100 is the perfect square of 10...
# AMIGA:barrywalker~> ./perfect_square -345
# Warning! Integer is negative!!!
# Set input integer to the DEMO value of 99...
# Integer 99 is not a perfect square...
# AMIGA:barrywalker~> ./perfect_square 0
# Integer 0 is not a perfect square...
# AMIGA:barrywalker~> ./perfect_square 123.9
# Invalid Argument! Set input integer to the DEMO value of 100...
# 100 is the perfect square of 10...
# AMIGA:barrywalker~> ./perfect_square 625
# 625 is the perfect square of 25...
# AMIGA:barrywalker~> ./perfect_square 1
# 1 is the perfect square of 1...
# AMIGA:barrywalker~> ./perfect_square 11111
# Integer 11111 is not a perfect square...
# AMIGA:barrywalker~> ./perfect_square oiwero11234ldkf
# Invalid Argument! Set input integer to the DEMO value of 100...
# 100 is the perfect square of 10...
# AMIGA:barrywalker~> ./perfect_square -0.0
# Invalid Argument! Set input integer to the DEMO value of 100...
# 100 is the perfect square of 10...
# AMIGA:barrywalker~> ./perfect_square -1.25
# Invalid Argument! Set input integer to the DEMO value of 100...
# 100 is the perfect square of 10...
# AMIGA:barrywalker~> ./perfect_square -1
# Warning! Integer is negative!!!
# Set input integer to the DEMO value of 99...
# Integer 99 is not a perfect square...
# AMIGA:barrywalker~> _
``` |

This is complete;y issued as CC0, you may do with it as you please... ;o)

Remember this is a little tongue-in-cheek and requires nothing special but an OSX 10.7.5, default bash terminal.

I would be interested in other *NIX style platforms as my Linux machines are temporarily down...

Now tested on CygWin and works as predicted except more slowly. Have fun... ;o)