Fiz em JavaScript, usei JQUERY só para usar a função .text(), a lógica mesmo é em Javascript Puro...
Fiquei com preguiça no final de reanalizar as linhas e adcionar mais espaços... hehehehe
$(function(){
var texto = $('#input').text();
var limite = 40;
var out = '';
var paragrafos =[''];
var indice=0;
texto.split("\n").forEach(function(elm,ind, arr){
paragrafos[indice] += elm;
if(elm.lastIndexOf('.') == elm.length -1){
indice++;
paragrafos[indice]='';
}
});
paragrafos.forEach(function(elm,ind, arr){
out += limitaTXT(elm, limite);
});
function limitaTXT(entrada, limite){
var out='';
while(entrada.length > limite){
var entrada_1 = entrada.substr(0, limite);
var fim = entrada_1.lastIndexOf(' ');
if(fim === -1){ fim = limite;} // não encontrou espaço, logo será enviado os 40 primeiros characteres
out += entrada_1.substr(0,fim+1)+'\n';
entrada = entrada.substr(fim+1);
}
if(entrada.length > 0){ out += entrada+'\n'; }
return out;
}
$('#output').text(out);
});
Aqui está o código funcionando para quem quiser continuar o desafio e colocar os espaços...
https://jsbin.com/sijajesezu/edit?html,js,output