Yêu mã thử nghiệm Golf


9

Tạo chương trình đếm tổng số chữ cái chung cho hai tên và tìm sản phẩm có độ dài của chúng, để hoạt động như một "máy thử tình yêu".

Điều kiện: bạn có thể không nhận được câu trả lời 1: 1 (là 3 trên 3, v.v.).

Đầu vào

Hai tên từ STDIN hoặc thay thế gần nhất.

Đầu ra

Tính xtổng số chữ cái chung giữa hai tên, bỏ qua trường hợp. Tính ylà sản phẩm của độ dài của tên. Sau đó, đầu ra, đến STDOUT hoặc thay thế gần nhất, là

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

Ví dụ

Đầu vào:

Wesley
Polly

Đầu ra:

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

Wesley và Polly có 2 chữ cái chung, yl, và các sản phẩm có độ dài của họ là 6 * 5 = 30.

Đầu vào:

Bill
Jill

Đầu ra:

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

Tiền thưởng

  • Trừ 30 byte để sử dụng các phân số đơn giản hóa, tức x out of ylà ở dạng giảm hoàn toàn.

Bảng xếp hạng:

Xếp hạng sẽ được xác định bởi các ngôn ngữ. Sân gôn mã kết thúc vào ngày 17 tháng 10 lúc 10:20 chiều Giờ ban ngày Thái Bình Dương (California)

Giải thưởng Rep

  • Bạn sẽ nhận được 10 đại diện (một upvote) khi nằm trong top 5 (trừ vị trí đầu tiên).
  • Bạn sẽ nhận được 15 đại diện (mục được chấp nhận) vì là nơi đầu tiên.
  • Bạn cũng có thể nhận được phần thưởng tiền thưởng từ người khác.

Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ. **

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

# Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh chúng qua. Ví dụ:

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

** Chồng đoạn trích từ Sign That Word của Kslkgh


Xin chúc mừng những điều sau:

  1. Người chiến thắng Dennis (Pyth)
  2. Dennis (CJam)
  3. NBZ (APL)
  4. molarmanful (JavaScript ES6)
  5. Alex A. (Julia)

3
Đầu ra nên làm Aaron\nAhmadgì? Hay là samename\nsamename?
lirtosiast

3
Tôi không rõ làm thế nào bạn đếm tổng số chữ cái chung khi các chữ cái lặp lại. Nếu tên có abmột số chữ cái, những cái đó được tính cho min(a,b)lặp lại?
xnor

như @xor nói, làm thế nào bạn đếm các chữ cái lặp đi lặp lại? Từ ví dụ thứ hai, có vẻ như bạn đang đếm các ký tự lặp lại, vì vậy nếu ví dụ đầu tiên bị đảo ngược, bạn có mong đợi một kết quả khác không?
Rnet

Có phải nó hoàn toàn không liên quan đến sự phức tạp của kolmogorov ?

Câu trả lời:


1

Bình thường, 40 byte

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

Mã này dài 70 byte và đủ điều kiện nhận phần thưởng -30 byte .

Hãy thử trực tuyến.

  [                        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 Dyalog , 94 91-30 = 61 byte

Thông thường việc đánh gôn APL có mã nhỏ gọn hơn - nhưng không phức tạp hơn - bình thường, nhưng trong trường hợp này tôi lưu ký tự theo cách xấu xí:

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

,⍪'out of' 'chances of'tạo một bảng số 2 × 2 (trái) và văn bản (phải)
×/≢¨⍵có độ dài
32|⎕UCS¨⍵hài hòa giữa các giá trị UCS chữ hoa và chữ thường
≢⊃∩/, giao điểm của hai bộ
⊢÷∨/chia số kiểm đếm và sản phẩm với GCD của chúng
,' love.',⍨∊làm cho nó thành một danh sách đơn giản và nối thêm yêu và quý.
⍵,⍪'and' 'have'tạo một bảng tên 2 × 2 (trái) và văn bản (phải) sắp xếp
∊' ',¨một khoảng trắng cho mỗi ô của bảng và sau đó tạo thành danh sách đơn giản
1↓thả khoảng trống thừa ban đầu

Cảm ơn ngn cho -3 byte.


Có vẻ như đây chỉ là một chức năng, trong khi đầu vào OP chỉ định từ STDIN và đầu ra sang STDOUT (nghĩa là một chương trình đầy đủ chứ không chỉ là một chức năng).
Alex A.

@AlexA. APL không có STDIN, nhưng có thể đưa ra lời nhắc chấp nhận hai tên theo định dạng 'Wesley' 'Polly'. Nếu bạn nghĩ rằng điều này sẽ công bằng hơn, hãy thoải mái nối (U + 2395) vào cuối dòng (sau }) và điều chỉnh điểm số thành 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.`

Quá nhiều cho "tình yêu" ... Tôi thực sự có thể làm với ít byte hơn.

Chạy đoạn mã trong Firefox.


2
Có vẻ như đây chỉ là một chức năng, trong khi đầu vào OP chỉ định từ STDIN và đầu ra thành STDOUT (nghĩa là một chương trình đầy đủ chứ không chỉ là một chức năng).
Alex A.

2

Julia, 129 byte

Mã là 159 byte nhưng nó đủ điều kiện nhận phần thưởng -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.")

Điều này có thể được thực hiện ngắn hơn bằng cách không nhận tiền thưởng, nhưng tôi muốn thể hiện loại số hợp lý của Julia. :)

Ung dung:

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

Các Rational()chức năng xây dựng một đối tượng kiểu Rationaltrong đó có lĩnh vực numden, tương ứng với tử số và mẫu số tương ứng. Lợi ích của việc sử dụng loại này ở đây là Julia thực hiện giảm cho chúng tôi; chúng ta không phải lo lắng về việc giảm tỷ lệ bản thân.


2

CJam, 55 byte

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

Mã này dài 85 byte và đủ điều kiện nhận phần thưởng -30 byte .

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

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 Dyalog, 84-30 = 54 byte

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

Đây là một chuyến tàu , lấy cảm hứng từ câu trả lời của Adám .

×/≢¨ sản phẩm của độ dài

{+/⌊⌿+⌿↑1↑¨⍨-32|⍉⎕ucs↑⍵} cơ hội của tình yêu

(,÷v)sự kết hợp chia cho GCD; giữa hai biểu thức trên, điều này làm giảm phân số

⊢, điền tên

,¨⍨ xáo trộn các chuỗi bên trái với các giá trị bên phải

làm phẳng


Tính toán "Cơ hội của tình yêu" một cách chi tiết: {+/⌊⌿+⌿↑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

kiểm tra , kiểm tra2


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

Ví dụ:

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

0

Ruby, 153 byte

Lâu hơn tôi mong đợi. Tôi không biết nếu phần thưởng 30 byte áp dụng cho việc này.

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

Bạn có thể vui lòng thêm một liên kết đến một trình biên dịch? (Tôi khuyên dùng 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))

Kiểm tra nó ở đây: http://ideone.com/jeoVgV

Và đây là một phiên bản đơn giản hóa phân số:

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)

Thật không may, điểm số này là 219-30 = 189 ...


1
Đây là một trình biên dịch bạn có thể thêm: ideone.com/jeoVgV
juniorRubyist
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.