São 10 bolinhas numa esfera, que podem se movimentar por 11 casas.
Cada casa tem uma cor diferente, e cada bolinha tem a mesma cor da casa.
Basta pressionar a bolinha em direção ao espaço vazio para movimentar.
O jogo é colocar todas as bolinhas em posições aleatórias e depois arrumar tudo: cada bolinha em sua casa.
É um puzzle fácil. Tendo um espaço vazio, eu sempre consigo trocar duas bolinhas. Então, um algoritmo guloso, de ir resolvendo casa por casa, é suficiente.
As minhas filhas de 6 e 9 anos conseguem resolver.
É um puzzle simples, com um grau mínimo de dificuldade para ficar divertido.
Ethos, Pathos e Logos: elementos da persuasão, segundo o grande Aristóteles. É a arte de escolher o melhor argumento a cada caso com o fim de persuadir.
Sobre Cisnes Negros. Eventos de baixa probabilidade e alto impacto, que surgem em nossas vidas. Nassim Taleb é o autor que mais admiro no mundo moderno.
Dando continuidade a post anterior, segue uma lista de algoritmos para ajudar a resolver o SquareOne.
A ideia é criar movimentos que mexam com o menor número possível de peças, a fim de conseguir criar um padrão compreensível. É a mesma lógica de “movimento invariante” de outros cubos: mexo, volto e vou anotando os efeitos.
Os movimentos básicos, no começo, serão compostos de forma a chegar a movimentos mais complexos no final desta seção.
Até agora, vamos mostrar apenas movimentos que não variem a forma do cubo. No próximo post, vamos mexer na forma.
Mov Base I
Vídeo no Youtube:
Mov Base II
Mov Troca Layers
Mov Translado
Esse movimento fica mais claro se isolar somente as peças que se movem:
Mov Translado -1
É a mesma coisa, mas ao contrário – aliás, todos os movimentos descritos aqui têm a versão inversa, e dominá-las pode ser muito útil.
Mov Troca 2 simples
Mov Troca 2 lateral
Mov Troca 4 laterais
Mov Troca 4 cantos
Este movimento é importante para arrumar as peças dos cantos.
Mov Troca 3 laterais
Posição triangular
Quando as peças laterais estiverem numa situação como a da figura, basta um movimento UR para transformar essa posição em outra que dê para aplicar o movimento Troca 3 laterais ou algum dos truques acima.
Há um número infindável de combinações possíveis, então cada caso vai ser diferente. Porém, essa é a ideia: dominar os movimentos básicos acima, e transformar este caso em alguma posição resolvível acima.
No próximo post, algoritmos de forma, e a seguir, como juntar todos os elementos.
O método da exaustão foi desenvolvido nos tempos de Eudoxo e Arquimedes. Este post visa mostrar a ideia geral do método. Os gregos antigos tinham uma noção bastante forte de geometria, e por isso, é bastante lúdico entender o raciocínio.
Como calcular a área de um círculo, ou de alguma outra forma complicada? Uma resposta é aproximar por algo mais simples, como um triângulo ou um quadrado.
O maior quadrado possível que cabe dentro de um círculo é o quadrado inscrito.
O menor quadrado possível em que o círculo cabe dentro é o quadrado circunscrito.
Assumindo que o raio é igual a 1, para facilitar, a área do círculo vai estar entre 2 e 3,31 (demonstração nos capítulos seguintes abaixo).
Mas o quadrado é muito diferente do círculo. Não dá para melhorar?
Que tal utilizar um pentágono?
A aproximação melhorou um pouco, entre 2,38 e 3,25 (hoje sabemos que a área é pi*r^2, se o raio é 1, a área é pi = 3.1415…)
Podemos continuar crescendo o número de lados do polígono.
Digamos, 6 lados (hexágono):
10 lados:
15 lados:
Quanto maior o número de lados, o polígono regular é mais parecido com o círculo.
Repetindo o procedimento, até a exaustão (daí o nome), podemos chegar ao valor de pi com a precisão desejada.
Os gregos utilizaram técnica semelhante para calcular área de diversas outras formas, e também o volume de esferas e outros sólidos.
O método acima tem pouca álgebra e muita geometria e é uma espécie de precursor do cálculo integral.
É possível utilizar o Excel para traçar os polígonos acima, embora seja um pouco mais avançado (utilizando VBA).
O desenho utiliza apenas retas e círculos, o que facilita bastante.
Em essência, para adicionar uma linha, só é necessário saber as coordenadas iniciais (x1,y1) e finais (x2,y2).
ActiveSheet.Shapes.AddLine(x1, y1, x2, y2)
O número de lados N do polígono regular vai dividir o círculo em N, mostrado acima como bolinhas amarelas.
Se uma volta completa é igual a 360 graus (2*pi), o ângulo theta entre dois pontos é de 2*pi/N.
As coordenadas do ponto i são (r*cos(theta_i), r*sin(theta_i)), com theta_i = i*2*pi/N.
O código final envolve vários outros detalhes, porém, a essência está descrita acima.
For i = 1 To nlados
theta = 2 * i * pi / nlados + theta0
x1 = cx0 + raio * Math.Sin(theta)
y1 = cy0 + raio * Math.Cos(theta)
theta = 2 * (i + 1) * pi / nlados + theta0
x2 = cx0 + raio * Math.Sin(theta)
y2 = cy0 + raio * Math.Cos(theta)
plotaLinha "FrmRef", x1, y1, x2, y2, r, g, b
Next i
Para calcular a área, utilizar geometria novamente.
Se o lado do polígono é igual a x, e a altura do triângulo h, temos um triângulo retângulo h – x/2 – r.
Lembrando que o raio do círculo é conhecido.
O ângulo é theta = 360 / N.
Fazendo as contas, a área do polígono inscrito é N/2 * sin(2*pi/N).
A área do polígono circunscrito é 2*N*tan(pi/(2*N)).
Há um erro lógico aqui no exercício. Utilizei o conhecimento moderno de trigonometria para calcular a área – e tal conhecimento utiliza explicitamente o pi, que era justamente o que Eudoxo e Arquimedes queriam descobrir. Porém, para efeito de ilustração, imagino que seja suficiente.
Um algoritmo de IA da Universidade de Washington conseguiu distinguir Lobos de Huskies, com 90% de acurácia! Um feito fantástico, considerando que são muito parecidos.
Os protocolos usuais, como separar dados de treinamento e de testes, tinham sido obedecidos, e por todas as métricas, o algoritmo era excelente.
Analisando a fundo, os pesquisadores descobriram a mágica. Ele estava reconhecendo a neve no fundo da foto. Se tinha neve, era lobo, se não tinha, era husky!
Nos modelos atuais, entramos com dados e resultados, e o que acontece lá dentro é uma caixa-preta. Hoje em dia, nem precisamos saber a matemática envolvida (infelizmente).
Uma foto de husky pode ser inofensiva, porém, imagine um carro autônomo que não reconhece pedestres com máscara e chapéu, por exemplo.
Por isso, precisamos evoluir para uma IA Explicável, a fim de entender o que está acontecendo, estabelecer relações causais e colocar restrições além do que é possível no método caixa-preta.
Este foi um dos temas discutidos no Informs 2020, que acontece on-line essa semana.
Fiz algumas figuras para entender a lógica deste – vide o scan abaixo.
Esquematicamente, imagine um círculo menor rodando dentro de um círculo maior.
Além disso, dentro do círculo menor, escolho a posição do ponto onde coloco a caneta, representada pelo círculo vermelho abaixo.
A posição inicial do círculo menor é dada pelo círculo verde abaixo.
O raio do círculo maior é R, o do círculo menor que roda dentro do círculo maior é r2.
A posição da caneta pode ser descrita por um raio r3, e um ângulo lambda em relação ao centro do círculo menor no início da rotação.
Imagine que o círculo menor rodou um ângulo theta em relação ao círculo maior.
A posição do CENTRO do círculo menor vai ser dada pelas equações da figura – até agora, nenhuma novidade, são equações de um círculo.
A posição inicial do círculo, em verde, mudou, porque girou com o círculo.
O ângulo phi, do deslocamento da posição inicial, é obtido notando que o arco da circunferência maior tem a mesma dimensão do arco da circunferência do círculo menor.
Um arco de circunferência é dado por R*ângulo, onde o ângulo é medido em radianos.
Assim, R*theta = r2*phi.
Ou seja, phi = R*theta / r2.
Se o raio menor r2 for pequeno, phi é maior, ou seja, vai ter que girar mais vezes para chegar ao mesmo ponto.
Agora, finalmente, temos que encontrar a posição da caneta (a bola vermelha). Lembrando, ela estava a um ângulo lambda da posição inicial, e num raio r3.
Portanto, o ângulo até o ponto de tangência entre os dois círculos é (phi – lambda), onde phi = R*theta / r2.
As equações finais têm que levar em consideração a posição inicial do círculo maior, o centro do círculo menor, e a rotação descrita acima.
X = x0 + (R-r2)*Math.sin(theta)-r3*Math.sin(theta*R/r2 - phi));
Y = y0 + (R-r2)*Math.cos(theta)-r3*Math.cos(theta*R/r2 - phi));
Fiz a implementação utilizando a excelente biblioteca D3 de Javascript.
Para o raio maior, utilizei o valor arbitrário de 200. Os outros parâmetros são o raio menor (r2), a posição da caneta (r3) e o número de voltas que o círculo menor dá em torno do maior.
Seguem alguns resultados.
Com os parâmetros descritos, e 1 volta.
2 voltas:
Chega uma hora que não adianta mais dar voltas, que elas coincidem na mesma trajetória.
Outros exemplos:
Nota: o ângulo lambda foi desprezado, no final das contas, porque apenas desloca um pouco o ângulo, sem mudar o formato da figura.
As curvas desenhadas acima lembram as curvas que os planetas fazem no céu, vistos da Terra.
Imagine que a Terra é o círculo menor, girando ao redor do Sol, o círculo maior. A Terra também gira em torno de si mesma. Agora, um outro planeta, Vênus, também gira ao redor do Sol numa velocidade diferente.
Certamente, a equação dos planetas é muito mais complexa: é em três dimensões, as órbitas são elípticas, e o outro planeta gira em torno do Sol também. Porém, a ideia geral é mais ou menos semelhante: uma composição de rotações em torno de rotações de rotações, ora fazendo a posição aparente ir para frente, ora para trás, numa eterna dança celestial…
Trilha sonora: O segundo sol, Cássia Eller
“Quando o segundo sol chegar, para realinhar as órbitas dos planetas…”
Quadrados mágicos são números arranjados numa grade, de tal forma que a soma das linhas, colunas e diagonais seja igual.
A questão de como criar diversos tipos de quadrados mágicos vem intrigado os matemáticos há séculos.
Veremos neste tutorial, como criar um quadrado mágico de qualquer tamanho. Implementação em VBA e em Python disponível no Github.
Há três casos diferentes:
– quadrados mágicos ímpares,
– do tipo 4*n
– do tipo 4*n+2
Para cada caso, há um algoritmo diferente.
Caso 1: Quadrados mágicos ímpares
São os que têm número de lado ímpar (3, 5, 7, etc).
Começar colocando o 1 na célula superior do meio. Andar uma casa para a esquerda e uma para cima, para colocar o próximo número. Como o tabuleiro acaba, é como se ele desse a volta e colocasse o número no canto inferior.
Ir repetindo o passo acima, do número 2 para o 3.
Quando a casa em questão já estiver ocupada, como no caso abaixo,
… colocar o próximo número imediatamente abaixo da casa de referência.
Isso é suficiente para gerar qualquer quadrado mágico ímpar.
Ex. quadrado mágico 3×3:
Obs. Devido à simetria, tanto faz ir para a direita ou para a esquerda, no primeiro passo acima.
Padrão de cores: mais claro -> número maior, mais escuro, número menor.
Ex. Quadrado mágico 15×15:
Caso 2: Quadrados de ordem 4*n
Ou seja, quadrados de lado 4, 8, 12, 16, etc.
Colocar os números de 1 a 16 sequencialmente na grade.
Apagar os números da diagonal principal e da diagonal secundária:
Agora, imagine o grid preenchido sequencialmente, mas na ordem inversa:
Neste grid inverso, apagar todos os números que NÃO são das diagonais principal e secundária.
Juntar ambos os quadrados semi-preenchidos, e voilá, temos um quadrado mágico!
Para ordem 8, 12, é similar. É só imaginar um quadrado 8×8 sendo dividido em 4 quadrados 4×4, e para cada quadrado 4×4, aplicar o padrão acima.
Caso 3: Ordem 4*n+2
São quadrados com casas 6, 10, 14, etc, em que os algoritmos acima não funcionam.
Este caso é mais complicado.
A regra utilizada aqui é a LUX, desenvolvida por John Conway (o mesmo do Jogo da Vida).
Dividir o quadrado em grupos de quadrados 2×2.
Exemplo, um quadrado 6×6 pode ser visto como um grupo de 3×3 quadrados 2×2.
Para o grupo de quadrados, dividir assim:
Até a metade de linhas L
1 linha de U
O restante de X
No exemplo de lado 6, não “cabe” a linha X, mas para casos maiores, sim.
Depois, inverter o L central com o U abaixo:
Note que o grupo de quadrados torna-se um quadrado de ordem ímpar (o primeiro algoritmo descrito).
L, U e X referem-se à padrões de preenchimento:
Portanto, o algoritmo é:
– A ordem de preenchimento é como no caso ímpar, para grupos de quadrados 2×2
– Dentro do quadrado 2×2, usar a regra LUX correspondente ao quadrado.
Exemplo: cubo 6×6
No exemplo acima, começo com 1 no meio na linha superior, que é padrão L:
O próximo número é 5, e o local dele é à direita e acima, conforme o algoritmo de lado ímpar. Esta casa corresponde ao padrão U.
O próximo número é o 9, à direita e acima. Agora, é o padrão L.
E assim sucessivamente.
Ex. Quadrado 10×10.
Utilizando os três algoritmos acima, é possível criar quadrados mágicos de qualquer tamanho, digamos 1000 x 1000.
“Preparados para o risco”, do autor alemão Gerd Gigerenzer, nos ensina a questionar os números, e com isso, tomarmos boas decisões.
Quatro highlights abaixo.
1 – Pergunte pelo significado.
“Amanhã, tem 30% de chance de chuva”. O que isso significa?
O 30% pode ter várias interpretações. 30% do dia vai chover. Há chance 30% de alguma chuva. No estado todo, vai chover em 30% da área…
Sem uma clara definição, não dá para saber o significado.
Exemplo: As manchetes dos últimos dias dizem que “a taxa de isolamento está em 49% e o ideal é 70%, segundo o governo”. O número é calculado a partir de rastreamento de celulares.
Mas, o que significa essa taxa de isolamento?
Se eu ficar em casa o dia inteiro, mas der uma voltinha, vai contar que estou furando o isolamento ou não?
2 – Pergunte pelos números relativos e absolutos
O autor cita uma manchete espalhafatosa: “Segunda geração de pílula anticoncepcional aumenta casos de trombose em 100%”.
A informação acima levou uma geração inteira de mulheres a evitar a pílula (e assim, aumentar a chance de gravidez).
Investigando o caso a fundo, num universo de 7.000 mulheres, os casos de trombose tinham aumentado de 1 para 2! Realmente, era um aumento de 100% nos casos, porém, são tão poucos casos que não há significado estatístico na conclusão citada. Ou seja, não havia motivo algum para o pânico gerado.
Como diz uma piada, “Estatística é a arte de torturar os números até que eles confessem.”
3 – Regras de bolso podem ser úteis.
Num mundo cada vez mais complexo, as pessoas têm a impressão de que necessitamos de soluções igualmente sofisticadas. Porém, não há sistema que consiga levar em conta tantas incertezas de um número enorme de variáveis possíveis.
Nesses casos, heurísticas simples e robustas são mais eficazes. Exemplo. O avião que pousou no rio Hudson, em 2009, usou a regra do polegar. Fique de olho na torre, se ela sumir do para-brisa, não há como chegar à pista. Decidiram pousar no rio Hudson.
Menos é mais. Faça o simples. Utilize regras simples em ambientes complexos.
Da mesma forma, não compre produtos financeiros que não entenda.
4 – Falsos positivos e falsos negativos podem ocorrer.
Gigerenzer ensinou mais de 1000 médicos em sua carreira, e estima que 80% não entendem o que um exame médico positivo significa, por não entenderem o que é um falso positivo e um falso negativo.
Uma recomendação é refazer um exame diversas vezes, não acreditar puramente no primeiro resultado.
Uma consequência é a chamada “medicina defensiva”. Por receio de que os pacientes o processem, os médicos acabam tomando medidas superprotetoras, o que leva a procedimentos médicos desnecessários.
Uma heurística simples: Não perguntar ao médico o que fazer. Perguntar ao médico o que ele faria, se estivesse no seu lugar.
Conclusão: o livro apresenta questionamentos bastante válidos e cases interessantes. O mundo não sabe falar a linguagem dos riscos de forma adequada, e todos deveriam estudar mais o assunto.
Um exemplo final. Risco é diferente de incerteza. Para mensurar o risco (exemplo, risco de perder na loteria), tenho que ter um alto grau de certeza. Por outro lado, podemos estar despreocupados com o risco de algo incerto (digamos, uma epidemia mundial), até que, finalmente, esta acontece.
Agradecimento ao amigo Flávio Deganutti por me emprestar o livro e pelas discussões.