Зробіть мені дерево алфавіту


14

Вступ

У більшості шрифтів усі великі літери алфавіту, крім того, BDOмають поодинокі рядки, які приблизно торкаються деяких чотирьох кутів обмежувального прямокутника символу:ACEFGHIJKLMNPQRSTUVWXYZ .

Наприклад, дві ніжки A"торкаються" нижнього лівого та правого нижнього кутів персонажа. Так само Cторкається її верхнього та нижнього правого кутів (він трохи вигнутий, але досить близький). Lторкається лише верхнього лівого та нижнього правого кутів поодинокими лініями. Лівий нижній кут L- це вершина, а не кінець одного рядка.

Ось таблиця того, які символи торкаються кутів відповідно до шрифту Stack Exchange, який я бачу (і, сподіваємось, ви). 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

Примітки

  • Ви можете жорстко кодувати своє рішення.
  • Ваш вихід повинен містити лише ACEFGHIJKLMNPQRSTUVWXYZпробіли та нові рядки. BDOне буде використовуватися.
  • Провідні / кінцеві місця проходять добре, якщо всі з'єднання розташовані правильно.
  • Вихідна сітка не повинна бути більше 30 на 30 символів (включаючи нові рядки та пробіли).
  • Розглядаються лише кутові з'єднання. Дно Yне підключається ні до чого. Потрібно використовувати кутові з'єднання з таблиці вище.
  • Не всі підключені куточки потрібно підключити до чогось. Куточки, що підключаються і які не підключаються, можуть межувати між собою.
  • Вихід у stdout. Введення немає.
  • Включення графіка підключення, зробленого з косою рисою, як це зробив Пітер Тейлор , є корисним дотиком, але не потрібно.

Оновлення:
githubhagocyte зробив перевірку дійсності дерева алфавіту на Github .


Ви можете жорстко кодувати своє рішення?
edc65

2
@ edc65 Ви можете жорстко закодувати своє рішення.
Захоплення Кальвіна

7
Смішно, як ці 2 фрази мають лише 1 різного характеру: P
Teun Pronk

1
@githubphagocyte, це було б краще як доповнення до питання, ніж як відповідь, враховуючи, що це не відповідь.
Пітер Тейлор

1
Хороший гольф, @ Calvin'sHobbies. Це дуже цікаво, щоб побачити відповіді.
Йорданія

Відповіді:


1

Піта , 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 

Поєднує нульовий байт-трюк @ grc та надзвичайно короткий синтаксис Pyth. Я зробив власну сітку для чорта.

Пояснення:

jє з'єднання рядків python. dце простір. \0є послідовністю відходу нульового байта. Це друк NOP при друкуванні, тому третій рядок має рівно два пробіли спереду. Також зауважте, що рядки можуть бути закінченими EOL в Pyth, а також цитатами.



11

Пітона, 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, що недійсне
Тимрій

@Timmy Але F2 підключений до A3. Це все схоже на мене.
Захоплення Кальвіна

@ Calvin'sHobbies Я думаю, що я неправильно зрозумів вимоги. Чи дозволяється мати сусідні кути, які не з'єднані між собою?
Тимрік

2
@Timmy Sure. Ці пари кутів просто не вважаються з’єднаними, але дві літери можуть бути з'єднані іншим способом.
Хобі Кальвіна

9

Marbelous 164 158 143

використовували дерево позначок, оскільки воно майже ідеально оптимізоване для 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

Кращий марбельський підхід 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, що буде відбуватися пізніше сьогодні.
суперактор

1
Використання мов або мовних функцій, які надають питання, вважається обманом.
Пітер Тейлор

4
@PeterTaylor На даний момент у цій відповіді використовуються лише функції, які були реалізовані, коли запитання було задано.
суперактор

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
Як би не шалений виклик кодегольфа, майже завжди є відповідь на випадок. Ви повинні любити це +1
Pharap

@AndoDaan Ні, це не буде. Я цим не користувався. Я зробив власний brainf * ck, як завжди. Я багато цього використовував і навчився більшості хитрощів, якими завжди користуюся під час написання BF, тому я не здивуюсь, якщо це виглядає симулятором.
Teun Pronk

Не синхронні, однакові. Обидві довжини 669 байт. Обидва використовують один і той же символ за методом символів (оптимізації взагалі немає), а також обидва ідентичні тому, куди йдуть усі плюсові, мінні та інші важливі символи.
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

Почну з жорсткого кодування ВАШЕ рішення

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
Марк Габріель

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

Ви можете голити два байти, замінивши свій регекс "/\w/",'\0 '
гекс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.