Cree un programa que cuente el número total de letras comunes a dos nombres y encuentre el producto de sus longitudes para funcionar como un "probador de amor".
Condiciones: es posible que no obtenga una respuesta 1: 1 (siendo 3 de 3, etc.) de salida.
Entrada
Dos nombres de STDIN o la alternativa más cercana.
Salida
Calcule x
como el número total de letras en común entre los dos nombres, ignorando mayúsculas y minúsculas. Calcule y
como el producto de las longitudes de los nombres. Entonces la salida, a STDOUT o la alternativa más cercana, es
Name1 and Name2 have x out of y chances of love.
Ejemplos
Entrada:
Wesley
Polly
Salida:
Wesley and Polly have 2 out of 30 chances of love.
Wesley y Polly tienen 2 letras en común, y
y l
el producto de sus longitudes es 6 * 5 = 30.
Entrada:
Bill
Jill
Salida:
Bill and Jill have 3 out of 16 chances of love.
Bonos
- Resta 30 bytes para usar fracciones simplificadas,
x out of y
es decir, está en forma totalmente reducida.
Tabla de clasificación:
La clasificación estará determinada por los idiomas. El código de golf termina el 17 de octubre a las 10:20 pm, hora del Pacífico (California)
Premios de representantes
- Recibirá 10 repeticiones (un voto positivo) por estar entre los 5 primeros (excepto el primer lugar).
- Recibirá 15 repeticiones (entrada aceptada) por ser el primer lugar.
- También puede obtener una recompensa de otra persona.
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma. **
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
** Fragmento de pila de Sign That Word de Kslkgh
Felicitaciones a los siguientes:
- Ganador Dennis (Pyth)
- Dennis (CJam)
- NBZ (APL)
- molarmanful (JavaScript ES6)
- Alex A. (Julia)
Aaron\nAhmad
? Osamename\nsamename
?a
yb
de alguna letra, ¿cuentan paramin(a,b)
repeticiones?Respuestas:
Pyth, 40 bytes
El código tiene una longitud de 70 bytes y califica para la bonificación de -30 bytes .
Pruébalo en línea.
fuente
Dyalog APL ,
9491-30 = 61 bytesPor lo general, el golf APL da como resultado un código más compacto, pero no más complejo, de lo normal, pero en este caso guardo los caracteres de manera fea:
,⍪'out of' 'chances of'
crear una tabla de 2 × 2 de los números (izquierda) y textos (derecha)×/≢¨⍵
producto de las longitudes de32|⎕UCS¨⍵
armonizar las mayúsculas y minúsculas valores UCS≢⊃∩/
coinciden la intersección de los dos conjuntos⊢÷∨/
dividir la cuenta y el producto con su GCD,' love.',⍨∊
convertirlo en una lista simple y append amor.⍵,⍪'and' 'have'
cree una tabla de nombres 2 × 2 (izquierda) y textos (derecha)∊' ',¨
anteponga un espacio a cada celda de la tabla y luego, en una lista simple,1↓
suelte el espacio superfluo inicialGracias a ngn por -3 bytes.
fuente
'Wesley' 'Polly'
. Si cree que esto sería más justo, siéntase libre de agregar⎕
(U + 2395) al final de la línea (después del}
) y ajustar el puntaje a 65.Javascript ES6, 123 bytes
Tanto por el "amor" ... Realmente podría hacer con menos bytes.
Ejecute el fragmento de código en Firefox.
Mostrar fragmento de código
fuente
Julia, 129 bytes
El código es de 159 bytes pero califica para el bono de -30.
Esto probablemente podría acortarse al no optar por la bonificación, pero quería mostrar el tipo de número racional de Julia. :)
Sin golf:
La
Rational()
función construye un objeto de tipoRational
que tiene camposnum
yden
, correspondiente al numerador y denominador respectivamente. El beneficio de usar este tipo aquí es que Julia hace la reducción por nosotros; no tenemos que preocuparnos por reducir la fracción nosotros mismos.fuente
CJam, 55 bytes
El código tiene una longitud de 85 bytes y califica para la bonificación de -30 bytes .
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Dyalog APL, 84-30 = 54 bytes
∊' and ' ' have' 'out of' 'chances of love.',¨⍨⊢,{+/⌊⌿+⌿↑1↑¨⍨-32|⍉⎕ucs↑⍵}(,÷∨)(×/≢¨)
Este es un tren , inspirado en la respuesta de Adám .
×/≢¨
producto de las longitudes{+/⌊⌿+⌿↑1↑¨⍨-32|⍉⎕ucs↑⍵}
posibilidades de amor(,÷v)
la concatenación dividida por el MCD; entre las dos expresiones anteriores, esto reduce la fracción⊢,
anteponer los nombres,¨⍨
baraja las cadenas de la izquierda con los valores de la derecha∊
aplanarCálculo de "posibilidades de amor" en detalle:
{+/⌊⌿+⌿↑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
prueba , prueba2
fuente
Java 8, 192 bytes
Ex:
fuente
Ruby, 153 bytes
Más de lo que esperaba. No sé si el bono de 30 bytes se aplica a esto.
fuente
Python 2.7, 161 bytes
Pruébelo aquí: http://ideone.com/jeoVgV
Y aquí hay una versión que simplifica la fracción:
Lamentablemente, este puntaje es 219-30 = 189 ...
fuente