Napisz najkrótszy program, który drukuje tę sekcję graficzną ASCII sześciokątnego kafelka lub plastra miodu :
__
__/ \__
__/ \__/ \__
/ \__/ \__/ \
\__/ \__/ \__/
/ \__/ \__/ \
\__/ \__/ \__/
/ \__/ \__/ \
\__/ \__/ \__/
\__/ \__/
\__/
- Nie należy pobierać żadnych danych wejściowych.
- Wyjście na standardowe wyjście lub najbliższą alternatywę dla twojego języka.
- Zamiast programu możesz napisać nazwaną funkcję, która nie przyjmuje parametrów i drukuje wynik normalnie lub zwraca go jako ciąg znaków.
- Wyjście może mieć dowolną liczbę początkowych i / lub końcowych znaków nowej linii, a każda linia na wyjściu może mieć dowolną liczbę początkowych i / lub końcowych spacji (o ile wzór jest odpowiednio wyrównany).
- Najkrótszy kod w bajtach wygrywa.
code-golf
ascii-art
kolmogorov-complexity
tiling
hexagonal-grid
Hobby Calvina
źródło
źródło
Odpowiedzi:
CJam,
4543424140 bajtówWypróbuj online w interpretatorze CJam .
Jak to działa
powtarza wzór
\__/
38 razy i dzieli go na kawałki o długości 21 . Gdyby fragmenty były oddzielone liniami, byłby to wynik:To wyraźnie zawiera pożądany plaster miodu. Pozostaje tylko zamienić niektóre postacie na spacje, odciąć inne i wprowadzić linie.
generuje liczbę całkowitą 74 100 000 036 i konwertuje ją na tablicę [7 4 1 0 0 0 0 0 0 3 6] . Każdy element tablicy koduje liczbę wiodących znaków odpowiedniego wiersza, które należy zastąpić spacjami. Odejmując tę liczbę od 16 , otrzymujemy również prawidłową długość tej linii.
Ponieważ spacja ma niższy punkt kodowy niż inne znaki L, a wektoryzowane operatory pozostawiają nietknięte znaki dłuższego łańcucha, które nie odpowiadają jednemu z krótszych,
.e<
zastępuje pierwsze znaki D spacjami.źródło
Python 2, 73
Zobacz, jak działa.
Dla każdego z 11 rzędów wyjściowych oblicza liczbę spacji wiodących
k
jako maksymalnie trzy funkcje liniowe, które tworzą obwiednię lewej strony sześciokąta. Ponieważ linie ukośne mają nachylenie3
i-3
lepiej jest indeksować numer wiersza jakoi=0,3,...30
.Aby utworzyć siatkę sześciokątną, najpierw kafelkujemy wystarczającą ilość jednostki
'\__/ '
. Następnie przesunięcie[i:]
wyrównuje go o 3 dla nieparzystych wierszy. Na koniec bierzemy potrzebną jej część[k:16-k]
, pozostawiając marginesk
po lewej i prawej stronie.źródło
CJam,
655655 bajtówWypróbuj online w interpretatorze CJam .
Pomysł
Prawa połowa każdej linii to odwrócona kopia lewej połowy z zamienionymi ukośnikami i odwrotnymi ukośnikami. Dlatego wystarczy zakodować lewą połowę plastra miodu:
Zamiast analizować ten wzór linia po linii, możemy analizować go kolumna po kolumnie:
Pojawiają się oczywiste wzory:
_ _ _ _
występuje pięć razy./
następuje\
.Zastępując każdy
/\
,_
,_ _ _ _
i przestrzeń liczbę od 0 do 3, można konwersję powstałego tablicę z szeregu podstawy 4 do wyższej podstawy i przechowywania pełny wzór w sposób zwarty sposób.Kod
źródło
C,
148144140 bajtówZ białymi znakami, bez ostrzeżeń kompilatora, a przed poprawkami kodu, aby zaoszczędzić kilka bajtów:
To podejście nie wykorzystuje żadnych tabel znaków / ciągów. Zapętla wszystkie 187 (11 wierszy, 17 kolumn, w tym nowe wiersze) i decyduje, który znak wydrukować dla każdej pozycji, na podstawie kombinacji warunków.
Warunki obejmują test przebywania wewnątrz / na zewnątrz 4 narożników, przy użyciu 4 równań liniowych, z wynikiem zapisanym w zmiennej
p
. Reszta jest następnie w większości powtarzana co 6 znaków, a nieparzyste wiersze są przesuwane o 3 znaki w stosunku do parzystych.źródło
int
.k;f(r,c,d,p){for(;k<187;putchar(c>15?10:p&d<2&p?95:p&d<3?47:!p|d-5?32:92))r=k/17,c=k++%17,d=(5+c+r%2*3)%6,p=3*r+c-7<33u&3*r-c+8<33u;}
Rubin - 78 bajtów
Transkrypcja rozwiązania xnor (69 bajtów):
źródło
11.times
oszczędza 2 bajtyJavaScript (ES6), 129
130To czysty ciąg zamień / zamień / zamień ... nie wykorzystując żadnej właściwości geometrycznej.
Używając ciągów szablonów, wszystkie znaki nowej linii są znaczące i się liczą.
Uruchom snippet w przeglądarce Firefox, aby przetestować
źródło
PHP -
1391371071019187 bajtówNie wiem, czy to najlepszy sposób na grę w golfa, ale oto moja próba:
303646-50 bajtów dzięki Ismael MiguelSprawdź to online tutaj
stary kod:
źródło
<?
zamiast<?php
zapisać 3 bajty. Zamiast tego$c=$a.$a."/ \\\n\__".$a.$a."/\n";
możesz pisać$c="$a$a/ \\\n\__.$a$a/\n";
(ponieważ PHP rozwija zmienne w ciągach znaków). Możesz zastosować tę samą logikę wecho
celu dalszego skrócenia jego długości. Ponadto nie potrzebujesz tej przestrzeni międzyecho
łańcuchem a łańcuchem.\n
możesz wstawić prawdziwą nową linię i zapisać 1 bajt na linię.<?="\t __\n\t__",$a='/ \__',"\n __$a$a\n",$c="$a$a/ \\\n\__$a$a/\n","$c$c \__$a/\n\t \__/";
. Pamiętaj, aby zastąpić\t
znakiem tabulacji i\n
prawdziwą nową linią.Lua 146
(dodano nowe linie dla zachowania przejrzystości)
źródło
S
trzy razy.Dart - 113
Czyste rozwiązanie interpolacji łańcuchów, nic szczególnego. Operacje na łańcuchach, takie jak „substring”, są zbyt szczegółowe, aby konkurować w praktyce.
Uruchom go na DartPad .
źródło
JavaScript ( wersja robocza ES7 ),
969493 bajtyInspiracja zaczerpnięta z kilku rozwiązań tutaj ...
Edycja: -1 z edc65
Skomentowano:
źródło
.substr(+x+z,16-x-x)
->.slice(+x+z,16-x+z)
-1+x
zamiast po prostux
?x
na liczbę. Bez niego konkatenowałbyz
Python 3,
10087 bajtówI czytelna wersja kodu poniżej. Chodzi o to, aby zakodować interwały (początek, długość), a następnie wstawić odpowiednią ilość spacji, aby wyśrodkować interwał.
źródło
Siatkówka , 66 bajtów
Każda linia powinna przejść do własnego pliku i
<LF>
oznacza rzeczywistą nową linię w pliku. 1 bajt na dodatkowy plik dodany do liczby bajtów.Możesz uruchomić kod jako jeden plik z
-s
flagą, zachowując<LF>
znaczniki i być może zmieniając je na nowe wiersze na wyjściu, aby były czytelne, jeśli chcesz.Algorytm składa się z 5 prostych kroków zastępczych (zmiana nieparzystej linii na parzystą), zaczynając od pustego ciągu wejściowego. Wyniki po każdym kroku są (rozdzielone znakami
=
):źródło
JavaScript,
154151 bajtówźródło