Olá! Não entendi muito bem sobre o erro que dá por escrever "linha_atual.each_with_index"... Porque, nós temos aqui:
mapa.each_with_index do |linha_atual, linha|
... que é uma array de Strings, certo? (me corrijam se estiver errada).
E então temos:
linha_atual.each_with_index do |caractere_atual, coluna|
... Que deveria ser uma array de Strings também? Só que não é? E dai o código não funciona?
Qual a diferença entre "mapa" e "linha_atual", para colocarmos ".chars" em "linha_atual" e "mapa" não precisar?
Nem tudo que parece um pato é um pato... Então quem é o ser que não é um pato, nesse caso?
[ Trecho de "Laço Fundamental Básico": Existe um método de Array (que string também tem) que permite passar por cada (each) elementos dele. Cada elemento é nossa "linha_atual". Mas qual é o número da linha? Usamos o método "each_with_index" para nos dar a posição (index) de cada elemento, o que chamamos de linha.]
[ No site do ruby-doc.org está: chars → an_array
Returns an array of characters in str. This is a shorthand for str.each_char.to_a.
If a block is given, which is a deprecated form, works the same as each_char.
º Se meu inglês não estiver tão ruim... usando .chars retorna um array de caracteres em string. Então "Linha_Atual" é um array de caracteres? Ou é string que queremos transformar em Array de caracteres? ]