Einführung
Wie viel des englischen Alphabets verwendet eine bestimmte Zeichenfolge? Der vorige Satz verwendet 77%. Es hat 20 eindeutige Buchstaben (howmucftenglisapbdvr) und 20/26 ≃ 0,77.
Herausforderung
Geben Sie für eine Eingabezeichenfolge den Prozentsatz der Buchstaben des englischen Alphabets in der Zeichenfolge zurück.
Die Antwort kann in Prozent oder als Dezimalzahl erfolgen.
Die Eingabezeichenfolge kann sowohl Groß- und Kleinschreibung als auch Interpunktion enthalten. Sie können jedoch davon ausgehen, dass sie keine diakritischen oder akzentuierten Zeichen enthalten.
Testfälle
Eingang
"Did you put your name in the Goblet of Fire, Harry?" he asked calmly.
Einige gültige Ausgaben
77%, 76.9, 0.7692
Eingang:
The quick brown fox jumps over the lazy dog
Alle gültigen Ausgaben:
100%, 100, 1
Die erwartete Ausgabe für "@#$%^&*?!"
und ""
ist 0.
"@#$%^&*?!"
,""
77%
und76.9
akzeptiert wird, wird auch77
akzeptiert?Antworten:
Python 3 , 42 Bytes
Probieren Sie es online!
Wir filtern alle nicht-alphabetischen Zeichen aus der Zeichenkette heraus, indem wir den (eingestellten) Unterschied zwischen Groß- und Kleinschreibung nehmen. Dann nehmen wir die Länge und dividieren durch 26.
Python 3 , 46 Bytes
Probieren Sie es online!
Zählen Sie die eindeutigen alphabetischen Zeichen (Kleinbuchstaben) und dividieren Sie durch 26. In Python 2 wären 3 weitere Zeichen erforderlich. zwei für den Wechsel
{*...}
zuset(...)
und eine für die Herstellung eines Schwimmers:26.
um eine Unterteilung des Bodens zu vermeiden.Python 3 , 46 Bytes
Probieren Sie es online!
Gleiche Länge, im Wesentlichen die gleiche wie die vorherige, jedoch ohne "eingebaute" Zeichenfolgemethode.
quelle
1.0
und nicht1
? (Ich wollte es nicht ausdrücklich verbieten, um bestimmte Sprachen nicht zu benachteiligen, aber ich bin neugierig)//
, aber dann wäre es immer eine Ganzzahldivision, was wir hier natürlich nicht wollen. Es ist sinnvoll, dass sie den Datentyp der Ausgabe nicht von den spezifischen Werten der Operanden abhängig gemacht haben, was bedeutet, dass immer floatet, auch wenn es sich um eine ganze Zahl handelt.MATL , 8 Bytes
Probieren Sie es bei MATL Online aus
Erläuterung
quelle
Oktave / MATLAB, 33 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E ,
876 Bytes-1 Byte dank @LuisMendo .
Probieren Sie es online aus oder überprüfen Sie ein paar weitere Testfälle .
Von @Grimy bereitgestellte 6-Byte-Alternative :
Probieren Sie es online aus oder überprüfen Sie ein paar weitere Testfälle .
Beide Programme werden dezimal ausgegeben.
Erläuterung:
quelle
láêg₂/
auch ein 6-Byte.C # (Visual C # Interactive Compiler) ,
56,49ByteProbieren Sie es online!
-6 Bytes dank innat3
quelle
&&
auf&
.APL (Dyalog Extended) , 10 Byte SBCS
Anonyme implizite Präfixfunktion. Gibt einen Dezimalbruch zurück.
Probieren Sie es online!
⌈
Großbuchstaben⎕A∩
Kreuzung mit dem Großbuchstaben A lphabet≢
Gesamtlänge∘
dann26÷⍨
durch sechsundzwanzig teilenquelle
⌹∘≤⍨⎕A∊⌈
Perl 6 ,
2724 Bytes-3 bytes dank nwellnhof
Probieren Sie es online!
quelle
.lc
.fc
Bash- und Gnu-Utils (
8178686042 Bytes)-8 Bytes dank @wastl
-18 Bytes dank Nahuel mit einigen Tricks, die ich nicht kannte:
sort -f
undgrep -i
Groß- / Kleinschreibung ignorierensort -u
ist ein Ersatz für| uniq
quelle
echo $(tr A-Z a-z|tr -cd a-z|fold -1|sort -u|wc -l)/26|bc -l
K (OK) ,
1915 BytesLösung:
Probieren Sie es online!
Erläuterung:
Konvertieren Sie die Eingabe in Kleinbuchstaben, modulo 97 ("az" ist 97-122 in ASCII, modulo 97 ergibt 0-25), nehmen Sie eindeutige, summieren Sie Ergebnisse, die niedriger als 26 sind, und konvertieren Sie sie in den Prozentsatz von 26.
Anmerkungen:
1-%[;26]
=>1-1%26%
#(!26)^
=>+/26>?
quelle
97
hier macht%[;26]
->1%26%
1%26%#?(26>)#97!_
1%26%+/26>?97!_
für 15PowerShell ,
5552 ByteProbieren Sie es online!
Erster Versuch, immer noch zufällige Ideen auszuprobieren
BEARBEITEN: @Veskah wies darauf hin, dass ToUpper aufgrund des Nummernbereichs ein Byte spart, zusätzlich
()
ein Leerzeichen entferntErweiterung:
($args|% ToUpper|% ToCharArray|sort|get-unique|where{$_-in 65..90}).count/26
Ändert die Zeichenfolge in
Kleinbuchstaben, erweitert sie zu einem Array, sortiert die Elemente und wählt die eindeutigen Buchstaben aus (gu benötigt sortierte Eingabe). Behalten Sie nur Zeichen mit dem ASCII-Wert97 bis 122 (a bis z)65 bis 90 (A bis Z) bei. Zähle die Summe und dividiere durch 26 für die dezimale Ausgabequelle
R , 47 Bytes
Probieren Sie es online!
Konvertiert in Großbuchstaben und dann in ASCII-Codepunkte und überprüft, ob Werte von 65:90 für A: Z vorliegen.
quelle
scan
um nicht in Anführungszeichen zu teilen, wie es der Standard tut?Retina 0,8,2 , 45 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Kleinbuchstaben und Satzzeichen löschen.
Deduplizieren
Mit 100 multiplizieren.
Addiere 13.
Ganze Zahl durch 26 teilen und in Dezimalzahl umwandeln.
quelle
APL (Dyalog Extended) , 8 Bytes
Probieren Sie es online!
lose auf Adáms Antwort
⌈
Großbuchstaben⎕A∊
boolescher (0 oder 1) Vektor der Länge 26, der angibt, welche Buchstaben des englischen A lphabet im String sind⌹∘≤⍨
arithmetisches Mittel, dh Matrixaufteilung des Arguments und ein All-1-Vektor gleicher Längequelle
Holzkohle , 11 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Die Ausgabe erfolgt als Dezimalzahl (oder
1
für Pangrams). Erläuterung:quelle
Stapel, 197 Bytes
Übernimmt die Eingabe für STDIN und gibt einen gerundeten Prozentsatz aus. Erläuterung:
Geben Sie die Zeichenfolge ein.
Zitate entfernen, weil sie in Batch Kopfschmerzen bereiten.
Beginnen Sie mit einem halben Buchstaben für Rundungszwecke.
Löschen Sie nacheinander jeden Buchstaben aus der Zeichenfolge. Rufen Sie die Unterroutine auf, um zu prüfen, ob sich aufgrund der Art und Weise, wie Batch Variablen analysiert, etwas geändert hat.
Berechnen Sie das Ergebnis als Prozentsatz.
Start des Unterprogramms.
Wenn sich beim Löschen eines Buchstabens die Zeichenfolge geändert hat, erhöhen Sie die Buchstabenanzahl.
quelle
Pepe ,
155138 BytesProbieren Sie es online! Die Ausgabe erfolgt in Dezimalform.
Erläuterung:
quelle
K (oK) , 19 Bytes
Probieren Sie es online!
J , 30 Bytes
Probieren Sie es online!
quelle
32!
ist zu weit:
Retina ,
574635 Bytes-11 Bytes, inspiriert von @Neils Trick, vor dem Teilen unäre 13 hinzuzufügen .
Weitere -11 Bytes dank @Neil direkt.
Rundet (richtig) auf eine ganze Zahl.
Probieren Sie es online aus.
574640-Byte-Version, die mit dezimaler Ausgabe arbeitet:Gleiche -11 Bytes sowie zusätzliche -6 Bytes dank @Neil .
15.3
15.4
Probieren Sie es online aus.
Erläuterung:
Konvertieren Sie alle Buchstaben in Kleinbuchstaben:
Entfernen Sie alle Nichtbuchstaben:
Alle Buchstaben vereinheitlichen:
Ersetzen Sie jeden einzelnen Buchstaben durch 1000 Unterstriche:
Zählen Sie, wie oft 26 benachbarte Unterstriche hineinpassen:
Fügen Sie einen Punkt an der richtigen Stelle ein:
quelle
.*
könnte nur.
für eine 1-Byte-Speicherung sein, aber Sie können weitere 10 Byte speichern, indem SieD
eduplicate verwenden, anstatt es manuell zu tun!D
-builtin, danke! Und nicht sicher, warum ich.*
stattdessen verwendet habe.
.. Danke für -11 Bytes in beiden Versionen! :)-1`\B
die gewünschte Einfügeposition direkt passt.Java 8,
62,59 Bytes-3 Bytes dank @ OlivierGrégoire .
Probieren Sie es online aus.
Erläuterung:
quelle
c&95
in Kombination mitc%91>64
aus irgendeinem Grund. Ich denke, Sie haben mir Golf schon ein paar Mal vorgeschlagen.s->{int r=0,b=0;for(var c:s)if((c&95)%91>64&&b<(b|=1<<c))r++;return r/26.;}
(75 Bytes)Julia 1.0 , 34 Bytes
Verwendet die vektorisierte Version des Operators ∈ und prüft, ob alle Zeichen im Bereich von a bis z in der Zeichenfolge enthalten sind. Summiert dann über das resultierende BitArray und dividiert durch die Gesamtzahl der möglichen Buchstaben.
Probieren Sie es online!
quelle
C 96 Bytes
Probieren Sie es online!
quelle
Perl 5
-MList::Util=uniq -p
, 24 BytesProbieren Sie es online!
quelle
Stax , 9 Bytes
Führen Sie es aus und debuggen Sie es
quelle
u
und verwenden|b
, aber die Einsparungen gehen beim Packen verloren. Ich habe vielleicht einen 8-Byte-Dolmetscher, aber der Online-Dolmetscher ist komisch und fehlerhaft.|b
. Es mutiert seinen Operanden fälschlicherweise, anstatt eine Kopie zu erstellen. Ich habe ein Github-Problem für den Fehler erstellt. github.com/tomtheisen/stax/issues/29 Funktioniert als Problemumgehung|b
beim ersten Mal ordnungsgemäß. Danach müssen Sie möglicherweise die Seite neu laden. Wenn Sie einen anderen Fehler gefunden haben und eine Reproduktion bereitstellen können, kann ich ihn wahrscheinlich beheben.v
am Anfang, legen Sie|b
nachVa
, laufen, entfernen Sie das erstev
, Entfernen|b
, umpacken. Ja, das ist der Fehler, den ich gefunden habe.Gelee , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
JavaScript (Node.js) , 45 Byte
Probieren Sie es online!
JavaScript (Node.js) , 47 Byte
Probieren Sie es online!
quelle
Python 3 ,
5149 Bytes51 -> 49 Bytes, danke an alexz02
Probieren Sie es online!
quelle
lambda s:len({*filter(str.isalpha,s.lower())})/26
Japt , 9 Bytes
Versuch es
quelle
Python 2 , 57 Bytes
Probieren Sie es online!
Etwas länger als die Python 3-Antwort von ArBo, aber trotzdem in Python 2 als anderer Ansatz gepostet.
quelle
Rubin
-n
,3834 Bytes-4 Bytes von @historcrat!
Probieren Sie es online!
quelle
C 95 Bytes
(Anmerkung: rundet ab)
Alternative dezimal zurückgegebene Version (95 Byte):
Dies leiht einige von @Steadybox Antwort.
quelle