Betrachten Sie eine Zeichenfolge der Länge N, wie z Peanut Butter
mit N = 13. Beachten Sie, dass die Zeichenfolge N-1 Paare benachbarter Zeichen enthält. Denn Peanut Butter
das erste der 12 Paare ist Pe
, das zweite ist ea
, das letzte ister
.
Wenn es sich bei den Paaren hauptsächlich um verschiedene Zeichen handelt, hat die Zeichenfolge eine klobige Qualität, z chUnky
.
Wenn diese Paare zumeist dasselbe Zeichen sind, hat die Zeichenfolge eine glatte Qualität, zsssmmsss
.
Definiere das Klumpigkeit eines Strings als das Verhältnis der Anzahl der Paare mit zwei verschiedenen Zeichen zur Gesamtzahl der Paare (N-1).
Definiere das Glätte einer Zeichenfolge als Verhältnis der Anzahl der Paare mit zwei identischen Zeichen zur Gesamtzahl der Paare (N-1).
Beispielsweise, Peanut Butter
tt
Hat nur ein Paar mit identischen Zeichen ( ), so beträgt seine Glätte 1/12 oder 0,0833 und seine Klumpigkeit 11/12 oder 0,9167.
Leere Zeichenfolgen und Zeichenfolgen mit nur einem Zeichen werden als 100% glatt und 0% klobig definiert.
Herausforderung
Schreiben Sie ein Programm, das eine Zeichenfolge beliebiger Länge verwendet und entweder das Chunkiness- oder das Smoothness-Verhältnis als Gleitkommawert ausgibt.
- Nehmen Sie die Eingabe über stdin oder die Befehlszeile vor, oder schreiben Sie eine Funktion, die eine Zeichenfolge akzeptiert.
- Sie können davon ausgehen, dass die Eingabezeichenfolge nur druckbare ASCII- Zeichen enthält (und daher einzeilig ist).
- Geben Sie den Gleitkommawert auf 4 oder mehr Dezimalstellen aus, oder geben Sie ihn zurück, wenn Sie eine Funktion geschrieben haben. Nachkommastellen, die keine Informationen übermitteln, sind nicht erforderlich, z. B.
0
ist in Ordnung statt0.0000
. - Wählen Sie nach Belieben Chunkiness oder Smoothness. Stellen Sie nur sicher, welches Ihr Programm ausgibt.
Der kürzeste Code in Bytes gewinnt.
Beispiele
Peanut Butter
Chunkiness →: 0.91666666666
, Glätte: 0.08333333333
chUnky
→ chunkiness: 1.0
, Glätte: 0.0
sssmmsss
→ chunkiness: 0.28571428571
, Glätte: 0.71428571428
999
→ chunkiness: 0.0
, Glätte: 1.0
AA
→ chunkiness: 0.0
, Glätte: 1.0
Aa
→ chunkiness: 1.0
, Glätte: 0.0
!
→ chunkiness: 0.0
, Glätte: 1.0
[empty string] → chunkiness: 0.0
, Glätte:1.0
Bonusfrage: Welche bevorzugen Sie , klobige oder glatte Saiten ?
quelle
Antworten:
APL, 10 Bytes
Dies liest die Eingabe von stdin und druckt die Chunkiness zu stdout. Der Algorithmus ist der gleiche wie für die J-Lösung.
quelle
CJam, 19 Bytes
100% klobiger Quellcode, der die Klumpigkeit berechnet .
Versuchen Sie diese klobige Güte online.
Wie es funktioniert
Offensichtlich ist NaN auf 4 Dezimalstellen gerundet 0.
quelle
2ew
Ansatz, den ich ausprobiert habe. Die 0/1-Brief-Sonderfälle haben mich umgebracht._
bewegte sich. Ich bin mir nicht sicher, ob es darauf ankommt.Pyth,
1312 BytesVöllig klobiger Code, der die Klumpigkeit berechnet.
Demonstration. Kabelbaum testen.
quelle
z
verursacht einen Fehler bei der Online- Leereingabe . Ich werde diesen Fehler beheben. Dieser Code ist jedoch in Ordnung.TI-BASIC, 46 Bytes
sub(x1,x2,x3
Gibt den Teilstring eines Stringsx1
an, der mit der Nummer beginnt (eins) und mit der Nummerx2
endetx3
, und erstellt dannseq(
eine Sequenz.Gibt den Glättungswert an. Die
Ans
Variable ist0
standardmäßig, so dass wir nicht ein brauchen ,Else
um dieIf
Aussage, oder zum Speichern von etwasAns
vorher.quelle
Matlab (
3736 Bytes)Dies kann mit der folgenden anonymen Funktion erfolgen, die Chunkiness zurückgibt:
Bemerkungen:
In alten Matlab-Versionen (wie R2010b) müssen Sie
+
das char-Arrayx
in ein double-Array umwandeln :Dies ist jedoch in neueren Versionen (getestet in R2014b) nicht der Fall, wodurch ein Byte eingespart wird. Vielen Dank an Jonas für seinen Kommentar.
max
behandelt die Groß- und Kleinschreibung (für Chunkiness)Beispiel:
quelle
diff('abc')
wird keine Warnung ausgegeben .> <> ,
4036 BytesDieses Programm gibt die Chunkiness eines Strings zurück.
Erläuterung
Vorherige Einreichung (37 + 3 = 40 Bytes)
Dieses Programm gibt die Glätte eines Strings zurück. Die Eingabe erfolgt über das
-s
Flag, zquelle
C #,
9489 BytesSub 100 Bytes, also denke ich, das ist eine Art Sieg für sich?
Dies ist eine Funktionsdefinition (gemäß Spezifikation zulässig), die die Glätte der Eingabezeichenfolge zurückgibt :
Ziemlich einfach, wenn die Länge 0 oder 1 ist, gibt es 1 zurück, andernfalls vergleicht es die Zeichenkette mit sich selbst abzüglich des ersten Zeichens und gibt dann die Anzahl identischer Paare dividiert durch die Anzahl der Paare zurück.
Bearbeiten - Ersetzte Teilzeichenfolge durch Überspringen. Anfängerfehler!
quelle
J,
1413 BytesBerechnet die Chunkiness. Ein großes Lob an J für die Definition
0 % 0
, dass er gleich 0 ist.Probieren Sie es online aus
Hier ist eine Erklärung:
quelle
(]+/%#)2~:/\]
Spart 1 Byte.CJam, 23 Bytes
Erläuterung:
Dies gibt das Glättungsverhältnis aus.
quelle
CJam, 16 Bytes
Cheaty Quellcode, der Glätte berechnet .
Bei Eingaben der Länge 0 oder 1 wird das richtige Ergebnis ausgegeben, bevor der Vorgang mit einem Fehler beendet wird. Mit dem Java-Interpreter wird die Fehlerausgabe an STDERR gesendet ( wie es sollte ).
Wenn Sie den Code online ausprobieren , ignorieren Sie einfach alles außer der letzten Ausgabezeile.
Wie es funktioniert
quelle
Julia, 52 Bytes
Glätte!
Dadurch wird eine unbenannte Funktion erstellt, die eine Zeichenfolge akzeptiert und einen numerischen Wert zurückgibt.
Wenn die Länge der Eingabe kleiner als 2 ist, ist die Glätte 1, andernfalls berechnen wir den Anteil identischer benachbarter Zeichen aus dem Mittelwert eines Arrays von Logikzeichen.
quelle
Nim,
1059691 BytesIch versuche Nim zu lernen. Dies berechnet die Chunkiness eines Strings.
(
Wenn ich versuche, dies als Python zu lesen, sieht der Einzug völlig durcheinander aus ...Jetzt sieht er eher aus wie Ruby ...)quelle
Python 3, 63 Bytes
Dies ist eine anonyme Lambda-Funktion, die einen String als Argument verwendet und dessen Klumpigkeit zurückgibt.
Um es zu benutzen, gib ihm einen Namen und rufe es an.
quelle
def f(n):
, das genau so viele Zeichen enthält wielambda n:
. Dadurch müssen Sie Ihre Funktion nicht mehr benennen.def f(n):
braucht auch einereturn
Python 3, 52 Bytes
Dies berechnet die Chunkiness und gibt
-0.0
die leere Zeichenfolge aus. Wenn Sie negative Nullen nicht mögen, können Sie dies jederzeit mit einem zusätzlichen Byte beheben:quelle
Haskell, 64 Bytes
Gibt Glätte aus. zB
f "Peanut Butter"
->8.333333333333333e-2
.Wie es funktioniert:
sum(x>>[1])
ist die Länge von x, aber da Haskells starkes Typensystem die Eingabe von Brüchen erfordert/
, kann ich nicht verwenden,length
welche Ganzzahlen zurückgeben. Die Konvertierung von ganzen Zahlen in Bruchzahlen überfromInteger$length x
ist viel zu lang.quelle
import Data.Ratio
zu teuer ist.JavaScript (ES6), 55 Byte
Glätte 56 Bytes
Chunkiness, 55 Bytes
Demo
Berechnet die Glätte, da ist es das, was ich bevorzuge. Funktioniert momentan nur in Firefox, da es sich um ES6 handelt.
quelle
KDB (Q), 30
Gibt Glätte zurück.
Erläuterung
Prüfung
quelle
Ruby ,
6966 BytesProbieren Sie es online!
Shaved of a few bytes with comments from IMP. Also, with the upcoming version 2.7.0 of Ruby it's possible to save some bytes by replacing
|x,y|x!=y
with@1!=@2
quelle
.to_f/~-s.size
into the assignment of c, then you can shave a byte off with the ternary operation:f=->s{(c=s.chars.each_cons(2).count{|x,y|x!=y}.to_f/~-s.size)>0?c:0}
f=
? I'm not 100% on the rules about that. The challenge says you can return a function that takes a string, which a stabby lambda is.Python 3, 69 Bytes
Bislang hat noch niemand eine Python-Lösung veröffentlicht. Hier ist eine recht einfache Implementierung einer "Chunkiness" -Funktion. Es
1
schließt auf einer Reihe von Längen kurz und druckt0
(which is an integer rather than a float but seems to be allowed according to the rules).Bei einer leeren Zeichenfolge wird
-0.0
eher als ausgegeben0.0
. Wohl ist dies könnte als akzeptabel angesehen werden, als-0.0 == 0 == 0.0
zurückkehrtTrue
.Beispiele:
(Python 3 wird für die Standard-Float-Division verwendet.)
quelle
C 83 Bytes
Eine Funktion, die Klumpen zurückgibt .
Erläuterung
Akzeptieren Sie einen C-String und geben Sie einen float zurück (double würde funktionieren, ist aber mehr Zeichen).
Zähler -
a
für Gesamtpaare,b
für nicht übereinstimmende Paare. Durchint
die Verwendung wird die "willkürliche Länge" der Zeichenfolge begrenzt, dies ist jedoch nur eine geringfügige Verletzung der Anforderungen, und ich werde es nicht beheben.Sonderfall die leere Zeichenfolge - lassen Sie beide Zähler auf Null.
Nicht leere Zeichenfolge - durchlaufen Sie die Zeichenfolge mit einem vorbereitenden Inkrement (also wird beim ersten Durchlaufen der Schleife
s[a]
das zweite Zeichen verwendet. Wenn die Zeichenfolge nur ein Zeichen enthält, wird der Schleifenkörper nicht eingegeben unda
ist 1.Wenn sich das aktuelle Zeichen vom vorherigen unterscheidet, erhöhen Sie es
b
.Nach der Schleife gibt es drei Möglichkeiten: 'a == 0, b == 0' für eine leere Eingabe, 'a == 1, b == 0' für eine Eingabe mit einem Zeichen oder 'a> 1, b> = 0 'für die Eingabe mehrerer Zeichen. Wir subtrahieren 1 von
a
(der?
Operator ist ein Sequenzpunkt, damit wir sicher sind), und wenn es Null ist, haben wir den zweiten Fall, also sollten wir Null zurückgeben. Andernfallsb/a
ist es das , was wir wollen, aber wir müssen zuerstb
auf einen Gleitkommatyp heraufstufen, sonst erhalten wir eine Ganzzahldivision. Für eine leere Zeichenfolge erhalten wir eine negative Null, aber die Regeln verbieten dies nicht.Tests:
Welches gibt:
nach Bedarf.
quelle
a,b;float f(char*s){if(*s)for(a=b=0;s[++a];)b+=s[a]!=s[a-1];return--a?1.*b/a:b;}
Perl, 69
Funktion, die Glätte zurückgibt :
Erläuterung
Tests
quelle
Mathematica,
73BytesDas bringt nichts für die Größe, aber es ist ganz einfach:
Glätte
quelle
Length[#]
->Length@#
spart einen Schlaganfall. DasN@
1
1.
GeL:
7673 ZeichenGlätte.
Probelauf:
(GeL = Gema + Lua-Bindungen. Viel besser, aber noch lange nicht gewonnen.)
Gema:
123120 ZeichenGlätte.
Probelauf:
(War für mich eher eine Übung, um zu sehen, wie hoch die Chancen sind, sie in einer Sprache ohne Gleitkommazahlunterstützung und allgemein schmerzhafte Rechenunterstützung zu lösen. Die zweite Zeile, insbesondere die
\P
Sequenz, ist reine Magie, die letzte Zeile ist echte Folter.)quelle
Java 8,
8482 BytesGibt Glätte aus.
Probieren Sie es online aus.
Erläuterung:
quelle
Kokosnuss , 38 Bytes
Probieren Sie es online!
Ein Python 3-Port wäre 50 Bytes .
quelle
PowerShell, 55 Byte
Glätte
Scheint ein bisschen albern, eine Variable in stdin zu bekommen und ihr dann einen Bezeichner zu geben, aber es ist schneller als eine Funktion zu haben.
quelle
Python 3, 61 Bytes
Berechnen Sie die Chunkiness:
quelle
K (22)
Die Q-Lösung von WooiKent wurde überarbeitet:
quelle
Rubin, 63 Bytes
Gibt Chunkiness aus.
f=->s{s.chars.each_cons(2).count{|x,y|x!=y}/[s.size-1.0,1].max}
Ähnlich wie bei der Lösung von @ daniero, jedoch leicht verkürzt durch direktes Teilen durch die Zeichenfolgenlänge - 1 und anschließendes Verlassen auf .count auf Null bei Zeichenfolgen der Länge 0 und 1 (mit .max wird sichergestellt, dass ich nicht durch 0 oder -1 dividiere).
quelle
Mathematica, 107 Bytes
Berechnet die Klumpigkeit, indem die Hälfte des Levenshtein-Abstands zwischen jedem Digraphen und seiner Rückseite genommen wird.
Wenn Sie eine genaue rationale Antwort bevorzugen, löschen Sie
.5
und platzieren Sie ein/2
vor dem letzten&
für keine Strafe. Das Programm selbst hat Chunkiness 103/106 oder ungefähr .972.quelle