To pytanie rozprzestrzenia się jak wirus w moim biurze. Istnieje wiele różnych podejść:
Wydrukuj następujące:
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
123456787654321
1234567654321
12345654321
123454321
1234321
12321
121
1
Odpowiedzi są punktowane w postaciach, przy czym mniej znaków jest lepszych.
code-golf
ascii-art
kolmogorov-complexity
Eric Wilson
źródło
źródło
Odpowiedzi:
J,
29 26 24 23 2221 znakówDzięki FUZxxl za
"+
podstęp (nie sądzę, żebym kiedykolwiek używału"v
, heh).Wyjaśnienie
źródło
"0]
pisać"+
.,.0(<#":)"+9-+/~|i:8
⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
APL (
3331)Jeśli dozwolone są spacje oddzielające liczby (jak we wpisie Mathematica), można je skrócić do
2826:Wyjaśnienie:
⍳9
: lista cyfr od 1 do 91↓⎕D
:⎕D
to ciąg „0123456789”,1↓
usuwa pierwszy element⍴∘(1↓⎕D)¨⍳9
: dla każdego elementu N z⍳9
, weź pierwsze N elementów z1↓⎕D
. Daje to listę: [„1”, „12”, „123”, ... „123456789”] jako ciągi znaków⌽¨
: odwróć każdy element tej listy. [„1”, „21”, „321” ...](Krótki program :)
⍳¨⍳9
: lista 1 do N dla N [1..9]. Daje to listę [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]] jako liczby.⌽∘⍕∘
: odwrotność reprezentacji ciągu każdej z tych list. [„1”, „2 1” ...]A←⌽↑
: tworzy macierz z listy list, dopełnia spacjami po prawej stronie, a następnie odwraca to. To daje górną ćwiartkę diamentu. Jest przechowywany w A.A←A,0 1↑⌽A
: A, z odwrotnością A minus jego pierwsza kolumna przymocowana po prawej stronie. To daje górną połowę prostokąta. To jest następnie ponownie przechowywane w A.A⍪1↓⊖A
:⊖A
jest lustrzanym odbiciem w pionie (daje dolną połowę),1↓
usuwa górny rząd dolnej połowy iA⍪
jest górną połową na górze1↓⊖A
.źródło
Clojure,
191179 bajtów-12 bajtów, zmieniając zewnętrzny
doseq
na aloop
, co pozwoliło mi się pozbyćatom
(yay).Podwójna pętla „for-loop”. Zewnętrzna pętla (
loop
) przechodzi nad każdym rzędem, podczas gdy wewnętrzna pętla (doseq
) przechodzi nad każdą liczbą w rzędzie, która jest w zakresie(concat (range 1 n) (range n 0 -1))
, gdzien
jest najwyższa liczba w rzędzie.Z powodu błędu w logice przy pierwszej próbie (zamiast tego przypadkowo wstawiłem spację przed każdym numerem) udało mi się uzyskać:
Nawet nie zignoruj oczywistego błędu, ale wyglądało fajnie.
źródło
Mathematica
83 49 43 5451Z 3 bajtami zaoszczędzonymi dzięki Kelly Lowder.
Analiza
Zasadniczą część kodu
Sum[DiamondMatrix[k, 17], {k, 0, 8}]
można sprawdzić na WolframAlpha .Poniżej pokazano podstawową logikę podejścia na mniejszą skalę.
źródło
f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
Table[9 - ManhattanDistance[{9, 10}, {j, k}], {j, 18}, {k, 18}] /. n_ /; n < 1 -> "" // Grid
Grid@#@#@9&[Table[#-Abs@k,{k,-8,8}]&]/.n_/;n<1->""
50 znaków.ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
Python 2,
72696761Nie sprytne:
źródło
s=`0x2bdc546291f4b1`
'L'
.C, 79 znaków
źródło
Python 2,
6059Nadużywa zwrotów i repunits.
źródło
in
słowie kluczowym można usunąć, podobnie jak w przypadkuprint
klawiatury.L
w środkowych siedmiu liniach wyjścia.GolfScript,
333130 znakówKolejne rozwiązanie GolfScript
Dziękuję @PeterTaylor za kolejny znak.
Poprzednie wersje:
( uruchom online )
źródło
17,{8-abs." "*10@-,1>.-1%1>n}%
Mathematica
5550454138źródło
JavaScript, 114
Mój pierwszy wpis w Codegolf!
Jeśli można to jeszcze bardziej skrócić, prosimy o komentarz :)
źródło
PHP,
9290 znakówOblicza i drukuje odległość Manhattanu od centrum. Drukuje spację, jeśli jest mniejsza niż 1.
Anonimowy użytkownik zaproponował następujące ulepszenie (84 znaków):
źródło
<?
pominiętymi na meta . Ponadto wydaje się, że masz problemy z kodowaniem w drugim kodzie.<?
tego bytecount. Wprowadziłem także inne ulepszenia.Common Lisp, 113 znaków
Najpierw zauważyłem, że elementy diamentu można wyrazić w następujący sposób:
itp.
x
rekurencyjnie oblicza podstawę (1, 11, 111 itd.), która jest kwadratowa, a następnie drukowana na środkuformat
. Aby liczby wzrosły do najwyższego terminu i ponownie spadły,(- 8 (abs (- n 8)))
unikałem drugiej pętliźródło
Węgiel (niekonkurujący), 13 bajtów
Nie konkuruje, ponieważ język jest (znacznie) nowszy niż pytanie.
Wypróbuj online!
W jaki sposób?
Rysuje na sobie dziewięć, kolejno mniejszych, koncentrycznych liczb-diamentów:
źródło
JavaScript, 81
źródło
PowerShell (2 opcje):
928445 bajtówWyjaśnienie:
1..8+9..1
lub1..9+8..1
generuje tablicę liczb całkowitych rosnących od 1 do 9, a następnie malejących z powrotem do 1.|%{
...}
potokuje tablicę liczb całkowitych wForEach-Object
pętli za pomocą wbudowanego aliasu%
.' '*(9-$_)+
odejmuje bieżącą liczbę całkowitą od 9, a następnie tworzy ciąg tych tylu spacji na początku wyniku dla tego wiersza.[int64]($x='1'*$_)*$x
definiuje$x
jako ciąg1
s, o ile bieżąca liczba całkowita jest duża. Następnie jest konwertowany na int64 (wymagany do poprawnego wyprowadzenia 111111111 2 bez użycia notacji E) i podniesiony do kwadratu.źródło
long
zamiastint64
1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
Vim,
623938 klawiszyDzięki @DJMcMayhem za oszczędność tony bajtów!
Moja pierwsza odpowiedź Vima, taka ekscytująca!
Próbowałem zapisać liczby za pomocą nagrania, ale jest to znacznie dłużej
Wypróbuj online!
Wyjaśnienie:
EDYTOWAĆ:
Użyłem
H
zamiastgg
i zapisałem 1 bajtźródło
ma
i zmienić`ai<space>
naI<space>
.APL (Dyalog Classic) ,
2019 bajtówWypróbuj online!
⎕d
są cyframi'0123456789'
1↓
upuść pierwszy ('0'
),⍨\
swap catenate scan, tj. odwrócone prefiksy'1' '21' '321' ... '987654321'
↑
wymieszać w matrycę wypełnioną spacjami:⌽
odwróć matrycę w poziomie(
...)⍣2
zrób to dwa razy:⍉⊢⍪1↓⊖
transpozycja (⍉
) samej macierzy (⊢
) połączonej pionowo (⍪
) z pionowo odwróconą macierzą (⊖
) bez jej pierwszego rzędu (1↓
)źródło
R, 71 znaków
Do dokumentacji:
źródło
message(rep(" ",9-i),s[c(1:i,i:1-1)])
for(i in s<-c(1:9,8:1))...
by uratować bajtk (
6450 znaków)Stara metoda:
źródło
(1+!9)#'"1"
jest,\9#"1"
CJam,
3127 bajtówCJam jest znacznie nowszy od tego wyzwania, więc ta odpowiedź nie kwalifikuje się do zaakceptowania. Było to jednak miłe, małe wyzwanie w sobotni wieczór. ;)
Sprawdź to tutaj.
Chodzi o to, aby najpierw utworzyć lewy górny kwadrant. Oto jak to działa:
Najpierw utwórz ciąg
" 123456789"
, używając8S*9,:)+
. Ten ciąg ma 17 znaków. Teraz powtarzamy ciąg 9 razy, a następnie dzielimy na podciągi o długości 9 za pomocą9/
. Niedopasowanie między 9 a 17 zrównoważy co drugi wiersz jeden znak w lewo. Drukując każdy podciąg na własnej linii otrzymujemy:Jeśli więc po prostu upuszczamy co drugi rząd (co wygodnie działa, robiąc
2%
), otrzymujemy jeden kwadrant zgodnie z potrzebami:Na koniec odbijamy to dwukrotnie, przenosząc siatkę pomiędzy, aby zapewnić, że dwie operacje odbicia będą przebiegać wzdłuż różnych osi. Samo odbicie lustrzane jest sprawiedliwe
Wreszcie, po prostu łączymy wszystkie linie z nowymi liniami, z
N*
.źródło
GolfScript, 36 znaków
Zakładając, że jest to wyzwanie polegające na kodzie golfowym , oto podstawowe rozwiązanie GolfScript:
źródło
Ruby, 76 znaków
Ulepszenia mile widziane. :)
źródło
f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
Befunge-93 , 155 znaków
Wypróbuj online!
Zdecydowanie można by go bardziej zagrać w golfa, ale to mój pierwszy program Funge i głowa już mnie boli. Ale dobrze się bawiłem
źródło
JavaScript, 170 bajtów
Mój pierwszy golf golfowy :)
Grał w golfa
Nie golfił
źródło
Perl
5654 znakówDodano 1 znak dla
-p
przełącznika.Używa kwadratowych powtórzeń do wygenerowania sekwencji.
źródło
Perl, 43 + 1
dodanie +1, dla
-E
którego jest wymaganesay
say$"x(9-$_).(1x$_)**2for 1..9,reverse 1..8
edycja: nieco skrócona
źródło
Python, 65
źródło
I=int;
do kodu i zastąpienie wszystkich kolejnych wystąpieńint
zI
int
, a 3 razy używany, więc oszczędza 6 znaków kosztem 6 znaków.Groovy
7775stara wersja:
źródło
each
zany
uratować dwa znaki.Scala - 86 znaków
źródło
JavaScript, 137
Z rekurencją:
Pierwszy raz na CG :)
Lub 118
Jeśli mogę znaleźć implementację JS, która działa
111111111**2
z większą precyzją.(Tutaj: 12345678987654320).
źródło