Smooth vs. Chunky vs. Broken Squiggles

12

Na podstawie strun grubych vs. gładkich .

Squiggles /\_/\/\__/\/\/\/\_/\_/\to świetna zabawa na klawiaturze, gdy naprawdę się nudzisz. Ale nie wszystkie squiggles są sobie równe. Niektóre zawijasy są gładkie, \___/a niektóre grube, jak /\/\/\/\. Inni są po prostu zupełnie złamani////_\\\

Wewnątrz każdego poruszenia Npostaci znajdują się N-1skrzyżowania. Każde skrzyżowanie skrętne jest sklasyfikowane w jednym z trzech typów:

  • Gładki (kąt> „90 stopni”):

    \_ __ _/

  • Grube (kąt = „90 stopni”)

    /\ \/

  • Zepsuty (wszystko, co się nie łączy)

    // \\ /_ _\

Zdefiniujmy gładkość jako proporcję skrzyżowań, które są gładkie, z podobnie zdefiniowaną masą i łamliwością . Każda wartość mieści się w zakresie od 0i 1. Suma gładkości, masywności i łamliwości squiggle jest zawsze równa 1.

Na przykład squiggle /\/\\_//\_ma 3 gładkie skrzyżowania, 4 masywne skrzyżowania i 2 złamane skrzyżowania. Jest więc 0.3333gładki, 0.4444gruby i 0.2222łamany.

Puste łańcuchy i łańcuchy zawierające tylko jeden znak mają niezdefiniowane wartości, wszystkie dane wejściowe będą miały co najmniej 2 znaki.

Wyzwanie

Napisz program, który pobiera drążek o dowolnej długości i generuje dowolne dwie wartości jego gładkości, masywności i łamliwości.

  • Możesz napisać program lub funkcję, z wejściem przez STDIN, wiersz poleceń lub jako argument ciągu.
  • Możesz założyć, że dane wejściowe mają co najmniej długość> = 2 i składają się tylko ze znaków /\_z opcjonalnym końcowym znakiem nowej linii.
  • Wydrukuj (lub zwróć, jeśli funkcja), dwa elementy pływające z dokładnością co najmniej 4 miejsc po przecinku, zaokrąglone lub obcięte. Jeśli prawdziwą wartością jest 2/3, dopuszczalne wartości obejmują dowolną wartość pomiędzy, 0.6666a 0.6667nawet rzeczy takie jak 0.666637104. Jeśli dokładna wartość to 1/3, każda zawierająca odpowiedź 0.3333jest poprawna. Możesz pominąć końcowe zera lub wiodące zero, jeśli wartość jest mniejsza niż jeden.
  • Wypisuj dowolną parę trzech wartości według własnego uznania, pamiętaj tylko, aby podać dwie i w jakiej kolejności.

Najkrótszy kod w bajtach wygrywa.

Przykłady

/\/\\/\//\\→ Gładkość 0, masywność 0.7, łamliwość0.3

_/\\_/\\/__/\\\//_→ Gładkość 0.29411764705, masywność 0.29411764705, łamliwość0.41176470588

//\\__/_\/→ Gładkość 0.3333333, masywność 0.2222222, łamliwość0.4444444

Pytanie dodatkowe: Które wolisz, gładkie, masywne lub połamane squiggles?

PhiNotPi
źródło
Czy może istnieć premia za wypisanie wszystkich trzech, czy masz konkretny powód, aby wybrać tylko dwa?
Aᴄʜᴇʀᴏɴғᴀɪʟ
1
@Callodacity 2 są wystarczające do zdefiniowania 3., ponieważ sumują się do 1
trichoplax
2
@trichoplax dobra uwaga - oczywiście grałem zbyt długo w golfa, nie rozumiem już prostych rzeczy: P
A

Odpowiedzi:

2

Pyth, 25 bajtów

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

Zestaw testowy

Wykazuje gładkość, masywność. Zasadniczo bierze mocno zakodowany ciąg i przecina go na pół. Każda połowa jest rozkładana na 2-znakowe podciągi, to samo dzieje się z danymi wejściowymi. Wjeżdżamy na skrzyżowanie, w wyniku czego powstają południowe i masywne pary. Następnie bierzemy długość, dzielimy przez liczbę par i drukujemy.

isaacg
źródło
2

Japt, 42 bajty

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

Wydziela łamliwość, masywność. Wypróbuj online!

Jak to działa

            // 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

Wersja niekonkurencyjna, 36 bajtów

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

Działa w zasadzie tak samo jak inne, z kilkoma drobnymi zmianami:

  • äteraz działa na ciągach znaków. Znaki są przekazywane do funkcji w kolejności (X, Y, X+Y).
  • è zlicza liczbę wystąpień argumentu w ciągu / tablicy.
ETHprodukcje
źródło
1

Python 3, 149 bajtów

Daje to gładkość i masywność.

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)

Nie golfowany:

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
źródło
1

Ruby, 71

Wykazuje gładkość, masywność.

Pobiera minimalne gładkie i masywne ciągi i przeszukuje je pod kątem każdego dwuznakowego ciągu w ciągu początkowym.

Dzięki Kevinowi Lau za OSIEM bajtów!

->x{%w{\\__/ /\\/}.map{|t|(0..n=x.size-2).count{|i|t[x[i,2]]}/(n+1.0)}}
Nie ten Charles
źródło
1
(0..x.size-2).count{|i|t[x[i,2]]}oszczędza 5 bajtów x.chars.each_cons(2).count{|i|t[i*'']}. A teraz, kiedy używasz x.sizedwa razy w funkcji, przypisanie jej do zmiennej i użycie tego oszczędza dodatkowy bajt.
Wartość tuszu
@KevinLau Udało się zaoszczędzić 8 bajtów przy użyciu twojego podejścia. Dzięki!
Nie to, że Karol