Betrachten Sie die folgende Zeichenfolge:
Tin Snips
Diese Zeichenfolge enthält mehrere Atomsymbole im Periodensystem . Wir könnten diesen String umschreiben, um mehrere von ihnen zu identifizieren:
[Ti][N] [Sn][I][P][S]
Natürlich könnten wir es auch so schreiben:
T[In] [S][Ni][P][S]
Die Regeln zum Umschreiben der Eingabe lauten wie folgt:
- Der Fall der Eingabe spielt im Hinblick auf übereinstimmende Atomsymbole keine Rolle.
- Wenn ein Element in einem atomaren Symbol verwendet wird, muss sich die Groß- und Kleinschreibung ändern, damit das Symbol korrekt ist. Bsp .:
h
würde werden[H]
. - Alle Elementsymbole sind in eckigen ASCII-Klammern
[
und eingeschlossen]
. - Leerzeichen bleiben erhalten:
Big ego
"g" und "e" können nicht kombiniert werden[Ge]
. - Nicht alle eingegebenen Zeichen müssen zu einem atomaren Symbol kombiniert werden: Wenn ein eingegebenes Zeichen nicht in ein Symbol eingefügt wird, wird es unverändert weitergegeben (Groß- / Kleinschreibung spielt keine Rolle).
- Wenn ein Symbol erstellt werden kann, muss es erstellt werden. Mit anderen Worten, die Ausgabe
Tin
im obigen Beispiel ist nicht zulässig, da in diesem Wort mindestens ein Symbol erstellt werden kann. Ein Zeichen kann nur dann unbenutzt durchlaufen werden, wenn es nicht zum Aufbau eines Atomsymbols verwendet werden kann. - Für diese Herausforderung gelten alle Elemente von Wasserstoff (1) bis Oganesson (118). Es sind keine höheren Elemente gültig.
- Einige der höheren Elemente haben mehrdeutige Namen und Symbole: Für diese Herausforderung wird die Version bei Wikipedia verwendet. Der Einfachheit halber sind die zulässigen Atomsymbole hier: 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, Ich, Xe, Cs, Ba, La, Ce, Pr, Nd, Pm, Sm, Eu, 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, Nein, Lr, Rf, Db, Sg, Bh, HS, Mt, DS, Rg, Cn, NH, FL, Mc, Lv, Ts, Og.
Schreiben Sie ein Programm oder eine Funktion, die alle möglichen Ausgaben aus einer einzigen bereitgestellten Eingabe generiert. Sowohl die Eingabe als auch die Ausgabe kann in einer beliebigen Form erfolgen. Dies kann eine Zeichenfolge, ein Array von Zeichen oder eine andere Datenstruktur sein: Was auch immer bequem ist und die Eingabe und Ausgabe klar darstellt. Sowohl die Eingabe als auch die Ausgabe können in Ihren Code eingegeben / ausgegeben werden, ganz gleich, wie Sie sich entscheiden: Standardeingabe / -ausgabe, Funktionsargument / -rückgabe oder etwas anderes.
- Die Eingabe muss eine Zeichenfolge (siehe vorheriger Absatz) mit positiver Länge sein, die nur ASCII-Zeichen in willkürlicher Schreibweise und das Leerzeichen (
0x20
) enthält. - Ihr Code muss alle Ausgabezeichenfolgen generieren, die mithilfe der obigen Eingaberegeln erstellt werden können.
- Die Reihenfolge der Ausgabe ist implementierungsdefiniert. Die einzige Voraussetzung ist, dass alle Ausgabe-Strings vorhanden sind.
- Wenn eine gültige Eingabezeichenfolge angezeigt wird, die keine atomaren Symbole enthält, geben Sie einfach die Eingabezeichenfolge aus.
- Wenn eine Eingabezeichenfolge angezeigt wird, die gemäß den obigen Regeln nicht gültig ist (null, null Zeichen, enthält unzulässige Zeichen usw.), kann Ihr Programm alles tun (Absturz, leere Ausgabe usw.).
- Bei der Ausgabe wird die Groß- / Kleinschreibung nicht berücksichtigt, außer bei atomaren Symbolen, die mit dem Periodensystem übereinstimmen müssen.
- Standardlücken sind nicht erlaubt.
Testfälle:
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]
Das ist Codegolf, also lass mich deinen kürzesten Code sehen!
T[I][N]
nicht,[T][I][N]
weil T kein Element ist. Meine Frage (und möglicherweise Rassars) lautet: Müssen wir nur 1 angeben. Nur Ausgaben, bei denen die maximale Anzahl von Elementunterteilungen erfolgt? 2. Nur die minimale Menge an Verschwendung? (Das HeHe mit Wasserstoff gibt an, dass die Antwort auf diese Frage Nein lautet.) 3. Alle Ausgaben, bei denen Übereinstimmungen vollständig erschöpft sind? (in diesem FallT[I][N]
auchT[In]
gültig.) Ich denke, die richtige Interpretation ist 3.Q[U][Ac][K]
undQ[U]a[C][K]
. Recht?Antworten:
Python 3,
289263 BytesEine umfassendere Bibliothek zu Pypi gefunden:
mendeleev
Alte Antwort:
Verwendet eine Bibliothek
elements.py
von http://www.lfd.uci.edu/~gohlke/code/elements.py.html . Es fehlen die Elemente 110 bis 118, aber es war die aktuellste Bibliothek, die ich finden konnte. Das Hinzufügen der fehlenden Elemente kostet 40 Byte.Der schwierigste Teil war die Logik dafür, wann ein Zeichen durchlaufen werden kann, ohne Teil eines Elementsymbols zu sein.
quelle
mendeleev
Benutzer, keine Bibliothek?Jelly ,
192191 Bytes-1 durch Verwendung von
Ɗ
(ein seit der Entwicklung schnell)Probieren Sie es online! - Der Testfall "Stack Exchange" ist zu ineffizient, um innerhalb der 60er-Grenze abgeschlossen zu werden (wenn er offline ausgeführt wird, wird innerhalb von 2 Minuten das richtige Ergebnis erzielt).
Wie?
Die erste Codezeile ist ein niladischer Link zum Erstellen einer Liste mit allen 118 Elementsymbolen. Zu diesem Zweck werden zwei Listen verkettet, wobei die erste alle Listen mit Zeichen der Länge 2 (dh Zeichenfolgen) enthält und die zweite Liste mit Zeichen und Titeln die resultierende Liste enthält. Die beiden Listen selbst werden hauptsächlich durch Nachschlagen von Wörtern in Jellys Wörterbuch erstellt, um einzelne Zeichenfolgen zu erstellen.
Die erste dieser Komprimierungen ist:
was ergibt
Wo alle bis auf den letzten Eintrag (durch Leerzeichen getrennt) Einträge in Jellys Wörterbuch sind. Die Leerzeichen werden mit herausgefiltert
ḟ⁶
und das Ergebnis in zwei Teile aufgeteilt:Der Zweite,
wird aus der Verkettung der Wörter "finch", "pub", "sky" und "vow" (ohne Leerzeichen) gebildet und ist als solche eine Liste von Zeichen:
Die beiden Listen sind mit verkettet
;
und jeder Eintrag wird mit Titel in Großbuchstaben versehenŒt
, was ergibt:Eine Liste mit allen 118 Elementsymbolen nach Bedarf (es gibt Duplikate, aber das ist in Ordnung).
Die zweite Codezeile ist eine monadische Verknüpfung (eine Hilfsfunktion, die eine Eingabe akzeptiert), die eine 1 zurückgibt, wenn die Eingabe mit dem Titel "cased" in der oben erstellten Liste vorhanden ist, und ansonsten eine 0.
Die dritte Codezeile ist der Hauptlink, eine monadische Funktion, die eine Zeichenfolge verwendet und bei Bedarf eine Liste mit Listen von Zeichen (dh Zeichenfolgen) zurückgibt:
quelle
C ++ 11,
944928 BytesHier ist ein wirklich schrecklicher Code, der aber funktionieren sollte. Könnte wohl noch viel kürzer gemacht werden.
Rufen Sie an mit:
quelle