查找姓名为Letter的其他会员


10

您可能已经看到这样的难题:

找到0
OOOOOOOOOOOOOOOOOOOO0OOOOOOOOOOOOOOOOOO

面临的挑战是编写一个程序,以找到给定图像的不同字母的索引。

输入值

输入将是Image。该图像将包括一条线黑色文本黑体24磅。白色背景上的字体。文本将由以下两个字符组成:一个重复的字符和一个仅出现一次的字符。例如:

样本输入

输出量

输出将是Integer,是不同字符的索引。在上面的示例中,输出为4。(请注意,字符串的索引始于0

程序规格

按照通常的代码高尔夫球赛,最短的程序获胜。


测试用例

 => 10
 => 11
 => 5
 => 16
 => 10
 => 21
 => 20
 => 13
 => 11
 => 4
 => 7


2
书呆子注意:您的实际示例本身并不是难题。这更像是一个有趣的游戏。
扎克·盖茨

如何评分?
intboolstring

这是代码高尔夫,所以最短的程序可以成功输出每个示例的答案。
AMACB '16

2
请注意,某些语言的最短答案实际上可能是对结果进行硬编码,然后根据输入图像的大小(我认为这是不允许的)来选择一个结果。
user81655'3

1
@AMACB“尽管示例中未包含任何内容”,但最好更改;)。另外,我们必须处理的最小字符数是多少?(我猜至少3个,或者我们可以假设它还不止于此吗?)还应该有一个测试用例来测试这个最小值。
Martin Ender'3

Answers:


6

Dyalog APL31 32字节

{1⍳⍨+⌿∘.≡⍨{⍵/⍨~∧⌿⍵}¨⍵⊂⍨2>/∧⌿1,⍵}

⎕IO←0 获取从0(每个OP)开始的索引,这在许多APL系统中都是默认值。

1,⍵
∧⌿如果
2>/在每个字符的左边缘将全白(垂直AND减法)布尔值(成对大于)
⍵⊂⍨分成从每个TRUE开始的块,则在每列前面添加一列白色像素(以确保边距)为布尔值。
{对于每个
∧⌿⍵列,如果
⍵/⍨~不是[all-white]的全白(垂直AND归约)列
∘.≡⍨与每个元素匹配到所有元素
+⌿,则为每个列为布尔值布尔数与
1⍳⍨第一个索引的每个块(垂直加归约)索引相同(即唯一元素)

假设图像是矩阵中的黑色(0)和白色(1)像素I,并且字符之间至少有一个全白像素列。

      f←{1⍳⍨+⌿∘.≡⍨{⍵/⍨~∧⌿⍵}¨⍵⊂⍨2>/∧⌿1,⍵}

“!一世!!”:

      ⊢I←6 12⍴(13/1),(22⍴0 1 1),(5/1),0,(8/1),(10⍴0 1 1),13/1
1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 1 0 1 1 0 1 1 0 1
1 0 1 1 0 1 1 0 1 1 0 1
1 1 1 1 0 1 1 1 1 1 1 1
1 0 1 1 0 1 1 0 1 1 0 1
1 1 1 1 1 1 1 1 1 1 1 1
      f I
1

“ mmnmm”:

      ⊢I←7 31⍴(94/1),0 0,(∊0 1⌽¨2/⊂12⍴6↑1 0 1 1),0 1,(62⍴1 1 1,(⊢,⌽)(14⍴0 1)),33/1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1     
      f I
2

您不能完全删除{⍵/⍨~∧⌿⍵}¨和一起保留{1⍳⍨+⌿∘.≡⍨⍵⊂⍨2>/∧⌿1,⍵}吗?
lstefano

@lstefano然后,如果空白量不同,它将停止工作。
亚当

我明白你的意思了。
lstefano

3

Mathematica,125个字节

StringCases[#,x:Except[StringCases[#~StringTake~3,x_~~___~~x_:>x][[1]]]:>Position[Characters@#,x]][[1,1,1]]-1&@*TextRecognize

啊,Mathemeatica内置函数。如此惊人。(这么长时间...)在| /上爆炸!:/; ,/。`/'并在m / n上以不同的方式爆炸。


这需要多少输入?例如,我的副本无法识别第一个示例中的任何文本(竖线和感叹号)。除非我缺少某些东西,否则我的表现与 Length[Split[Characters@TextRecognize@#][[1]]] &
Simmons

糟糕,忘记了Split...。它依赖于Mathematica的内置文本识别器...您永远无法相信它。
CalculatorFeline

然后,我将发布我的信息作为单独的解决方案。
西蒙斯(Simmons)2016年

3

Mathematica,46个字节

Length@First@Split@Characters@TextRecognize@#& 

与其他mathematica解决方案相同的故障依赖于相同的TextRecognize功能。


Bytesave:Length@First@Split@Characters@TextRecognize@#&
CalculatorFeline

@CatsAreFluffy干杯
西蒙斯(Simmons)

太糟糕了,它够久了,@*无法保存。
CalculatorFeline
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.