Love Tester Code Golf


9

Створіть програму, яка підраховує загальну кількість букв, спільних для двох імен, і знаходить добуток їх довжини, щоб функціонувати як "тестер любові".

Умови: ви не зможете отримати відповідь 1: 1 (3 з 3 і т.д.).

Вхідні дані

Два імені від STDIN або найближчої альтернативи.

Вихідні дані

Обчисліть xяк загальну кількість спільних букв між двома іменами, ігноруючи регістр. Обчисліть yяк добуток довжин імен. Тоді вихід, до STDOUT або найближчої альтернативи, є

Name1 and Name2 have x out of y chances of love.

Приклади

Вхід:

Wesley
Polly

Вихід:

Wesley and Polly have 2 out of 30 chances of love.

У Веслі і Поллі є 2 спільних букви, yі l, а добуток їх довжини дорівнює 6 * 5 = 30.

Вхід:

Bill
Jill

Вихід:

Bill and Jill have 3 out of 16 chances of love.

Бонуси

  • Віднімаємо 30 байтів для використання спрощених дробів, тобто x out of yє повністю зменшеною формою.

Табло:

Ранжування визначатиметься мовами. Гольф з кодом закінчується 17 жовтня о 22:20 Тихоокеанський літній час (Каліфорнія)

Подарункові призи

  • Ви отримаєте 10 респ (нагороду) за те, що потрапили в топ-5 (крім першого місця).
  • Ви отримаєте 15 представників (прийнятий запис) за те, що ви зайняли перше місце.
  • Ви також можете отримати винагороду від щедрої людини.

Ось фрагмент стека для створення як звичайного табло, так і огляду переможців за мовою. **

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

# Language Name, N bytes

де Nрозмір вашого подання. Якщо ви покращите свій рахунок, ви можете зберегти старі бали у заголовку, прокресливши їх. Наприклад:

# Ruby, <s>104</s> <s>101</s> 96 bytes

** Фрагмент стека з підписати це слово від Kslkgh


Вітаємо наступне:

  1. Переможець Денніс (Піт)
  2. Денніс (CJam)
  3. NBZ (APL)
  4. чудовий (JavaScript ES6)
  5. Олексій А. (Юлія)

3
Яким повинен бути вихід Aaron\nAhmad? Або samename\nsamename?
lirtosiast

3
Мені незрозуміло, як ви рахуєте загальні букви, коли букви повторюються. Якщо імена мають aі bякусь букву, чи вважаються вони min(a,b)повторами?
xnor

як говорить @xor, як ви рахуєте повторні букви? З другого прикладу, здається, ви рахуєте повторені символи, тож якщо перший приклад був перевернутий, то чи очікуєте ви іншого результату?
Rnet

Це абсолютно не пов’язано зі складністю колгорогов ?

Відповіді:


1

Pyth, 40 байт

jd[z"and"Jw"have"/K-lzl.-rz0rJ0i=J*lzlJK"out of"/JiJK"chances of love.

Код завдовжки 70 байт і відповідає бонусу -30 байт .

Спробуйте в Інтернеті.

  [                        Begin an array and fill it with the following:
   z                         The first line of input.
   "and"                     That string.
   Jw                        The second line of input, saved in J.
   "have"                    That string.
           rz0rJ0              Convert both lines to lowercase.
         .-                    Remove the characters form the second string
                               from the first, counting multiplicities.
        l                      Get the length.
     -lz                       Subtract it from the length of the first line.
    K                          Save in K.
                  =J*lzlJ      Save the lines' lengths' product in J.
                 i       K     Compute the GCD of J and K.
   /                         The quotient of K and the GCD.
   "out of"                  That string.
   /JiJK                     The quotient of J and the GCD of J and K.
   "chances of love.         That string.
jd                         Join the elements, separated by spaces.

3

Діалог APL , 94 91-30 = 61 байт

Зазвичай APL гольф призводить до коду, який є більш компактним - але не складнішим - ніж звичайний, але в цьому випадку я зберігаю символи некрасивими способами:

{1↓(∊' ',¨⍵,⍪'and' 'have'),' love.',⍨∊((⊢÷∨/)(≢⊃∩/32|⎕ucs¨⍵),×/≢¨⍵),⍪'out of' 'chances of'}

,⍪'out of' 'chances of'створити таблицю чисел 2 × 2 (ліворуч) та тексти (праворуч)
×/≢¨⍵добуток довжин,
32|⎕UCS¨⍵гармонізуючи великі та малі значення UCS
≢⊃∩/підрахунку перетину двох наборів
⊢÷∨/ділимо підрахунок, а продукт з їх GCD
,' love.',⍨∊складе його у простий список та додає любов.
⍵,⍪'and' 'have'створити 2 × 2 таблиці імен (зліва) та тексти (праворуч),
∊' ',¨додати пробіл до кожної комірки таблиці, а потім скласти у простий список
1↓випадати початковий зайвий пробіл

Завдяки ngn за -3 байти.


Здається, це лише функція, тоді як OP вказаний вхід з STDIN і вихід в STDOUT (тобто повна програма, а не просто функція).
Олексій А.

@AlexA. APL не має STDIN, але може надіслати запит на прийняття двох імен у форматі 'Wesley' 'Polly'. Якщо ви вважаєте, що це було б справедливіше, сміливо додайте (U + 2395) до самого кінця рядка (після }) та відрегулюйте рахунок 65.
Адам

2

Javascript ES6, 123 байти

(a,b)=>a+` and ${b} have ${[...a].map(x=>eval(`/${x}/i.test(b)&&c++`),c=0),c} out of ${a.length*b.length} chances of love.`

Стільки для "кохання" ... Я справді міг би зробити з меншими байтами.

Запустіть фрагмент коду у Firefox.


2
Здається, це лише функція, тоді як OP вказаний вхід з STDIN і вихід в STDOUT (тобто повна програма, а не просто функція).
Олексій А.

2

Юлія, 129 байт

Код складає 159 байт, але він може бути бонус -30.

A,B=map(chomp,readlines())
a,b=map(lowercase,[A,B])
L=length
r=Rational(L(ab),L(a)L(b))
print("$A and $B have $(r.num) out of $(r.den) chances of love.")

Можливо, це могло б бути скороченим, не збираючись на бонус, але я хотів показати раціональний номер номера Юлії. :)

Безголівки:

# Read two names from STDIN on separate lines
A, B = map(chomp, readlines())

# Construct their lowercase equivalents
a, b = map(lowercase, [A, B])

# Construct a rational number where the numerator is the
# length of the intersection of a and b and the denominator
# is the product of the lengths
r = Rational(length(a  b), length(a) * length(b))

# Tell us about the love
print("$A and $B have $(r.num) out of $(r.den) chances of love.")

Rational()Функція створює об'єкт типу , Rationalякий має поле numі den, відповідний чисельник і знаменник відповідно. Перевага використання цього типу полягає в тому, що Юлія робить зменшення для нас; нам не потрібно турбуватися про зменшення частки.


2

CJam, 55 байт

ll]_~@_{'~,\elfe=}/.e<:+\:,:*]_2>~{_@\%}h;f/"and
have
out of
chances of love."N/.{}S*

Код завдовжки 85 байт і відповідає бонусу -30 байт .

Спробуйте його в Інтернеті в інтерпретаторі CJam .

Як це працює

ll]      e# Read two lines and wrap them in an array.
_~       e# Copy the array and dump the lines on the stack.
@_       e# Rotate the array on top and push a copy.
{        e# For each line of the copy.
  '~,    e#   Push the array of all ASCII charcters up to '}'.
  \el    e#   Convert the line to lowercase.
  fe=    e#   Count the occurrences of each character in the line.
}/       e#
.e<      e# Vectorized minimum of the occurrences.
:+       e# Add to find the number of shared charaters.
\:,      e# Compute the length of each line.
:*       e# Push the product.
]_       e# Wrap the stack in an array and push a copy.
2>~      e# Discard the lines of the copy and dump the calculated integers.
{_@\%h}; e# Compute their GCD, using the Euclidean algorithm.
f/       e# Divide each element of the array by the GCD.
         e# This also splits the names, which won't affect printing.

"and
have
out of
chances of love."

N/       e# Split the above string at linefeeds.
.{}      e# Vectorized no-op. Interleaves the arrays.
S*       e# Join the results elements, separated by spaces.

1

Діалог APL, 84-30 = 54 байти

∊' and ' ' have' 'out of' 'chances of love.',¨⍨⊢,{+/⌊⌿+⌿↑1↑¨⍨-32|⍉⎕ucs↑⍵}(,÷∨)(×/≢¨)

Це потяг , натхненний відповіддю Адама .

×/≢¨ добуток довжин

{+/⌊⌿+⌿↑1↑¨⍨-32|⍉⎕ucs↑⍵} шанси на кохання

(,÷v)конкатенація, поділена на GCD; між вищезазначеними виразами, це зменшує дріб

⊢, додавати назви

,¨⍨ перетасовує рядки зліва зі значеннями праворуч

сплющити


Детально обчислити "Шанси на любов": {+/⌊⌿+⌿↑1↑¨⍨-32|⍉⎕ucs↑⍵} ↑⍵ arrange the names in a 2×N matrix, pad with spaces ⎕ucs take ascii codes ⍉ transpose the matrix as N×2 32| modulo 32 to case-fold 1↑¨⍨- for each X create a vector 0 0...0 1 of length X ↑ arrange into a 3d array, pad with 0s +⌿ 1st axis sum, obtain freqs per letter and per name ⌊⌿ 1st axis min, obt. nr of common occurrences per letter +/ sum

тест , тест2


0

Java 8, 192 байти

BiFunction y=(a,b)->a+" and "+b+" have "+(""+a).chars().filter(c->(""+b).toUpperCase().indexOf(c>'Z'?c-32:c)>=0).count()+" out of "+(""+a).length()*(""+b).length()+" chances of love.";

Наприклад:

System.out.println(y.apply("Bill","Jill"));
System.out.println(y.apply("Wesley","Polly"));

0

Рубін, 153 байти

Довше, ніж я очікував. Я не знаю, чи застосовується до цього бонус 30 байт.

d=[];2.times{d<<gets.chop<<$_.downcase.chars<<$_.length-1};$><<"#{d[0]} and #{d[3]} have #{d[2]-(d[1]-d[4]).length} out of #{d[2]*d[5]} chances of love."

Не могли б ви додати посилання на компілятор? (Рекомендую Ideone)
juniorRubyist

0

Python 2.7, 161 байт

import string;r=raw_input;a,b=r(),r();print'%s and %s have %i out of %i chances of love'%(a,b,sum(map(lambda c:c in a and c in b,string.letters)),len(a)*len(b))

Перевірте це тут: http://ideone.com/jeoVgV

І ось версія, яка спрощує дріб:

import string,fractions;r=raw_input;a,b=r(),r();F=fractions.Fraction(sum(map(lambda c:c in a and c in b,string.letters)),len(a)*len(b))
print'%s and %s have %i out of %i chances of love'%(a,b,F.numerator,F.denominator)

На жаль, це оцінка становить 219-30 = 189 ...


1
Ось компілятор, який ви можете додати: ideone.com/jeoVgV
juniorRubyist
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.