Desafio: O ponto de parada ótimo

Imagine a seguinte situação. Quero alugar um apartamento num bairro muito concorrido de São Paulo. Vou visitar 20 imóveis, e assim que o fizer, ou eu faço a proposta para alugar na hora, ou decido ver o imóvel seguinte e perco o visitado para sempre (afinal, é um bairro concorrido).

O ordem de visitas é aleatória.

Qual estratégia maximiza a escolha?

É um claro tradeoff. Para conseguir informação, devo prospectar, porém, por ser uma prospecção destrutiva, vou descartar bons imóveis e acabar ficando sem opções.

Este problema é conhecido como o “Ponto de parada ótimo”, e a resposta ótima é 37%.

Primeiro, tenho que coletar informações, e a única forma de fazer é visitando os imóveis. Visito 37% dos imóveis, e avalio qual o melhor destes.

A seguir, pego o primeiro imóvel igual ou superior ao score avaliado anteriormente.

Exemplo:

Tenho uma lista de 20 imóveis, com notas aleatórias (quanto maior a nota, melhor).

37% de 20 dá 7, arredondando. Visito os 7 primeiros imóveis, sem escolher nenhum deles, mas anotando qual o melhor.

No caso, o melhor imóvel visitado teve nota 65.

A seguir, continuo fazendo as visitas até encontrar algum igual ou superior a 65. No caso, faço a proposta na hora e fico com o imóvel de nota 77.

Na lista, há dois imóveis com score maior (de 91 e 97), de forma que a estratégia citada escolheu o terceiro melhor da lista (lembrando que, no problema, não teríamos essa informação da nota sem visitar – e descartar – o imóvel)

Desafio em Excel.

Dada uma lista com números aleatórios (PontoParada.xlsx), escrever fórmulas (ou rotinas ou qualquer outro truque) para implementar o algoritmo de parada ótima descrito. Comparar com a melhor solução.

(Clicar em F9 ou mudar qualquer célula vai alterar os valores).

Favor enviar as respostas para mim em private. Na quarta-feira que vem envio a compilação das respostas.

A Espiral de Arquimedes

A Espiral de Arquimedes é uma curva fácil de fazer, usando até o Excel.

Imagine que vou andando ao longo de uma reta, e marcando uma série de pontos a cada vez – é como se um raio r estivesse crescendo.

Imagine agora, que a reta está girando a uma velocidade constante – cada reta está num ângulo theta.

A localização dos pontos forma a Espiral de Arquimedes.

No Excel, basta colocar que o raio e o ângulo theta vão crescendo a velocidade constante.

As coordenadas de cada ponto são r*cos(theta) e r*sin(theta).

Planilha para download no Github:

asgunzi/EspiralArquimedes: Implementação da espiral de Arquimedes em Excel (github.com)

Vide também:

Laboratório de Matemática (ideiasesquecidas.com)

Ver o post original

O gráfico em Cascata

O gráfico em Cascata, Bridge ou Waterfall é bastante utilizado na época do orçamento. 

Versões mais recentes do Excel têm um gráfico desses nativo, em Inserir -> Gráficos -> Cascata.

Só tem um truque adicional. Para definir quais colunas são de total, e não para somar e subtrair: selecionar apenas a coluna que queremos, clicar com botão direito e marcar a opção “Definir como total”.

  1. Para versões anteriores do Excel, segue outro template.

Essencialmente, é um gráfico em barras empilhadas, com a primeira pilha transparente.

Basta preencher as células amarelas. É possível eliminar ou expandir colunas, seguindo a mesma fórmula.

Outra dica é pintar os negativos de vermelho (manualmente).

Planilhas em asgunzi/GraficoCascataExcel (github.com)

Ideias técnicas com uma pitada de filosofia

Forgotten Lore – Ideias técnicas com uma pitada de filosofia (ideiasesquecidas.com)

A Conjectura de Collatz

A Conjectura de Collatz é o problema não resolvido de matemática mais simples da história.

Pegue um número qualquer n.

  • Se n for par, divida por 2
  • Se n for ímpar, calcule 3*n+1

E continue fazendo essa conta.

A conjectura diz que a sequência sempre vai convergir para 1.

Exemplo: número inicial 5

5 -> 16 -> 8 -> 4 -> 2 -> 1

Foram 5 passos para convergir para 1.

Exemplo: número inicial 6

6 -> 3 -> 10 -> 5 -> 16 ->  8 -> 4 -> 2 -> 1

Foram 8 passos para convergir para 1.

Para números de 2 a 50, o resultado do número de passos mostra:

Informações interessantes: apesar de extremamente simples de ser formulada, essa conjectura até hoje não foi provada.

É contra intuitivo; parece que vai crescer, mas aí converge.

A sequência é errática: um número pode precisar de 100 passos, o vizinho precisa de 5.

No VBA, a forma mais simples de resolver é com um simples loop while.

Function collatz(n)

Dim count As Long

count = 0
While n > 1

If n Mod 2 = 0 Then
    n = n / 2
Else
    n = 3 * n + 1
End If
count = count + 1

Wend

collatz = count

End Function

É possível pensar numa estrutura da dados mais complexa, porém com melhor performance computacional.

Por exemplo, salvar o número de passos de todos os valores já rodados. Rodar a sequência até chegar a um número menor do que o atual, e aí resgatar da memória o resultado já calculado.

Com esse método, é possível calcular os primeiros 110 mil números, em menos de 1 segundo.

No VBA, o limite é restrição de tamanho do tipo Long. Não há um tipo Big Int, como em Java ou Python, o que torna bem complicado calcular mais do que isso.

Código no Github: https://github.com/asgunzi/CollatzVBA

Veja também:

https://en.wikipedia.org/wiki/Collatz_conjecture

https://www.quantamagazine.org/why-mathematicians-still-cant-solve-the-collatz-conjecture-20200922/

Como criar uma foto pixelada no Excel

A ideia deste tutorial é pegar uma imagem qualquer e pintar as células do Excel de forma correspondente.

Uma imagem é apenas um retângulo dividido em quadriculados (o pixel), e cada pixel é pintado de uma cor.

Imagine que cada célula é pintada de uma combinação de Vermelho, Verde e Azul, as cores primárias.

Cada célula terá um tom de Red, Green e Blue, e essa tonalidade varia de 0 a 255.

Infelizmente, o VBA não tem uma boa biblioteca de manipulação de imagens. Recomendo instalar o OpenCV (open computer vision), no Python.

https://pypi.org/project/opencv-python/

A rotina tem dois passos:

1 – ler a imagem e salvar a matriz de dados (Python)

2 – ler a matriz de dados e colorir o Excel

Passo 1) Rodar o arquivo “OpenCVReadFile.py”, no Python.

Indicar a localização do arquivo de imagem a desenhar

Mudar o local do arquivo CSV de destino.

Essa rotina lê a imagem e salva a matriz de dados em CSV.

Passo 2)  Rodar a macro “Pixeliza” do Excel em anexo. É necessário mudar o endereço do arquivo CSV.

E pronto, temos uma reprodução da imagem na planilha, que pode ser editada normalmente, como qualquer arquivo Excel.

Atenção. Rodando essa macro, descobri que o Excel tem um limite de 4000 células com formatação diferente.

E, pior, chega facilmente nesse limite.

Portanto, o esquema citado só funciona com imagens de resolução muito baixa.

Vide arquivos no Github: https://github.com/asgunzi/FotoPixeladaExcel

Tem o Excel com a macro e o código Python.

Ideias técnicas com uma pitada de filosofia

https://ideiasesquecidas.com/

Escrever por extenso

A macro da planilha (https://github.com/asgunzi/EscreverExtensoVBA) lê um número e escreve por extenso.

O código não é meu. Originalmente é VB6. Peguei num fórum e colei no Excel, e parece que funciona legal.

Não sei se isso pode ser útil de alguma forma.

Ideias técnicas com uma pitada de filosofia
https://ideiasesquecidas.com/

Entre no grupo de estudos de Computação Quântica:
https://www.facebook.com/groups/1013309389112487

Lista de presença de reunião no Teams

Nesses tempos de trabalho remoto, segue a seguir uma dica do amigo Saulo Siqueira.

Como baixar a lista de presença de uma reunião no Teams para o Excel?

Com isso, é possível verificar quem participou ou não da reunião, e até a hora em que ele entrou e saiu!

Importante: só pode ser feito durante a reunião.

Como temos uma rotina pesada de reuniões e controle de participantes, isso pode ser útil.

Obs.: a TI deve habilitar essa possibilidade no Teams.

Considerações:

  • Somente os organizadores da reunião podem baixar relatórios de presença. Esta opção não está disponível para outros participantes.
  • Se os participantes ingressarem em uma reunião antes do organizador, seus horários de junção corresponderão ao tempo em que o organizador ingressou na reunião. 

Durante a reunião, selecione Mostrar participantes 

 e escolha baixar lista de participantes 

O relatório será baixado como um. Arquivo CSV que pode ser aberto no Excel. O. O arquivo CSV contém o nome, o tempo de ingresso e o tempo de todos os participantes da reunião.

Obs.: caso não apareça a opção acima, faça uma atualização da ferramenta.

Veja também:

https://ferramentasexcelvba.wordpress.com/2020/07/24/desenhar-no-excel-e-power-point

Ideias técnicas com uma pitada de filosofia

https://ideiasesquecidas.com/

Pequena rotina de criptografia

A criptografia existe desde a Roma antiga, pelo menos.

A forma mais básica de codificar / decodificar uma mensagem é com uma cifra de substituição simples.

Por exemplo, transformo a em w, b -> x, c -> y,

Segundo a tabela abaixo.

Exemplo:

“contar” -> “ykjpwn”

E para decodificar, fazer o oposto:

“ykjpwn” -> “contar”

Desafio: criar uma rotina que codifique/decodifique uma frase qualquer.

A minha resposta está no arquivo aqui.

Basta ativar macros e rodar. A macro faz exatamente o que a gente faria manualmente: para cada sílaba, procura na tabela qual o símbolo correspondente, e substitui.

Uma curiosidade. Tem um conto de Sherlock Holmes, chamado “o caso dos dançarinos”.

O detetive recebeu uma mensagem cifrada, com figuras de dançarinos. É a mesma lógica do desafio proposto, cifra de substituição simples.

Para quebrar o código, Holmes fez uma contagem dos símbolos. O dançarino que mais aparecia seria provavelmente o “E”, letra mais frequente em inglês. A seguir, o segundo símbolo mais frequente seria o “E”.

E assim sucessivamente, ele foi deduzindo as letras até decodificar a mensagem.

xkw pwnza lwnw pkzko!

Multiplicador de shapes – Power Point

Segue uma rotina que pode ser útil, para criar apresentações (Multiplicador.pptm)

É um “multiplicador de shapes”.

O objetivo é pegar um shape assim:

E criar cópias dele:

O primeiro passo é selecionar com o mouse o shape que queremos multiplicar.

Com o shape selecionado, rodamos a macro.  Atalho (alt + F11) para abrir o editor de macros, e F5 para rodar a macro “multiplier”

Vai surgir uma caixa, perguntando quantas linhas e colunas queremos (separar os números com um espaço)

Resultado:

Se eu tiver várias formas compostas, é necessário agrupar todos num único shape.

Resultado:

As macros devem estar habilitadas.


Ideias técnicas com uma pitada de filosofia

https://ideiasesquecidas.com/

Gif animado a partir do Power Point

Há uma forma simples de criar pequenos vídeos ou gif animados a partir do Power Point.

Basta criar os slides que vão virar o filminho.

Depois, Arquivo -> Exportar -> Criar vídeo (ou criar gif).

Há algumas configurações a preencher, como o tamanho e o tempo entre frames.

O resultado é algo como o gif a seguir, só para ilustrar o conceito.

Não se compara a um editor de vídeo, mas a vantagem é ser muito fácil de fazer.

Ideias técnicas com uma pitada de filosofia

https://ideiasesquecidas.com/