Elektron Konfigürasyon Diyagramları


13

Meydan okuma

Bir eleman adı verildiğinde, elektron konfigürasyonunu çıktılayın.

Giriş

Girişiniz, bazı istisnalar dışında her bir öğenin tam adı olacaktır (aralık Hidrojen, 1, Kalsiyum, 20'dir) - aşağıdaki girdileri hesaba katmanız gerekir:

Natrium - This is sodium
Kalium - This is potassium

"Sodyum" ve "potasyum" girişlerinin hala geçerli olması gerektiğini unutmayın.

İlk harf her zaman büyük yazılır.

Çıktı

Elektron konfigürasyon diyagramının nasıl oluşturulacağı konusunda rehberlik için bu web sayfasına bakabilirsiniz .

Aşağıdaki listede her kabuktaki maksimum elektron sayısı gösterilmektedir:

  • 1. kabuk - 2 elektron
  • 2. kabuk - 8 elektron
  • 3. kabuk - 8 elektron
  • 4. kabuk - 14 elektron (bu kabuktaki maksimum elektron sayısı 2 olmasına rağmen)

Elektron konfigürasyonunun örnek bir çıktısı şöyledir:

Diyagramın ortasında, öğenin bir ila iki harf sembolü olmalıdır.

Noktalar veya çarpılar kullanılabilir ve yerleştirildikleri yer önemli değildir.

Çıktı tam olarak böyle olmak zorunda değildir, ancak bir ASCII grafiği olması gerekir. Olamayacak tek şey, formda 2.8.8.1veya bunun gibi başka bir formdadır.

Daireler gerekli değil

Periyodik elemanlar tablosuna erişen veya şemalar veya elektron konfigürasyonları üreten yerleşik fonksiyonlar burada izin verilmez.

Kazanan

Bayt cinsinden en kısa program kazanır.


1
Elektronları çiftler halinde mi göstermeliyiz?
lirtosiast

5
ASCII sanat veya grafik çıktılarından birine gereksinim duymanızı öneririm, aksi takdirde gönderimler gerçekten karşılaştırılamaz.
Alex A.

İlk harf her zaman büyük
Tom Carpenter

Ayrıca bağlantıda onları farklı çiziyorlar - üstteki ilk kabukta her iki elektron var, üstte biri altta biri var.
Tom Carpenter

1
20 yaşından sonra neler olduğu hakkında daha doğru bilgi için buraya bakın: en.wikipedia.org/wiki/Electron_shell
Level River St

Yanıtlar:


3

MATLAB, 360363 290304295 bayt

Octave ile eski kodun nasıl test edileceğini görmek için yazının altına bakın.

Bu kod, elemanın adını (Kalium vb. Dahil) alır ve çıktıyı kurallar değiştiğinden ascii formatında gönderir.

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')

Bir ASCII çıkışı gerektirecek kodu yazdığım için kurallar değişti. 14 bayt pahasına bunu yapmak için kodumu güncelledim. Yeniden şekillendirmeden () kurtularak ve sadece amatrisi başlamak için doğru şekli yaparak 9 bayt kurtardım .

İşte nasıl çalıştığına dair bir açıklama:

%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')

Bu Hidrojen için çıktıdır (noktaları görmezden gelin, burada gösterildiğinde çizgilerin kaldırılmasını önlemek içindir):

          .
          .
          .
          .
   xH     .
          .
          .
          .
          .
          .

Ve işte Kalsiyum için çıktı.

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

Ve şimdi düzgün çalışan Natrium çıkışı (Natrium'dan önce Azot ile sonuçlanır!).

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

Kodun yeni sürümü spiral(), yalnızca MATLAB'da bulunan Octave ile çalışmaz .

Ancak Octave çevrimiçi yorumlayıcısını kullanarak eski kodu test edebilirsiniz :

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') 

Bunu çalıştırın, sonra 'Hidrojen' gibi bir dize girin (tırnak işaretleri dahil). Tamamlandığında, tüm şeyi göstermesi için çizimi genişlet düğmesine (yorumlayıcının sağ üst köşesinde küçük bir grafik simgesine benziyor) tıklamanız gerekir. Octave'de maalesef noktalara katılan çizgiler ekliyor, bu MATLAB'da gerçekleşmiyor. Ama en azından arkasındaki mantığı test etmenizi sağlar. Dediğim gibi, bu hala grafiksel bir çıktı, ancak öğelerin nasıl arandığı hakkında fikir sahibi oluyorsunuz.


Şimdi ASCII'de yazdırıyor.
Tom Carpenter

2

Python 3, 529 bayt

Bana açık olması gereken bazı şeyleri işaret ettikleri için Thomas ve Beta'ya teşekkürler, bana biraz bayt kazandırdı

büyük gelişme: dikte arama yerine dize dilimleme kullanma

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])

En güzel programlar ya da çıktılar değil, ama hey, bu meydan okumayı başlatacak bir şeye ihtiyacımız vardı. Çevrimiçi deneyin .


Sözlükte, değerleri tek bir dizeye koyabilir ve "H 1"daha sonra boşlukta ayıramaz mısınız?
Beta Çürümesi

1
Bu uzun bir fincan kahve;)
Beta Çürümesi

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
Siteye hoş geldiniz. Bu hangi dilde? İlgili tüm bilgileri içeren diğer gönderiler gibi bir kalp eklemenizi tavsiye ederim. Ayrıca bu kod golf olduğu için programınızın uzunluğunu en aza indirmeyi hedeflemelisiniz. Emin olamıyorum çünkü burada hangi dili kullandığınızı bilmiyorum ama çok fazla boşluk olduğu anlaşılıyor. Çoğu dilde, kullanabileceğiniz birçok yararlı golf ipucunu listeleyen bir ipuçları sayfası bulunur. Burada kullandığınız dil için sayfayı kontrol etmenizi tavsiye ederim.
Ad Hoc Garf Hunter


@WW İki boş satırdan başka, belirgin bir fazla boşluk görmüyorum. Çizgiler noktalı virgül veya başka bir sınırlayıcıyla bitmiyor gibi görünüyor, bu yüzden bir satırda birden fazla şey olmadığına şaşırmam. Ancak değişken isimleri daha kısa olabilir ...
Jerry Jeremiah

"Sprite num" bölümünün nasıl çalıştığından emin değilim - bir tamsayı olması gerektiği ve değişken adındaki boşluklara izin verilmeyeceği belgelerinden docs.yoyogames.com/source/dadiospice/002_reference/drawing/ …
Jerry Jeremiah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.