2D Maze ลบ 1D


27

ความท้าทายนี้เกี่ยวกับการแปลงเขาวงกต 2 มิติเป็น 1D เขาวงกต

ภาพรวม

+-+-+-+-+-+-+   +-+-+-+-+-+-+                    graph {
| |   |     |   |A|   |    B|   A         B        A -- D
+ + + + +-+-+   + + + + +-+-+    \        |        C -- D
|   | |     |   |   | |     |     \       |        D -- E
+-+-+ +-+-+ +   +-+-+ +-+-+ +      \      |        E -- F
|           |   |C   D E   F|   C---D-E---F        E -- G
+-+-+-+ +-+ +   +-+-+-+ +-+ +         |   |        B -- F
|         | |   |      G  | |     .---G   |        F -- J
+ +-+-+-+ + +   + +-+-+-+ + +   .'   /    |        G -- H
| |       | |   |H|I      |J|   H I-'     J        G -- I
+-+-+-+-+-+-+   +-+-+-+-+-+-+     (ascii)        } // (graphviz dot)       
   Figure 1       Figure 2                 Figure 3

สำหรับจุดประสงค์ของการท้าทายนี้เขาวงกต 2D แบบดั้งเดิมคือเขาวงกตรูปสี่เหลี่ยมผืนผ้าที่สร้างขึ้นจากจุดขัดแตะที่มีสิ่งต่อไปนี้ทั้งหมด:

  • มันถูกปิด (ขอบด้านนอกเชื่อมต่อกับผนัง)
  • จุดขัดแตะทั้งหมดเชื่อมต่อกับผนัง
  • มีการเชื่อมต่อ (สำหรับทุกสองช่องว่าง X และ Y มีเส้นทางระหว่างพวกเขา)
  • มันเป็นวงจร (ไม่มีเส้นทางจากช่องว่างใด ๆ X กลับไปที่ X โดยไม่ย้อนรอย)

รูปที่ 1 แสดงเขาวงกต 2D แบบดั้งเดิม เขาวงกตเหล่านี้มีสามด้านที่น่าสนใจ:

  • จุดจบตาย - สถานที่ที่มีเพียงเส้นทางเดียวเท่านั้น
  • ทางเดิน - สถานที่ที่มีสองเส้นทางที่พร้อมใช้งาน
  • จุดตัดสินใจ - สถานที่ที่มีเส้นทางที่มีอยู่สามหรือสี่เส้นทาง

สำหรับเขาวงกตทุกคนสามารถสร้างกราฟที่จุดสิ้นสุดและจุดตัดสินใจเป็นโหนดและมีขอบระหว่างทุกสองโหนดที่เชื่อมต่อกันด้วยเส้นทางตามทางเดิน รูปที่ 2 แสดงเขาวงกตเดียวกันกับโหนดดังกล่าวที่มีป้ายกำกับและรูปที่ 3 กราฟของเขาวงกต (ในรูปแบบ ASCII และ Graphviz dot dot)

เขาวงกต 1D

เขาวงกต 1D รวมคะแนนวาร์ปซึ่งมีคู่และถูกระบุด้วยตัวอักษร (ในทั้งสองกรณี) รูปที่ 4 แสดงตัวอย่างเขาวงกต 1D นี่เป็นเช่นเดียวกับเขาวงกต 2 มิติที่มีความสูง 1 ดังแสดงในรูปที่ 5 หมายเหตุโดยเฉพาะอย่างยิ่งในรูปที่ 5 ตำแหน่งของจุดขัดแตะที่ทำเครื่องหมายโดย+สลับจากซ้ายไปขวา ในเขาวงกต 1D ตัวละครทุกตัวที่ขึ้นต้นด้วยกำแพงด้านซ้ายก็เป็นจุดขัดแตะ

                                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  D|  D E|G E F|  F  |  G  |    |  D|  D E|G E F|  F  |  G  |
                                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            Figure 4                         Figure 5

กฎสำหรับการนำทางเขาวงกตนี้มีดังนี้ การเคลื่อนไหวทุกครั้งสามารถแสดงเป็นไปข้างหน้า ( >) หรือข้างหลัง ( <) ไปข้างหน้าและข้างหลังโดยค่าเริ่มต้นมีความหมายเช่นเดียวกับการรับรู้เชิงพื้นที่ของเรา ไปข้างหน้าไปยังตำแหน่งทันทีทางขวาและย้อนกลับไปทางซ้ายทันที

จุดแปรปรวนเป็นตัวแทนของสถานที่ที่ไม่สมมาตรสลับการเชื่อมต่อกับเพื่อนบ้าน หากคุณมาจากเพื่อนบ้านถึงจุดแปรปรวนตำแหน่งของจุดแปรปรวนสองจุดจะถูกสลับเปลี่ยน หากคุณมาจากจุดแปรปรวนกับเพื่อนบ้านพวกเขาจะไม่เปลี่ยน ตัวอย่างเช่นในรูปที่ 6 การเลื่อนถอยหลังจาก 1 นำคุณมาที่ 2 (เนื่องจาก 1 คือเพื่อนบ้านของ G และเรากำลังย้ายจากเพื่อนบ้านจุดที่ 2 และ @ ถูกเปลี่ยนเป็น) ก้าวไปข้างหน้าจาก 2 (วาร์ปจุด G) นำคุณมาที่ 3 (ที่นี่เราเริ่มจากจุดแปรปรวนดังนั้นจึงไม่มีการสลับ) การย้อนกลับจาก 3 จะนำคุณไปที่ @

        54 2367    89^   @1
|  D|  D E|G E F|  F  |  G  |
                     Y     X
          Figure 6

รูปที่ 6 นอกจากนี้ยังแสดงให้เห็นถึงการนำทางเช่นจาก X เป็น Y <<>><>>>>>โดยใช้ลำดับของการเคลื่อนไหว การเคลื่อนไหวเหล่านี้จะนำคุณไปสู่จุดที่มีป้ายกำกับ123456789^ตามลำดับตามลำดับ อย่าลังเลที่จะสำรวจด้วยตัวคุณเองโดยใช้ข้อมูลโค้ดในส่วนถัดไป

แปลง 2D เป็น 1D

เมื่อให้เขาวงกต 1D เราสามารถสร้างกราฟโดยที่แต่ละโหนดนั้นเป็นเดดเอนด์หรือคู่ชี้วาร์ปและมีขอบระหว่างโหนดสองโหนดที่เชื่อมต่อกันตามทางเดิน กราฟนี้ช่วยให้เราสามารถเปรียบเทียบเขาวงกต 1D และ 2D

ตัวอย่างเช่นเขาวงกต 1D ในรูปที่ 4 เป็นเขาวงกตเดียวกันในรูปที่ 1 เพื่อดูว่าทำไมรูปที่ 7 เพิ่มป้ายชื่อให้กับปลายตาย การใช้ป้ายกำกับเหล่านี้เพื่อสร้างกราฟกราฟของรูปที่ 7 เป็นเพียงรูปที่ 3 อีกครั้ง รูปที่ 8 แสดงการแยกส่วนของการสร้างกราฟนี้

|  D|  D E|G E F|  F  |  G  |
 A   C           B   J H   I 
          Figure 7

|  D|  D E|G E F|  F  |  G  |
+ + + + + + + + + + + + + + + <- lattice points
|A  |C    |     |B   J|H   I| <- dead ends
|A D|C D E|G E F|B F J|H G I| <- all nodes (dead ends+warp points); i.e.:
                                 "where each end is either a dead end
                                  or a warp point pair"; note that each
                                  pair of warp points is the same node.
|A-D|C-D-E|G-E-F|B-F-J|H-G-I| <- corridors; note each is a connection, since
  1   2 3   4 5   6 7   8 9      "edges exist between any two nodes
                                  connected along a corridor"
   graph {                 graph {                 
     A -- D  // 1 <---->     A -- D                
     C -- D  // 2 <---->     C -- D                
     D -- E  // 3 <---->     D -- E                
     G -- E  // 4 <---->     E -- G                
     E -- F  // 5 <---->     E -- F                
     B -- F  // 6 <---->     B -- F                
     F -- J  // 7 <---->     F -- J                
     H -- G  // 8 <---->     G -- H                
     G -- I  // 9 <---->     G -- I                
   }                ^      }
    Built from      |      From Figure 3
     1D maze         `-> isomorphic mappings
                Figure 8

(โปรดทราบว่าป้ายกำกับและเลย์เอาต์ของกราฟแต่ละกราฟได้รับการเลือกเพื่อจัดแนวเพื่อใช้เป็นภาพประกอบโดยทั่วไปการพูดนี้เป็นปัญหามอร์ฟิซึ่มส์ของกราฟ )

ตัวอย่างต่อไปนี้มีไว้เพื่อช่วยให้เห็นภาพกลไกของเขาวงกต 1D และการเชื่อมต่อระหว่างเขาวงกต 1D กราฟสมมูลและเขาวงกต 2D

ในขณะที่คุณนำทางเขาวงกต 1D ในตัวอย่างนี้สองโหนดสุดท้ายที่คุณสัมผัสจะถูกเน้น โหนเดียวกันจะถูกเน้นด้วยวิธีเดียวกันบนกราฟที่เท่ากันและเขาวงกต 2 มิติ


โดยทั่วไปแล้วสำหรับเขาวงกต 2D แบบดั้งเดิมคุณสามารถสร้างเขาวงกต 1D เทียบเท่าประเภทนี้ได้ ตัวอย่างที่ซับซ้อนขึ้นเล็กน้อยคือรูปที่ 9:

+-+-+-+-+-+-+   +-+-+-+-+-+-+                   graph {
| |   |   | |   |A|   |   |B|   A         B       A -- D
+ + + + + + +   + + + + + + +    \       /        C -- D
|   | | |   |   |   | | |   |     \     /         D -- E
+-+-+ + +-+-+   +-+-+ + +-+-+      \   /          B -- E
|           |   |C   D E    |   C---D-E           E -- F
+-+-+-+ +-+ +   +-+-+-+ +-+ +         |\          E -- I
|         | |   |      F  | |     .---F \         F -- G
+ +-+-+-+ + +   + +-+-+-+ + +   .'   /   \        G -- H
| |       | |   |G|H      |I|   G H-'     I       H -- I
+-+-+-+-+-+-+   +-+-+-+-+-+-+     (ascii)       } // (graphviz dot)
   Figure 9       Figure 10             Figure 11

|  D|  D E  |F E  |  F  |       |  D|  D E  |F E  |  F  |
                                 A   C     I     B G   H
      Figure 12                       Figure 13

เขาวงกตนี้มีโหนดที่มีสี่เส้นทาง (E ในรูปที่ 10) รูปที่ 11 แสดงกราฟ รูปที่ 12 เป็นเขาวงกต 1D ที่เทียบเท่ากัน และรูปที่ 13 แสดงเขาวงกตเดียวกันกับป้ายชื่อสำหรับปลายตายเพื่อเปรียบเทียบกับรูปที่ 11

ท้าทาย

รับ 2D Maze เป็นอินพุตให้เขียนฟังก์ชันหรือโปรแกรมที่แปลงเขาวงกต 2D เป็นเขาวงกต 1D ที่มีจุดวาร์ป คะแนนแปรปรวนอาจใช้ตัวอักษร 52 ตัวในแต่ละกรณี

รับประกันการป้อนข้อมูล (หากสิ่งเหล่านี้ไม่ตรงกับข้อมูลที่คุณไม่ต้องทำ):

  • เขาวงกตอินพุตนั้นเชื่อมต่ออยู่ (นั่นคือคุณสามารถไปจากที่ใดก็ได้ไปยังที่อื่น ๆ )
  • เขาวงกตอินพุตถูกปิด
  • เขาวงกตอินพุตเป็นรูปสี่เหลี่ยมผืนผ้า
  • +ทั้งหมดใช้จุดขัดแตะ
  • ผนังทั้งหมดระหว่างจุดขัดแตะในแถวเดียวกันใช้ |
  • -ผนังทั้งหมดระหว่างจุดตาข่ายในการใช้งานคอลัมน์เดียวกัน
  • ช่องว่างทั้งหมดเป็นส่วนหนึ่งของเส้นทาง (และภายในเขาวงกต)
  • เส้นทางเป็นช่องว่างทั้งหมด (ซึ่งมักจะเป็นแบบดั้งเดิมไม่แปรปรวน)
  • พา ธ นั้นกว้างหนึ่งช่องว่าง
  • เขาวงกตที่สร้างขึ้นโดยการเชื่อมต่อจุดบนขัดแตะ
  • มีโหนดรวมไม่เกิน 52 โหนด (เช่นจุดสิ้นสุดและจุดตัดสินใจ) ในกราฟของเขาวงกต

รูปแบบผลลัพธ์:

  1. ผลลัพธ์ของคุณควรเป็นบรรทัดเดียวที่แสดงว่าเป็นเขาวงกต 1D
  2. ผลลัพธ์ของคุณไม่ควรมีช่องว่างนำหน้า / ต่อท้าย ยกเว้นว่าบรรทัดใหม่ต่อท้ายนั้นใช้ได้
  3. ตัวละครตัวแรกและตัวละครอื่น ๆ หลังจากนั้นเป็นจุดขัดแตะ
  4. ผนังทั้งหมดควรอยู่ในจุดขัดแตะ และจุดแปรปรวนทั้งหมดระหว่างพวกเขา
  5. กราฟของเขาวงกต 1D ของคุณควรเทียบเท่ากับกราฟของเขาวงกต 2D
  6. เขาวงกต 1D ของคุณต้องกะทัดรัด จุดที่ไม่ขัดสีทั้งหมดต้องเป็นจุดสิ้นสุด (เช่นติดกับกำแพง) หรือจุดแปรปรวน
  7. ตัวอักษรในการส่งออกของคุณควรจะจุดวิปริต แต่ละจุดวาร์ปเกิดขึ้นบนเส้นสองครั้งอย่างแน่นอน

ตัวอย่าง:

|  D|  D E|G E F|  F  |  G  | <- (1,2) The single line output
+ + + + + + + + + + + + + + + <- lattice point spacing... (3) 
                                 (4,6) lattice points are all walls or spaces
                                 (5) See Figure 8
                                 (7) D, E, F, G appear twice; no other labels

นี่คือรหัสกอล์ฟ ผู้ชนะคือการส่งที่ไม่ใช่ช่องโหว่ที่ถูกต้องและมีไบต์น้อยที่สุด

การทดสอบ

ไม่มีกรณีทดสอบสำหรับความท้าทายนี้เนื่องจากมีเอาต์พุตที่ถูกต้องจำนวนมากสำหรับเขาวงกตที่ไม่สนใจ

อย่างไรก็ตามฉันได้สร้างตัวตรวจสอบใน C ++ (ตัวตรวจสอบกราฟนี้ทั้งสองวิธีผ่านการแปลงแบบกราฟิก )

นอกจากนี้ต่อไปนี้เป็นตัวอย่างเล็ก ๆ น้อย ๆ ที่จะช่วยแสดงการจัดรูปแบบที่เหมาะสม:

ตัวอย่างที่ 1

+-+-+-+-+-+-+
| |   |     |
+ + + + +-+-+
|   | |     |
+-+-+ +-+-+ +
|           |
+-+-+-+ +-+ +
|         | |
+ +-+-+-+ + +
| |       | |
+-+-+-+-+-+-+
->
|  D|  D E|G E F|  F  |  G  |

ตัวอย่างที่ 2

+-+-+-+-+-+-+
| |   |   | |
+ + + + + + +
|   | | |   |
+-+-+ + +-+-+
|           |
+-+-+-+ +-+ +
|         | |
+ +-+-+-+ + +
| |       | |
+-+-+-+-+-+-+
->
|  D|  D E  |F E  |  F  |

ตัวอย่างเพิ่มเติมสามารถพบได้ที่นี่


1
ฉันไม่คิดว่าคำอธิบายของเขาวงกต 1D มีความชัดเจนมาก ...
mbomb007

มันเท่ห์มาก ใช่นั่นช่วยได้
mbomb007

แม้ว่าสคริปต์เชิงโต้ตอบของคุณจะช่วย แต่ก็ยังเป็นปัญหาที่ยาก ดังนั้นฉันแค่ข้ามมันไป ความเข้าใจของฉันเกี่ยวกับเรื่องนี้ยังคงผอมบางที่สุด
mbomb007

คำอธิบายของเขาวงกต 1D เป็นภาพร่าง ฉันต้องอ่านรูปที่ 7 เพื่อที่จะเข้าใจว่าตัวละครในแถบแนวตั้งในเขาวงกต 1D นั้นเป็นกำแพงที่คุณไม่สามารถผ่านได้
edc65

1
ตัวอย่างที่ 1 ด้วยเขาวงกต 1d ที่ซ้อนกันเป็นเขาวงกต 2d โดยที่แต่ละตัวอักษรเป็นบันได: gist.github.com/sparr/36d6355cc4c785a27b12157666169082
Sparr

คำตอบ:


3

งูหลาม 2 igraph , 492 369 ไบต์

import igraph,string
def f(s):
 C=s.find('\n')/2;N=' ';g=igraph.Graph(0,[(i,i+j)for i in range(len(s)/(4*C+4)*C)for j in(1,C)if s[(i/C*2+1)*(2*C+2)+i%C*2+2*j+j/C*3]==N]);V=g.vs;g.d=g.degree;O='';V(_d=1)[N]=N;V(_d_gt=2)[N]=list(string.ascii_letters)
 while g.es:
    v=V(_d=1)[0];O+='|'+v[N]
    while g.d(v):w=v.neighbors()[0];g-=(v,w);v=w;O+=N+v[N]if v[N]else''
 print O+'|'

(บรรทัดที่ห้าและหกแต่ละบรรทัดขึ้นต้นด้วยแท็บไม่ใช่สี่ช่องว่างตามที่ StackExchange แสดง)

  • บันทึกหกไบต์จัดเรียงเลขคณิตใหม่
  • บันทึกเจ็ดไบต์โดยใช้ชิ้นแทนที่จะเป็นซิป
  • บันทึกสามไบต์โดยใช้g+=tuple(v.neighbors())แทนg.add_edge(*v.neighbors())
  • บันทึกเจ็ดไบต์โดยใช้g-=g.es[g.incident(v)]แทนg.delete_edges(g.incident(v))
  • นามแฝงสิบเอ็ดไบต์ที่บันทึกไว้ g.d=g.degree
  • บันทึก 52 ไบต์ (!) กำจัดลูปที่หดตัวทางเดินทั้งหมดโดยการแทนที่จุดยอดองศา -2 ด้วยขอบระหว่างเพื่อนบ้าน แต่ห่วงเอาท์พุทจะไม่สนใจจุดยอดเหล่านี้
  • บันทึกแล้ว 13 ไบต์สังเกตว่าเมื่อกำหนดชื่อแล้วการคัดลายมือจะไม่สนใจว่าการทำซ้ำที่ระบุนั้นยาวเกินไป
  • บันทึกสี่ไบต์โดยไม่มีตัวแปรRสำหรับจำนวนแถวย้ายการคำนวณไปยังจุดใช้งานเท่านั้น
  • บันทึกสองไบต์เพื่อเปลี่ยนการเยื้องระดับสองเป็นแท็บแทนที่จะเว้นวรรค
  • ที่บันทึกไว้หกไบต์จัด2*(i%C)ไปi%C*2, 2*(i/C)ไปi/C*2และ(C-1)*jจะj*C-j
  • บันทึกการตั้งชื่อสี่ไบต์ N='n'
  • บันทึกหนึ่งไบต์เพื่อพิจารณาว่าอักขระคือการใช้พื้นที่<'-'แทนที่จะเป็น==' 'ภายใต้สมมติฐานว่ามีอักขระที่ใช้ได้เท่านั้นที่ปรากฏ
  • จากนั้นฉันก็รู้ว่าฉันสามารถตั้งชื่อคุณลักษณะจุดสุดยอด' 'แทน'n'และนำมาใช้ใหม่Nสำหรับช่องว่างสองตัวอักษรในแหล่งที่มาและ==Nแทนการ<'-'บันทึกห้าไบต์เพิ่มเติม

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

หลังจากสร้างกราฟนี้เราจะเลือกใบไม้ใด ๆ และทำตามจุดยอดที่อยู่ติดกันอย่างต่อเนื่องเขียนชื่อของพวกเขาหากพวกเขาไม่ใช่ทางเดินและลบขอบที่ใช้จนกระทั่งเราติด จากนั้นเราก็นำใบไม้อีกใบแล้วดำเนินต่อไปจนกระทั่งขอบทั้งหมดหายไป

import string
import igraph
def f(s):
  C = s.find('\n')/2 # number of maze vertices in each row
  R = len(s)/(4*C+4) # number of rows
  def strpos(r, c):
    """Index of the vertex at row r, col c in the newline-delimited string s"""
    return (2*r+1)*(2*C+2) + 2*c + 1
  def vertpos(i):
    """Index of the i-th vertex in s"""
    return strpos(i/C, i%C)
  g = igraph.Graph(edges=[(i, i+(C if j else 1))
                          for i in range(R*C)
                          for j in (0, 1)
                          if s[vertpos(i)+(2*C+2 if j else 1)] == ' '])
  V = g.vs # the graph's vertex sequence
  O = ''
  V(_degree=1)['n'] = ' ' # All leaves are named space
  W = V(_degree_gt=2) # All warp points...
  W['n'] = list(string.ascii_letters[:len(W)]) # ...are named successive letters
  while g.es: # while any edges remain...
    v = V(_degree=1)[0] # find a leaf
    O += '|'+v['n'] # start a new 'block'
    while v.degree():
      w = v.neighbors()[0] # pick a neighbor
      g -= (v, w) # delete that edge
      v = w
      if v['n']: # If it's a dead end or warp point...
        O += ' '+v['n'] # ...write out the new neighbor
  print O+'|'

ท่านสามารถเข้าดูผลการค้นหาสำหรับห้าเขาวงกตตัวอย่างเช่น (น่าเสียดายที่igraphไม่สามารถใช้ได้กับ Try It Online ผลลัพธ์เหล่านี้ส่งออกจากSageMathCloud )


4

Haskell - 481 405 387 ไบต์

import Data.List
s&t=elemIndices s t
l=last
c!(x:y:z)=l$(y:c)!(x:z):do{[x:p,q]<-mapM([id,reverse]<*>)[[x],[y]];x&[l q];[[]!((q++p):c++z)]}
c![x]=x:[]!c
c!z=z
main=interact(\m->let{g=' '&m;
u=(\\[k|k<-g,length(v>>=(k&))==2])<$>[]!v;
v=[[x,y]|x<-g,y<-g,elem(y-x-1)[0,head$'\n'&m]];
}in '|':(u>>=(++"|").init.(>>=(:" ").toEnum.((+)<*>(+65).(*32).(`div`26)).l.(-1:).(&(nub$u>>=init.tail)))))

สิ่งนี้จะสร้างรายการของช่องว่างที่อยู่ในเขาวงกตกำหนดหมายเลขตามดัชนีในสตริงและใช้เพื่อค้นหาคู่ของช่องว่างที่อยู่ติดกันทั้งหมด จากนั้นจะเย็บคู่เข้าด้วยกันเป็นลำดับของจุดที่ยาวขึ้นโดยอิงตามองค์ประกอบแรก / สุดท้ายที่ตรงกัน ลำดับจะถูกแปลเป็นสตริงโดยแทนที่จุดในการตกแต่งภายในของห้องอย่างน้อยหนึ่งห้อง (จุดแปรปรวน) เป็นตัวอักษรที่สอดคล้องกันและส่วนที่เหลือลงในช่องว่าง

เขาวงกต 2D ถูกอ่านจาก STDIN และเขาวงกต 1D ถูกพิมพ์ไปยัง STDOUT

แก้ไข: ลดลง 62 ไบต์จัดเรียงสิ่งต่าง ๆ ใหม่และปรับเปลี่ยนอัลกอริทึมเล็กน้อยและอีก 14 รายการโดยแทนที่chrด้วยtoEnumคำแนะนำจาก Laikoni

แก้ไข 2: บันทึกอีก 13 ไบต์โดยการลดความซับซ้อนของตรรกะใน(!), 3 โดยใช้รูปแบบรายการจับคู่น้ำตาลและ 2 โดยใช้>>=เพื่อเชื่อมuต่อ


ฉันคิดว่าคุณไม่จำเป็นต้องขึ้นบรรทัดใหม่และเว้นวรรคก่อนที่จะมีลวดลายยามเช่นo(x:p)q|x==last q=[q++p]|1>0=[]ควรทำงานด้วย
ไลโคนี

นอกจากนี้toEnumควรทำงานแทนจากchrนั้นimport Data.Charอาจถูกทิ้ง
ไลโคนี

และในที่สุดเมื่อความท้าทายขอโปรแกรมหรือฟังก์ชั่นคุณสามารถแทนที่main=interact(\m->...)ด้วยเพียงแค่f m=...มีเพียงนี่น่าจะเพียงพอที่จะเอาชนะคำตอบของไพ ธ อนได้ถ้านั่นหมายถึงอะไรกับคุณ
Laikoni
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.