Como encontrar palavras com as mesmas letras usando um script de shell

0

Eu quero escrever um script que aceite uma linha de texto e me diga se alguma das palavras é composta das mesmas letras. Aqui está um exemplo:

How can you listen if you are not silent?

Aqui, 'ouvir' e 'silencioso' são feitos de exatamente as mesmas letras com a mesma frequência.

Alguma ajuda?

    
por Ashu 08.04.2018 / 16:07

2 respostas

3

Apresentado sem comentário:

ruby -rset -e '
  readlines.each {|sentence| 
    p sentence
    data = Hash.new {|h,k| h[k] = Set.new}
    sentence.scan(/\w+/).each {|word| data[word.chars.sort] << word }
    p data.each_value.select {|set| set.size > 1}.collect(&:to_a)
  }
' << END
How can you listen if you are not silent?
I saw a tap; it was apt
END
"How can you listen if you are not silent?\n"
[["listen", "silent"]]
"I saw a tap; it was apt\n"
[["saw", "was"], ["tap", "apt"]]
    
por glenn jackman 08.04.2018 / 22:24
2

Isso listará a frequência de cada conjunto de caracteres delimitados por espaço na frase:

echo 'How can you listen if you are not silent?' \
| tr -cd '[:alpha:][:space:]' \
| tr '[:upper:][:space:]' '[:lower:]\n' \
| while read a; do grep -o .<<<$a | sort | tr -d '\n'; echo; done \
| sort | uniq -c | sort

Saída:

  1 acn
  1 aer
  1 fi
  1 how
  1 not
  2 eilnst
  2 ouy

Não é muito elegante e provavelmente você deveria estar usando algo além de shell.

    
por Sebastian Stark 08.04.2018 / 23:09