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)
x
es el índice del personaje en su línea- por ejemplo,
c
es el cuarto personaje en0123c567
- por ejemplo,
y
es el número de línea del personaje- Por ejemplo,
c
está 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.1
corresponde al hash y0
al 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
1
como 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.41
es para vecinos diagonales y1
para 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