Introdução
Na química, existe um tipo de extensão, extensão .xyz, ( https://en.wikipedia.org/wiki/XYZ_file_format ), que imprime em cada linha um elemento químico e as coordenadas no plano do elemento. Isso é muito útil para os químicos entenderem os compostos químicos e visualizarem os compostos em 3D. Eu pensei que seria divertido , dado um arquivo .xyz, imprimir a fórmula química.
Desafio
Dado um arquivo .xyz, imprima a fórmula química do composto em qualquer linguagem de programação no menor número possível de bytes . Nota:
- Originalmente, a entrada deveria ser fornecida como um arquivo. Como fui indicado, isso restringe o desafio. Portanto, você pode assumir que a entrada é uma lista / matriz de seqüências de caracteres, cada uma representando uma linha do arquivo .xyz.
- Não há restrições na ordem dos elementos.
- Cada elemento deve ser impresso com um sublinhado "_", delimitando o elemento e o número de vezes que aparece
- As duas primeiras linhas de qualquer arquivo .xyz são o número de elementos e uma linha de comentário (lembre-se disso).
Exemplo de entrada e saída
Suponha que você tenha um arquivo p.xyz que contenha o seguinte (onde a primeira linha é o número de elementos e a segunda um comentário), insira:
5
A mystery chemical formula...
Ba 0.000 0.000 0.000
Hf 0.5 0.5 0.5
O 0.5 0.5 0.000
O 0.5 0.000 0.5
O 0.000 0.5 0.5
Saída:
Ba_1Hf_1O_3
Teste
Um teste rápido é com o exemplo mencionado. Um teste mais completo é o seguinte: como o arquivo de teste possui milhares de linhas, compartilharei o arquivo .xyz:
https://gist.github.com/nachonavarro/1e95cb8bbbc644af3c44
Respostas:
Pitão - 18 bytes
Experimente online aqui .
fonte
Japonês, 21 bytes
Teste online! A entrada é fornecida como uma matriz de strings (que pode ser formatada como no link).
Ungolfed e explicação
fonte
AWK, 44
Experimente online.
fonte
Utilitários Shell + GNU, 67
Experimente online.
fonte
1d;2d
→1,2d
tail -n+3|cut -c-3|sort|uniq -c|sed -rz 's/\s*(\S+) (\S+)/\2_\1/g'
Mathematica,
7953 bytesBem simples.
fonte