Esta cortina não é uma animação pronta. Cada caractere participa de uma pequena simulação física: empurre uma região com o mouse — ou com o dedo — e observe os fios deformarem, oscilarem e procurarem novamente o equilíbrio.
ASCII / playground
Passe o mouse para afastar os fios.
Explorar
Mova, solte, observe.
Fios feitos de pontos
Cada coluna é uma sequência de partículas separadas por uma distância fixa $\ell$. A primeira fica presa à viga do torii; as demais podem se mover. Em cada passo, a nova posição é calculada pela integração de Verlet:
A diferença entre as duas posições anteriores faz o papel da velocidade. $\mathbf{g}$ puxa os pontos para baixo e $\gamma<1$ amortece o movimento, retirando energia aos poucos.
Mantendo o comprimento
Depois desse avanço, os segmentos geralmente deixam de medir $\ell$. Para um par de pontos separado por $d$, calculamos a correção
e a dividimos entre as duas extremidades. Essa restrição é repetida algumas vezes por quadro; no ponto superior, toda a correção vai para a extremidade livre. É isso que transforma uma coleção de letras em algo parecido com um fio.
O empurrão invisível
O cursor define uma pequena região circular de raio $R$. Quando uma partícula entra nela, recebe um deslocamento radial:
Essa correção é aplicada quando $d\lt R$, e $\mathbf{m}$ é a posição do cursor. O círculo não é desenhado; vemos apenas sua ação. O torii também não funciona como obstáculo, por isso os fios podem atravessar os pilares sem acumular uma força artificial. Por fim, cada caractere é girado na direção do segmento ao qual pertence, completando a ilusão da cortina.
Uma escala para os fios
O som começa desligado e só é criado depois de apertar Som: desligado. Cada fio recebe uma nota da escala pentatônica hirajōshi; um contato novo produz um toque de ataque macio e cauda reverberante, mais intenso conforme a deformação, e sua posição horizontal também define o lado do campo estéreo. Um sopro de ruído filtrado acompanha a velocidade média da cortina e desaparece quando ela repousa. A síntese acontece no próprio navegador, sem gravações de áudio.
Comecei querendo só portar um script de primos em Python para o navegador e animar uma caminhada no plano. Esperava algo parecido com a espiral de Ulam: uma nuvem irregular, com estrutura, dessas que a gente fica olhando tentando enxergar padrão.
O que saiu foi uma fita diagonal de largura $\sqrt{2}$. Sempre. Em qualquer escala, com qualquer início.
Demorei um pouco para aceitar que não era bug. A regra que eu estava animando é matematicamente incapaz de produzir a imagem que eu esperava — e o motivo é bem mais interessante do que o desenho que eu queria.
A regra
> Um ponto se move num plano. A cada inteiro $n$, se $n$ for primo ele vira à esquerda; se for composto, vira à direita. Depois dá um passo à frente.
É a "caminhada aleatória dos primos", nome que já entrega parte do problema — ela não tem nada de aleatória, como vamos ver. Começamos na origem apontando para o Leste, e o passo básico é um giro de 90°.
Com o ângulo acumulado em radianos, a implementação cabe em três linhas:
ang += ehPrimo(n) ? passo : -passo; // primo = esquerda, composto = direita
x += Math.cos(ang);
y += Math.sin(ang);
Veja acontecer
Clique em iniciar. Os controles mudam o ângulo da curva, a faixa de $n$ e a velocidade — ao mexer em qualquer um deles a caminhada volta ao começo, e é preciso clicar em iniciar de novo. Ao chegar no último $n$, aparece tracejado o bounding box da trajetória, com suas dimensões. Deixe em 90° para ver o problema; os outros ângulos são o assunto da última seção.
n atual
primos (esquerda)
compostos (direita)
distância da origem
—
—
—
—
Os vinte primeiros passos
Antes de olhar a imagem grande, vale acompanhar a caminhada na mão. A última coluna é a soma $x+y$ — guarde ela.
$n$
tipo
curva
direção
posição
$x+y$
2
primo
esquerda
↑ Norte
(0, 1)
1
3
primo
esquerda
← Oeste
(−1, 1)
0
4
composto
direita
↑ Norte
(−1, 2)
1
5
primo
esquerda
← Oeste
(−2, 2)
0
6
composto
direita
↑ Norte
(−2, 3)
1
7
primo
esquerda
← Oeste
(−3, 3)
0
8
composto
direita
↑ Norte
(−3, 4)
1
9
composto
direita
→ Leste
(−2, 4)
2
10
composto
direita
↓ Sul
(−2, 3)
1
11
primo
esquerda
→ Leste
(−1, 3)
2
12
composto
direita
↓ Sul
(−1, 2)
1
13
primo
esquerda
→ Leste
(0, 2)
2
14
composto
direita
↓ Sul
(0, 1)
1
15
composto
direita
← Oeste
(−1, 1)
0
16
composto
direita
↑ Norte
(−1, 2)
1
17
primo
esquerda
← Oeste
(−2, 2)
0
18
composto
direita
↑ Norte
(−2, 3)
1
19
primo
esquerda
← Oeste
(−3, 3)
0
20
composto
direita
↑ Norte
(−3, 4)
1
21
composto
direita
→ Leste
(−2, 4)
2
Em sequência compacta, com E para esquerda e D para direita:
E E D E D E D D D E D E D D D E D E D D
São 8 esquerdas e 12 direitas — exatamente os 8 primos até 21.
Três coisas já saltam da tabela:
Os eixos se alternam sem exceção. Nunca há dois passos horizontais em sequência, nem dois verticais.
A coluna $x+y$ só assume os valores 0, 1 e 2. Nenhuma exceção — e isso não é sorte dos primeiros passos, como a figura da próxima seção mostra.
Quatro compostos seguidos formam um quadrado fechado, quatro passos que não levam a lugar nenhum. O primeiro caso aparece logo depois do fim da tabela: os passos 25 a 28 saem de $(-1, 2)$ e voltam a $(-1, 2)$.
Vinte passos adiante, em $n = 41$, a caminhada está de volta na origem depois de percorrer 40 arestas.
O que a imagem revela
Rodando a animação, o desenho é uma fila de quadrados unidos pelos vértices, formando uma única linha reta a 45°. Não é impressão nem artefato de escala: todos os pontos visitados satisfazem $x + y \in \{0, 1, 2\}$. A trajetória inteira vive numa faixa diagonal de largura $\sqrt{2}$ — as três diagonais tracejadas na figura abaixo.
Os 800 primeiros passos. São 799 passos sobre apenas 98 arestas distintas — a caminhada repisa o próprio rastro quase o tempo todo. A faixa sombreada é a região $0 \le x + y \le 2$, e as três tracejadas são as diagonais $x + y = 0$, $1$ e $2$: cada ponto da caminhada cai exatamente sobre uma delas — os 75 desta figura se repartem em 24, 26 e 25 —, e o mesmo vale em $n = 100.000$.
E isso se mantém em qualquer escala:
$n$
passos
bounding box
pontos distintos
pontos por passo
100
99
8 × 8
25
25/99 = 25,253%
1.000
999
27 × 27
81
81/999 = 8,108%
5.000
4.999
41 × 41
123
123/4999 = 2,460%
20.000
19.999
69 × 69
208
208/19999 = 1,040%
100.000
99.999
338 × 338
1.014
1014/99999 = 1,014%
Chamando de $L$ o lado da bounding box, o número de pontos distintos é $3L$ ou $3L+1$ em todas as linhas — as três diagonais e mais nada. A faixa nunca engorda; só estica. Dos 99.999 segmentos até $n = 100.000$, 98.986 caem sobre um ponto já visitado, e um deles é pisado 599 vezes. Cem mil passos desenham só 1.350 arestas distintas.
Por que é assim
Duas propriedades da regra, combinadas.
1. Os passos alternam obrigatoriamente entre horizontal e vertical. Toda curva é de $\pm 90°$, então a direção muda de paridade a cada número: se o passo $n$ foi horizontal, o passo $n+1$ é necessariamente vertical. Cada par de passos consecutivos é portanto um deslocamento diagonal $(\pm 1, \pm 1)$, de comprimento $\sqrt{2}$ — e a escada de quadrados é inevitável.
2. A direção não tem nada de aleatório. Sendo $\pi(n)$ a contagem de primos e $c(n)$ a de compostos até $n$, e numerando as direções como $0$ = Leste, $1$ = Norte, $2$ = Oeste, $3$ = Sul, a direção depois do passo $n$ é exatamente
$$d_n \equiv \big(\pi(n) - c(n)\big) \bmod 4.$$
Cada primo soma $+1$ e cada composto soma $+3$; como $3 \equiv -1 \pmod 4$, virar à direita é o mesmo que subtrair 1, e o acumulado vira $\pi - c$. Nos mesmos vinte passos da tabela lá de cima, a coluna da direção bate linha a linha — sem nenhuma consulta ao caminho já percorrido:
$n$
$\pi(n)$
$c(n)$
$\pi-c$
$d_n$
direção
2
1
0
1
1
↑ Norte
3
2
0
2
2
← Oeste
4
2
1
1
1
↑ Norte
5
3
1
2
2
← Oeste
6
3
2
1
1
↑ Norte
7
4
2
2
2
← Oeste
8
4
3
1
1
↑ Norte
9
4
4
0
0
→ Leste
10
4
5
−1
3
↓ Sul
11
5
5
0
0
→ Leste
12
5
6
−1
3
↓ Sul
13
6
6
0
0
→ Leste
14
6
7
−1
3
↓ Sul
15
6
8
−2
2
← Oeste
16
6
9
−3
1
↑ Norte
17
7
9
−2
2
← Oeste
18
7
10
−3
1
↑ Norte
19
8
10
−2
2
← Oeste
20
8
11
−3
1
↑ Norte
21
8
12
−4
0
→ Leste
Nenhuma aleatoriedade, apesar do nome. E como os compostos dominam numa razão de quase 8 para 1 nessa faixa, a diferença $\pi(n) - c(n)$ decresce de forma quase monótona: a caminhada é essencialmente um giro horário constante, fechando um quadrado a cada 4 compostos. Os primos entram só como defeitos raros que deslocam a fase do ciclo.
Cada defeito desses empurra a caminhada um passo diagonal para fora do quadrado atual. Como o empurrão é sempre no mesmo sentido, o acúmulo aponta sempre na mesma diagonal — e é isso que produz a fita.
A conclusão que me custou a tarde: a degenerescência é da regra, não do código. Nenhum ajuste de implementação abre esse desenho, porque com apenas $\pm 90°$ e um sinal determinístico a caminhada não tem grau de liberdade para se espalhar.
O que abre a imagem
A propriedade (1) depende de o ângulo dividir 360° em quatro. Qualquer outro ângulo quebra a alternância de eixos e a faixa se solta. Com 20.000 passos:
ângulo
bounding box
distância final da origem
90°
69 × 69
79,9
60°
124 × 82
68,3
45°
88 × 118
30,0
120°
48 × 71
40,3
Vale trocar o ângulo no controle acima e ver a diferença — em 60° e 45° aparece a estrutura irregular que eu procurava desde o começo.
Se a intenção for manter os 90°, aí a mudança tem que ser na regra. A variante clássica é virar à esquerda nos primos e seguir reto nos compostos: assim os compostos deixam de fechar quadradinhos e passam a produzir os segmentos longos que dão forma ao desenho. É outra caminhada, mas é a que gera as imagens bonitas que circulam por aí.
Desenvolvi um aplicativo para tablet chamado ManuScriptus — de manus (mão) e scriptus (escrita): o latim para aquilo que é escrito à mão. Ele é, na falta de nome melhor, um caderno que responde. Escrevo um problema de matemática à mão, com a caneta; ele lê a minha letra, entende, e responde na mesma página — também manuscrito, como se alguém resolvesse junto, por cima do meu ombro. No vídeo abaixo ele está trabalhando comigo em alguns temas de matemática.
Podia ter sido um chatbot comum. Você digita a pergunta, lê a resposta, copia. Seria mais fácil de construir e resolveria os mesmos problemas — quase. A diferença mora nesse "quase", e é toda a razão de o app existir.
O que a mão ensina ao cérebro
No começo de 2024, uma descoberta correu o noticiário de ciência: escrever à mão acende o cérebro de um jeito que digitar não acende. A origem foi um estudo norueguês (nas referências), mas o que interessa é o consenso que ele firmou na imprensa séria.
O Nexo Jornal resumiu o achado: segundo a neurocientista Audrey van der Meer, escrever à mão gera padrões de conectividade cerebral muito mais elaborados, pela formação cuidadosa de cada letra. A NBC News e a Science News apontaram o mecanismo: a escrita sincroniza ondas theta e alpha — as da memória — entre regiões distantes do cérebro, coesão que some ao teclar. Digitar é rápido demais: sem precisar planejar o traço de cada letra, a integração motora e sensorial despenca. Daí, como notou o NPR, quem anota uma aula à mão costuma lembrar mais do que quem digita.
E há o outro lado. Reportagens como as da National Geographic e do O Povo puxam o fio para a era das telas: digitação, corretor automático e a linguagem das redes trocam o esforço de formular por atalhos — e, numa geração criada no teclado, educadores notam mais dificuldade em sintetizar e estruturar um pensamento no papel. A lentidão da mão, que parecia um defeito a otimizar, era metade do aprendizado.
A virada
A ironia é esta: a mesma tecnologia acusada de atrofiar a escrita — a inteligência artificial — é a que, aqui, obriga a escrever à mão.
Num chatbot, o esforço é terceirizado dos dois lados. Você digita (não escreve) e lê uma resposta que muitas vezes copia (não sintetiza). O ManuScriptus inverte os dois. Para perguntar, você escreve à mão — com a lentidão que faz o cérebro trabalhar. Para receber, você lê uma resposta manuscrita, no ritmo de quem lê uma explicação, não de quem varre uma tela.
E há um detalhe de ritmo que é o coração da coisa: escrever e ler acontecem na velocidade do cérebro humano — o compasso em que a mão forma as ideias e os olhos as absorvem. Um chatbot atropela esse compasso: despeja-se a pergunta no teclado e recebe-se de volta um muro de texto que a vista percorre sem digerir. O ManuScriptus mantém os dois lados no tempo humano: pensa-se enquanto se escreve, assimila-se enquanto se lê. A IA é veloz por dentro — resolve derivadas, desenha gráficos —, mas se dobra ao ritmo de quem a usa, em vez de impor o dela.
Não é que a ferramenta seja boa ou má em si. O que importa é o esforço que ela pede de você. Um teclado pede pouco. Uma caneta pede exatamente o suficiente. Construir a IA em torno da caneta foi a forma de ficar com o tutor incansável e com o cérebro que a mão mantém aceso.
Referências
As reportagens acima se apoiam nestes estudos revisados por pares:
In March 2026, Singapore's Minister of Education, Desmond Lee, walked into Parliament during the Ministry of Education budget debate carrying physical copies of a single math problem. He handed them out and asked his colleagues to solve it on the spot.
The problem was Question 14 from Paper 2 of the 2022 PSLE — the Primary School Leaving Examination, sat by twelve-year-olds. Lee's point was that questions famous for being "impossible" are in fact deliberately broken into parts that guide the student's reasoning. MP Lee Hui Ying joked on social media afterwards that her cortisol levels only dropped after she reached the correct answer of 32 cm.
The problem
The figure shows the amount of water in two rectangular containers, X and Y, at first.
Ray poured $\frac{1}{5}$ of the water from X into Y to fill it to the top, without overflowing.
(a) How much water was there in X at first? [2 marks]
(b) Ray then poured all the water from Y into X. $120\text{ cm}^3$ of water overflowed from X. What was the height of X? [3 marks]
Solution
Part (a)
The fraction of water transferred from X — a fifth of its original volume — is precisely the volume needed to fill the empty $8\text{ cm}$ at the top of Y:
Ray pours that $3960\text{ cm}^3$ back into X. Of that, $120\text{ cm}^3$ overflows, so the volume that actually fits inside X — added on top of the $5760\text{ cm}^3$ already there — is:
$$3960 - 120 \;=\; 3840 \text{ cm}^3$$
The full capacity of X is therefore:
$$5760 + 3840 \;=\; 9600 \text{ cm}^3$$
X has a $20 \times 15 = 300\text{ cm}^2$ base, so its height $h$ must satisfy:
$$300 \, h \;=\; 9600 \quad\Longrightarrow\quad h \;=\; 32 \text{ cm}$$
So container X is $\boxed{32\text{ cm}}$ tall — the answer that brought Parliament's cortisol levels back to normal.
Why this problem?
What makes Q14 quietly elegant is that neither part rewards memorisation. Part (a) hinges on noticing a single fact — one fifth of X exactly fills the empty space in Y — and turning that sentence into one equation. Part (b) asks the student to track three quantities (water still in X, water poured back from Y, water that overflows) and to realise that their sum is the capacity of X, not its current content.
That layered structure is exactly why Lee distributed the question to Parliament: a problem that looks impossible at a glance and turns out, on second reading, to be a sequence of small steps. Each step is easy. Putting them in the right order is the actual skill being tested.