Pangrams
Der schnelle braune Fuchs sprang über den faulen Hund.
Dies ist ein Beispiel für einen Pangram - ein Satz, der jeden Buchstaben des Alphabets mindestens einmal enthält.
Eine Selbstaufzählung Pangram ist ein Satz, der die Kriterien eines Pangrams erfüllt, indem er eine Analyse seiner eigenen Buchstabenanzahl erstellt.
Ein Beispiel dafür ist der Satz
Dieser Pangram enthält vier As, ein B, zwei Cs, ein D, dreißig Es, sechs Fs, fünf Gs, sieben Hs, elf Is, ein J, ein K, zwei Ls, zwei Ms, achtzehn Ns, fünfzehn Os, zwei Ps , ein Q, fünf Rs, siebenundzwanzig Ss, achtzehn Ts, zwei Us, sieben Vs, acht Ws, zwei Xs, drei Ys und ein Z.
Die Herausforderung
Produziere eine Funktion, wobei die Eingabe die Zeichenkette ist, die in das Briefinventar führt. Im Beispiel wäre die Eingabe "Dieser Pangram enthält". Die Menge jedes Buchstabens muss in schriftlicher Form vorliegen und zur angezeigten Buchstabenanzahl beitragen.
Regeln
- Das Oxford-Komma ist optional
- Verwenden Sie ein kaufmännisches Und vor Z (oder schließen Sie für den harten Modus die Möglichkeit ein, in der Funktion zwischen "&" und "und" zu wechseln)
- Jeder Buchstabe wird auf die Gesamtzahl der Buchstaben angerechnet
- Keine nicht geschriebenen Zahlen
- Das ist Code-Golf also gewinnt der kürzeste Code in Bytes
- In hono u r des Ehepaares an diesem Wochenende sind die Zahlen in der Königin Englisch geschrieben werden. zB
nine hundred and ninety-nine Gs
für 999 Vorkommen des Buchstabens G undnine hundred and nine Gs
für 909. - Größenordnungen sind in der üblichen Kurzskalen-Namenskonvention zu schreiben
Edge-Fälle
- In einigen Fällen bleibt der Code in einer Schleife hängen. Wenn beispielsweise zwei Os vorhanden sind, erhöht der Code die Anzahl auf drei Os, wodurch der Code erneut zwei Os zählt. Wenn die Berechnung jedes zweiten Buchstabens, bevor Sie darauf zurückkommen, das Problem nicht lösen kann, betrachten Sie die Eingabe als falschen Starter und Ausgang
false
.null
oder eine leere Zeichenfolge. - Wenn ein Buchstabe mehr als 999 Mal vorkommt, sollte die Eingabe als falscher Starter betrachtet werden.
Testfälle
- "Dieser Pangram enthält" sollte den Beispielsatz ausgeben
quelle
o
s ohne das Wort für die Zählung enthälttwo
, hat die gesamte Zeichenfolge jetzt drei-o
s, was bedeutet, dass das Wort jetzt falsch ist. Wenn Sie es umschalten, wird es wieder falsch , etc.Rob enjoys any sentence with two As, two Bs, two Cs, one D, thirty five Es, four Fs, three Gs, nine Hs, eight Is, two Js, one K, two Ls, one M, twenty two Ns, eighteen Os, one P, one Q, nine Rs, twenty three Ss, twenty three Ts, three Us, four Vs, eleven Ws, one X, seven Ys, & one Z.
Antworten:
Python 2 , 615 Bytes
Probieren Sie es online!
Die Funktion
f
dauertp
als Zeichenfolge das Präfix; und gibt ein Tupel einer ganzen Zahl zurück, die die Anzahl der durchgeführten Schritte und das Autogramm darstellt.Die Funktion
g
codiert eine Zahl1<=n<=999
in ihre englische Zeichenfolge. es nimmt 291 Bytes ein, ungefähr die Hälfte der Gesamtbytezahl. Der Codekodiert die Zeichenkette
s
in ein (möglicherweise autogrammatisches) Pangramt
.Wir durchlaufen den Prozess und hoffen auf die Situation, in der wir eine
t
solche findent
das ein Autogramm ist (dh wot==s
).Wennwir in eine Schleife geraten, stoßen wir die Anzahl der Buchstaben ganz ad hoc nach dem Zufallsprinzip an.Für die meisten Werte von
p
läuft dieser Prozess bei TIO ab. In der Regel werden Millionen von Möglichkeiten geprüft, bevor eine „gewinnbringende“ Kombination gefunden wird.Ich habe überhaupt keinen Beweis, aber meine Vermutung ist: (a) Abgesehen von einer erschöpfenden Brute-Force-Suche, die der Beschreibung des Urhebers Lee Sallows ähnelt und in Hardware (!) Implementiert, ist diese Art von zufälliger Heuristik ungefähr so gut wie du bekommen kannst; und (b) es wird keine Lösung für viele (die meisten?) Anfangssätze geben
p
.quelle
map(chr,range(65,91))
spart einige Bytes.