Можно и без сторонних, но муторно и долго.
Библиотеки они на то и есть что бы не переделывать заново работу, которую уже сделали за вас.
По идее, тут на входе простой синтаксис - для него реализуется простейший автомат синтаксического анализа: берем символ - если он пробел/перевод строки - игнорируем, а если число, начинаем писать в приемный буфер, заканчиваем когда встретится первая "не цифра", вычисляем корень и пишем в выходной буфер или сразу в файл. И тк повторяем до окончания входного файла.
Но это будет довольно сложный код, который придется долго отлаживать. Но главное - чуть поменяется синтаксис входа - поменять решение с re - в разы проще чем прописанный руками автомат разбора.
Кстати, любителям минималистичнсти - вообще двухстрочный вариант (если считать только код, то одно-строчный):
import re, math
open("1001.out", "wt").write(''.join(str(math.sqrt(int(v))) + '\n' for v in re.findall(r'([0-9]+)', open("1001.in", "rt").read())))