Wprowadzenie
W większości czcionek wszystkich wielkich liter alfabetu oprócz BDO
mają 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 C
dotyka górnego i dolnego prawego rogu (jest nieco zakrzywiony, ale wystarczająco blisko). L
dotyka tylko jego lewego górnego i prawego dolnego rogu pojedynczymi liniami. Lewy dolny róg L
to 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). 1
jest dla górnego lewego, 2
jest dla górnego prawego, 3
dolnego lewego, 4
dolnego 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 A
i prawy górny rogu C
połączenia oraz dolny prawy A
i lewy górny rogu X
połą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 ACEFGHIJKLMNPQRSTUVWXYZ
w 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
ACEFGHIJKLMNPQRSTUVWXYZ
spacje i znaki nowej linii.BDO
nie 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
Y
nie łą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 .
źródło
Odpowiedzi:
Pyth , 32
Wynik:
Połączenia dzięki modułowi sprawdzania @ githubphagocyte:
Łączy sztuczkę zerowego bajtu @ grc i niezwykle krótką składnię Pytha. Zrobiłem własną siatkę do diabła z tym.
Wyjaśnienie:
j
jest łączeniem łańcucha Pythona.d
jest przestrzeń.\0
jest 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.źródło
GolfScript (41 znaków)
Demo online
Wykres połączeń:
źródło
Python, 49
Przykład:
Myślę, że teraz łączy się prawidłowo, ale mogłem coś znowu przeoczyć.
źródło
F4
wygląda na związany zG1
, co jest nieprawidłoweCudowny
164158143Uż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.
Wynik:
Lepsze podejście Marbelous
135129Ta 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)
źródło
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
źródło
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.
Zaktualizuj to samo w Perlu. Długość nadal pozostaje 46:
źródło
HTML, 55
kod
wynik:
źródło
Bash + coreutils, 46
Teraz bezwstydnie pożyczam optymalne drzewo @ core1024 :
Wynik:
źródło
STATA 63
Edycja: teraz moje własne rozwiązanie. Powinny być wszystkie litery.
źródło
JavaScript 83
Zacznę od zakodowania TWEGO rozwiązania
źródło
alert
zamiastconsole.log
PHP, 69
daje
źródło
"/\w/",'\0 '