Ruby é bom para estruturas de dados e algoritmos?
Sim, para aprender e para entrevistas em empresas que usam Rails: o código é tão curto quanto o de Python, e os blocos fazem os percursos se lerem como o próprio algoritmo. Vale conhecer duas lacunas. A biblioteca padrão não tem heap, fila de prioridade, lista ligada nem árvore, então você os escreve; e Array#sort não promete estabilidade, então, quando elementos iguais precisam manter a ordem, ordene por um par: sort_by.with_index { |x, i| [x, i] }.
Quais classes do Ruby correspondem a quais estruturas de dados?
Array é um array dinâmico que serve como pilha (push, pop) e como fila (push, shift); Hash é uma tabela hash que lembra a ordem de inserção; e Set, na biblioteca padrão, é um conjunto baseado em hash. A lista é essa. Não existe heap, fila de prioridade, lista ligada, árvore, trie nem grafo, então esses você mesmo constrói, nos passos um e dois.
Como escrever uma fila de prioridade em Ruby?
O Ruby nunca trouxe uma, então há três respostas honestas: ordenar o array depois de cada inserção, O(n log n) por inserção; mantê-lo ordenado com bsearch_index e insert, O(n) por inserção; ou escrever um heap binário sobre um Array, O(log n) tanto para inserir quanto para remover. A terceira é o que um entrevistador procura, e é ela que você constrói no passo dois.
Por que a ordem de inserção de um Hash do Ruby importa para algoritmos?
Porque ela transforma alguns designs clássicos em poucas linhas. Um cache LRU, um problema de entrevista muito comum, é um Hash em que cada leitura apaga e reinsere a chave para movê-la para o fim, e o descarte é um shift, que remove a entrada mais antiga. Na maioria das linguagens isso exige uma tabela hash mais uma lista duplamente ligada, as estruturas que você constrói nos passos um e dois, então você consegue explicar o que o Ruby está fazendo por você.
Quais cursos desta trilha não são ensinados em Ruby?
Três: programação dinâmica e a série de entrevistas em Python, ensinadas em Python, e manipulação de bits, ensinada em C++. Eles aparecem listados depois dos passos, cada um com um link que o abre na própria linguagem. Uma tabela de memoização em Ruby pode ser um Hash com um bloco padrão, como em Hash.new { |h, n| h[n] = n < 2 ? n : h[n - 1] + h[n - 2] }, e n[i] lê o bit i de um inteiro diretamente, onde o C++ escreve (n >> i) & 1.
Preciso saber Ruby antes de começar esta trilha?
Métodos, blocos, arrays, hashes e classes, no mínimo. Se isso for novidade, o curso de Ruby da Coddy te leva até esse ponto primeiro, de graça, e esta trilha continua de onde ele termina.