สตริง Langford


11

คำอธิบายการท้าทาย

สตริง Langfordของการสั่งซื้อNที่มีการกำหนดดังต่อไปนี้:

  • ความยาวของสายเท่ากับ2*N,
  • สตริงมีNตัวอักษรตัวแรกของตัวอักษรภาษาอังกฤษตัวอักษรแต่ละตัวปรากฏสองครั้ง
  • สำหรับคู่ของตัวอักษรเดียวกันในแต่ละมีMตัวอักษรระหว่างพวกเขาที่Mเป็นตำแหน่งของตัวอักษรที่อยู่ในตัวอักษร ( A = 1, B = 2, ..., Z = 26)

ยกตัวอย่างเช่นเพียงสองสาย Langford เป็นไปได้ของการสั่งซื้อ3เป็นและBCABAC CABACBที่คุณสามารถดูในทั้งสองของสตริงเหล่านี้มีจดหมายฉบับหนึ่งระหว่างสองA's สองตัวอักษรระหว่างB' s และสามตัวอักษรระหว่างC's รับจำนวนเต็มบวกNเอาท์พุทสตริงการสั่งซื้อทั้งหมดของ Langford N(ในรูปแบบที่เหมาะสม: พิมพ์ทีละบรรทัดโดยคั่นด้วยบรรทัดใหม่ส่งคืนรายการ / อาร์เรย์ ... )

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

3: [CABACB, BCABAC]
4: [DACABDCB, BCDBACAD]
5: # no output #
7: [GCFBECBDGFEADA, GBFCBDECGFDAEA, GBDFBCEDGCFAEA, GCAFACDEGBFDBE, GADAFCEDGCBFEB, GACAFDCEGBDFBE, GDAEAFDCGEBCFB, GBDEBFCDGECAFA, EGBFCBEDCGFADA, CGDFCBEDBGFAEA, EGDAFAEDCGBFCB, EGBCFBECDGAFAD, AGABFDBECGDFCE, EGADAFECDGBCFB, AGABEFBCDGECFD, BGDBCEFDCGAEAF, FBGDBCEFDCGAEA, BFGBAEADFCGEDC, CFGACADEFBGDBE, EAGAFBEDBCGFDC, BCGBFCEADAGFED, DAGAFDBECBGFCE, EBGCBFECDAGAFD, CEGDCFBEDBGAFA, CEGBCFBEDAGAFD, BDGBCFDECAGAFE, EFAGACEDFCBGDB, DFAGADEBFCBGEC, AFAGBDEBFCDGEC, DFAGADCEFBCGBE, ECFGBCEBDFAGAD, DEFGADAECFBGCB, CDFGCBDEBFAGAE, EBDGBFEDACAGFC, CDEGCFDAEABGFB, AEAGCDFECBDGBF, FAEAGCDFECBDGB, DFCEGDCBFEBAGA, BFCBGDCEFADAGE, ECFDGCEBDFBAGA, DAFAGDCEBFCBGE, BCFBGCDEAFADGE, AEAFGBDEBCFDGC, ADAFGCDEBCFBGE, AFACEGDCFBEDBG, BFCBEGCDFAEADG, EBFDBGECDFACAG, BEFBCGDECFADAG, EBDFBGEDCAFACG, AEAFCGDECBFDBG, AEADFGCEDBCFBG, ADAEFGDBCEBFCG]
12: # <216288 strings> #

หมายเหตุ

  • สตริง Langford ของการสั่งซื้อNเท่านั้นที่สามารถผลิตเมื่อN ≡ 0 (mod 4)หรือN ≡ 3 (mod 4),
  • คุณสามารถใช้ทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
  • คุณอาจใช้หมายเลขที่ตามมาเช่นกัน ( 012...หรือ123...แทนABC...)
  • ลำดับของสตริงที่ควรปรากฏเมื่อเอาต์พุตไม่ได้ระบุไว้
  • เอาต์พุตอาจมีความยาวค่อนข้างมาก (ตัวอย่างเช่นมีลำดับคำสั่ง Langford ที่แตกต่างกันมากกว่า 5 ล้านล้านชุด20) ดังนั้นโปรแกรมของคุณไม่จำเป็นต้องใช้เอาต์พุตทั้งหมด แต่ต้องทำงานในทางทฤษฎี (ให้เวลาและหน่วยความจำเพียงพอ)
  • ความท้าทายนี้ถูกนำมาจาก/ r / โปรแกรมประจำวันเครดิตทั้งหมดไปที่/ u / XenophonOfAthens

4
มีความท้าทายที่เกี่ยวข้องอย่างใกล้ชิดในกล่องทราย ในขณะที่ไม่จำเป็นต้องใช้มันเป็นความคิดที่ดีและอาจจะสุภาพในการตรวจสอบมีซ้ำกัน
Martin Ender

เราสามารถส่งออกอาร์เรย์ของตัวเลขได้หรือไม่
Leun Nun

@LeakyNun: แน่นอนทำไมไม่ ฉันอัปเดตคำอธิบาย
shooqie

1
ฉันอ้างถึงสิ่งนี้ (เรียกใช้โปรแกรม)
Leun Nun

คำตอบ:


3

CJam (23 ไบต์)

{,2*e!{__f{\a/1=,(}=},}

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


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