Objetivo
Dada uma corda com um conjunto de hashes, calcule seu comprimento total e divida pela distância do início ao fim.
Simulação
O que estamos simulando? De acordo com este artigo , a relação entre o comprimento de um rio e a distância entre o início e o fim é de aproximadamente Pi! (Isso pode ter sido contestado empiricamente, mas eu pude encontrar os dados e, para esse desafio, assumiremos que é verdade).
Como estamos simulando isso?
- Pegue uma entrada de string de espaço em branco e hashes
- Cada hash terá dois outros adjacentes
- Com exceção do primeiro e último hash, que terão apenas 1
- Cada personagem está em um ponto de treliça
(x, y)
x
é o índice do personagem em sua linha- por exemplo,
c
é o quarto caractere em0123c567
- por exemplo,
y
é o número da linha do personagem- por exemplo,
c
está na terceira linha:
- por exemplo,
0line
1line
2line
3c...
- Soma as distâncias entre os hashes adjacentes, chame-o
S
- Pegue a distância entre o primeiro e o último hashes, chame-o
D
- Retorna
S/D
Especificação
- Entrada
- Flexível, receba informações de qualquer uma das formas padrão (por exemplo, parâmetro de função, STDIN) e em qualquer formato padrão (por exemplo, String, Binário)
- Resultado
- Flexível, produza de qualquer forma padrão (por exemplo, devolução, impressão)
- Espaço em branco, espaço em branco à direita e à esquerda é aceitável
- Precisão, forneça pelo menos 4 casas decimais de precisão (ou seja
3.1416
)
- Pontuação
- O código mais curto vence!
Casos de teste
Estas são as minhas aproximações dos rios. Minhas aproximações podem ser ruins ou essas podem ser uma amostra ruim da população do rio. Além disso, fiz esses cálculos manualmente; Eu poderia ter errado calculado.
### ####
# # #
# # #
# # #
# # #
# # #
## # # #####
## # #
##
1.6519
#
#
#
#
#
#
#
#
# #
# # #
# #
#
##
#
#
#
#
#
#
#
#
# #
# ##
#
#
#
#
#
#
#
#
#
#
#
1.5498
###
# #
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
###
#
#
#
#
#
#
#
#
#
##
#
#
##
##
##
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
####
#
#
1.5257
TL; DR
Esses desafios são simulações de algoritmos que exigem apenas a natureza e seu cérebro (e talvez alguns recursos reutilizáveis) para aproximar o Pi. Se você realmente precisa de Pi durante o apocalipse zumbi, esses métodos não gastam munição ! Existem nove desafios no total.
#<tag>
Respostas:
MATL ,
4844423733 bytesPoucos bytes salvos graças à idéia de rahnema1 (resposta de oitava) de recolher duas convoluções em uma
Isso leva a entrada como uma matriz binária, com
;
como separador de linhas.1
corresponde ao de hash e0
para o espaço.Experimente online! Ou verifique todos os casos de teste .
Aqui está um conversor de formato que recebe entradas como matrizes de caracteres 2D (novamente, com
;
separador) e produz representações de seqüência de caracteres das matrizes binárias correspondentes.Explicação
Isso foi divertido! O código usa
trêsduas convoluções 2D, cada uma com uma finalidade diferente:Para detectar vizinhos verticais e horizontais, que contribuem com uma distância de
1
, a máscara necessária seriaMas queremos apenas que cada par de vizinhos seja detectado uma vez. Então pegamos metade da máscara (e a última linha de zeros pode ser removida):
Da mesma forma, para detectar vizinhos diagonais, que contribuem com uma distância de
sqrt(2)
, a máscara seriamas pelo mesmo raciocínio acima, torna-se
Se essa máscara for multiplicada
sqrt(2)
e adicionada à primeira, as duas convoluções poderão ser substituídas por uma convolução pela máscara combinadaOs pontos inicial e final são, por definição, os pontos com apenas um vizinho. Para detectá-los, convolvemos com
e veja quais pontos dão
1
como resultado.Para produzir a máscara combinada do item 1, é mais baixo gerar seu quadrado e depois pegar a raiz quadrada. A máscara no item 2 é um literal predefinido.
fonte
Oitava, 99 bytes
quase o mesmo método que a resposta MATL, mas aqui o núcleo de convoluções é
isto
sqrt(2) =1.41
é para vizinhos diagonais e1
para vizinhos diretos, portanto, quando somamos valores do resultado sobre o rio, obtemos o dobro da distância real.versão não destruída :
Experimente (cole) no Octave Online
fonte
{[x y]=find(c<2&c>0),pdist([x y])}{2}
é tão inteligente !!!JavaScript (ES6), 178
Entrada como uma string com novas linhas na forma retangular : cada linha preenchida com espaços com o mesmo comprimento (como nos exemplos)
Menos golfe
Teste
fonte