I was solving this question on SPOJ - http://www.spoj.com/problems/ALICESIE/
What the question boils down to print (n+1)/2
This is my C code which passes in
Bash is slower than C, for sure, because of the reasons given in other answers, but that doesn't explain what's happening here. I suspect you're letting one of your read
s hang forever, until timeout. When I implement this:
#!/bin/bash
main() {
local test
local i
local n
read test
for (( i=$test; i>0; i--)); do
read n
echo "$(((n+1)/2))"
done
}
time {
echo 1000
printf '%d\n' {1002..2}
} | main
It doesn't take very much time:
real 0m0.033s
user 0m0.029s
sys 0m0.013s
You can force the read
statements to time out on their own with the -t
flag to read
, like this:
main() {
local test
local i
local n
read -t.3 test
if [[ -z $test ]]; then
echo "Failed to read a test value within 300ms."
return 1
}
for (( i=$test; i>0; i--)); do
read -t.3 n
if [[ -z $n ]]; then
echo "Failed to read a value for n within 300ms."
return 1
}
echo "$(((n+1)/2))"
done
}