Aşağıdaki dizeyi düşünün:
Tin Snips
Bu dize periyodik tabloda birkaç atomik sembol içerir . Birkaçını tanımlamak için bu dizeyi yeniden yazabiliriz:
[Ti][N] [Sn][I][P][S]
Tabii ki, bu şekilde de yazabiliriz:
T[In] [S][Ni][P][S]
Girişi yeniden yazma kuralları aşağıdaki gibidir:
- Giriş durumu, eşleşen atom sembolleri açısından önemli değildir.
- Atomik bir sembolde bir eleman kullanılıyorsa, sembolü doğru olacak şekilde durumu değişmelidir. Örn:
h
olur[H]
. - Tüm eleman sembolleri ASCII köşeli parantez içine alınır
[
ve]
. - Boşluk korunur:
Big ego
"g" ve "e" harflerini birleştiremez[Ge]
. - Tüm giriş karakterlerinin atomik bir sembolle birleştirilmesi gerekmez: bir giriş karakteri bir sembole konmazsa, olduğu gibi iletilir (büyük / küçük harf önemli değildir).
- Bir sembol yapılabilirse, yapılmalıdır . Başka bir deyişle,
Tin
yukarıdaki örnekte çıktı alınmasına izin verilmez, çünkü bu sözcükte en az bir sembol oluşturmak mümkündür. Bir karakterin kullanılmayandan geçirilebileceği tek zaman, bir atom sembolü oluşturmak için kullanılamadığı zamandır. - Bu zorluğun amaçları doğrultusunda Hidrojen (1) ila Oganesson (118) arasındaki tüm elementler geçerlidir. Daha yüksek hiçbir öğe geçerli değil.
- Bazı yüksek unsurların belirsiz isimleri ve simgeleri vardır: bu zorluğun amaçları için Wikipedia'daki versiyon kullanılacaktır. Kolaylık sağlamak için, izin verilen atomik semboller burada: H, He, Li, Be, B, C, N, O, F, Ne, Na, Mg, Al, Si, P, S, Cl, Ar, K, Ca, Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn, Ga, Ge, As, Se, Br, Kr, Rb, Sr, Y, Zr, Nb, Mo, Tc, Ru, Rh, Pd, Ag, Cd, In, Sn, Sb, Te, I, Xe, Cs, Ba, La, Ce, Pr, Nd, Pm, Sm, Ab, Gd, Tb, Dy, Ho, Er, Tm, Yb, Lu, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg, Tl, Pb, Bi, Po, At, Rn, Fr, Ra, Ac, Th, Pa, U, Np, Pu, Am, Cm, Bk, Cf, Es, Fm, Md, Hayır, Lr, Rf, Db, Sg, Bh, Hs, Mt, Ds, Rg, Cn, Nh, Fl, Mc, Lv, Ts, Og.
Sağlanan tek bir girişten tüm olası çıkışları üreten bir program veya işlev yazın. Hem giriş hem de çıkış istediğiniz herhangi bir biçimde olabilir. Bu, bir dize, karakter dizisi veya başka bir veri yapısı olabilir: hem uygun hem de giriş ve çıkışı açıkça temsil eder. Hem giriş hem de çıkış kodunuzun içine / dışına geçirilebilir, ancak siz seçin: standart giriş / çıkış, işlev bağımsız değişkeni / dönüşü veya başka bir şey.
- Girdi, yalnızca keyfi büyüklüğün ASCII karakterlerini ve space (
0x20
) karakterini içeren pozitif uzunlukta bir dize (önceki paragrafa bakınız ) olmalıdır. - Kodunuz, yukarıdaki giriş kuralları kullanılarak oluşturulabilecek tüm çıktı dizelerini oluşturmalıdır.
- Çıktının sırası uygulama tanımlıdır. Tek gereksinim, tüm çıkış dizelerinin mevcut olmasıdır.
- Atomik sembol içermeyen geçerli bir giriş dizesi ile sunulursa, giriş dizesini çıktılamanız yeterlidir.
- Yukarıdaki kurallara uygun olmayan bir giriş dizesi ile sunulursa (boş, sıfır karakter, geçersiz karakterler içerir, vb.) Programınız her şeyi yapabilir (kilitlenme, boş çıktı, vb.)
- Çıktı, periyodik tabloyla eşleşmesi gereken atomik semboller dışında büyük / küçük harfe duyarlı değildir.
- Standart boşluklara izin verilmez.
Test senaryoları:
Tin Snips
[Ti][N] [Sn][I][P][S]
[Ti][N] [S][Ni][P][S]
[Ti][N] [S][N][I][P][S]
T[In] [Sn][I][P][S]
T[In] [S][Ni][P][S]
T[In] [S][N][I][P][S]
T[I][N] ...
Quack
Q[U][Ac][K]
Q[U]a[C][K]
hehe
[H]e[H]e
[H]e[He]
[He][H]e
[He][He]
Stack Exchange
[S][Ta][C][K] Ex[C][H]a[N][Ge]
[S]t[Ac][K] Ex[C][H]a[N][Ge]
Bu kod golf, bu yüzden en kısa kodunu göreyim!
Q[U][Ac][K]
ve Q[U]a[C][K]
. Sağ?
T[I][N]
değil[T][I][N]
T unsuru olmadığı için. Sorum (ve muhtemelen Rassar'ın) şudur: sadece 1 vermek zorunda mıyız? Sadece eleman alt sınırlarının maksimum sayısının yapıldığı çıktılar? 2. Sadece asgari miktarda israf? (Hidrojenli HeHe bunun cevabının hayır olduğunu gösterir) 3. Kibritlerin tamamen tükendiği tüm çıktılar? (Bu durumdaT[I][N]
sıra sıraT[In]
geçerli olacaktır.) Bence doğru yorumlama 3'tür