ทำให้ฉันเป็นต้นไม้ตัวอักษร


14

Intro

ในแบบอักษรที่ส่วนใหญ่ทั้งหมดของตัวละครตัวอักษรตัวพิมพ์ใหญ่นอกเหนือจากการมีสายเดียวประมาณสัมผัสบางส่วนของมุมทั้งสี่ของตัวละครวิ่งสี่เหลี่ยมผืนผ้า:BDOACEFGHIJKLMNPQRSTUVWXYZ

ตัวอย่างเช่นสองขาของA"แตะ" ที่มุมล่างซ้ายและขวาล่างของตัวละคร ในทำนองเดียวกันให้Cสัมผัสที่มุมด้านบนและด้านล่างขวา (มันโค้งเล็กน้อย แต่ใกล้พอ) Lเพียงสัมผัสมันเป็นมุมบนซ้ายและขวาล่างที่มีบรรทัดเดียว มุมซ้ายล่างของLคือจุดยอดไม่ใช่จุดสิ้นสุดของบรรทัดเดียว

นี่คือตารางของสิ่งที่ตัวละครสัมผัสมุมที่ตามตัวอักษรกองแลกเปลี่ยนฉัน (และหวังว่าคุณ) เห็น 1สำหรับซ้ายบน2คือซ้ายขวา3ล่างซ้าย4ล่างขวา

A: 3 4
C: 2 4
E: 2 4
F: 2 3
G: 2
H: 1 2 3 4
I: 1 2 3 4
J: 1 3
K: 1 2 3 4
L: 1 4
M: 3 4
N: 2 3
P: 3
Q: 4
R: 3 4
S: 2 3
T: 1 2
U: 1 2
V: 1 2
W: 1 2
X: 1 2 3 4
Y: 1 2
Z: 1 4

ติดตั้ง

ทำท่าเหมือนเส้นที่มุมสัมผัสเหล่านี้ขยายไปในทิศทางของมุมที่สัมผัสเพื่อให้การจัดเรียงอักขระเหล่านี้บนตารางสามารถ "เชื่อมต่อ" ได้

ตัวอย่างเช่นตัวละครทั้งหมดใน

 A
C X

มีการเชื่อมต่อเนื่องจากด้านล่างซ้ายAและขวาบนของการCเชื่อมต่อและด้านล่างขวาAและซ้ายบนของการXเชื่อมต่อ

อย่างไรก็ตาม

CAX

ไม่มีการเชื่อมต่อเนื่องจากการเชื่อมต่อจะเกิดขึ้นตามแนวทแยงมุมจากอักขระหนึ่งไปยังอีกตัวหนึ่งเท่านั้น

ท้าทาย

เขียนโปรแกรมที่สั้นที่สุดเท่าที่จะเป็นไปได้ (เป็นไบต์) ที่ส่งออกอักขระทั้งหมดในACEFGHIJKLMNPQRSTUVWXYZต้นไม้ใหญ่ที่เชื่อมต่อเต็มที่ตามกฎด้านบน ตัวละครแต่ละตัวจะต้องปรากฏอย่างแน่นอนหนึ่งครั้ง ใช้ช่องว่างสำหรับพื้นที่ว่าง

ตัวอย่าง

ทุกอย่างในต้นไม้ 23 ตัวนี้สามารถเข้าถึงได้จากสิ่งอื่นผ่านการเชื่อมต่อเส้นทแยงมุมที่กำหนดไว้ข้างต้น:

  Q
 A J   R
C U   S Y
 I M N
E H X
 F L T
G   Z K P
     V W

หมายเหตุ

  • คุณอาจ hardcode โซลูชันของคุณ
  • ผลลัพธ์ของคุณควรมีACEFGHIJKLMNPQRSTUVWXYZช่องว่างและขึ้นบรรทัดใหม่เท่านั้น BDOจะไม่ถูกใช้
  • ช่องว่างนำหน้า / ท้ายสุดนั้นใช้ได้ตราบใดที่การเชื่อมต่อทั้งหมดอยู่ในตำแหน่งที่เหมาะสม
  • ตารางผลลัพธ์ไม่ควรมีขนาดใหญ่กว่า 30 คูณ 30 ตัวอักษร (รวมถึงบรรทัดใหม่และช่องว่าง)
  • ถือว่าเชื่อมต่อมุมเท่านั้น ด้านล่างของYไม่เชื่อมต่อกับอะไร คุณต้องใช้การเชื่อมต่อมุมจากตารางด้านบน
  • ไม่ใช่ทุกมุมที่เชื่อมต่อได้จำเป็นต้องเชื่อมต่อกับบางสิ่ง มุมที่เชื่อมต่อได้และไม่สามารถเชื่อมต่อกันอาจเชื่อมต่อกัน
  • ส่งออกไปยัง stdout ไม่มีอินพุต
  • การรวมกราฟการเชื่อมต่อที่ทำด้วยเครื่องหมายสแลชอย่างที่Peter Taylorได้ทำไว้นั้นมีประโยชน์ แต่ไม่จำเป็นต้องมีการสัมผัส

ปรับปรุง:
githubhagocyte ได้ทำตรวจสอบความถูกต้องของตัวอักษรต้นไม้ไปบน Github


คุณอาจ hardcode โซลูชันของคุณ?
edc65

2
@ edc65 คุณสามารถเข้ารหัสโซลูชันของคุณได้ยาก
งานอดิเรกของ Calvin

7
ขำ ๆ ว่า 2 วลีเหล่านี้มีตัวละครที่ต่างกันเพียง 1 ตัว: P
Teun Pronk

1
@githubphagocyte ซึ่งจะดีกว่าเป็นภาคผนวกของคำถามมากกว่าเป็นคำตอบเนื่องจากไม่ใช่คำตอบ
Peter Taylor

1
Nice golf @ Calvin's งานอดิเรก หนึ่งนี้สนุกมากที่จะเห็นคำตอบสำหรับ
จอร์แดน

คำตอบ:


1

Pyth , 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

เอาท์พุท:

Q A P M F R L Z 
 U I N K S H X J 
  G T C V E W Y

การเชื่อมต่อขอบคุณตัวตรวจสอบของ @ githubphagocyte:

Q   A   P   M   F   R   L   Z   
 \ / \ /   / \ /   / \   \   \  
  U   I   N   K   S   H   X   J   
     / \ /   / \ /   / \ / \ /    
    G   T   C   V   E   W   Y 

รวมเคล็ดลับ null byte ของ grc @ และไวยากรณ์สั้นมากของ Pyth สร้างกริดของตัวเองเพื่อรับนรกของมัน

คำอธิบาย:

jกำลังเข้าร่วมสตริงของงูหลาม dเป็นพื้นที่ \0คือ escape sequence สำหรับ null null มันเป็น NOP เมื่อพิมพ์ดังนั้นบรรทัดที่สามมีช่องว่างด้านหน้าสองประการ นอกจากนี้โปรดทราบว่าสตริงสามารถยกเลิก EOL ใน Pyth ได้เช่นเดียวกับ quote-terminated



11

Python 49

print' '.join('  MQRCNAF\n XZHLKSIP\n\0GJWVUYET')

ตัวอย่าง:

>>> print' '.join('  MQRCNAF\n XZHLKSIP\n\0GJWVUYET')
    M Q R C N A F 
   X Z H L K S I P 
  G J W V U Y E T

ฉันคิดว่ามันเชื่อมต่ออย่างถูกต้องแล้ว แต่ฉันอาจพลาดบางสิ่งอีกครั้ง


F4ดูเหมือนว่าจะเชื่อมต่อกับG1ซึ่งไม่ถูกต้อง
Tymric

@Timmy But F2 เชื่อมต่อกับ A3 ทุกอย่างดูเชื่อมต่อกับฉัน
งานอดิเรกของ Calvin

@ งานอดิเรกของ Calvin ฉันคิดว่าฉันเข้าใจผิดเกี่ยวกับข้อกำหนด อนุญาตให้มีมุมที่อยู่ติดกันซึ่งไม่ได้เชื่อมต่อหรือไม่
Tymric

2
@ Timmy Sure มุมเหล่านั้นไม่นับรวมกัน แต่ตัวอักษรทั้งสองอาจเชื่อมต่อกันได้
งานอดิเรกของ Calvin

9

Marbelous 164 158 143

ที่ใช้ต้นไม้ bmarks'เพราะมันเพิ่มประสิทธิภาพเกือบจะสมบูรณ์แบบสำหรับMarbelous รหัสในกรณีนี้เป็นเพียงรหัส ascci สำหรับตัวละครทุกตัว (รวมถึงช่องว่างและบรรทัดใหม่) จากซ้ายไปขวาคั่นด้วยช่องว่าง

43 20 46 20 50 20 4D 20 51 20 52 20 45 20 41 14 20 58 20 48 20 4e 20 4C 20 4B 20 5A 20 49 20 53 14 47 20 59 20 56 20 20 20 55 20 4A 20 54 20 57

เอาท์พุท:

 C F P M Q R E A 
  X H N L K Z I S 
 G Y V   U J T W

วิธี Marbelous ที่ดีกว่า 135 129

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

57
54
4A
55
20
56
59
47
14
53
49
5A
4B
4C
4E
48
58
20
14
41
45
52
51
4D
50
46
43
Sp
Sp:
20 I0
.. =V

คำตอบนี้จะลดลงถึง 96 เมื่อไม่ต้องการช่องว่างระหว่างเซลล์สำหรับซอร์สโค้ด Marbelous อีกต่อไปซึ่งจะเป็นกรณีต่อไปในวันนี้
overactor

1
การใช้ภาษาหรือฟีเจอร์ภาษาที่โพสต์เดตคำถามถือเป็นการโกง
Peter Taylor

4
@PeterTaylor สำหรับตอนนี้คำตอบนี้ใช้เฉพาะคุณสมบัติที่นำมาใช้เมื่อคำถามถูกถาม
overactor

7

BrainF * ck 669

ทำสิ่งนี้เพื่อหัวเราะคิกคัก ส่งออกที่แน่นอนเช่นเดียวกับตัวอย่าง
จะให้โซลูชันอื่นในภายหลัง ไม่สามารถคิดวิธีที่ฉลาดในการทำเช่นนี้ในลัวะดังนั้นฉันจะยึดติดกับสิ่งนี้ :)

++++[->++++++++<]>..[-->+++++<]>+.>++++++++++.[->+++<]>++.[->++<]>+.-[-->+<]>.+++++[->++<]>.--[->++++<]>...>-[--->+<]>---.>++++++++++.+[->++++++<]>+.-[-->+<]>-.>-[--->+<]>.[----->++<]>--...>-[--->+<]>--.+[--->+<]>++++.--[->+++<]>-.[->+++<]>-.[->+++<]>++.++++[->++<]>+.-[->++++<]>.++++++[->++<]>+.-----[->++++<]>.[-->+++++<]>--.>++++++++++.[->+++++++<]>-.-[-->+<]>--.++++[->++<]>.[->++++<]>.[++++>---<]>.>++++++++++.[->+++<]>++.+++[->++<]>.[-->+<]>---.++++++[->++<]>.[-->+<]>------.>-[--->+<]>-.>++++++++++.[->+++++++<]>+.+[->++++<]>...--[->+++<]>.[--->+<]>++.--[-->+++++<]>.---[->++++<]>.[-->+++++<]>.>++++++++++.[->+++<]>++.....>+[--->++<]>.+[--->+<]>+++.---[->+++<]>.

เอาท์พุต

  Q
 A J   R
C U   S Y
 I M N
E H X
 F L T
G   Z K P
     V W

2
ไม่ว่าการท้าทาย codegolf จะบ้าแค่ไหนมันก็มีคำตอบที่ฉลาดเสมอ ต้องรักมัน +1
Pharap

@AndoDaan ไม่มันจะไม่ ฉันไม่ได้ใช้มัน ฉันสร้าง brainf * ck ของตัวเองเหมือนที่ฉันทำอยู่เสมอ ฉันใช้มันมากและเรียนรู้เทคนิคส่วนใหญ่ที่ฉันมักจะใช้เมื่อเขียน BF ดังนั้นฉันจะไม่แปลกใจถ้ามันดูคล้ายกัน
Teun Pronk

ไม่เหมือนกัน ความยาวทั้ง 669 ไบต์ ทั้งสองใช้ตัวละครเดียวกันโดยวิธีตัวละคร (ไม่มีการเพิ่มประสิทธิภาพเลย) และทั้งคู่ก็เหมือนกันกับสัญลักษณ์ plussy, miney และอื่น ๆ ทั้งหมด
AndoDaan

2
จะต้องเป็นเรื่องบังเอิญแล้ว ฉันเข้าร่วมเพื่อความสนุกของการท้าทายและฉันไม่เห็นความสนุกในการสร้าง BF วิธีเดียวที่อาจสนุกได้นิดหน่อยก็คือเมื่อคุณเขียนตัวสร้างขึ้นเอง
Teun Pronk

6

PHP 46

นี่เป็นเหมือนการแก้ปริศนามากกว่าการเขียนโปรแกรมดังนั้นคำตอบของฉันจึงเหมือนการไขปริศนามากกว่ารหัส อย่างไรก็ตามมันเป็นโปรแกรม PHP ที่ถูกต้องดังนั้นฉันจึงส่งมัน

C A Q S R P M J
 X Z I F K N H
G T U V W Y E L

อัปเดตเหมือนกันใน Perl ความยาวยังคงอยู่ 46:

print"CAQSRPMJ
 XZIFKNH
GTUVWYEL"=~s/\S/$& /rg

4

HTML, 55

รหัส

<pre>C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W

เอาท์พุท:

C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W


2

สถานะ 63

แก้ไข: ตอนนี้ทางออกของฉันเอง ควรเป็นตัวอักษรทั้งหมด

di 'C F P M Q R E A' di ' X H N L K Z I S' di 'G Y V   U J T W'

 C F P M Q R E A 
  X H N L K Z I S 
 G Y V   U J T W

1

Javascript 83

ฉันจะเริ่มต้นด้วย hardcoding โซลูชันของคุณ

console.log('  Q\n A J   R\nC U   S Y\n I M N\nE H X\n F L T\nG   Z K P\n     V W')

ทำให้สั้นลงalertแทนที่จะใช้console.log
Mark Gabriel

2
@ MarkGabriel ฉันต้องการทำให้สั้นลงอย่างชาญฉลาด การแจ้งเตือนไม่มีแบบอักษรที่ถูกต้องในการแสดงผล ASCII
edc65

1
ฉันเห็น. ลืมเกี่ยวกับการจัดรูปแบบของการแจ้งเตือนที่แตกต่างกัน :)
มาร์คกาเบรียล

1

PHP, 69

<?php echo preg_replace("/(\w)/",'\1 ',"CAQSRPMJ
 XZIFKNH
GTUVWYEL");

จะช่วยให้

C A Q S R P M J 
 X Z I F K N H 
G T U V W Y E L

คุณไม่มีการเชื่อมต่อในแนวทแยงเลยในเอาท์พุตของคุณ
edc65

@ MartinBüttner - ขอบคุณมันเสียค่าใช้จ่ายฉันเป็นไบต์ในการแก้ไข
ชัยชนะ

ปัญหากับการตอบสนองนี้ (และอื่น ๆ อีกมากมาย) คือการส่งออกสั้นกว่ารหัส (ดู core1024 php)
edc65

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