เชื่อมต่อตัวอักษร


10

แรงบันดาลใจจากเกมนี้น้อย

ท้าทาย

รับเป็นอินพุตตำแหน่งเริ่มต้นของตาราง (เสมอ 5x5) เช่นนี้

-ABCD
-A---
---C-
---BD
--E-E

คุณต้องเชื่อมต่อตัวอักษร (ตัวอักษรเดียวกันทั้งหมดเข้าด้วยกัน) เพื่อลบ-ช่องว่างทั้งหมด A,B,C,D and Eตัวอักษรจะถูกเสมอ

ตัวอักษรทุกคู่จะต้องเชื่อมต่อกันด้วยเส้นที่ไม่มีการแบ่งบรรทัดเดียวที่สามารถงอที่มุมฉาก (ใช้ตัวอักษรเดียวกันมากเพื่อแสดงบรรทัด)

การป้อนข้อมูลจะรับประกันว่าจะมีตัวอักษรเริ่มต้นแต่ละตัว 2 ครั้งและจะมีตัวอักษรเริ่มต้นทั้งหมด AE

อินพุตสามารถอ่านได้จาก stdin หรือสตริงเดียวเท่านั้นที่โต้แย้งกับฟังก์ชั่นบางอย่างหรือแม้แต่อาร์เรย์ / matriz / list of chars ซึ่งเป็นวิธีที่สะดวกที่สุดในการเขียนโค้ดภาษาของคุณ

ตั้งแต่นี้เป็นสั้นที่สุดในการรหัสไบต์ชนะ!


ตัวอย่าง

ไม่มีวิธีแก้ปัญหาเดียวเท่านั้นสำหรับแต่ละปัญหา แต่กฎใช้กับทุกคน (ไม่มีที่ว่างและไม่มีตัวอักษรแยก) และอินพุตนั้นรับประกันว่าจะมีเอาต์พุตที่ถูกต้องอย่างน้อยหนึ่งตัว

เริ่มเชื่อมต่อตัวอักษร A:

AABCD
AA---
AA-C-
AA-BD
AAE-E

ตอนนี้เชื่อมต่อตัวอักษร B:

AABCD
AAB--
AABC-
AABBD
AAE-E

ตอนนี้เชื่อมต่อตัวอักษร C:

AABCD
AABC-
AABC-
AABBD
AAE-E

ตอนนี้เชื่อมต่อตัวอักษร D:

AABCD
AABCD
AABCD
AABBD
AAE-E

และในที่สุดตัวอักษร E:

AABCD
AABCD
AABCD
AABBD
AAEEE

ตัวอย่างอื่น ๆ

input:
E--E-
BB-C-
AD---
---C-
AD---

output:
EEEEE
BBECE
ADECE
ADECE
ADEEE

input:
A----
---B-
-C-C-
-D-D-
BE-EA

output:
AAAAA
BBBBA
BCCCA
BDDDA
BEEEA

@ Sp3000 ไม่ใช่ความซ้ำซ้อนเนื่องจากความท้าทายนี้รับประกันการป้อนข้อมูลที่ถูกต้อง
Nathan Merrill

ข้อมูลเข้ารับประกันว่าจะมีตัวอักษรเริ่มต้นแต่ละตัวว่า 2 ครั้งหรือไม่ มันจะมีตัวอักษรเริ่มต้นทั้งหมดA-Eหรือไม่
Ton Hospel

1
@NathanMerrill ที่ดูเหมือนจะแตกต่างกันเล็กน้อย ฉันไม่สามารถจินตนาการได้ว่าการตรวจสอบความสามารถในการละลายจะใช้รหัสส่วนใหญ่
Martin Ender

1
@ MartinBüttnerในความท้าทายของฉันการตรวจสอบการแก้ไขคือความท้าทายโดยไม่จำเป็นต้องเชื่อมต่อ ในขณะที่ความท้าทายทั้งสองจะมีความคล้ายคลึงกันพวกเขารู้สึกแตกต่างกันอย่างมากในใจของฉัน
Nathan Merrill

4
เทคนิคที่ฉันโปรดปรานสำหรับคำถามบางข้อเช่นนี้คือการใช้ตัวเลขสุ่มเพื่อเติมตำแหน่งเพื่อหลีกเลี่ยงการย้อนรอยและหยุดถ้าฉันไปหาคำตอบ ใช้งานได้เฉพาะในกรณีที่รับประกันโซลูชันมิฉะนั้นโปรแกรมสามารถรันได้ตลอดไป (หากมีการประกันโซลูชันคุณสามารถเขียนรหัสได้บ่อยครั้ง สำหรับเทคนิคนี้คำถามมีความแตกต่างกันมาก
Ton Hospel

คำตอบ:


4

Perl, 130 128 127 ไบต์

รวมถึง +4 สำหรับ-n0(โปรแกรมไม่ทำงานจาก commandline ดังนั้น-และพื้นที่จะถูกนับด้วย)

โทรด้วยอินพุตบน STDIN:

perl -n0 connectletters.pl
E--E-
BB-C-
AD---
---C-
AD---

เทมเพลตด้วย^Dหรือ^Zหรือปิด STDIN ในระบบของคุณ

connectletters.pl:

/-/?map{$_="$`$_$'";s%\pL%$_="$`0$'";1while do{s/[$&-](.{5}|)0|0(.{5}|)[$&-]/0$+0/s};/$&/||$&%eg;!/1/&&do$0}A..E:exit!print
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.