Basado en Chunky vs. Smooth Strings .
/\_/\/\__/\/\/\/\_/\_/\
Es divertido hacer garabatos en un teclado cuando estás realmente aburrido. Pero no todos los garabatos son iguales. Algunos garabatos son suaves, como \___/
, y algunos son gruesos, como /\/\/\/\
. Otros están simplemente rotos, como////_\\\
Dentro de cada garabato de N
personajes, hay N-1
uniones de garabatos. Cada cruce de garabatos se clasifica en uno de tres tipos:
Lisa (ángulo> "90 grados"):
\_ __ _/
Grueso (ángulo = "90 grados")
/\ \/
Roto (todo lo que no se conecta)
// \\ /_ _\
Definamos la suavidad como la proporción de uniones que son lisas, con la fragilidad y la fragilidad definidas de manera similar. Cada valor oscila entre 0
y 1
. La suma de la suavidad, la fragilidad y la fragilidad de un garabato siempre es igual a 1.
Por ejemplo, el garabato /\/\\_//\_
tiene 3 uniones lisas, 4 uniones gruesas y 2 uniones rotas. Por lo tanto 0.3333
, es suave, 0.4444
grueso y 0.2222
roto.
Las cadenas vacías y las cadenas con un solo carácter tienen valores indefinidos, todas las entradas tendrán al menos 2 caracteres de longitud.
Desafío
Escriba un programa que tome un garabato de longitud arbitraria y genere dos de sus valores de suavidad, fragmentación y fragilidad.
- Puede escribir un programa o función, con entrada a través de STDIN, línea de comando o como un argumento de cadena.
- Puede suponer que la entrada tiene al menos una longitud> = 2 y consiste solo en los caracteres
/\_
con una nueva línea final opcional. - Imprima (o devuelva si es una función) los dos flotantes con una precisión de al menos 4 decimales, redondeados o truncados. Si el valor verdadero es
2/3
, los valores aceptables incluyen cualquier valor entre0.6666
e0.6667
incluso cosas como0.666637104
. Si el valor exacto es1/3
, cualquier respuesta que contenga0.3333
es válida. Puede omitir los ceros finales o el cero inicial si el valor es menor que uno. - Imprima cualquier par de los tres valores que prefiera, solo asegúrese de indicar cuáles dos y en qué orden.
El código más corto en bytes gana.
Ejemplos
/\/\\/\//\\
→ Suavidad 0
, Chunkiness 0.7
, Brokenness0.3
_/\\_/\\/__/\\\//_
→ Suavidad 0.29411764705
, Chunkiness 0.29411764705
, Brokenness0.41176470588
//\\__/_\/
→ Suavidad 0.3333333
, Chunkiness 0.2222222
, Brokenness0.4444444
Pregunta extra: ¿Qué prefieres, garabatos suaves, gruesos o rotos?
fuente
Respuestas:
Pyth, 25 bytes
Banco de pruebas
Produce suavidad, aspereza. Básicamente, toma la cuerda codificada y la corta por la mitad. Cada mitad se descompone en sus subcadenas de 2 caracteres, y lo mismo se hace para la entrada. Tomamos la intersección, dando como resultado los pares sur y grueso. Luego, tomamos la longitud, la dividimos por el número de pares e imprimimos.
fuente
Japt, 42 bytes
Salidas roturas, gruesas. Pruébalo en línea!
Cómo funciona
Versión no competitiva, 36 bytes
Funciona básicamente de la misma manera que el otro, con algunos cambios menores:
ä
ahora funciona con cuerdas. Los caracteres se pasan a la función en orden(X, Y, X+Y)
.è
cuenta el número de ocurrencias del argumento en la cadena / matriz.fuente
Python 3, 149 bytes
Esto produce suavidad y firmeza.
Sin golf:
fuente
Rubí, 71
Produce suavidad, aspereza.
Toma las cadenas suaves y gruesas mínimas y las busca por cada cadena de dos caracteres en la cadena inicial.
¡Gracias a Kevin Lau por OCHO bytes!
fuente
(0..x.size-2).count{|i|t[x[i,2]]}
ahorra 5 bytesx.chars.each_cons(2).count{|i|t[i*'']}
. Y ahora que está usandox.size
dos veces en la función, asignándola a una variable y usando eso ahorra un byte adicional.