Сделай мне дерево алфавита

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ни к чему не подключается. Вы должны использовать угловые соединения из таблицы выше.
  • Не все соединяемые углы нужно подключать к чему-либо. Соединяемые и не соединяемые углы могут граничить друг с другом.
  • Вывод на стандартный вывод. Там нет ввода.
  • Включение графа связности, сделанного с косыми чертами, как это сделал Питер Тейлор , является полезным штрихом, но не обязательным.

Обновление:
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является escape-последовательностью для нулевого байта. Это NOP при печати, поэтому третья строка имеет ровно два пробела впереди. Также обратите внимание, что строки могут заканчиваться EOL в Pyth, а также заканчиваться кавычками.

isaacg
источник
12

GolfScript (41 символ)

'QZENRPMALHIFKSXJTUVWYGC'8/{' '*n' '+:n}/

Онлайн демо

График подключения:

Q   Z   E   N   R   P   M   A
 \   \   \ /   / \ /   / \ / \
  L   H   I   F   K   S   X   J
   \ / \ / \ /   / \ /   /   /
    T   U   V   W   Y   G   C
Питер Тейлор
источник
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

Я думаю, что теперь все правильно, но я, возможно, снова что-то пропустил.

GRC
источник
F4выглядит связано с G1, что является недействительным
Tymric
@Timmy Но F2 подключен к A3. Все это связано со мной.
Увлечения Кэлвина
@ Calvin'sHobbies Я думаю, что неправильно понял требования. Разрешено ли иметь смежные углы, которые не связаны?
Тимрик
2
@ Тимми Конечно. Эти пары углов просто не считаются связанными, но две буквы могут быть связаны другим способом.
Увлечения Кэлвина
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
overactor
источник
Этот ответ уменьшится до 96, когда для исходного кода Marbelous больше не будет пробелов между ячейками, что будет иметь место позже сегодня.
переигрыватель
1
Использование языков или языковых функций, которые устарели в вопросе, считается обманом.
Питер Тейлор
4
@PeterTaylor Пока что в этом ответе используются только те функции, которые были реализованы, когда был задан вопрос.
переиздание
7

BrainF * ск 669

Сделано это для хихиканья. Выводы точно такие же, как в примере.
Позже предоставим другое решение. Не могу придумать умного способа сделать это в Lua, поэтому я просто буду придерживаться этого :)

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

Выход

  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 Нет, не будет. Я не использовал это все же. Я сделал свой собственный мозг, как всегда. Я часто этим пользовался и изучал большинство приемов, которые всегда использую при написании BF, поэтому я не удивлюсь, если это будет выглядеть одинаково.
Теун Пронк
Не симуляция, идентичность. Оба 669 байтов в длину. Оба используют один и тот же символ за символом (без оптимизации вообще), а также оба идентичных с тем, куда идут все плюсовые, минные и прочие штучные символы.
AndoDaan
2
Должно быть совпадение тогда. Я участвую ради удовольствия в этом испытании и не вижу удовольствия от создания BF. Единственный способ, который даже может быть немного забавным, - это когда ты сам написал генератор.
Теун Пронк
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
core1024
источник
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
XEM
источник
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
bmarks
источник
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')
edc65
источник
короче alertвместоconsole.log
Марк Габриэль
2
@MarkGabriel Я бы хотел сделать его немного умнее. Alert не имеет правильного шрифта для отображения ascii art.
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 '
ATaco