Você pode ter visto quebra-cabeças como este:
Encontre o
0
:
OOOOOOOOOOOOOOOOOOOO0OOOOOOOOOOOOOOOOOO
O desafio é escrever um programa que encontre o índice da letra diferente dada uma imagem.
Entrada
A entrada será um Image
. A imagem consistirá em uma linha de texto em preto no Helvetica 24 pt. fonte sobre um fundo branco. O texto consistirá em uma seleção de dois caracteres: um caractere que é repetido e um caractere que aparece apenas uma vez. Por exemplo:
Resultado
A saída será um Integer
, o índice do caractere diferente. No exemplo acima, a saída será 4
. (Observe que os índices de uma string começam em0
)
Especificações do programa
Como de costume no código de golfe, o programa mais curto vence.
Casos de teste
=> 10
=> 11
=> 5
=> 16
=> 10
=> 21
=> 20
=> 13
=> 11
=> 4
=> 7
Respostas:
Dyalog APL ,
3132 bytes⎕IO←0
para obter índices começando com 0 (por OP) e que é o padrão em muitos sistemas APL.1,⍵
preceda uma coluna de pixels brancos (para garantir margem)∧⌿
booleana para cada coluna se todo branco (redução AND vertical)2>/
booleano na borda esquerda de cada caractere (maior que o par)⍵⊂⍨
dividido em blocos começando em cada VERDADEIRO.{
…}¨
Para cada bloco∧⌿⍵
booleano de cada coluna se colunas totalmente brancas (redução AND vertical)⍵/⍨~
que não são [totalmente brancas]∘.≡⍨
correspondem a cada elemento a todos os elementos+⌿
número de blocos idênticos a cada bloco (redução vertical mais)1⍳⍨
índice de do primeiro (ou seja, elemento único)Supõe que a imagem possui pixels preto (0) e branco (1) na matriz
I
e que há pelo menos uma coluna de pixels totalmente branca entre os caracteres."!EU!!":
"mmnmm":
fonte
{⍵/⍨~∧⌿⍵}¨
e permanecer apenas{1⍳⍨+⌿∘.≡⍨⍵⊂⍨2>/∧⌿1,⍵}
?Mathematica, 125 bytes
Ahh, built-in Mathemeatica. Tão incrível. (E por tanto tempo ...) Explode em | /! : /; , /. `/ 'e explode de maneira diferente em m / n.
fonte
Length[Split[Characters@TextRecognize@#][[1]]] &
Mathematica, 46 bytes
Mesmas falhas que a outra solução mathematica, pois depende da mesma
TextRecognize
função.fonte
Length@First@Split@Characters@TextRecognize@#&
@*
não salvar.