ค้นหาตัวอักษรอื่น


10

คุณอาจเคยเห็นปริศนาแบบนี้:

ค้นหา0:
OOOOOOOOOOOOOOOOOOOO0OOOOOOOOOOOOOOOOOO

ความท้าทายคือการเขียนโปรแกรมที่ค้นหาดัชนีของตัวอักษรต่าง ๆ ที่ให้ภาพ

อินพุต

Imageการป้อนข้อมูลจะเป็น ภาพจะประกอบด้วยหนึ่งบรรทัดของสีดำข้อความในHelvetica 24 จุด แบบอักษรบนพื้นหลังสีขาว ข้อความจะประกอบด้วยตัวเลือกสองตัวอักษร: ตัวละครหนึ่งตัวที่ซ้ำกันและตัวละครตัวหนึ่งที่ปรากฏเพียงครั้งเดียว ตัวอย่างเช่น

ตัวอย่างอินพุต

เอาท์พุต

การส่งออกจะเป็นIntegerดัชนีของตัวละครที่แตกต่างกัน 4ในตัวอย่างข้างต้นส่งออกจะได้รับ (โปรดสังเกตว่าดัชนีของสตริงเริ่มต้นที่0)

ข้อมูลจำเพาะของโปรแกรม

ตามปกติสำหรับรหัสกอล์ฟโปรแกรมที่สั้นที่สุดชนะ


กรณีทดสอบ

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


2
โน้ตคนอวดดี: ตัวอย่างโลกแห่งความจริงของคุณไม่ใช่ปริศนาต่อเกม มันเป็นเกมที่สนุกมาก
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,⍵เพิ่มคอลัมน์ของพิกเซลสีขาว (เพื่อให้แน่ใจว่าส่วนต่าง)
∧⌿บูลีนสำหรับแต่ละคอลัมน์ถ้าบูลีนสีขาว (แนวตั้งและการลดลง)
2>/ที่ขอบด้านซ้ายของอักขระแต่ละตัว (แยกคู่มากกว่า - ดีกว่า)
⍵⊂⍨แยกออกเป็นบล็อก
{สำหรับ
∧⌿⍵บูลีนแต่ละบล็อกสำหรับแต่ละคอลัมน์หากคอลัมน์สีขาว (แนวตั้งและการลดลง)
⍵/⍨~ที่ไม่ใช่ [สีขาวทั้งหมด]
∘.≡⍨จับคู่แต่ละองค์ประกอบกับ
+⌿จำนวนองค์ประกอบทั้งหมดของบล็อกที่เหมือนกันกับ
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

Ahh, Mathemeatica builtins น่าทึ่งมาก (และนานมาก ... ) ระเบิดขึ้นเมื่อ | /! : /; / `/ 'และระเบิดขึ้นต่างกันใน m / n


อินพุตนี้ใช้งานได้จำนวนเท่าใด สำเนาของฉันไม่รู้จักข้อความใด ๆ ในตัวอย่างแรก (เครื่องหมายไพพ์และเครื่องหมายอัศเจรีย์) ตัวอย่างเช่น นอกจากว่าฉันขาดอะไรไปฉันก็มีการแสดงที่เหมือนกันกับ Length[Split[Characters@TextRecognize@#][[1]]] &
Simmons

โอ๊ะลืมเกี่ยวกับการแยก .... และมันขึ้นอยู่กับตัวจดจำข้อความในตัวของ Mathematica ... และคุณไม่สามารถเชื่อถือได้
CalculatorFeline

ฉันจะโพสต์ของฉันเป็นโซลูชันแยกต่างหากแล้ว
Simmons

3

Mathematica ขนาด 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.