ติดตามจุดต่างๆ


22

ความท้าทาย

รับกริดของอักขระ

ABCDE
FGHIJ
KLMNO
PQRST

และกริดที่มีขนาดของจุดและช่องว่างเหมือนกัน

. . .
  . . .
  . .  
  . . .  

เอาท์พุทสตริงที่สร้างขึ้นโดยทำตามจุดผ่านตารางเริ่มต้นที่มุมซ้ายบน ตัวอย่างนี้จะให้ผลABGLQRSNIJE

หมายเหตุ

  • คุณอาจใช้กริดอินพุตเป็นอาร์เรย์สองมิติหรือทางเลือกที่ใกล้เคียงที่สุดในภาษาของคุณแทนที่จะเป็นสตริงหลายบรรทัด
  • คุณสามารถใช้ค่า NULL ของภาษาของคุณแทนช่องว่าง แต่คุณต้องใช้จุดเพื่อทำเครื่องหมายเส้นทาง
  • คุณไม่จำเป็นต้องแยกจุดในบรรทัดเดียวกันด้วยช่องว่าง ฉันเพิ่งเพิ่มพวกเขาเพื่อให้สามารถอ่านได้
  • กริดที่เล็กที่สุดที่เป็นไปได้มีขนาด 1x1
  • จุดเริ่มต้นและจุดสิ้นสุดจะมีเพื่อนบ้านเพียงคนเดียว จุดระหว่างพวกเขามักจะมีสองเพื่อนบ้านแนวตั้งหรือแนวนอนที่แน่นอน สิ่งนี้รับประกันได้ว่าเส้นทางนั้นไม่น่าสงสัย
  • เส้นทางจะไม่ไปในแนวทแยง
  • อักขระในตารางจะเป็นอักขระตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กทั้งหมดในช่วงที่[a-z]คุณสะดวกที่สุด
  • เส้นทางจะเริ่มต้นที่มุมซ้ายบนเสมอ

กฎระเบียบ

  • อนุญาตให้ใช้ฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ
  • กฎเริ่มต้นสำหรับอินพุต / เอาต์พุต
  • ช่องโหว่มาตรฐานใช้
  • นี่คือดังนั้นจำนวนไบต์ที่น้อยที่สุดจึงชนะ Tiebreaker เป็นการส่งก่อนหน้า

กรณีทดสอบ

กริด # 1

ABCABCW
DEFGHUQ
XLUSDQZ
ASUKWXI
WUKOAIM
AIAIOUP
. .          
  . . .      
      .      
. . . .      
.            
.            
=> ABEFGSKUSAWA
. . . . . . .
            .
. . . .
. . . .
. .
. . . . . . .
=> ABCABCWQZIMPUOIAIAWAXLUUK

กริด # 2

สังเกตช่องว่างสามจุดในบรรทัดที่สองของตัวอย่างแรกและตัวที่สอง

AB
ซีดี
.  
   
=> A
. .
   
=> AB
.  
. .
=> ACD

กริด # 3



.
=> A

Happy Coding!


คุณแน่ใจว่ากรณีทดสอบที่สองสำหรับ Grid # 1 ถูกต้องหรือไม่ ABCABCUQXIUOIAIAWAXLUUKผมคิดว่าการส่งออกที่ควรจะเป็น
vaultah

@vaultah Thaks สำหรับคำใบ้แก้ไขมัน มีจุดในตารางหนึ่งคอลัมน์ทางด้านซ้ายสุด
Denker

เราจำเป็นต้องยอมรับอินพุตด้วยอักขระเว้นวรรคทุกตัวที่นี่หรือจะเป็นแค่ตัวอักษรและบรรทัดใหม่ (และไม่มีช่องว่างเพิ่มเติมใน dot matrix) หรือไม่?
msh210

@ msh210 ดังที่กล่าวไว้ในการท้าทายคุณอาจใช้ค่า NULL บางชนิดแทนการเว้นวรรคเนื่องจากแน่นอนว่าคุณรับอินพุตเป็นอาร์เรย์ 2 มิติ
Denker

ฉันหมายถึงไม่มีอะไรเลยแม้แต่ไบต์ว่าง
msh210

คำตอบ:


4

APL, 63 ไบต์

{⍺[(⊂1 1){×≢⍵:⍺,(V/⍵)∇⍵/⍨~V←(+=⌊/)+/¨2*⍨⍺-⍵⋄⍺}1↓(,⍵='.')/,⍳⍴⍵]}

นี่คือฟังก์ชั่นที่ใช้การฝึกอบรมตัวละครสองตัว (พวกเขาต้องเป็นเมทริกซ์), ตารางอักขระเป็นอาร์กิวเมนต์ด้านซ้ายและตารางจุดเป็นอาร์กิวเมนต์ที่ถูกต้อง เมทริกซ์ของจุดอาจเล็กกว่าเมทริกซ์ของอักขระ

คำอธิบาย:

  • (,⍵='.')/,⍳⍴⍵: รับตำแหน่งของจุดตามลำดับคอลัมน์แถว
  • 1↓: วางอันแรก (เป็นที่รู้กันว่าอยู่ที่1 1)
  • (⊂1 1){... }: เริ่มจาก1 1เรียกใช้ฟังก์ชันต่อไปนี้ซึ่งตามหลังพา ธ (อาร์กิวเมนต์ซ้ายคือตำแหน่งปัจจุบันอาร์กิวเมนต์ขวาคือตำแหน่งที่ไม่ได้เข้าชม) มันทำงานได้โดยการเลือกจุดที่ไม่ได้เข้าชมที่ใกล้ที่สุดในแต่ละครั้ง (หากสมมติฐานจากการระงับคำถามนี้ถูกต้อง)
    • ×≢⍵:: หากยังมีตำแหน่งที่ไม่ได้เข้าชม:
      • +/¨2*⍨⍺-⍵: หาระยะทางแมนฮัตตันระหว่างแต่ละตำแหน่งและตำแหน่งปัจจุบัน
      • V←(+=⌊/)Vเพราะแต่ละตำแหน่งให้ดูว่าระยะห่างเท่ากับระยะที่น้อยที่สุดและเก็บใน
      • ⍵/⍨~: เลือกทุกตำแหน่งที่ไม่ใช่ในกรณีนี้คือฟิลด์ที่จะเยี่ยมชมต่อไป
      • (V/⍵): ค้นหาตำแหน่งที่เป็นกรณีนี้จะเป็นฟิลด์ถัดไป
      • : เรียกใช้ฟังก์ชันอีกครั้งด้วยอาร์กิวเมนต์ใหม่เหล่านี้
      • ⍺,: ผลลัพธ์คือตำแหน่งปัจจุบันตามด้วยผลลัพธ์ของการทำเช่นนี้สำหรับส่วนที่เหลือของรายการ
    • ⋄⍺: มิฉะนั้นเพียงแค่คืนค่าตำแหน่งปัจจุบันและหยุด (เป็นตำแหน่งสุดท้าย)
  • ⍺[... ]: สำหรับแต่ละตำแหน่งให้เลือกองค์ประกอบที่เกี่ยวข้องในตารางตัวละคร

กรณีทดสอบ:

      f←{⍺[(⊂1 1){×≢⍵:⍺,(V/⍵)∇⍵/⍨~V←(+=⌊/)+/¨2*⍨⍺-⍵⋄⍺}1↓(,⍵='.')/,⍳⍴⍵]}
      ⍝ example
      g0  ← 4 5⍴'ABCDEFGHIJKLMNOPQRST'
      d0  ← 4 5⍴'..  . . .. . .  ... '
      ⍝ test case 1
      g1  ← 6 7⍴'ABCACBWDEFGHUQXLUSDQZASUKWXIWUKOAIMAIAIOUP'
      d1a ← 6 7⍴'..      ...      .   ....   .      .      '
      d1b ← 6 7⍴'.......      ....   .. ..  ..     ........'
      ⍝ test case 2
      g2  ← 2 2⍴'ABCD'
      d2a ← 1 1⍴'.'
      d2b ← 1 2⍴'..'
      d2c ← 2 2⍴'. ..'
      ⍝ test case 3
      g3  ← 1 1⍴'A'
      d3  ← 1 1⍴'.'

      g0 f d0
ABGLQRSNIJE
      (⊂g1) f¨ d1a d1b
┌────────────┬─────────────────────────┐
│ABEFGSKUSAWA│ABCACBWQZIMPUOIAIAWAXLUUK│
└────────────┴─────────────────────────┘
      (⊂g2) f¨ d2a d2b d2c
┌─┬──┬───┐
│A│AB│ACD│
└─┴──┴───┘
      g3 f d3
A

3

JavaScript (ES6), 122 ไบต์

c=>g=>c[l=~c.search`
`,i=p=0]+[...g].map(_=>i|!p?c[i=(d=n=>g[i-n-p?i-n:c]>" "&&(p=i)-n)(1)||d(-1)||d(l)||d(-l)]:"").join``

คำอธิบาย

นำกริดเป็นสตริงหลายบรรทัด

รู้สึกเหมือนพยายามดี แต่ฉันหมดเวลาในขณะเล่นกอล์ฟดังนั้นมันอาจจะดีขึ้น

var solution =

c=>g=>
  c[                            // add the starting letter to the output
    l=~c.search`
`,                              // l = line length
    i=p=0                       // i = current index, p = previous index
  ]+
  [...g].map(_=>                // loop
    i|!p?                       // if we have not finished yet
      c[i=                      // find the next index and return it's letter
        (d=n=>                  // d = function to check for a dot at offset n
          g[
            i-n-p?i-n           // if i - n != p, get the character at index i - n
            :c                  // else get index "c" (will return undefined, not a dot)
          ]>" "                 // if the character is a dot
          &&(p=i)-n             // set p to i and return i - n
        )
        (1)||d(-1)||d(l)||d(-l) // search for the next adjacent dot
      ]
    :""                         // if we have finished, return no letter
  )
  .join``                       // output all the returned letters
<textarea id="Characters" rows="6" cols="30">ABCABCW
DEFGHUQ
XLUSDQZ
ASUKWXI
WUKOAIM
AIAIOUP</textarea>
<textarea id="Grid" rows="6" cols="30">.......
      .
...   .
. ..  .
.     .
.......</textarea><br />
<button onclick="result.textContent=solution(Characters.value)(Grid.value)">Go</button>
<pre id="result"></pre>


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.