Zrób mi drzewo alfabetu

14

Wprowadzenie

W większości czcionek wszystkich wielkich liter alfabetu oprócz BDOmają pojedyncze linie około dotyka niektóre z czterech narożnikach prostokąta bohatera okalającym: ACEFGHIJKLMNPQRSTUVWXYZ.

Na przykład dwie nogi A„dotyku” w lewym dolnym i prawym dolnym rogu znaku. Podobnie Cdotyka górnego i dolnego prawego rogu (jest nieco zakrzywiony, ale wystarczająco blisko). Ldotyka tylko jego lewego górnego i prawego dolnego rogu pojedynczymi liniami. Lewy dolny róg Lto wierzchołek, a nie koniec pojedynczej linii.

Oto tabela, które postacie dotykają, które rogi są zgodne z czcionką Stack Exchange, którą widzę (i mam nadzieję, że ty). 1jest dla górnego lewego, 2jest dla górnego prawego, 3dolnego lewego, 4dolnego prawego.

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

Ustawiać

Udawaj, że te dotykające narożników linie rozciągają się w kierunku rogu, który dotykają, aby układy tych znaków na siatce mogły zostać „połączone”.

Na przykład wszystkie znaki w

 A
C X

są połączone, ponieważ dolny lewy Ai prawy górny rogu Cpołączenia oraz dolny prawy Ai lewy górny rogu Xpołączenia.

Jednak,

CAX

nie ma połączeń, ponieważ połączenia występują tylko po przekątnej od jednego znaku do drugiego .

Wyzwanie

Napisz najkrótszy możliwy program (w bajtach), który wypisuje wszystkie znaki ACEFGHIJKLMNPQRSTUVWXYZw jednym dużym, w pełni połączonym drzewie, zgodnie z powyższymi regułami. Każda postać musi pojawić się dokładnie raz.Użyj spacji dla pustej przestrzeni.

Przykład

Do wszystkiego w tym 23-literowym drzewie można dotrzeć z dowolnego innego miejsca za pomocą ukośnych połączeń zdefiniowanych powyżej:

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

Notatki

  • Możesz na stałe zakodować swoje rozwiązanie.
  • Twój wynik powinien zawierać tylko ACEFGHIJKLMNPQRSTUVWXYZspacje i znaki nowej linii. BDOnie będzie używany.
  • Wiodące / końcowe spacje są w porządku, o ile wszystkie połączenia są odpowiednio ustawione.
  • Siatka wyjściowa nie powinna być większa niż 30 na 30 znaków (włączając znaki nowej linii i spacje).
  • Uwzględniane są tylko połączenia narożne. Dno Ynie łączy się z niczym. Musisz użyć połączeń narożnych z powyższej tabeli.
  • Nie wszystkie łączne rogi muszą się z czymś połączyć. Narożniki, które można podłączyć i których nie można połączyć, mogą się ze sobą łączyć.
  • Wyjście na standardowe wyjście. Brak danych wejściowych.
  • Dołączenie wykresu połączeń wykonanego ukośnikami, tak jak zrobił to Peter Taylor , jest pomocnym akcentem, ale nie jest wymagany.

Aktualizacja:
githubhagocyte wykonał funkcję sprawdzania poprawności drzewa alfabetu na Github .

Hobby Calvina
źródło
Możesz na stałe zakodować swoje rozwiązanie?
edc65,
2
@ edc65 Możesz zakodować swoje rozwiązanie na stałe.
Calvin's Hobbies,
7
Zabawne, że te 2 frazy mają tylko 1 inny znak: P
Teun Pronk
1
@githubphagocyte, byłoby lepiej jako uzupełnienie pytania niż jako odpowiedź, biorąc pod uwagę, że nie jest to odpowiedź.
Peter Taylor,
1
Miłego golfa, hobby @ Calvina. To jest świetna zabawa, aby zobaczyć odpowiedzi.
Jordan,

Odpowiedzi:

1

Pyth , 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

Wynik:

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

Połączenia dzięki modułowi sprawdzania @ githubphagocyte:

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

Łączy sztuczkę zerowego bajtu @ grc i niezwykle krótką składnię Pytha. Zrobiłem własną siatkę do diabła z tym.

Wyjaśnienie:

jjest łączeniem łańcucha Pythona. djest przestrzeń. \0jest sekwencją ucieczki bajtu zerowego. Po wydrukowaniu jest to NOP, więc trzecia linia ma dokładnie dwie spacje z przodu. Zauważ też, że ciągi mogą być zakończone EOL w Pyth, a także zakończone cudzysłowem.

isaacg
źródło
12

GolfScript (41 znaków)

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

Demo online

Wykres połączeń:

Q   Z   E   N   R   P   M   A
 \   \   \ /   / \ /   / \ / \
  L   H   I   F   K   S   X   J
   \ / \ / \ /   / \ /   /   /
    T   U   V   W   Y   G   C
Peter Taylor
źródło
11

Python, 49

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

Przykład:

>>> 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

Myślę, że teraz łączy się prawidłowo, ale mogłem coś znowu przeoczyć.

grc
źródło
F4wygląda na związany z G1, co jest nieprawidłowe
Tymric
@ Timmy But F2 jest podłączony do A3. Wszystko wygląda na związane ze mną.
Calvin's Hobbies
@ Calvin'sHobbies Myślę, że źle zrozumiałem wymagania. Czy dozwolone są sąsiednie rogi, które nie są połączone?
Tymric
2
@Timmy Sure. Te pary rogów po prostu nie liczą się jako połączone, ale dwie litery mogą być połączone w inny sposób.
Calvin's Hobbies
9

Cudowny 164 158 143

Używane drzewo bmarks' ponieważ niemal idealnie zoptymalizowany dla Marbelous . Kod w tym przypadku to tylko kody ascci dla wszystkich znaków (łącznie ze spacjami i znakami nowej linii) od lewej do prawej, oddzielone spacjami.

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

Wynik:

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

Lepsze podejście Marbelous 135 129

Ta wypisuje to samo drzewo z jedną dodatkową spacją przed i po każdej linii, działa poprzez podawanie literałów do podprogramu, który drukuje spację przed wydrukowaniem literału. I wystarczy wydrukować spację, jeśli literał jest spacją (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
źródło
Ta odpowiedź spadnie do 96, gdy spacje między komórkami nie są już wymagane dla kodu źródłowego Marbelous, co będzie miało miejsce dzisiaj.
overactor
1
Używanie języków lub funkcji językowych, które dodają datę do pytania, jest uważane za oszustwo.
Peter Taylor,
4
@PeterTaylor Na razie ta odpowiedź korzysta tylko z funkcji, które zostały zaimplementowane, gdy pytanie zostało zadane.
overactor
7

BrainF * ck 669

Zrobiłem to na chichoty. Wypisuje dokładnie to samo co w przykładzie.
Dostarczy później inne rozwiązanie. Nie mogę wymyślić sprytnego sposobu na zrobienie tego w Lua, więc pozostanę przy tym :)

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

Wynik

  Q
 A J   R
C U   S Y
 I M N
E H X
 F L T
G   Z K P
     V W
Teun Pronk
źródło
2
Bez względu na to, jak szalone jest wyzwanie dla codegolfa, prawie zawsze jest odlotowa odpowiedź. Uwielbiam to +1
Pharap,
@AndoDaan Nope nie byłoby. Jednak tego nie użyłem. Zrobiłem własny mózg * jak zawsze. Dużo tego używałem i nauczyłem się większości sztuczek, których zawsze używam podczas pisania BF, więc nie zdziwiłbym się, gdyby wyglądało to podobnie.
Teun Pronk
Nie simularne, identyczne. Długość obu 669 bajtów. Zarówno przy użyciu tej samej metody znak po znaku (bez optymalizacji), a także obie identyczne z tym, gdzie idą wszystkie symbole platynowe, moje i inne rzeczy.
AndoDaan,
2
To musi być przypadek. Uczestniczę dla zabawy z wyzwaniem i nie widzę przyjemności z generowania BF. Jedynym sposobem, który może być trochę zabawny, jest samodzielne napisanie generatora.
Teun Pronk
6

PHP 46

To było bardziej jak rozwiązywanie łamigłówek niż programowanie, więc moja odpowiedź bardziej przypomina rozwiązywanie łamigłówek niż kod. Jest to jednak poprawny program PHP, więc przesyłam go.

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

Zaktualizuj to samo w Perlu. Długość nadal pozostaje 46:

print"CAQSRPMJ
 XZIFKNH
GTUVWYEL"=~s/\S/$& /rg
rdzeń 1024
źródło
4

HTML, 55

kod

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

wynik:

C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W
Xem
źródło
3

Bash + coreutils, 46

sed 's/\S/ &/g'<<<"CAQSRPMJ
 XZIFKNH
GTUVWYEL"

Teraz bezwstydnie pożyczam optymalne drzewo @ core1024 :

Wynik:

$ ./alphatree.sh
 C A Q S R P M J
  X Z I F K N H
 G T U V W Y E L
$
Cyfrowa trauma
źródło
2

STATA 63

Edycja: teraz moje własne rozwiązanie. Powinny być wszystkie litery.

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
znaczniki
źródło
1

JavaScript 83

Zacznę od zakodowania TWEGO rozwiązania

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
źródło
skróć go alertzamiastconsole.log
Mark Gabriel
2
@MarkGabriel Chciałbym go skrócić w mądrzejszy sposób. Alert nie ma odpowiedniej czcionki do wyświetlenia grafiki ascii.
edc65,
1
Widzę. Zapomniałem, że formatowanie alertu jest inne. :)
Mark Gabriel
1

PHP, 69

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

daje

C A Q S R P M J 
 X Z I F K N H 
G T U V W Y E L
Zwycięstwo
źródło
Na wyjściu nie ma żadnych połączeń diagonalnych
edc65
@ MartinBüttner - dziękuję, naprawienie kosztowało mnie bajt.
Zwycięstwo
Problem z tą (i wieloma innymi) odpowiedziami polega na tym, że wynik jest krótszy niż kod (patrz core1024 php)
edc65
Możesz ogolić dwa bajty, zastępując wyrażenie regularne"/\w/",'\0 '
ATaco