Tìm chữ cái khác


10

Bạn có thể đã thấy những câu đố như thế này:

Tìm 0:
OOOOOOOOOOOOOOOOOOOO0OOOOOOOOOOOOOOOOOO

Thách thức là viết một chương trình tìm chỉ mục của các chữ cái khác nhau được đưa ra một hình ảnh.

Đầu vào

Đầu vào sẽ là một Image. Hình ảnh sẽ bao gồm một dòng của đen văn bản trong Helvetica 24 pt. phông chữ trên nền trắng . Văn bản sẽ bao gồm một lựa chọn gồm hai ký tự: một ký tự được lặp lại và một ký tự chỉ xuất hiện một lần. Ví dụ:

Đầu vào mẫu

Đầu ra

Đầu ra sẽ là một Integer, chỉ số của các nhân vật khác nhau. Trong ví dụ trên, đầu ra sẽ là 4. (Lưu ý rằng các chỉ số của chuỗi bắt đầu tại 0)

Thông số chương trình

Như thường lệ đối với golf mã, chương trình ngắn nhất sẽ thắng.


Các trường hợp thử nghiệm

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


2
Lưu ý về phạm vi: ví dụ trong thế giới thực của bạn không phải là một câu đố. Đó là một trò chơi mắt thú vị hơn.
Zach Gates

Làm thế nào là điểm này?
intboolopes

Đó là một môn đánh gôn, vì vậy chương trình ngắn nhất đưa ra câu trả lời thành công cho từng ví dụ.
AMACB

2
Lưu ý rằng câu trả lời ngắn nhất cho một số ngôn ngữ có thể thực sự mã hóa kết quả và chọn một ngôn ngữ dựa trên kích thước của hình ảnh đầu vào (mà tôi cho là không được phép).
dùng81655

1
@AMACB "mặc dù không có gì trong các ví dụ", nhưng có lẽ nên thay đổi điều đó;). Ngoài ra số lượng ký tự tối thiểu chúng ta phải xử lý là bao nhiêu? (Ít nhất là 3 tôi đoán, hoặc chúng ta có thể giả sử nó nhiều hơn thế không?) Cũng nên có một trường hợp thử nghiệm cho mức tối thiểu đó.
Martin Ender

Câu trả lời:


6

APL Dyalog , 31 32 byte

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

⎕IO←0 để có được các chỉ số bắt đầu bằng 0 (mỗi OP) và dù sao cũng là mặc định trong nhiều hệ thống APL.

1,⍵thêm vào một cột các pixel màu trắng (để đảm bảo lề)
∧⌿boolean cho mỗi cột nếu boolean toàn màu trắng (dọc và giảm)
2>/ở cạnh trái của mỗi ký tự (lớn hơn so với) được
⍵⊂⍨chia thành các khối bắt đầu tại mỗi TRUE.
{Kết hợp cho mỗi khối
∧⌿⍵boolean cho mỗi cột nếu các cột toàn màu trắng (giảm AND dọc)
⍵/⍨~không [toàn màu trắng]
∘.≡⍨khớp với từng phần tử với tất cả các phần tử
+⌿của các khối giống hệt với chỉ số khối (giảm cộng dọc)
1⍳⍨của khối đầu tiên (tức là yếu tố duy nhất)

Giả sử hình ảnh có màu đen (0) và trắng (1) pixel trong ma trận Ivà có ít nhất một cột pixel toàn màu trắng giữa các ký tự.

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

"!TÔI!!":

      ⊢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

Bạn có thể loại bỏ hoàn toàn {⍵/⍨~∧⌿⍵}¨và chỉ còn lại {1⍳⍨+⌿∘.≡⍨⍵⊂⍨2>/∧⌿1,⍵}?
lstefano

@lstefano Sau đó, nó sẽ ngừng hoạt động nếu có số lượng khoảng trắng khác nhau.
Adám

Tôi hiểu ý bạn là gì.
lstefano

3

Toán học, 125 byte

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

Ahh, Mathemeatica dựng sẵn. Thật tuyệt vời. (Và rất lâu ...) Thổi lên | /! : /; , /. `/ 'và thổi lên khác nhau trên m / n.


Làm thế nào nhiều đầu vào này làm việc cho? Bản sao của tôi sẽ không nhận ra bất kỳ văn bản nào trong ví dụ đầu tiên (ví dụ về đường ống và dấu chấm than). Trừ khi tôi thiếu thứ gì đó tôi có hiệu suất giống hệt với Length[Split[Characters@TextRecognize@#][[1]]] &
A Simmons

Rất tiếc, đã quên về Split .... Và nó phụ thuộc vào trình nhận dạng văn bản được tích hợp sẵn của Mathicala ... Và bạn không bao giờ có thể tin tưởng vào nó.
Máy

Tôi sẽ đăng của tôi như là một giải pháp riêng biệt sau đó.
Một Simmons

3

Toán học, 46 byte

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

Thất bại tương tự như các giải pháp toán học khác vì nó phụ thuộc vào cùng một TextRecognizechức năng.


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

@CatsAreFluffy Cheers
Một Simmons

Quá tệ, nó chỉ đủ dài mà @*không tiết kiệm.
Máy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.