Basierend auf Chunky vs. Smooth Strings .
Schnörkel /\_/\/\__/\/\/\/\_/\_/\
machen auf einer Tastatur Spaß, wenn Sie sich wirklich langweilen. Aber nicht alle Schnörkel sind gleich. Einige Kringel sind glatt \___/
und andere klobig /\/\/\/\
. Andere sind einfach total kaputt, wie////_\\\
In jedem Kringel von N
Charakteren gibt es N-1
Kringelknoten. Jede Kringelverbindung wird in einen von drei Typen eingeteilt:
Glatt (Winkel> "90 Grad"):
\_ __ _/
Chunky (Winkel = "90 Grad")
/\ \/
Kaputt (alles was nicht verbindet)
// \\ /_ _\
Nehmen wir definieren die Glätte der Anteil der Übergänge zu sein , die glatt sind, mit chunkiness und Gebrochensein in ähnlicher Weise definiert. Jeder Wert liegt zwischen 0
und 1
. Die Summe aus Glätte, Grobheit und Zerbrechlichkeit eines Kringels ist immer gleich 1.
Zum Beispiel hat das Squiggle /\/\\_//\_
3 glatte Übergänge, 4 klobige Übergänge und 2 unterbrochene Übergänge. Es ist somit 0.3333
glatt, 0.4444
klobig und 0.2222
zerbrochen.
Leere Zeichenfolgen und Zeichenfolgen mit nur einem Zeichen haben undefinierte Werte. Alle Eingaben sind mindestens 2 Zeichen lang.
Herausforderung
Schreiben Sie ein Programm, das ein Kringel von beliebiger Länge annimmt und zwei beliebige Werte für Glätte, Klumpigkeit und Zerbrechlichkeit ausgibt.
- Sie können ein Programm oder eine Funktion mit Eingabe über STDIN, Befehlszeile oder als Zeichenfolgenargument schreiben.
- Sie können davon ausgehen, dass die Eingabe mindestens eine Länge> = 2 hat und nur aus den Zeichen
/\_
mit einer optionalen nachgestellten Zeile besteht. - Geben Sie die beiden Gleitkommazahlen mit einer Genauigkeit von mindestens 4 Dezimalstellen (gerundet oder abgeschnitten) aus (oder geben Sie sie zurück, wenn Sie eine Funktion ausführen). Wenn der wahre Wert ist
2/3
, schließen akzeptable Werte jeden Wert zwischen0.6666
und ein0.6667
, sogar Dinge wie0.666637104
. Wenn der genaue Wert ist1/3
, ist jede Antwort0.3333
gültig, die enthält. Sie können nachfolgende Nullen oder die führende Null weglassen, wenn der Wert kleiner als Eins ist. - Geben Sie ein beliebiges Paar der drei Werte nach Ihren Wünschen aus. Geben Sie dabei nur die beiden Werte in welcher Reihenfolge an.
Der kürzeste Code in Bytes gewinnt.
Beispiele
/\/\\/\//\\
→ Glätte 0
, Grobheit 0.7
, Zerbrechlichkeit0.3
_/\\_/\\/__/\\\//_
→ Glätte 0.29411764705
, Grobheit 0.29411764705
, Zerbrechlichkeit0.41176470588
//\\__/_\/
→ Glätte 0.3333333
, Grobheit 0.2222222
, Zerbrechlichkeit0.4444444
Bonusfrage: Welche bevorzugen Sie, glatte oder klobige oder gebrochene Kringel?
quelle
Antworten:
Pyth, 25 Bytes
Testsuite
Gibt Geschmeidigkeit, Grobheit. Grundsätzlich nimmt es die fest codierte Zeichenfolge und schneidet sie in zwei Hälften. Jede Hälfte wird in ihre 2-stelligen Teilstrings zerlegt, und das Gleiche gilt für die Eingabe. Wir nehmen die Kreuzung, was zu den südlichen und klobigen Paaren führt. Dann nehmen wir die Länge, dividieren durch die Anzahl der Paare und drucken.
quelle
Japt, 42 Bytes
Gibt Zerbrochenheit und Grobheit aus. Probieren Sie es online!
Wie es funktioniert
Nicht konkurrierende Version, 36 Bytes
Funktioniert im Prinzip genauso wie die anderen, mit ein paar kleinen Änderungen:
ä
Funktioniert jetzt auf Saiten. Die Zeichen werden der Reihe nach an die Funktion übergeben(X, Y, X+Y)
.è
zählt die Anzahl der Vorkommen des Arguments im String / Array.quelle
Python 3, 149 Bytes
Dies gibt Glätte und Grobheit aus.
Ungolfed:
quelle
Ruby, 71
Gibt Geschmeidigkeit, Grobheit.
Nimmt die minimalen glatten und klobigen Zeichenfolgen und durchsucht sie nach jeder Zeichenfolge mit zwei Zeichen in der Anfangszeichenfolge.
Vielen Dank an Kevin Lau für acht Bytes!
quelle
(0..x.size-2).count{|i|t[x[i,2]]}
spart 5 Bytes überx.chars.each_cons(2).count{|i|t[i*'']}
. Und jetzt, da Siex.size
die Funktion zweimal verwenden, können Sie sie einer Variablen zuweisen und damit ein zusätzliches Byte sparen.