Cinta Tester Kode Golf

9

Buat program yang menghitung jumlah huruf yang umum untuk dua nama, dan temukan produk dengan panjangnya, berfungsi sebagai "tester cinta".

Ketentuan: Anda mungkin tidak mendapatkan jawaban 1: 1 (menjadi 3 dari 3, dll.)

Memasukkan

Dua nama dari STDIN atau alternatif terdekat.

Keluaran

Hitung xsebagai jumlah total huruf yang sama antara kedua nama, abaikan case. Hitung ysebagai produk dari panjang nama. Maka output, ke STDOUT atau alternatif terdekat, adalah

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

Contohnya

Memasukkan:

Wesley
Polly

Keluaran:

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

Wesley dan Polly memiliki 2 huruf yang sama, ydan l, dan produk dari panjangnya adalah 6 * 5 = 30.

Memasukkan:

Bill
Jill

Keluaran:

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

Bonus

  • Kurangi 30 byte untuk menggunakan fraksi yang disederhanakan, yaitu x out of ydalam bentuk sepenuhnya berkurang.

Papan peringkat:

Peringkat akan ditentukan oleh bahasa. Golf kode berakhir pada 17 Oktober pukul 10.20 malam Waktu Siang Pasifik (California)

Hadiah Rep

  • Anda akan menerima 10 rep (upvote) karena berada di 5 teratas (kecuali tempat pertama).
  • Anda akan menerima 15 rep (entri yang diterima) karena menjadi yang pertama.
  • Anda mungkin juga mendapatkan hadiah karunia dari orang lain.

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard reguler dan tinjauan pemenang berdasarkan bahasa. **

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

** Potongan tumpukan dari Sign That Word oleh Kslkgh


Selamat untuk yang berikut ini:

  1. Pemenang Dennis (Pyth)
  2. Dennis (CJam)
  3. NBZ (APL)
  4. molarmanful (JavaScript ES6)
  5. Alex A. (Julia)
juniorRubyist
sumber
3
Untuk apa hasilnya Aaron\nAhmad? Atau samename\nsamename?
lirtosiast
3
Saya tidak jelas bagaimana Anda menghitung jumlah huruf yang sama ketika huruf berulang. Jika nama-nama itu memiliki adan bbeberapa huruf, apakah itu termasuk min(a,b)pengulangan?
xnor
seperti yang dikatakan @xor, bagaimana Anda menghitung huruf berulang? Dari contoh kedua, tampaknya Anda menghitung karakter yang berulang, jadi jika contoh pertama dibalik, maka apakah Anda mengharapkan hasil yang berbeda?
Rnet
Apakah itu sama sekali tidak berhubungan dengan kompleksitas-kolmogorov ?

Jawaban:

1

Pyth, 40 byte

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

Kode panjangnya 70 byte dan memenuhi syarat untuk bonus -30 byte .

Cobalah online.

  [                        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.
Dennis
sumber
3

Dyalog APL , 94 91-30 = 61 byte

Biasanya golf APL menghasilkan kode yang lebih kompak - tetapi tidak lebih kompleks - dari biasanya, tetapi dalam hal ini saya menyimpan karakter dengan cara yang jelek:

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

,⍪'out of' 'chances of'buat tabel angka 2 × 2 (kiri) dan teks (kanan)
×/≢¨⍵produk yang panjangnya
32|⎕UCS¨⍵selaras dengan nilai UCS huruf besar dan kecil
≢⊃∩/, persimpangan dua set
⊢÷∨/membagi penghitungan dan produk dengan GCD mereka
,' love.',⍨∊membuatnya menjadi daftar sederhana dan menambahkan cinta.
⍵,⍪'and' 'have'buat 2 × 2 tabel nama (kiri) dan teks (kanan)
∊' ',¨tambahkan spasi ke setiap sel tabel dan kemudian buat daftar sederhana
1↓jatuhkan ruang berlebihan awal

Berkat ngn untuk -3 byte.

Adm
sumber
Tampaknya ini hanya fungsi, sedangkan input OP ditentukan dari STDIN dan output ke STDOUT (yaitu program lengkap dan bukan hanya fungsi).
Alex A.
@AlexA. APL tidak memiliki STDIN, tetapi dapat mengeluarkan prompt untuk menerima dua nama dalam format 'Wesley' 'Polly'. Jika Anda berpikir ini akan lebih adil, jangan ragu untuk menambahkan (U + 2395) ke akhir baris (setelah }), dan menyesuaikan skor menjadi 65.
Adám
2

Javascript ES6, 123 byte

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

Begitu banyak untuk "cinta" ... Aku benar-benar bisa melakukannya dengan byte lebih sedikit.

Jalankan cuplikan kode di Firefox.

Mama Fun Roll
sumber
2
Tampaknya ini hanya fungsi, sedangkan input OP ditentukan dari STDIN dan output ke STDOUT (yaitu program lengkap dan bukan hanya fungsi).
Alex A.
2

Julia, 129 byte

Kode ini 159 byte tetapi memenuhi syarat untuk bonus -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.")

Ini mungkin bisa diperpendek dengan tidak memilih bonus, tetapi saya ingin memamerkan tipe angka rasional Julia. :)

Tidak Disatukan:

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

The Rational()Fungsi membangun sebuah objek dari tipe Rationalyang memiliki bidang numdan den, sesuai dengan pembilang dan penyebut masing-masing. Manfaat menggunakan jenis ini di sini adalah bahwa Julia melakukan pengurangan untuk kita; kita tidak perlu khawatir tentang mengurangi pecahan itu sendiri.

Alex A.
sumber
2

CJam, 55 byte

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

Kode panjangnya 85 byte dan memenuhi syarat untuk bonus -30 byte .

Cobalah online di penerjemah CJam .

Bagaimana itu bekerja

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.
Dennis
sumber
1

Dyalog APL, 84-30 = 54 byte

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

Ini adalah kereta , terinspirasi oleh jawaban Adám .

×/≢¨ produk dari panjang

{+/⌊⌿+⌿↑1↑¨⍨-32|⍉⎕ucs↑⍵} peluang cinta

(,÷v)Rangkaian dibagi dengan GCD; antara dua ekspresi di atas, ini mengurangi fraksi

⊢, tambahkan nama

,¨⍨ mengacak string di sebelah kiri dengan nilai di sebelah kanan

meratakan


Perhitungan "Peluang cinta" secara rinci: {+/⌊⌿+⌿↑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

ngn
sumber
0

Java 8, 192 byte

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

Ex:

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

Ruby, 153 byte

Lebih lama dari yang saya harapkan. Saya tidak tahu apakah bonus 30 byte berlaku untuk ini.

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."
Peter Lenkefi
sumber
Bisakah Anda menambahkan tautan ke kompiler? (Saya sarankan Ideone)
juniorRubyist
0

Python 2.7, 161 byte

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

Uji di sini: http://ideone.com/jeoVgV

Dan ini adalah versi yang menyederhanakan fraksi:

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)

Sayangnya skor yang satu ini adalah 219-30 = 189 ...

pelaku diet
sumber
1
Berikut adalah compiler Anda dapat menambahkan: ideone.com/jeoVgV
juniorRubyist