Einführung
In der Chemie gibt es eine Art von Erweiterung, die .xyz-Erweiterung ( https://en.wikipedia.org/wiki/XYZ_file_format ), die in jeder Zeile ein chemisches Element und die Koordinaten in der Ebene des Elements druckt. Dies ist für Chemiker sehr nützlich, um chemische Verbindungen zu verstehen und die Verbindungen in 3D zu visualisieren. Ich dachte, es würde Spaß machen , mit einer .xyz-Datei die chemische Formel auszudrucken.
Herausforderung
Drucken Sie bei einer .xyz-Datei die chemische Formel der Verbindung in einer beliebigen Programmiersprache in der kleinstmöglichen Anzahl von Bytes . Hinweis:
- Ursprünglich sollte die Eingabe als Datei erfolgen. Wie ich bereits erwähnt habe, schränkt dies die Herausforderung ein. Daher können Sie annehmen, dass die Eingabe eine Liste / ein Array von Zeichenfolgen ist, die jeweils eine Zeile der .xyz-Datei darstellen.
- Es gibt keine Einschränkungen bei der Reihenfolge der Elemente.
- Jedes Element sollte mit einem Unterstrich "_" gedruckt werden, der das Element und die Häufigkeit seines Auftretens begrenzt
- Die ersten beiden Zeilen einer .xyz-Datei sind die Anzahl der Elemente und eine Kommentarzeile (beachten Sie dies).
Beispiel für Ein- und Ausgabe
Angenommen, Sie haben eine Datei p.xyz , die Folgendes enthält (wobei die erste Zeile die Anzahl der Elemente und die zweite einen Kommentar enthält):
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
Ausgabe:
Ba_1Hf_1O_3
Testen
Ein schneller Test ist mit dem genannten Beispiel. Ein gründlicherer Test ist der folgende: Da die Testdatei Tausende von Zeilen umfasst, werde ich die .xyz-Datei freigeben:
https://gist.github.com/nachonavarro/1e95cb8bbbc644af3c44
Antworten:
Pyth - 18 Bytes
Probieren Sie es hier online aus .
quelle
Japt, 21 Bytes
Testen Sie es online! Die Eingabe erfolgt als Array von Zeichenfolgen (die wie im Link formatiert werden können).
Ungolfed und Erklärung
quelle
AWK, 44
Probieren Sie es online aus.
quelle
Shell + GNU Utilities, 67
Probieren Sie es online aus.
quelle
1d;2d
→1,2d
tail -n+3|cut -c-3|sort|uniq -c|sed -rz 's/\s*(\S+) (\S+)/\2_\1/g'
Mathematica,
7953 BytesZiemlich einfach.
quelle