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 N
postaci znajdują się N-1
skrzyż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 0
i 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.3333
gładki, 0.4444
gruby 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.6666
a0.6667
nawet rzeczy takie jak0.666637104
. Jeśli dokładna wartość to1/3
, każda zawierająca odpowiedź0.3333
jest 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?
źródło
Odpowiedzi:
Pyth, 25 bajtów
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.
źródło
Japt, 42 bajty
Wydziela łamliwość, masywność. Wypróbuj online!
Jak to działa
Wersja niekonkurencyjna, 36 bajtów
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.źródło
Python 3, 149 bajtów
Daje to gładkość i masywność.
Nie golfowany:
źródło
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!
źródło
(0..x.size-2).count{|i|t[x[i,2]]}
oszczędza 5 bajtówx.chars.each_cons(2).count{|i|t[i*'']}
. A teraz, kiedy używaszx.size
dwa razy w funkcji, przypisanie jej do zmiennej i użycie tego oszczędza dodatkowy bajt.