Liebe Tester Code Golf

9

Erstellen Sie ein Programm, das die Gesamtzahl der Buchstaben zählt, die zwei Namen gemeinsam haben, und das Produkt ihrer Länge findet, um als "Liebestester" zu fungieren.

Bedingungen: Möglicherweise erhalten Sie keine 1: 1-Antwort (3 von 3 usw.).

Eingang

Zwei Namen von STDIN oder nächstgelegene Alternative.

Ausgabe

Berechnen Sie xdie Gesamtzahl der Buchstaben, die den beiden Namen gemeinsam sind, ohne Berücksichtigung der Groß- und Kleinschreibung. Berechnen Sie yals Produkt der Länge der Namen. Dann ist die Ausgabe an STDOUT oder die nächstgelegene Alternative

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

Beispiele

Eingang:

Wesley
Polly

Ausgabe:

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

Wesley und Polly haben zwei Buchstaben gemeinsam, yund ldas Produkt ihrer Länge ist 6 * 5 = 30.

Eingang:

Bill
Jill

Ausgabe:

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

Boni

  • Subtrahieren Sie 30 Bytes für die Verwendung vereinfachter Brüche, dh x out of yin vollständig reduzierter Form.

Bestenliste:

Das Ranking wird nach Sprachen festgelegt. Der Code Golf endet am 17. Oktober um 22.20 Uhr Pacific Daylight Time (Kalifornien)

Repräsentantenpreise

  • Sie erhalten 10 Wiederholungen (eine positive Bewertung), wenn Sie unter den Top 5 sind (außer auf dem ersten Platz).
  • Sie erhalten 15 Wiederholungen (akzeptierte Teilnahme) als ersten Platz.
  • Sie können auch eine Kopfgeldbelohnung von einer anderen Person erhalten.

Hier ist ein Stack-Snippet, mit dem Sie sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache erstellen können. **

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift unter Verwendung der folgenden Markdown-Vorlage:

# Language Name, N bytes

Wo Nist die Größe Ihrer Einreichung? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

** Stapelausschnitt aus Sign That Word von Kslkgh


Herzlichen Glückwunsch an:

  1. Gewinner Dennis (Pyth)
  2. Dennis (CJam)
  3. NBZ (APL)
  4. molarmanful (JavaScript ES6)
  5. Alex A. (Julia)
juniorRubyist
quelle
3
Wofür soll die Ausgabe sein Aaron\nAhmad? Oder samename\nsamename?
Lirtosiast
3
Ich bin mir nicht sicher, wie Sie die Gesamtzahl der Buchstaben gemeinsam zählen, wenn sich Buchstaben wiederholen. Wenn die Namen haben aund bvon einigen Buchstaben, tut diese Anzahl für min(a,b)Wiederholungen?
xnor
Wie zählen Sie wiederholte Buchstaben, wie @xor sagt? Aus dem zweiten Beispiel geht hervor, dass Sie wiederholte Zeichen zählen. Wenn also das erste Beispiel umgekehrt wurde, erwarten Sie dann ein anderes Ergebnis?
Rnet
Hat es nichts mit der Kolmogorov-Komplexität zu tun ?

Antworten:

1

Pyth, 40 Bytes

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

Der Code ist 70 Byte lang und qualifiziert sich für den Bonus von -30 Byte .

Probieren Sie es online aus.

  [                        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
quelle
3

Dyalog APL , 94 91-30 = 61 Bytes

Normalerweise führt APL-Golf zu Code, der kompakter - aber nicht komplexer - als normal ist, aber in diesem Fall speichere ich Zeichen auf hässliche Weise:

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

,⍪'out of' 'chances of'schafft eine 2 × 2 - Tabelle von Zahlen (links) und Texten (rechts)
×/≢¨⍵Produkt der Längen
32|⎕UCS¨⍵harmonisieren Groß- und Klein UCS - Werte
≢⊃∩/den Schnittpunkt der beiden Sätze tally
⊢÷∨/die tally und das Produkt mit ihrem GCD dividieren
,' love.',⍨∊macht es in eine einfache Liste und append Liebe.
⍵,⍪'and' 'have'Erstellen Sie eine 2 × 2-Tabelle mit Namen (links) und Texten (rechts),
∊' ',¨indem Sie jeder Tabellenzelle ein Leerzeichen voranstellen und dann
1↓das anfängliche überflüssige Leerzeichen in eine einfache Liste einfügen

Danke an ngn für -3 Bytes.

Adam
quelle
Es scheint, dass dies nur eine Funktion ist, während das OP die Eingabe von STDIN und die Ausgabe an STDOUT spezifiziert (dh ein vollständiges Programm und nicht nur eine Funktion).
Alex A.
@AlexA. APL hat kein STDIN, kann jedoch eine Aufforderung ausgeben, die beiden Namen im Format zu akzeptieren 'Wesley' 'Polly'. Wenn Sie der Meinung sind, dass dies fairer wäre, können Sie (U + 2395) bis zum Ende der Zeile (nach dem }) anhängen und die Punktzahl auf 65 anpassen.
Adám
2

Javascript ES6, 123 Bytes

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

Soviel zu "Liebe" ... ich könnte wirklich mit weniger Bytes fertig werden.

Führen Sie das Code-Snippet in Firefox aus.

Mama Fun Roll
quelle
2
Es scheint, dass dies nur eine Funktion ist, während das OP die Eingabe von STDIN und die Ausgabe an STDOUT spezifiziert (dh ein vollständiges Programm und nicht nur eine Funktion).
Alex A.
2

Julia, 129 Bytes

Der Code ist 159 Byte, qualifiziert sich jedoch für den -30-Bonus.

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

Dies könnte wahrscheinlich verkürzt werden, wenn man nicht auf den Bonus setzt, aber ich wollte Julias rationalen Zahlentyp vorführen. :) :)

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

Die Rational()Funktion erstellt ein Objekt vom Typ Rationalmit Feldern numund denentsprechend dem Zähler bzw. Nenner. Der Vorteil der Verwendung dieses Typs besteht darin, dass Julia die Reduzierung für uns vornimmt. Wir müssen uns nicht darum kümmern, den Anteil selbst zu reduzieren.

Alex A.
quelle
2

CJam, 55 Bytes

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

Der Code ist 85 Byte lang und qualifiziert sich für den Bonus von -30 Byte .

Probieren Sie es online im CJam-Interpreter aus .

Wie es funktioniert

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
quelle
1

Dyalog APL, 84-30 = 54 Bytes

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

Dies ist ein Zug , inspiriert von Adáms Antwort .

×/≢¨ Produkt der Längen

{+/⌊⌿+⌿↑1↑¨⍨-32|⍉⎕ucs↑⍵} Chancen der Liebe

(,÷v)die Verkettung geteilt durch die GCD; zwischen den beiden obigen Ausdrücken reduziert dies den Bruch

⊢, Stellen Sie die Namen voran

,¨⍨ mischt die Zeichenfolgen links mit den Werten rechts

ebnen


Berechnung "Chancen der Liebe" im Detail: {+/⌊⌿+⌿↑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
quelle
0

Java 8, 192 Bytes

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
quelle
0

Ruby, 153 Bytes

Länger als ich erwartet hatte. Ich weiß nicht, ob der 30-Byte-Bonus dafür gilt.

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
quelle
Könnten Sie bitte einen Link zu einem Compiler hinzufügen? (Ich empfehle Ideone)
JuniorRubyist
0

Python 2.7, 161 Bytes

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

Testen Sie es hier: http://ideone.com/jeoVgV

Und hier ist eine Version, die den Bruch vereinfacht:

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)

Leider ist diese Punktzahl 219-30 = 189 ...

Dieter
quelle
1
Hier ist ein Compiler, den Sie hinzufügen können: ideone.com/jeoVgV
juniorRubyist