Гладкий проти Чуркі проти зламаних крякань


12

Заснований на Chunky vs. Smooth Strings .

Шкірки /\_/\/\__/\/\/\/\_/\_/\цікаво робити на клавіатурі, коли вам справді нудно. Але не всі зубці створюються рівними. Деякі зубці гладкі, наче \___/, а деякі кучеряві, схожі /\/\/\/\. Інші просто розбиті прямо////_\\\

Усередині кожної викрутки Nперсонажів знаходяться N-1викрутки-переходи. Кожен викрій-стик класифікується на один з трьох типів:

  • Плавний (кут> "90 градусів"):

    \_ __ _/

  • Корінець (кут = "90 градусів")

    /\ \/

  • Зламаний (усе, що не підключається)

    // \\ /_ _\

Давайте визначимо гладкість бути частка з'єднань , які є гладкими, з chunkiness і розбитості , визначеної аналогічно. Кожне значення варіюється між 0і 1. Сума гладкості, чіпкості та ламкості косинки завжди дорівнює 1.

Наприклад, у білокрилки /\/\\_//\_є 3 плавних перехрестя, 4 кускоподібних перехрестя і 2 розбиті переходи. Таким чином, вона 0.3333гладка, 0.4444грудка і 0.2222зламана.

Порожні рядки та рядки, що містять лише один символ, мають невизначені значення, весь вхід буде не менше 2 символів.

Виклик

Напишіть програму, яка займає викрутку довільної довжини і виводить будь-які два значення її гладкості, чіпкості та зламаності.

  • Ви можете написати програму або функцію з введенням через STDIN, командний рядок або як аргумент рядка.
  • Ви можете припустити, що вхід має принаймні довжину> = 2 і складається лише з символів /\_із необов'язковим новим рядком.
  • Роздрукуйте (або поверніть, якщо функція), два плавають з точністю щонайменше до 4 десяткових знаків, округлими або усіченими. Якщо справжнє значення є 2/3, прийнятні значення включають будь-яке значення між 0.6666і 0.6667, навіть, подібними речами 0.666637104. Якщо точне значення є 1/3, будь-яка відповідь, що містить, 0.3333є дійсною. Ви можете залишити проміжні нулі або початковий нуль, якщо значення менше одиниці.
  • Виведіть будь-яку пару з трьох значень, як вам зручніше, просто не забудьте вказати, які два та в якому порядку.

Виграє найкоротший код у байтах.

Приклади

/\/\\/\//\\→ гладкість 0, незграбність 0.7, розмитість0.3

_/\\_/\\/__/\\\//_→ гладкість 0.29411764705, незграбність 0.29411764705, розмитість0.41176470588

//\\__/_\/→ гладкість 0.3333333, незграбність 0.2222222, розмитість0.4444444

Питання про бонус: якому ви віддаєте перевагу, гладкі, грубі або зламані викрутки?


Чи може бути бонус за виведення всіх трьох чи у вас є конкретна причина вибору лише двох?
16.16

1
@Callodacity 2 достатньо для визначення 3-го, оскільки вони дорівнюють 1
трихоплаксу

2
@trichoplax хороший момент - очевидно, що я займався гольфом занадто довго, більше не можу зрозуміти простих речей: P
1616

Відповіді:


2

Pyth, 25 байт

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

Тестовий набір

Виводить гладкість, пухкість. В основному, він бере жорсткий кодований рядок і розрізає його навпіл. Кожна половина розкладається на 2 символьні підрядки, і те саме робиться для введення. Ми беремо перехрестя, в результаті чого виходять пари на півдні та корінці. Потім беремо довжину, ділимо на кількість пар і роздруковуємо.


2

Japt, 42 байти

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

Виводить ламкість, кокетливість. Спробуйте в Інтернеті!

Як це працює

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

Неконкурентна версія, 36 байт

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

Працює в основному так само, як і інші, з кількома незначними змінами:

  • äзараз працює над струнними. Знаки передаються у функцію в порядку (X, Y, X+Y).
  • è підраховує кількість входжень аргументу в рядку / масиві.

1

Python 3, 149 байт

Це виводить гладкість і кокетливість.

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)

Безголівки:

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)

1

Рубі, 71

Виводить гладкість, пухкість.

Бере мінімально гладкі та чіткі струни та шукає їх для кожної дво символьної рядки в початковій рядку.

Дякую Кевіну Лау за вісім байтів!

->x{%w{\\__/ /\\/}.map{|t|(0..n=x.size-2).count{|i|t[x[i,2]]}/(n+1.0)}}

1
(0..x.size-2).count{|i|t[x[i,2]]}економить 5 байт x.chars.each_cons(2).count{|i|t[i*'']}. А тепер, коли ви x.sizeдвічі використовуєте функцію, призначаючи її змінній та використовуючи це, що економить додатковий байт.
Значення чорнила

@KevinLau За допомогою вашого підходу вдалося зберегти 8 байт. Дякую!
Не те, що Чарльз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.