Introducción
En química hay un tipo de extensión, extensión .xyz, ( https://en.wikipedia.org/wiki/XYZ_file_format ), que imprime en cada línea un elemento químico y las coordenadas en el plano del elemento. Esto es muy útil para que los químicos comprendan los compuestos químicos y visualicen los compuestos en 3D. Pensé que sería divertido , dado un archivo .xyz, imprimir la fórmula química.
Desafío
Dado un archivo .xyz, imprima la fórmula química del compuesto en cualquier lenguaje de programación en el menor número posible de bytes . Nota:
- Originalmente, la entrada debía darse como un archivo. Como me han señalado, esto limita el desafío. Por lo tanto , puede suponer que la entrada es una lista / matriz de cadenas, cada una de las cuales representa una línea del archivo .xyz.
- No hay restricciones en el orden de los elementos.
- Cada elemento debe imprimirse con un guión bajo "_" delimitando el elemento y la cantidad de veces que aparece
- Las dos primeras líneas de cualquier archivo .xyz es el número de elementos y una línea de comentario (tenlo en cuenta).
Ejemplo de entrada y salida
Suponga que tiene un archivo p.xyz que contiene lo siguiente (donde la primera línea es el número de elementos y la segunda un comentario), ingrese:
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
Salida:
Ba_1Hf_1O_3
Pruebas
Una prueba rápida es con el ejemplo mencionado. Una prueba más exhaustiva es la siguiente: dado que el archivo de prueba tiene miles de líneas, compartiré el archivo .xyz:
https://gist.github.com/nachonavarro/1e95cb8bbbc644af3c44
Respuestas:
Pyth - 18 bytes
Pruébelo en línea aquí .
fuente
Japt, 21 bytes
¡Pruébelo en línea! La entrada se proporciona como un conjunto de cadenas (que pueden formatearse como en el enlace).
Sin golfos y explicación
fuente
AWK, 44
Pruébalo en línea.
fuente
Utilidades Shell + GNU, 67
Pruébalo en línea.
fuente
1d;2d
→1,2d
tail -n+3|cut -c-3|sort|uniq -c|sed -rz 's/\s*(\S+) (\S+)/\2_\1/g'
Mathematica,
7953 bytesBastante sencillo.
fuente