다른 글자 찾기


10

다음과 같은 퍼즐을 보았을 것입니다.

찾기 0:
OOOOOOOOOOOOOOOOOOOO0OOOOOOOOOOOOOOOOOO

문제는 이미지가 주어진 다른 문자의 색인을 찾는 프로그램을 작성하는 것입니다.

입력

입력은 Image입니다. 이미지는 Helvetica 24pt 에서 한 줄검은 색 텍스트 로 구성됩니다 . 흰색 배경 에 글꼴입니다 . 텍스트는 두 개의 문자로 구성됩니다. 하나는 반복되는 문자와 한 번만 나타나는 문자입니다. 예를 들어 :

샘플 입력

산출

출력은 Integer다른 문자의 인덱스입니다. 위의 예에서 출력은입니다 4. (문자열의 인덱스는에서 시작합니다 0)

프로그램 사양

코드 골프의 경우 평소와 같이 가장 짧은 프로그램이 승리합니다.


테스트 사례

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


2
Pedantic note : 실제 사례는 퍼즐 그 자체가 아닙니다. 재미있는 재미있는 게임입니다.
Zach Gates

이 점수는 어떻습니까?
intboolstring

코드 골프이므로 각 예제에 대한 답변을 성공적으로 출력하는 가장 짧은 프로그램입니다.
AMACB

2
일부 언어의 최단 답변은 실제로 결과를 하드 코딩하고 입력 이미지의 크기와 같은 것을 기반으로 하나를 선택하는 것일 수 있습니다 (허용되지 않는다고 가정).
user81655

1
@AMACB는 "예제에 포함되어 있지는 않지만"를 변경하는 것이 좋습니다. 또한 처리해야 할 최소 문자 수는 얼마입니까? (적어도 3 개 이상이라고 생각할 수 있습니까? 아니면 그 이상이라고 생각할 수 있습니까?) 최소값에 대한 테스트 사례도 있어야합니다.
Martin Ender

답변:


6

Dyalog APL , 31 32 바이트

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

⎕IO←0 0으로 시작하는 인덱스를 얻으려면 (OP 당) 많은 APL 시스템에서 기본값입니다.

1,⍵각 문자의 왼쪽 가장자리 (모두보다 큰 쌍) 가 각 TRUE에서 시작하는 블록으로 분할 된
∧⌿경우 모든 열 (수직 AND 감소)
2>/부울 인 경우 각 열에 대해 흰색 픽셀 열을 추가합니다 (여백을 보장하기 위해)
⍵⊂⍨.
{… [all-white]가 아닌 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 2016 년

@lstefano 그러면 공백의 양이 다양하면 작동이 중지됩니다.
Adám

무슨 말인지 알 겠어
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]]] &
A Simmons

스 플리트에 대해 잊어 버렸습니다 ... 그리고 그것은 Mathematica의 내장 텍스트 인식기에 의존합니다 ... 그리고 당신은 그것을 믿을 수 없습니다.
CalculatorFeline

그런 다음 별도의 솔루션으로 내 것을 게시 할 것입니다.
시몬스

3

수학, 46 바이트

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

동일한 TextRecognize기능 에 의존하는 다른 수학 솔루션과 동일한 실패 .


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

@ CatsAreFluffy 환호
시몬스

너무 길어서 @*저장하지 않는 것이 너무 나쁩니다 .
CalculatorFeline
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.