Cuando era niña, mi hermana me mostró este pequeño cálculo de amor para ver cuántas posibilidades tienes de tener una relación exitosa con tu enamorado. Todo lo que necesitas es 2 nombres y una hoja de papel.
- John
- Jane
Luego, separa estos nombres con la palabra Amores . Puede escribir esto en una línea o en líneas nuevas.
John
ama a
Jane
Entonces comienza el cálculo. Empieza contando cuántas veces aparece un personaje de izquierda a derecha y, en caso de que utilices nuevas líneas también de arriba a abajo. Cada personaje se cuenta una vez, así que después de contar la J de John no tienes que contarlos nuevamente cuando comienzas con Jane. El resultado de este ejemplo será el siguiente:
J: 2 ([J] ohn | [J] ane)
O: 2 (J [o] hn | L [o] ves)
H: 1 (Jo [h] n)
N: 2 (Joh [n] | Ja [n] e)
__
L: 1 ([L] oves)
O: omitido
V: 1 (Lo [v] es)
E: 2 (Lov [e] s | Jan [e])
S: 1 (Amor [s ])
__
J: omitido
A: 1 (J [a] ne)
N: omitido
E: omitido
__
Resultado final: 2 2 1 2 1 1 2 1 1
El siguiente paso será agregar los dígitos que trabajan desde afuera hacia el medio.
2 2 1 2 1 1 2 1 1 (2 + 1 = 3)
2 2 1 2 1 1 2 1 1 (2 + 1 = 3)
2 2 1 2 1 1 2 1 1 (1 + 2 = 3)
2 2 1 2 1 1 2 1 1 (2 + 1 = 3)
2 2 1 2 1 1 2 1 1 (1)
__
Resultado: 3 3 3 3 1
Seguirás haciendo esto hasta que te quede un número entero menor o igual a 100.
3 3 3 3 1
4 6 3
76%
Puede suceder que la suma de 2 dígitos sea ≥ 10, en este caso el número se dividirá en 2 en la siguiente fila.
Ejemplo:
5 3 1 2 5 4 1 8
13 (Se usará como 1 3)
1 3 4 5 7
8 8 4 (8 + 4 = 12 como 1 2)
1 2 8
92%
Requisitos
- Su programa debe poder aceptar cualquier nombre con una longitud razonable (100 caracteres)
- Se permiten [A..Z, a..z] caracteres.
- No distingue entre mayúsculas y minúsculas, así que A == a
Gratis para que usted decida
- Cómo manejar caracteres especiales (Ö, è, etc.)
- Incluya apellidos sí o no, los espacios serán ignorados
- Cualquier idioma está permitido.
El ganador se determinará por votos el 28 y 14 de febrero.
Codificación feliz
Ps Esta es la primera vez que pongo algo aquí, si hay alguna forma de mejorarlo, no dude en hacérmelo saber = 3
Editar: se cambió la fecha de finalización para el día de San Valentín, se pensó que sería más apropiado para este desafío :)
fuente
1-love_result
:-)Respuestas:
Sclipting
Espera la entrada como dos palabras separadas por espacios (p
John Jane
. Ej .). No distingue entre mayúsculas y minúsculas, pero solo admite caracteres que no sean caracteres regex especiales (¡así que no los use(
ni*
en su nombre!). También espera solo dos palabras, así que si tu interés amoroso es "Mary Jane", debes ponerMaryJane
una palabra; de lo contrario, evaluará "YourName loves Mary loves Jane".Explicación
La parte más difícil fue manejar el caso de un número impar de dígitos: debe dejar solo el dígito del medio en lugar de agregarlo consigo mismo. Creo que mi solución es interesante.
Cuando te quedas con algo ≤ 100, el bucle terminará, la respuesta estará en la pila y, por lo tanto, en la salida.
fuente
改
(reemplazo de cadena sin distinción entre mayúsculas y minúsculas) en respuesta a este desafío, pero no voy a utilizarlo aquí.Funciton
Este programa espera la entrada separada por un espacio (por ejemplo
John Jane
). No distingue entre mayúsculas y minúsculas para los caracteres AZ / az; para cualquier otro carácter Unicode, "confundirá" dos caracteres que son iguales cuando o'ed con 32 (por ejemplo ,Ā
yĠ
, o?
y_
). Además, no tengo idea de qué hará este programa si la entrada contiene un carácter NUL (\0
), así que no use eso :)Además, dado que StackExchange agrega demasiado espacio entre líneas, aquí está el texto sin formato en pastebin . Alternativamente, ejecute el siguiente código en la consola de JavaScript de su navegador para solucionarlo aquí:
$('pre').css('line-height',1)
Explicacion rapida
El programa solo toma STDIN y llama
Ḷ
con él.Ḷ
encuentra el primer espacio en la cadena, lo reemplaza porloves
y pasa el resultado aỌ
.Ọ
toma repetidamente el primer carácter de la cadena de entrada, lo llamaṢ
y concatena los números de ocurrencias en una cadena de resultados. Cuando la cadena de entrada está vacía, llamaṾ
con la cadena de resultado.Ṿ
llama repetidamenteẸ
hasta que obtiene un resultado que es igual"100"
o tiene una longitud inferior a 3. (en100
realidad puede ocurrir: considere la entradalovvvv eeeeeess
). Cuando lo hace, agrega"%"
y devuelve eso.Ẹ
calcula una iteración completa del algoritmo de cálculo del amor; es decir, toma una cadena de dígitos y devuelve la siguiente cadena de dígitos.Ṛ
toma un pajar y una aguja y encuentra el índice de la primera aparición de aguja en el pajar utilizando el criterio de falsa mayúsculas y minúsculas (or 32
).Ṣ
toma un pajar y una aguja y se aplica repetidamenteṚ
para eliminar todas las instancias de la aguja . Devuelve el resultado final después de todas las eliminaciones, así como el número de eliminaciones realizadas.fuente
Rubí
Imprime un corazón si la probabilidad de una relación es superior al 50%
E imprime un corazón roto si las posibilidades son inferiores al 50% :(
Frigging John ...
De todos modos, no distingue entre mayúsculas y minúsculas y admite consultas polígamas (por ejemplo
ruby ♥.rb Alice Bob Carol Dave
).fuente
APL, 80
Porque el
amor es amorcode-golf es code-golf (incluso cuando no lo es)Obligatorio ♥ version versión en forma de:
La versión de golf me da un comportamiento un tanto errático, debido a un error
∪⍦
que estoy investigando con los desarrolladores de NARS:Pero pude ejecutarlo por partes y obtener el resultado correcto:
fuente
Javascript
Probablemente podría estar más limpio, pero funciona. Ejemplo detallado
fuente
Pitón
Bueno, pensé que era un código de golf ...
Sin golf:
fuente
reduce(list.__add__,xyz)
porsum(xyz,[])
. :)PHP
resultado de muestra
fuente
GolfScript
Código obligatorio de respuesta de golf en GolfScript:
Acepta entradas como nombres separados por espacios, p. Ej.
fuente
DO#
fuente
q[i] + q[j]
es 10 o mayor?Haskell
Mi versión es bastante larga, es porque decidí centrarme en la legibilidad, pensé que sería interesante formalizar su algoritmo en código. Agrego los recuentos de caracteres en un pliegue izquierdo , básicamente los junta bolas de nieve y el orden está en el orden en que aparecen en la cadena. También logré reemplazar la parte del algoritmo que normalmente requeriría la indexación de matriz con la flexión de la lista . Resulta que su algoritmo básicamente consiste en doblar la lista de números por la mitad y sumar números alineados. Hay dos casos para doblar, las listas pares se dividen muy bien en el medio, las listas impares se doblan alrededor de un elemento central y ese elemento no participa además. Fission está tomando la lista y dividiendo números que ya no son un solo dígito, como> = 10 . Tuve que escribir mi propio despliegue , no estoy seguro de si realmente es un despliegue , pero parece hacer lo que necesito. Disfrutar.
Algunos resultados
"Romeo" "Julieta" 97% - Las pruebas empíricas son importantes
"Romeo" "Julier" 88% - Versión abreviada moderna ...
"Horst Draper" "Jane" 20%
"Horst Draper" "Jane (Caballo)" 70% - Ha habido un desarrollo ...
"Bender Bender Rodriguez" "Fenny Wenchworth" 41% - Bender dice "¡El plegado es para mujeres!"
"Philip Fry" "Turanga Leela" 53% - Bueno, puedes ver por qué les llevó 7 temporadas casarse con
"Maria" "Abraham" - 98%
"John" "Jane" 76%
fuente
Rubí
Minified:
Llámalo:
fuente
l=->a{...}
lugar del=lambda do|a|...end
, y también puede hacer enl[...]
lugar del.call(...)
.Python 3
Una solución simple que no utiliza módulos. I / O es lo suficientemente bonita.
Utilicé la captura de errores como respaldo para cuando el segundo iterador está fuera de los límites; si detecta el error de índice de Python, supone 1. Extraño, pero funciona.
Aquí hay una muestra de ejecución:
fuente
for
encendidonames
directamente?25211111111.363221.485.98
. Creo que su código no puede agregar el 5 "a"Java
¿Qué pasa si el número es igual a 10? Acabo de agregar 1 y 0, ¿es correcto?
Decidí ignorar el caso.
entrada:
salida:
entrada:
salida:
fuente
do
Puede haber muchas mejoras, pero fue divertido codificarlo.
Y, por supuesto, la versión obligatoria de golf: 496
fuente
Python 3
Esto tomará dos nombres como entrada. tira espacios extra y luego calcula el amor. Consulte Salida de entrada para más detalles.
entrada:
salida:
O prueba este;)
entrada:
salida:
fuente
k, 80
Aquí hay una muestra de ello:
fuente
J
Aquí hay uno sencillo en J:
Toma los nombres en la línea de comando, por ejemplo:
fuente
Maravilloso
Aquí está la versión maravillosa, con pruebas.
Explicación:
CodeGolf Groovy, 213 char
Al ver que esto es codegolf, podemos alinear los cierres y reducirlo a esto:
guárdelo como lovecalc.groovy. ejecutar "maravilloso lovecalc john jane"
Salida:
fuente
Java
Esto toma 2 parámetros de cadena al inicio e imprime el recuento de cada carácter y el resultado.
Seguramente no sea el más corto (es Java), sino uno claro y legible.
Entonces si llamas
obtienes la salida
fuente
R
No voy a ganar ningún premio de compacidad, pero me divertí de todos modos:
Probado: válido para 'john' y 'jane' y para 'romeo' y 'juliet'. por mi comentario debajo de la pregunta,
fuente