In công thức


8

Giới thiệu

Trong hóa học có một loại phần mở rộng, phần mở rộng .xyz, ( https://en.wikipedia.org/wiki/XYZ_file_format ), in trong mỗi dòng một phần tử hóa học và tọa độ trong mặt phẳng của phần tử. Điều này rất hữu ích cho các nhà hóa học để hiểu các hợp chất hóa học và trực quan hóa các hợp chất trong 3D. Tôi nghĩ rằng nó sẽ rất vui khi được cung cấp một tệp .xyz, in công thức hóa học.

Thử thách

Cho một tệp .xyz, in công thức hóa học của hợp chất trong bất kỳ ngôn ngữ lập trình nào với số byte nhỏ nhất có thể . Ghi chú:

  • Ban đầu, đầu vào được đưa ra dưới dạng một tập tin. Như tôi đã chỉ ra, điều này hạn chế thách thức. Do đó, bạn có thể giả sử đầu vào là một danh sách / mảng các chuỗi, mỗi chuỗi đại diện cho một dòng của tệp .xyz.
  • Không có hạn chế trong thứ tự của các yếu tố.
  • Mỗi phần tử phải được in với dấu gạch dưới "_" phân định phần tử và số lần nó xuất hiện
  • Hai dòng đầu tiên của bất kỳ tệp .xyz nào là số phần tử và một dòng nhận xét (hãy ghi nhớ điều đó).

Ví dụ đầu vào và đầu ra

Giả sử bạn có một tệp p.xyz chứa phần sau (trong đó dòng đầu tiên là số phần tử và phần thứ hai là một nhận xét), nhập:

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  

Đầu ra:
Ba_1Hf_1O_3


Kiểm tra

Một bài kiểm tra nhanh là với ví dụ được đề cập. Một thử nghiệm kỹ lưỡng hơn như sau: vì tệp thử nghiệm có hàng nghìn dòng, tôi sẽ chia sẻ tệp .xyz:
https://gist.github.com/nachonavarro/1e95cb8bbbc644af3c44


Yêu cầu đầu vào phải được đọc từ một tệp không cần thiết và không công bằng cấm một phần rất đáng kể các ngôn ngữ lập trình tham gia vào thử thách của bạn. Xem: meta.codegolf.stackexchange.com/a/8077/3808 , meta.codegolf.stackexchange.com/q/2447/3808
tay nắm cửa

@Doorknob Điểm tốt. Tôi đã thay đổi điều đó.
McGuire

2
@Mego làm sao bây giờ? :)
McGuire

5
câu trả lời cho trường hợp thử nghiệm lớn là gì?
Maltysen

3
Có đặt hàng vấn đề trong đầu ra?
Chấn thương kỹ thuật số

Câu trả lời:



2

Japt, 21 byte

U=¢m¸mg)â £X+'_+Uè_¥X

Kiểm tra nó trực tuyến! Đầu vào được đưa ra dưới dạng một chuỗi các chuỗi (có thể được định dạng như trong liên kết).

Ung dung và giải thích

U=¢   m¸  mg)â £    X+'_+Uè_  ¥ X
U=Us2 mqS mg)â mXYZ{X+'_+UèZ{Z==X

          // Implicit: U = input array of strings
Us2       // Slice off the first two items of U.
mqS mg    // Map each item by splitting at spaces, then taking the first item.
U=    )   // Set U to the result.
â mXYZ{   // Uniquify, then map each item X to:
UèZ{Z==X  //  Count the number of items Z in U where Z == X.
X+'_+     //  Prepend X and an underscore.
          // Implicit output



0

Toán học, 79 53 byte

StringRiffle[Tally@StringExtract[#[[3;;]],1],"","_"]&

Khá đơn giản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.