Aşk Testi Kod Golf


9

İki adda ortak olan toplam harf sayısını sayan ve uzunluklarının çarpımını "aşk testi" olarak işlev gören program oluşturun.

Koşullar: 1: 1 yanıt (3 üzerinden 3 vb. Olmak üzere) çıktısı alamayabilirsiniz.

Giriş

STDIN veya en yakın alternatiften iki isim.

Çıktı

Büyük x/ küçük harf kullanımı dikkate alınmadan iki ad arasında ortak olan toplam harf sayısı olarak hesaplanır. yİsimlerin uzunluğunun ürünü olarak hesaplayın . Sonra STDOUT veya en yakın alternatifin çıktısı

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

Örnekler

Giriş:

Wesley
Polly

Çıktı:

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

Wesley ve Polly'nin ortak 2 harfi vardır yve luzunluklarının ürünü 6 * 5 = 30'dur.

Giriş:

Bill
Jill

Çıktı:

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

Bonuslar

  • Basitleştirilmiş fraksiyonları kullanmak için 30 bayt çıkarın, yani x out of ytamamen indirgenmiş formdadır.

Liderler Sıralaması:

Sıralama dillere göre belirlenir. Kod golf 17 Ekim saat 22: 20'de Pasifik Yaz Saati (California) biter

Rep Ödülleri

  • İlk 5'e girdiğiniz için (birincilik hariç) 10 tekrar (bir oylama) alacaksınız.
  • İlk yer olduğunuz için 15 temsilci (kabul edilen giriş) alacaksınız.
  • Başka bir kişiden de ödül kazanabilirsiniz.

İşte hem düzenli bir skor tablosu hem de kazananları dile göre gözden geçirmek için bir Yığın Parçacığı. **

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

# Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

** Kslkgh tarafından Sign That Word'den snippet yığını


Tebrikler:

  1. Kazanan Dennis (Pyth)
  2. Dennis (CJam)
  3. NBZ (APL)
  4. molarmanful (JavaScript ES6)
  5. Alex A. (Julia)

3
Çıktı ne için olmalı Aaron\nAhmad? Yoksa samename\nsamename?
lirtosiast

3
Harfler tekrarlandığında ortak harfleri nasıl ortak saydığınızdan emin değilim. İsimler varsa ave bbir harf varsa, min(a,b)tekrarlar için sayılır mı?
xnor

@xor'un dediği gibi, tekrarlanan harfleri nasıl sayıyorsunuz? İkinci örnekten, tekrarlanan karakterleri saydığınız anlaşılıyor, bu nedenle ilk örnek tersine çevrildiyse, farklı bir sonuç bekliyor musunuz?
Rnet

Kolmogorov-karmaşıklığı ile tamamen alakasız mı ?

Yanıtlar:


1

Pyth, 40 bayt

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

Kod 70 bayt uzunluğundadır ve -30 bayt bonusu için yeterlidir .

Çevrimiçi deneyin.

  [                        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

Dyalog APL , 94 91-30 = 61 bayt

Genellikle APL golf, normalden daha kompakt - ancak daha karmaşık olmayan - kodla sonuçlanır, ancak bu durumda karakterleri çirkin yollarla kaydederim:

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

,⍪'out of' 'chances of'sayılar (sol) ve metinlerin bir 2 × 2 tablo oluşturmak (sağda)
×/≢¨⍵uzunlukları ürünü
32|⎕UCS¨⍵üst-uyum ve UCS değerleri küçük harfli
≢⊃∩/iki takım kesişim çetelesini
⊢÷∨/çetelesini ve OBEB ile ürünü bölmek
,' love.',⍨∊basit listesi ve ekleme yapılması dönüştürebilmek Aşk. Her tablo hücresine bir boşluk eklemek
⍵,⍪'and' 'have'için 2 × 2 bir ad tablosu (solda) ve metinler (sağda) oluşturun
∊' ',¨ve daha sonra basit listeye
1↓ilk gereksiz boşluğu bırakın

-3 bayt için ngn'e teşekkürler.


Görünüşe göre bu sadece bir fonksiyon, oysa OP STDIN'den giriş ve STDOUT'a çıkış (yani sadece bir fonksiyondan ziyade tam bir program).
Alex

@AlexA. APL'nin STDIN'si yoktur, ancak biçimdeki iki adı kabul etmenizi isteyebilir 'Wesley' 'Polly'. Bunun daha adil olacağını düşünüyorsanız , satırın sonundan sonra (U + 2395) }
eklemekten çekinmeyin

2

Javascript ES6, 123 bayt

(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.`

"Aşk" için çok fazla ... Gerçekten daha az bayt ile yapabilirim.

Kod snippet'ini Firefox'ta çalıştırın.


2
Görünüşe göre bu sadece bir fonksiyon, oysa OP STDIN'den giriş ve STDOUT'a çıkış (yani sadece bir fonksiyondan ziyade tam bir program).
Alex

2

Julia, 129 bayt

Kod 159 bayttır, ancak -30 bonusu için uygundur.

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.")

Bu muhtemelen tarafından kısa yapılmış olabilir değil bonusu olacak, ama Julia'nın rasyonel sayı tipi hava atmak istedim. :)

Ungolfed:

# 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()İşlev türü bir nesne oluşturur Rationalalanları vardır numve densırasıyla pay ve payda tekabül eden. Burada bu tür kullanmanın yararı Julia'nın bizim için indirimi yapmasıdır; fraksiyonu kendimiz azaltmak konusunda endişelenmemize gerek yok.


2

CJam, 55 bayt

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

Kod 85 bayt uzunluğundadır ve -30 bayt bonusu için yeterlidir .

CJam yorumlayıcısında çevrimiçi deneyin .

Nasıl çalışır

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

Dyalog APL, 84-30 = 54 bayt

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

Bu Adám'ın cevabından ilham alan bir tren .

×/≢¨ uzunlukların ürünü

{+/⌊⌿+⌿↑1↑¨⍨-32|⍉⎕ucs↑⍵} aşk şansı

(,÷v)birleştirme GCD'ye bölünür; Yukarıdaki iki ifade arasında bu,

⊢, isimlerin önüne

,¨⍨ soldaki dizeleri sağdaki değerlerle karıştırır

düzleştirmek


Ayrıntılı olarak "Aşkın Şansı" hesaplaması: {+/⌊⌿+⌿↑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

test , test2


0

Java 8, 192 bayt

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.";

Ör:

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

0

Ruby, 153 bayt

Beklediğimden daha uzun. Bunun için 30 baytlık bonus geçerli olup olmadığını bilmiyorum.

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."

Bir derleyiciye bağlantı ekleyebilir misiniz? (Ideone'yi tavsiye ederim)
juniorRubyist

0

Python 2.7, 161 bayt

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

Burada test edin: http://ideone.com/jeoVgV

Ve işte kesiri basitleştiren bir versiyon:

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)

Ne yazık ki bu puan 219-30 = 189 ...


1
Ekleyebileceğiniz bir derleyici: ideone.com/jeoVgV
juniorRubyist
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.