Objetivo
Dada una cadena con un tren de hashes, calcule su longitud total y divida por la distancia de principio a fin.
Simulación
¿Qué estamos simulando? Según este documento , ¡la relación entre la longitud de un río y la distancia entre el inicio y el final es aproximadamente Pi! (Esto puede haber sido refutado empíricamente, pero pude encontrar los datos y para este desafío asumiremos que es cierto).
¿Cómo estamos simulando esto?
- Tome una entrada de cadena de espacios en blanco y hashes
- Cada hash tendrá otros dos adyacentes.
- Con la excepción del primer y último hash que tendrá solo 1
- Cada personaje se encuentra en un punto reticular
(x, y) xes el índice del personaje en su línea- por ejemplo,
ces el cuarto personaje en0123c567
- por ejemplo,
yes el número de línea del personaje- Por ejemplo,
cestá en la tercera línea:
- Por ejemplo,
0line
1line
2line
3c...
- Suma las distancias entre hashes adyacentes, llámalo
S - Toma la distancia entre el primer y el último hash, llámalo
D - Regreso
S/D
Especificación
- Entrada
- Flexible, tome la entrada en cualquiera de las formas estándar (por ejemplo, parámetro de función, STDIN) y en cualquier formato estándar (por ejemplo, cadena, binario)
- Salida
- Flexible, dé salida en cualquiera de las formas estándar (por ejemplo, devolución, impresión)
- El espacio en blanco, el espacio en blanco final y posterior es aceptable
- Precisión, proporcione al menos 4 decimales de precisión (es decir
3.1416)
- Puntuación
- ¡El código más corto gana!
Casos de prueba
Estas son mis aproximaciones de los ríos. Mis aproximaciones pueden ser pobres o estas pueden ser una muestra pobre de la población del río. Además, hice estos cálculos a mano; Podría haber calculado la señorita.
### ####
# # #
# # #
# # #
# # #
# # #
## # # #####
## # #
##
1.6519
#
#
#
#
#
#
#
#
# #
# # #
# #
#
##
#
#
#
#
#
#
#
#
# #
# ##
#
#
#
#
#
#
#
#
#
#
#
1.5498
###
# #
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
###
#
#
#
#
#
#
#
#
#
##
#
#
##
##
##
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
####
#
#
1.5257
TL; DR
Estos desafíos son simulaciones de algoritmos que solo requieren la naturaleza y su cerebro (y tal vez algunos recursos reutilizables) para aproximarse a Pi. Si realmente necesitas Pi durante el apocalipsis zombie, ¡estos métodos no desperdician munición ! Hay nueve desafíos en total.


#<tag>Respuestas:
MATL ,
4844423733 bytesMuchos bytes guardados gracias a la idea de rahnema1 (respuesta de octava) de colapsar dos convoluciones en una
Esto toma la entrada como una matriz binaria, con un
;separador de filas.1corresponde al hash y0al espacio.Pruébalo en línea! O verificar todos los casos de prueba .
Aquí hay un convertidor de formato que toma entradas como matrices de caracteres 2D (nuevamente, con un
;separador) y produce representaciones de cadena de las matrices binarias correspondientes.Explicación
¡Esto fue divertido! El código usa
tresdos convoluciones 2D, cada una para un propósito diferente:Para detectar vecinos verticales y horizontales, que contribuyen a una distancia de
1, la máscara requerida seríaPero solo queremos que cada par de vecinos sea detectado una vez. Entonces tomamos la mitad de la máscara (y la última fila de ceros se puede eliminar):
Del mismo modo, para detectar vecinos diagonales, que contribuyen a una distancia de
sqrt(2), la máscara seríapero por el mismo razonamiento que el anterior se convierte
Si esta máscara se multiplica por
sqrt(2)y se agrega a la primera, las dos circunvoluciones se pueden reemplazar por una con la máscara combinadaLos puntos de inicio y fin son, por definición, los puntos con un solo vecino. Para detectarlos nos involucramos con
y ver qué puntos dan
1como resultado.Para producir la máscara combinada del elemento 1 es más corto generar su cuadrado y luego sacar la raíz cuadrada. La máscara en el elemento 2 es un literal predefinido.
fuente
Octava, 99 bytes
casi el mismo método que la respuesta MATL pero aquí el núcleo de convoluciones es
eso
sqrt(2) =1.41es para vecinos diagonales y1para vecinos directos, de modo que cuando sumamos valores del resultado sobre el río obtenemos el doble de la distancia real.versión sin golf :
Pruébalo (pégalo) en Octave Online
fuente
{[x y]=find(c<2&c>0),pdist([x y])}{2}es tan inteligente !!!JavaScript (ES6), 178
Ingrese como una cadena con nuevas líneas en forma rectangular : cada línea rellena con espacios a la misma longitud (como en los ejemplos)
Menos golf
Prueba
fuente