Dzisiaj zrobimy sześciokąt ASCII. Musisz napisać program lub funkcję, która przyjmuje dodatnią liczbę całkowitą n i wyprowadza sześciokątną siatkę o rozmiarze n , złożoną z gwiazdek. Na przykład sześciokąt wielkości 2 wygląda następująco:
* *
* * *
* *
Podczas gdy sześciokąt wielkości 3 wygląda następująco:
* * *
* * * *
* * * * *
* * * *
* * *
Możesz użyć dowolnej z domyślnych metod wejścia i wyjścia , na przykład STDIO / STDOUT, argumentów funkcji i zwracanych wartości lub odczytu / zapisu pliku.
Możesz założyć, że dane wejściowe są zawsze prawidłowe, więc jeśli nie jest to dodatnia liczba całkowita, twój program może zrobić, co chcesz. Ci mają jednak trzeba obsłużyć szczególny przypadek rozmiar 1 sześciokąta, co dzieje się pojedyncza gwiazdka:
*
Wiodące i końcowe białe znaki są dozwolone, pod warunkiem, że wynik jest wizualnie taki sam.
Przykłady:
1:
*
2:
* *
* * *
* *
3:
* * *
* * * *
* * * * *
* * * *
* * *
4:
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *
5:
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
6:
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
12:
* * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * *
Jak zwykle jest to gra w golfa , więc obowiązują standardowe luki i powinieneś spróbować napisać możliwie najkrótszy program mierzony w bajtach. Oczywiście niektóre języki są z natury krótsze lub dłuższe niż inne, więc pamiętaj, że celem niekoniecznie jest uzyskanie najkrótszej ogólnej liczby bajtów, ale pokonanie zgłoszeń w tych samych lub podobnych językach.
Niech zwycięży najlepszy golfista!
źródło
Odpowiedzi:
Hexagony + Bash Coreutils, 0 + 3 + 8 = 11 bajtów
Obejmuje +3 za
-g
flagę i +8 za|tr . \*
niestandardowe wywołanie (zobacz ten meta post )Dane wejściowe są przekazywane jako argument do Hexagony. Po wywołaniu interpretera Sześciokąta z
-g N
opcją drukuje sześciokąt.
s. Następnie używamy tr, aby zastąpić je*
s.źródło
hexagony -g $1|tr . \*
założeniu, że interpreter heksagonu ma taką nazwę.ruby ./interpreter.rb -g 5|tr . \*
Python 2, 61 bajtów
Drukuje końcowe spacje na końcu każdej linii.
Dzięki Erikowi Outgolferowi za uratowanie bajtu.
źródło
int(input())
zamiastinput()
zwykłegoprint(' '*j+'* '*(2*n+~j))
zastępowaniaprint' '*j+'* '*(2*n+~j)
- fajny kod btw ;-)JavaScript (ES6), 77
81 84@Upvoters: nie przegap odpowiedzi autorstwa @ETHproductions, czyli 76 bajtów
Edytuj Zmieniono po zmianie specyfikacji, dozwolone końcowe miejsce
Tylko na czapkę ... hej! Nie ma kapelusza?
Test
źródło
Sześciokąt ,
918786 bajtówWypróbuj online!
W końcu to zrobiłem.
Początkowo (zanim zdam sobie sprawę z tego, jak drogie są pętle) spodziewam się, że może zmieścić się w boku o długości 5, ale teraz trudno jest dopasować go do boku o długości 6.
Aby to uzyskać, muszę trochę zmodyfikować kod liniowy. W rzeczywistości napisanie tego sprawia, że zdaję sobie sprawę z golfa kodu liniowego o
12 bajty.źródło
JavaScript (ES6),
7776 bajtówPowiedziałem sobie, że nie będę spał, dopóki nie ustanowię nowego rekordu ES6, nie patrząc na inne odpowiedzi, więc oto ...
Testowy fragment kodu
źródło
C,
91898074 bajtyPrawie poprawiłem, aby uzyskać prawidłowe formuły, a następnie zmiksowałem wszystko razem.
Zadzwoń
f
z numerem n , a wydrukuje sześciokąt na stdout.Niegolfowane i wyjaśnione (wersja 80-bajtowa):
Zobacz na żywo na Coliru
Uwagi:
printf
radzi sobie z dopełnieniem ujemnym, co powoduje wyrównanie do lewej strony z dopełnieniem po prawej stronie. Próbowałem więc czegoś takiego, abyw = printf("%*c*", y, ' ')
zajął się wartością bezwzględną i mogłem odzyskać ją z wartości zwracanej. Niestety zarówno szerokość wypełnienia zero, jak i jedna, same drukują znak, więc trzy linie środkowe były identyczne.Aktualizacja: Jasen znalazł sposób, aby to zrobić, drukując pusty ciąg zamiast znaku - wygolono 6 bajtów!
Znak cofania jest nieprawidłowo obsługiwany przez Coliru - wykonanie tego kodu na lokalnym terminalu usuwa początkowe odstępy w każdym wierszu.
źródło
w=printf("\n%*s",abs(y),"");++w<s*printf(" *");
05AB1E ,
1413 bajtówKod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
Galaretka , 24 bajty
Wypróbuj online!
Galaretka wstydzi się tego, że nie ma atomu centralizującego, więc została pobita przez 05AB1E i V. O odpowiednio 11 i 7 bajtów!
Jeśli znajdziesz jakiś sposób na grę w golfa, prosimy o komentarz. Każda pomoc jest mile widziana.
Objaśnienie :
Premia: Aby sprawdzić, ile gwiazdek jest w sześciokącie, użyj tego:
źródło
Oktawa,
6258 bajtówPoprzednia odpowiedź:
można to nazwać jako
Wypróbuj (wklej) w Octave Online
Na przykład obraz podstawowy
n=5
toktóre można utworzyć za pomocą
Że
dilation morphological operator
zastosowano 4 razy na obrazie stosując następujące maski sąsiada:które można utworzyć za pomocą
[k='01010'-48;~k;k]
wynik dylatacji:
następnie zamień 0 i 1 odpowiednio na „” i „*”
źródło
postgresql9.6, 290 bajtów
sformatowany sql jest tutaj:
wynik:
źródło
lpad
może być w stanie zaoszczędzić ci kilka bajtów. Nazwałbym też język pl / pgsql, ale to rodzi pytania o to, czy trzeba liczyćdo language plpgsql $$
i zamknięcie$$;
. Najlepiej byłoby, gdyby adresowano je na meta, jeśli wcześniej nie pojawiły się.DECLARE
s? Czy ani jeden nie działałby?V , 17 bajtów
Wypróbuj online!
Jak zwykle, tutaj jest zrzut heksowy, ponieważ zawiera on niedrukowalne znaki:
źródło
APL (Dyalog Unicode) ,
403635332725 bajtówZakłada
⎕IO←0
, tj. Indeksowanie od zera. Dane wyjściowe zawierają jedną spację wiodącą i jedną spację końcową w każdym wierszu.Ogromne podziękowania dla @FrownyFrog i @ngn za dużo gry w golfa.
Wypróbuj online!
Jak to działa
źródło
JavaScript (ES6),
8381 bajtówTo moja pierwsza odpowiedź (code golf). Mam nadzieję, że sformatowałem wszystko poprawnie.
W przeciwieństwie do 2 bieżących odpowiedzi ES6, nie wywołuję rekurencyjnie funkcji i używam konsoli do wyjścia.
źródło
alert
jeśli określisz js przeglądarki?alert
zredagował, ostrzegałby linia po linii, a nie całość.Haskell,
999779 bajtówObjaśnienie: Program ten opiera się na spostrzeżeniu, że każda linia n-Hexagon zawiera (nk) spacje, po których następują gwiazdki (n + k-1), dla niektórych k zależnych od numeru linii.
Edycja: Przełączono na mapM_. Nie wiedziałem, że jest dostępny bez użycia importu
źródło
Python 2 ,
100978988878179 bajtów-1 z @ Flp.Tkc
-6 ponownie od @Flp
-2 dzięki dzięki @ nedla2004. Próbowałem znaleźć sposób na pozbycie się drugiego plasterka, ale nie pomyślałem o tym :)
Wypróbuj online!
Tworzy tablicę dla górnej połowy, następnie dodaje tablicę odwróconą minus środkową linię, a następnie drukuje. Drukuje dokładnie tak, jak jest, poza
1
tym, że drukuje ze spacją wiodącą (wydaje mi się, że dozwolone jako a*
jest wizualnie takie samo jak*
z lub bez spacji wiodącej).źródło
Partia, 161 bajtów
Uwaga: Końcowe spacje w linii 2. Nie golf:
źródło
JavaScript (ES6), 83 bajty
źródło
Płótno , 9 bajtów
Wypróbuj tutaj!
Pokonanie wbudowanego: D
Wyjaśnienie:
Nie mam pojęcia, dlaczego jest to duża wyściółka, ale jest to dozwolone i naprawię to wkrótce ™.naprawiony? Mam nadzieję, że nic nie zepsułemźródło
Perl 6 , 49 bajtów
Wypróbuj online!
Jak to działa
źródło
PowerShell,
91897868635248 bajtówSkrypt testowy:
Wyjście (dodatkowa spacja):
Wyjaśnienie:
źródło
gu
.PHP,
8379 bajtówUruchom jako potok z
-nR
lub spróbuj online .Jest to bliskie odpowiedzi Kodos ; ale
str_pad
jest krótszy niżstr_repeat
nawet podczas gry w golfa.A
++
w głowie pętla oszczędza trochę więcej.źródło
Rubinowy, 54 bajty
Funkcja lambda przyjmuje n jako argument i zwraca ciąg oddzielony znakami nowej linii. (
$/
jest zmienną zawierającą domyślny separator linii).w programie testowym
źródło
puts
) Do liczby znaków. Ale ponowne odczytanie definicji mówi tylko, że twoja funkcja powinna „wypisać” wynik, który można odczytać jako „zwrócenie” wyniku. Fajne rozwiązanie.Charly, 125 bajtów
Strona Charly GitHub: https://github.com/KCreate/charly-lang
źródło
SmileBASIC, 74 bajty
Dodaje wiodące i końcowe miejsce.
Te „sześciokąty” wyglądają okropnie, gdy postacie mają tę samą szerokość i wysokość ...
źródło
rakieta / program
testowanie:
źródło
Python 2, 111 bajtów
Nudna, prosta implementacja (i pełny program). Zwraca końcowe białe znaki w każdej linii.
Przypadki testowe:
źródło
JavaScript (ES6), 143 bajty
Nareszcie jest przerwa świąteczna (wesołych świąt!), Więc mam trochę czasu na grę w golfa.
A chłopcze minęło trochę czasu - stąd duża liczba bajtów.
Tutaj idzie:
źródło
for(j=c.length-2;j>-1;j--)c.push(c[j])
można napisać jakfor(j=a-1;j;c.push(c[--j]))
ifor(i=0;i<a;i++){c.push(" ".repeat(a-i-1)+"* ".repeat(i+a-1)+"*")}
możnafor(i=0;i<a;c.push(" ".repeat(a-i-1)+"* ".repeat(a-1+i++));
. Instrukcja return może zostać skrócona doreturn a-1?c.join
\ n:"*"
W sumie zmiany te zapisują 18B (11 + 7 + 1).Java,
157149129127 bajtówWypróbuj online!
źródło
String#repeat(int)
, ale TIO to wciąż JDK 10, stąd emulowanarepeat(String,int)
metoda (z tą samą liczbą bajtów). Rzeczywisty kod w Javie 11 to:s->{for(int j=~--s,t;++j<=s;System.out.println(" ".repeat(t)+"* ".repeat(s-~s-t)))t=j<0?-j:j;}
Sześciokąt (liniowy),
128127126 bajtówZauważ, że to nie jest heksagonia, tylko (meta-) język Timwi obsługiwany w Esoteric IDE, więc nie kwalifikuje się do nagrody.
Można to jednak przekonwertować na rozwiązanie sześciokątne
(i myślę, że będzie mniejsze niż to rozwiązanie), mogę to zrobić później.Potrzebujęwięcej wysiłku, żeby to tutaj zrobić .Inicjał
❢
zajmuje 3 bajty (e2 9d a2
). Każda nowa linia zajmuje 1 bajt (0a
).Nie Wypróbuj online! Działa to tylko w Esoteric IDE.
Kod z adnotacjami:
źródło
Japt
-R
,1110 bajtówWypróbuj (lub użyj TIO, aby uruchomić wiele testów)
Wyjaśnienie
źródło