Sơ đồ cấu hình electron


13

Thử thách

Cho một tên phần tử, xuất cấu hình electron của nó.

Đầu vào

Đầu vào của bạn sẽ là tên đầy đủ của từng thành phần (phạm vi từ Hydrogen, 1, đến Canxi, 20) với một số ngoại lệ - bạn sẽ có thể tính đến các đầu vào sau:

Natrium - This is sodium
Kalium - This is potassium

Lưu ý rằng đầu vào "natri" và "kali" vẫn phải hợp lệ.

Chữ cái đầu tiên sẽ luôn được viết hoa.

Đầu ra

Bạn có thể tham khảo trang web này để được hướng dẫn cách tạo sơ đồ cấu hình electron.

Danh sách sau đây cho thấy số lượng điện tử tối đa trong mỗi vỏ:

  • Vỏ thứ 1 - 2 electron
  • Vỏ thứ 2 - 8 electron
  • Vỏ thứ 3 - 8 electron
  • Lớp vỏ thứ 4 - 14 electron (mặc dù số lượng electron tối đa trong lớp vỏ này là 2)

Một ví dụ đầu ra của cấu hình electron là như sau:

Ở trung tâm của sơ đồ phải là ký hiệu một đến hai chữ cái của phần tử.

Dấu chấm hoặc dấu thập có thể được sử dụng và nơi chúng được đặt không quan trọng.

Đầu ra không nhất thiết phải như thế này nhưng nó phải là đồ họa ASCII. Một điều nó không thể là ở dạng 2.8.8.1hoặc bất kỳ dạng nào khác như thế này.

Các vòng tròn là không cần thiết

Được xây dựng trong các chức năng truy cập vào bảng tuần hoàn các nguyên tố hoặc tạo sơ đồ hoặc cấu hình electron không được phép.

Chiến thắng

Chương trình ngắn nhất tính bằng byte thắng.


1
Chúng ta có cần hiển thị các electron theo cặp không?
lirtosiast

5
Tôi khuyên bạn nên yêu cầu một trong những sản phẩm nghệ thuật hoặc đồ họa của ASCII, nếu không, các bài nộp không thực sự có thể so sánh được.
Alex A.

Là chữ cái đầu tiên luôn được viết hoa (tôi hy vọng vậy ...)
Tom Carpenter

Ngoài ra trong liên kết họ vẽ chúng khác nhau - bạn có cả hai electron ở lớp vỏ đầu tiên ở trên cùng, chúng có một ở phía trên, một ở phía dưới.
Tom Carpenter

1
Để biết thông tin chính xác hơn về những gì xảy ra sau 20, xem tại đây: en.wikipedia.org/wiki/Electron_shell
Level River St

Câu trả lời:


3

MATLAB, 360 363 290 304 295 byte

Xem ở dưới cùng của bài viết để biết cách kiểm tra mã cũ với Octave.

Mã này lấy tên của phần tử (bao gồm Kalium, v.v.) và loại bỏ đầu ra ở định dạng ascii bây giờ khi các quy tắc đã thay đổi.

f=input('');e=1;a=['CPACxxSAMSNxxxxxBLHxCKACSPSAMNNFONCBBLHH';'aorhxxilaoexxxxxeiexa rl  ilgae     eie '];for s=a;n=s(s~=32);if strncmpi(n,f,nnz(n));break;end;e=mod(e,20)+1;end;s=spiral(10);p=[8,18,33,28,23,39,60,53,46,95];p=[p;p+1];o=s*0;o(ismember(s,p(1:21-e)))='x';o(45:46)=a(:,e+20);char(o')

Các quy tắc đã thay đổi kể từ khi tôi viết mã để yêu cầu đầu ra ASCII. Tôi đã cập nhật mã của mình để làm điều này với chi phí 14 byte. Tôi đã lưu 9 byte bằng cách loại bỏ việc định hình lại () và chỉ cần làm cho ama trận có hình dạng phù hợp để bắt đầu.

Dưới đây là một lời giải thích về cách thức hoạt động của nó:

%Get the name - actually we only need at most the first two characters, but the whole thing will do
f=input('');
e=1;
%This bit makes a map which allows us to find the element (including with
%the names like Kalium. All of the elements appear twice, with the actual
%symbols being the second set. The first set gets all those whose names are
%either more than one character, or don't begin with the first two
%characters of the short for (e.g. Sodium). The string is reshaped into a
%2x40 array. 'Natrium' is a pain in the neck as it as it would get caught
%by 'N' for 'Nitrogen'. I have reversed the element order - so that all the
%ones beginning with N come before N. Some maths is done later on to
%correct for the number of electrons - basically 21-e so 1 becomes 20.
a=['CPACxxSAMSNxxxxxBLHxCKACSPSAMNNFONCBBLHH';'aorhxxilaoexxxxxeiexa rl  ilgae     eie '];

%For each group of 2 in the array of elements
for s=a

    %Remove any spaces from the name
    n=s(s~=32);

    %Do a comparison of the first one or two characters of the requested string
    if (strncmpi(n,f,nnz(n))) 

        %break once the element is found
        break; 
    end

    %If not this element add another electron. We wrap around after 20 as there are two copies of each
    e=mod(e,20)+1; 
end
%e is now number of electrons

%Generate an array of points for each electron
s=spiral(10);
p=[8,18,33,28,23,39,60,53,46,95];p=[p;p+1];

%make an output array
o=s*0;

%Plot all the points in is up to and including the number of electrons (see the notes above for why 21-e)
o(ismember(s,p(1:21-e)))='x';

%And add the text in the centre - we extract the element name from the second group appearance in the 'a' array, hence adding 20.
o(45:46)=a(:,e+20);

%Display the result
char(o')

Đây là đầu ra cho Hydrogen (bỏ qua các dấu chấm, chúng là để tránh các dòng bị xóa khi hiển thị ở đây):

          .
          .
          .
          .
   xH     .
          .
          .
          .
          .
          .

Và đây là đầu ra cho Canxi.

          .
    xx    .
    xx    .
          .
 xxxCa xxx.
 xxx   xxx.
          .
    xx    .
    xx    .
          .

Và đầu ra cho Natrium, hiện đang hoạt động bình thường (trước Natrium, nó sẽ tạo ra Nitơ!).

          .
     x    .
    xx    .
          .
  xxNa x  .
  xx   x  .
          .
    xx    .
          .
          .

Phiên bản mới của mã không hoạt động với Octave vì nó sử dụng spiral()chỉ có trong MATLAB.

Tuy nhiên, bạn có thể kiểm tra mã cũ bằng trình thông dịch trực tuyến Octave :

f=input('');e=1;a=['CPACxxSAMSNxxxxxBLHxCKACSPSAMNNFONCBBLHH';'aorhxxilaoexxxxxeiexa rl  ilgae     eie '];for s=a;n=s(s~=32);if strncmpi(n,f,nnz(n));break;end;e=mod(e,20)+1;end;u=14:(34-e);r=floor(u/8);t=u*pi/4;polar(t,r,'o');text(0,0,a(:,e+20)','horizontalalignment','c') 

Chạy nó, sau đó nhập một chuỗi như: 'Hydrogen' (bao gồm cả dấu ngoặc kép). Sau khi hoàn thành, bạn sẽ phải nhấp vào nút mở rộng cốt truyện (trông giống như một biểu tượng biểu đồ nhỏ ở góc trên cùng bên phải của trình thông dịch) để làm cho nó hiển thị toàn bộ. Trong Octave, không may thêm các dòng nối các điểm, điều này không xảy ra trong MATLAB. Nhưng ít nhất nó cho phép bạn kiểm tra logic đằng sau nó. Như tôi nói, đây vẫn là một đầu ra đồ họa, nhưng bạn có ý tưởng về cách các yếu tố được tìm kiếm.


Bây giờ in bằng ASCII.
Tom Carpenter

2

Python 3, 529 byte

cảm ơn Thomas và Beta đã chỉ ra một số điều đáng lẽ đối với tôi, tiết kiệm cho tôi một số byte

cải tiến lớn: sử dụng cắt chuỗi thay vì tra cứu dict

s="""    {18}
    {10}{14}
    {2}{6}
    {0}{1}
 {17}{9} %s {3}{11}
 {13}{5}    {7}{15}

    {8}{4}
    {16}{12}
    {19}"""
e="H HeLiBe B C N O F NeNaMgAlSiP S ClArK Ca"
r="hydrogen   helium     lithium    beryllium  boron      carbon     nitrogen   oxygen     fluorine   neon       natrium    sodium     magnesium  aluminium  silicon    phosphoroussulfur     chlorine   argon      kalium     potassium  calcium    "
n=r.find(input().lower())//11
n-=(n>10)+(n>18)
print(s.format(*[' *'[i<=n]for i in range(20)])%e[n*2+1:n*2+3])

Không phải là chương trình hay đầu ra đẹp nhất, nhưng này, chúng tôi cần một cái gì đó để loại bỏ thách thức này. Hãy thử trực tuyến .


Trong từ điển, bạn không thể đặt các giá trị trong một chuỗi như sau "H 1"và phân tách chúng ở khoảng trắng sau?
Beta Decay

1
Đó là một tách cà phê dài;)
Beta Decay

0
j=0
do
{
if(elnum=1)
{
draw_circle(100,100,50)
draw_sprite_ext(spr_electron,sprite num,100,100+50,direction,c_white,c_alpha)

}
else
{
if(elnum=2)
{
draw_circle(100,100,50)
draw_sprite_ext(spr_electron,sprite num,100,100+50,direction,c_white,c_alpha)
draw_sprite_ext(spr_electron,sprite num,100,100+50,direction,c_white,c_alpha)
}
if(j>1&&j<=8)
{
if(j>5)
angdeviation=5
else
angdeviation=-5
draw_circle(100,100,100)
draw_sprite_ext(spr_electron,sprite num,100+length_dirx(j*100+angdeviation),100+length_diry(j*100+angdeviation),direction,c_white,c_alpha)
}
}

}until(j<=enum)

3
Chào mừng đến với trang web. Ngôn ngữ này là gì? Tôi sẽ khuyên bạn nên thêm một trái tim như các bài nộp khác với tất cả các thông tin liên quan. Ngoài ra, vì đây là môn đánh gôn, bạn nên cố gắng giảm thiểu thời lượng của chương trình. Tôi không thể chắc chắn bởi vì tôi không biết bạn đang sử dụng ngôn ngữ nào ở đây nhưng có vẻ như bạn có rất nhiều khoảng trắng dư thừa. Hầu hết các ngôn ngữ có một trang mẹo liệt kê một loạt các mẹo chơi golf hữu ích mà bạn có thể sử dụng. Tôi khuyên bạn nên kiểm tra trang cho ngôn ngữ bạn sử dụng ở đây.
Đăng Rock Garf Hunter 17/03/2017

Tôi khá chắc chắn đây là GML (Ngôn ngữ của nhà sản xuất trò chơi độc lập): en.wikipedia.org/wiki/GameMaker_Studio#GameMaker_Lingudocs.yoyogames.com/source/dadiospice/002_Vference/ tựa
Jerry Jeremiah

@WW khác với hai dòng trống Tôi không thấy bất kỳ khoảng trắng thừa rõ ràng nào. Các dòng không xuất hiện kết thúc bằng dấu chấm phẩy hoặc một số dấu phân cách khác vì vậy tôi sẽ không ngạc nhiên rằng không thể có nhiều hơn một điều trên một dòng. Nhưng tên biến có thể ngắn hơn ....
Jerry Jeremiah

Tôi không chắc phần "sprite num" hoạt động như thế nào - từ tài liệu có vẻ như nó phải là một số nguyên và khoảng trắng trong một tên biến sẽ không được phép: docs.yoyogames.com/source/dadiospice/002_Vference/drawing/ Tập
Jerry Jeremiah
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.