Smooth vs. Chunky vs. Broken Squiggles

12

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 NCharakteren gibt es N-1Kringelknoten. 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 0und 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.3333glatt, 0.4444klobig und 0.2222zerbrochen.

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 zwischen 0.6666und ein 0.6667, sogar Dinge wie 0.666637104. Wenn der genaue Wert ist 1/3, ist jede Antwort 0.3333gü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?

PhiNotPi
quelle
Könnte es einen Bonus für die Ausgabe aller drei geben, oder haben Sie einen bestimmten Grund, nur zwei zu wählen?
9.
1
@Callodacity 2 reicht aus, um das 3. zu definieren, da sich die Summe zu 1
ergibt
2
@trichoplax guter Punkt - offensichtlich habe ich zu lange Golf gespielt, ich kann einfache Dinge nicht mehr nachvollziehen: P
Aᴄʜᴇʀᴏɴғᴀɪʟ

Antworten:

2

Pyth, 25 Bytes

mcl@.:d2.:z2tlzc2"\__//\/

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.

isaacg
quelle
2

Japt, 42 Bytes

U=U¬ä@2+"\\/\\__/"bX+Y)f2};[T2]£U¬fX l /Ul

Gibt Zerbrochenheit und Grobheit aus. Probieren Sie es online!

Wie es funktioniert

            // Implicit: U = input string
U=UŠ@   }  // Set U to U split into chars, with each pair mapped by this function:
"..."bX+Y)  // Take the index in this string of the two chars concatenated.
            // This is 0-1 for chunky, 2-4 for smooth, and -1 for broken.
2+    f2    // Add two and floor to the nearest multiple of 2.
            // This is now 2 for chunky, 4 or 6 for smooth, and 0 for broken.
[T2]£       // Map each item X in [0,2] through this function:
U¬fX l      //  Count the occurances of X in U.
/Ul         //  Divide by U.length.
            // Implicit: output last expression

Nicht konkurrierende Version, 36 Bytes

U=Uä@2+"\\/\\__/"bZ)f2};[T2]£UèX /Ul

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.
ETHproductions
quelle
1

Python 3, 149 Bytes

Dies gibt Glätte und Grobheit aus.

def f(s):
 for i in"012":s=s.replace("\_/"[int(i)],i)
 a=len(s)-1;t=["bscbssbbc"[int(s[i:i+2],3)]for i in range(a)]
 for x in"sc":print(t.count(x)/a)

Ungolfed:

def f(s):
    for i in "012":
        s = s.replace("\_/"[int(i)], i)
    a = len(s) - 1
    t = []
    for i in range(a):
        t.append("bscbssbbc"[int(s[i:i+2],3)])
    for x in "sc":
        print(t.count(x) / a)
Sherlock9
quelle
1

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!

->x{%w{\\__/ /\\/}.map{|t|(0..n=x.size-2).count{|i|t[x[i,2]]}/(n+1.0)}}
Nicht dieser Charles
quelle
1
(0..x.size-2).count{|i|t[x[i,2]]}spart 5 Bytes über x.chars.each_cons(2).count{|i|t[i*'']}. Und jetzt, da Sie x.sizedie Funktion zweimal verwenden, können Sie sie einer Variablen zuweisen und damit ein zusätzliches Byte sparen.
Wert Tinte
@KevinLau Mit Ihrem Ansatz konnten 8 Byte eingespart werden. Vielen Dank!
Nicht dass Charles am