이 다이아몬드를 인쇄


76

이 질문은 내 사무실에서 바이러스처럼 확산되었습니다. 매우 다양한 접근 방식이 있습니다.

다음을 인쇄하십시오.

        1
       121
      12321
     1234321
    123454321
   12345654321
  1234567654321
 123456787654321
12345678987654321
 123456787654321
  1234567654321
   12345654321
    123454321
     1234321
      12321
       121
        1

문자 수가 적을수록 좋은 점수를받습니다.


4
이기는 기준은 무엇입니까? 그리고 이것은 도전이나 골프입니까?
Paul R

21
"kolmogorov-complexity"를 "code-golf"로 읽습니다.
DavidC

1
@DavidCarraher "kolmogorov-complexity"는 질문을받은 후에 편집되었습니다. 원래의 질문자는 아직 수상 기준을 지정하지 않았습니다.
Gareth

@Gareth "kolmogorov-complexity"태그가 추가 된 후 "code-golf"태그가 추가되기 전에 저의 의견이있었습니다. 당시 사람들은 여전히 ​​코드 골프 문제인지 묻고있었습니다.
DavidC

3
perlmonks.com/?node_id=891559 에는 perl 솔루션이 있습니다.
b_jonas 2009 년

답변:


24

J, 29 26 24 23 22 21 자

,.(0&<#":)"+9-+/~|i:8

트릭을 위한 FUZxxl 덕분에 "+(나는 이전에 사용한 적이 없다고 생각합니다 u"v).

설명

                  i:8  "steps" vector: _8 _7 _6 ... _1 0 1 ... 7 8
                 |     magnitude
              +/~      outer product using +
            9-         inverts the diamond so that 9 is in the center
  (      )"+           for each digit:
      #                  copy
   0&<                   if positive then 1 else 0
       ":                copies of the string representation of the digit
                         (in other words: filter out the strictly positive
                          digits, implicitly padding with spaces)
,.                     ravel each item of the result of the above
                       (necessary because the result after `#` turns each
                        scalar digit into a vector string)

대신을 "0]쓰십시오 "+.
FUZxxl

덜 적은 문자를 보려면,.0(<#":)"+9-+/~|i:8
FUZxxl

1
다음은 APL 25 자로 번역 된 솔루션입니다.⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
FUZxxl

25

APL ( 33 31)

A⍪1↓⊖A←A,0 1↓⌽A←⌽↑⌽¨⍴∘(1↓⎕D)¨⍳9

숫자를 구분하는 공백이 허용되면 (Mathematica 항목에서와 같이) 28 26 으로 단축 될 수 있습니다 .

A⍪1↓⊖A←A,0 1↓⌽A←⌽↑⌽∘⍕∘⍳¨⍳9

설명:

  • (긴 프로그램 :)
  • ⍳9: 1에서 9까지의 숫자 목록
  • 1↓⎕D: ⎕D는 문자열 '0123456789'이며 1↓첫 번째 요소를 제거합니다.
  • ⍴∘(1↓⎕D)¨⍳9:의 각 요소 N에 ⍳9대해에서 첫 번째 N 요소를 가져옵니다 1↓⎕D. [ "1", "12", "123", ... "123456789"] 목록을 문자열로 제공합니다.
  • ⌽¨:이 목록의 각 요소를 반대로 바꿉니다. [ "1", "21", "321"...]

  • (짧은 프로그램 :)

  • ⍳¨⍳9: N에 대한 1부터 N까지의 목록 [1..9]. 그러면 [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]]가 숫자로 표시됩니다.
  • ⌽∘⍕∘: 이러한 각 목록의 문자열 표현의 반대입니다. [ "1", "2 1"...]
  • (지금부터 동일)
  • A←⌽↑: 목록의 목록에서 행렬을 만들고 오른쪽에 공백을 채워 넣은 다음 그 반대로합니다. 이것은 다이아몬드의 상한 사분면을 제공합니다. A에 저장됩니다.
  • A←A,0 1↑⌽A: A, A의 첫 번째 열에서 오른쪽에 연결된 첫 번째 열. 사각형의 위쪽 절반이 나타납니다. 그런 다음 A에 다시 저장됩니다.
  • A⍪1↓⊖A: ⊖Ais 세로로 미러링되고 (하반신 제공) 하반신 1↓의 맨 위 행을 제거하고 상단의 맨 A⍪위입니다 1↓⊖A.

5
+1 놀라운. APL 문맹을 위해 번역 해 주시겠습니까?
DavidC

3
ASCII가 아닌 코드를 코드 포인트 대신 UTF-8로 계산해서는 안됩니까? 이것은 APL을 그의 지상 친척들에게 더 가까이 밀게 할 것이다.
John Dvorak

5
@JanDvorak 아니요 . APL 코드 페이지가 있기 때문에 전체 문자 세트를 단일 바이트에 맞 춥니 다. 그러나 나는 당신이 아마 2013 년 이후 어느 시점에서 이것을 알아 낸 것으로 생각합니다.;)
Martin Ender

23

Clojure의, 191 179 바이트

#(loop[[r & s](range 18)h 1](print(apply str(repeat(if(< r 8)(- 8 r)(- r 8))\ )))(doseq[m(concat(range 1 h)(range h 0 -1))](print m))(println)(if s(recur s((if(< r 8)inc dec)h))))

outer doseq를 a 로 변경하여 -12 바이트로 loop, atom(yay)를 제거 할 수있었습니다 .

이중 "for-loop". 외부 루프 ( loop내부 루프 (하면서), 각 행으로 진행한다 doseq)의 범위에있는 행의 각 숫자를 넘어 (concat (range 1 n) (range n 0 -1)), n행의 최대 수이다.

(defn diamond []
  (let [spaces #(apply str (repeat % " "))] ; Shortcut function that produces % many spaces
    (loop [[row-n & r-rows] (range 18) ; Deconstruct the row number from the range
           high-n 1] ; Keep track of the highest number that should appear in the row
      (let [top? (< row-n 8) ; Are we on the top of the diamond?
            f (if top? inc dec) ; Decided if we should increment or decrement
            n-spaces (if top? (- 8 row-n) (- row-n 8))] ; Calculate how many prefix-spaces to print
        (print (spaces n-spaces)) ; Print prefix-spaces
        (doseq [m (concat (range 1 high-n) (range high-n 0 -1))] ; Loop over the row of numbers
          (print m)) ; Print the number
        (println)

        (if r-rows
          (recur r-rows (f high-n)))))))

첫 번째 시도에서 논리의 버그로 인해 (실수로 각 숫자 사이에 접두사 공백을 삽입하는 경우) 다음과 같은 결과를 얻었습니다.

1
1       2       1
1      2      3      2      1
1     2     3     4     3     2     1
1    2    3    4    5    4    3    2    1
1   2   3   4   5   6   5   4   3   2   1
1  2  3  4  5  6  7  6  5  4  3  2  1
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
12345678987654321
1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1
1  2  3  4  5  6  7  8  9  8  7  6  5  4  3  2  1
1   2   3   4   5   6   7   8   7   6   5   4   3   2   1
1    2    3    4    5    6    7    6    5    4    3    2    1
1     2     3     4     5     6     5     4     3     2     1
1      2      3      4      5      4      3      2      1
1       2       3       4       3       2       1
1        2        3        2        1
1         2         1

명백한 버그를 무시해도 문제는 없지만 멋져 보였습니다.


20

매스 매 티카 83 49 43 54 51

Print@@#&/@(Sum[k~DiamondMatrix~17,{k,0,8}]/.0->" ")

서식 개선


Kelly Lowder 덕분에 3 바이트가 절약되었습니다.

분석

코드의 주요 부분은 WolframAlpha에서Sum[DiamondMatrix[k, 17], {k, 0, 8}] 확인할 수 있습니다 .

다음은 접근 방식의 기본 논리를 소규모로 보여줍니다.

a = 0~DiamondMatrix~5;
b = 1~DiamondMatrix~5;
c = 2~DiamondMatrix~5;
d = a + b + c;
e = d /. 0 -> "";
Grid /@ {a, b, c, d, e}

그리드


1
데이빗, 이번엔 날 이겼어! :-)
Mr.Wizard

1
또 다른 시도 (55 문자) :f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
DavidC

또 다른 (71 문자) :Table[9 - ManhattanDistance[{9, 10}, {j, k}], {j, 18}, {k, 18}] /. n_ /; n < 1 -> "" // Grid
DavidC

2
Grid@#@#@9&[Table[#-Abs@k,{k,-8,8}]&]/.n_/;n<1->""50 자
chyanog

코드의 시각적 표시 :ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
DavidC

15

파이썬 2, 72 69 67 61

영리하지 않다 :

s=str(111111111**2)
for i in map(int,s):print'%8s'%s[:i-1]+s[-i:]

1
파이썬 3 이상에서는 작동하지 않습니다. 인자를 인쇄하기 위해 인자를 사용해야합니다. (
Griffin

7
@Griffin : 코드 골프에서는 함수가되기 위해 인쇄가 필요한지 여부에 따라 Python 2 또는 Python 3을 선택합니다.
Steven Rumbalski

3
s=`0x2bdc546291f4b1`
gnibbler

1
@gnibbler. 매우 영리한 제안. 불행하게도, 그 16 진수의 repr에는 후행이 포함됩니다 'L'.
Steven Rumbalski

1
@gnibbler : 이것은 64 비트 플랫폼에서 실행되지만 32 비트 플랫폼에서는 실행되지 않는 Python에서 작동합니다.
Konrad Borowski

14

C, 79 자

v;main(i){for(;i<307;putchar(i++%18?v>8?32:57-v:10))v=abs(i%18-9)+abs(i/18-8);}

4
설명해주세요
Lucas Henrique

1
@LucasHenrique 총 307 자입니다. i % 18-9는 y 축에서 자신을 미러링하는 직교 평면의 x 값입니다. i / 18-8은 x 축에서 직교 평면 미러링 자체의 y 값입니다. 1 : 1 대각선을 얻기 위해 그것들을 합칩니다 (1 : 1 다이아몬드에 숫자 이동이 발생합니다. (32:57) -v는 ASCII 0-9에 대한 고유 숫자 값입니다. 10 개행
Albert Renshaw

14

파이썬 2, 60 59

for n in`111111111**2`:print`int('1'*int(n))**2`.center(17)

백틱과 남용을 남용합니다.


키보드 in와 마찬가지로 키워드 뒤 공백 도 제거 할 수 있습니다 print.
Konrad Borowski

@GlitchMr : 감사합니다! 업데이트되었습니다.
nneonneo

나는 L중간 7 줄의 출력에 여분 을 얻습니다 .
Steven Rumbalski

어떤 버전의 Python을 사용하고 있지 않아야합니까?
nneonneo

12

GolfScript, 33 31 30 자

다른 GolfScript 솔루션

17,{8-abs." "*10@-,1>.-1%1>n}%

다른 문자 를 위해 @PeterTaylor 에게 감사합니다 .

Previos 버전 :

17,{8-abs" "*9,{)+}/9<.-1%1>+}%n*

( 온라인으로 실행 )

17,{8-abs" "*9,{)+}/9<.-1%1>n}%

1
후행 공백이 필요하지 않으므로 (질문의 텍스트에 공백이 필요하지 않음) 공백에 숫자 추가를 건너 뛰고 한 문자를 다음과 같이 저장할 수 있습니다.17,{8-abs." "*10@-,1>.-1%1>n}%
Peter Taylor

12

매스 매 티카 55 50 45 41 38

(10^{9-Abs@Range[-8,8]}-1)^2/81//Grid

Grid[(10^Array[{9}-Abs[#-9]&,17]-1)^2/81]

Mathematica 그래픽


1
아주 좋은 일입니다.
DavidC

@DavidCarraher 감사합니다 : D
chyanog

나는 다윗의 말을 반향한다. 이걸 어떻게 생각 해냈어?
Mr.Wizard

내가 쓴 짧은 수정으로 답변을 업데이트해도 될까요?
Mr.Wizard

@ 미스터 마법사.
chyanog

10

자바 스크립트, 114

Codegolf에 대한 첫 출품!

for(l=n=1;l<18;n-=2*(++l>9)-1,console.log(s+z)){for(x=n,s="";x<9;x++)z=s+=" ";for(x=v=1;x<2*n;v-=2*(++x>n)-1)s+=v}

이것이 더 짧아 질 수 있다면 의견을 주시기 바랍니다 :)


젠장! 나는 공간을 놓치고 반 다이아몬드를 만들었다. 나는 지금 자야한다
Joomler

9

PHP, 92 90 자

<?for($a=-8;$a<9;$a++){for($b=-8;$b<9;){$c=abs($a)+abs($b++);echo$c>8?" ":9-$c;}echo"\n";}

중심으로부터 위치의 맨해튼 거리를 계산하고 인쇄합니다. 1보다 작 으면 공백을 인쇄합니다.

익명 사용자가 다음과 같은 개선 (84 자)을 제안했습니다.

<?for($a=-8;$a<9;$a++,print~õ)for($b=-8;$b<9;print$c>8?~ß:9-$c)$c=abs($a)+abs($b++);

두 번째는 작동하지 않습니다.
Christian

나는 그것이 늦다는 것을 알고 있지만, PHP 스크립트를 볼 때 항상 골프를해야합니다. 83 바이트 로는 <?당 스킵 메타 . 또한 두 번째 코드에서 인코딩 문제가있는 것 같습니다.
RedClover

@Soaku 두 번째는 내 것이 아닙니다. 익명의 사용자가 내 답변을 수정 한 것으로 제안되었습니다. 방금 확인하지 않고 추가했습니다. 사용자가 왜 자신의 시도로 게시하지 않은지 확실하지 않습니다. 메타 질문은이 답변에 거의 3 년이 걸린다.
Gareth

나는 <?바이트 수에 포함시키지 않는다는 것을 의미했다 . 다른 개선 사항도 있습니다.
RedClover

8

일반적인 Lisp, 113 자

(defun x(n)(if(= n 0)1(+(expt 10 n)(x(1- n)))))(dotimes(n 17)(format t"~17:@<~d~>~%"(expt(x(- 8(abs(- n 8))))2)))

먼저 다이아몬드의 요소가 다음과 같이 표현 될 수 있음을 알았습니다.

  1   =   1 ^ 2
 121  =  11 ^ 2
12321 = 111 ^ 2

기타

x재귀 적으로 제곱 된 밑 (1, 11, 111 등)을 계산 한 다음 중앙에 인쇄합니다 format. 숫자를 가장 높은 항으로 올리고 다시 내리 (- 8 (abs (- n 8)))려면 두 번째 루프를 피하는 데 사용 했습니다.


8

(비경쟁), 13 바이트

언어가 질문보다 훨씬 더 새롭기 때문에 경쟁하지 않습니다.

F⁹«GX⁻⁹ιI⁺ι¹→

온라인으로 사용해보십시오!

어떻게?

서로 위에 9 개의 연속적으로 작은 동심원 숫자 다이아몬드를 그립니다.

F⁹«   Loop ι from 0 to 8:
GX     Draw a (filled) polygon with four equilateral diagonal sides
⁻⁹ι      of length 9-ι
I⁺ι¹    using str(ι+1) as the character
→       Move right one space before drawing the next one

4
이것은 메타에 대한 새로운 합의 에 따라 경쟁해야합니다 .
officialaimm

7

자바 스크립트, 81

for(i=9;--i+9;console.log(s))for(j=9;j;s=j--^9?k>0?k+s+k:" "+s:k+"")k=i<0?j+i:j-i

6

PowerShell (2 옵션) : 92 84 45 바이트

1..8+9..1|%{' '*(9-$_)+[int64]($x='1'*$_)*$x}
1..9+8..1|%{' '*(9-$_)+[int64]($x='1'*$_)*$x}

1 ^ 2,11 ^ 2,111 ^ 2를 사용하는 힌트 를 얻은 Strigoides 에게 감사드립니다 .


다음과 같은 방법으로 일부 캐릭터를 면도했습니다.

  • 제거 $w.
  • $x처음 사용하는 대신 정의를 중첩했습니다 .
  • Rynant의 솔루션 에서 힌트를 얻었습니다 .
    • 정수 배열을 +대신 ,사용하여 배열 주위의 괄호를 제거하고 루프의 중첩 계층을 제거 할 수 있습니다.
    • 9-$_더 복잡한 수학 및 객체 방법 대신 필요한 공간의 길이를 계산하는 데 사용 됩니다. 이것은 또한의 필요성을 제거했다 $y.

설명:

1..8+9..1또는 1..9+8..11에서 9까지 오름차순으로 1에서 내림차순으로 정수 배열을 생성합니다.

|%{... 내장 별칭을 통해 }정수 배열을 ForEach-Object루프 로 파이프합니다 %.

' '*(9-$_)+ 9에서 현재 정수를 뺀 다음이 줄의 출력 시작 부분에 많은 공간의 문자열을 만듭니다.

[int64]($x='1'*$_)*$x현재 정수가 크면 s $x문자열로 정의합니다 1. 그런 다음 int64로 변환되고 ( E 표기법을 사용하지 않고 111111111 2 를 올바르게 출력해야 함 ) 제곱됩니다.

여기에 이미지 설명을 입력하십시오


1
long대신 에 캐스팅하여 바이트를 절약 할 수 있습니다int64
Veskah

바이트를 절약하는 또 다른 방법1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
mazzy

5

Vim, 62 39 38 키 입력

많은 바이트를 절약 한 @DJMcMayhem에게 감사합니다!

나의 첫번째 Vim 답변, 너무 신나!

i12345678987654321<ESC>qqYP9|xxI <ESC>YGpHq7@q

녹음을 통해 숫자를 쓰려고했지만 훨씬 길다

온라인으로 사용해보십시오!

설명:

i123 ... 321<ESC>                   Write this in insert mode and enter normal mode
qq                                  Start recording into register q
  YP                                Yank this entire line and Paste above
    9|                              Go to the 9th column
      xx                            Delete character under cursor twice
        I <ESC>                     Go to the beginning of the line and insert a space and enter normal mode
               Y                    Yank this entire line
                G                   Go to the last line
                 p                  Paste in the line below
                  H                 Go to the first line
                   q                End recording
                    7@q             Repeat this 7 times

편집하다:

H대신 gg1 바이트를 사용 하고 저장했습니다.


당신은 삭제할 수 있습니다 ma변경 `ai<space>I<space>.
DJMcMayhem

위 붙여 무대 1을 변경하는 경우 또한, 당신은 아마 3 단계를 삭제할 수 아래.
DJMcMayhem

@DJMcMayhem 제안 해 주셔서 감사합니다! 필자는 처음에 복사 된 비트에 대한 새로운 레지스터를 도입하려고 생각했지만 훨씬 짧습니다!
Kritixi Lithos

5

APL (Dyalog Classic) , 20 19 바이트

(⍉⊢⍪1↓⊖)⍣2⌽↑,⍨\1↓⎕d

온라인으로 사용해보십시오!

⎕d 자릿수 '0123456789'

1↓첫 번째 드롭 ( '0')

,⍨\ 교체 된 catenate 스캔, 즉 반전 된 접두사 '1' '21' '321' ... '987654321'

공백으로 채워진 행렬로 혼합하십시오.

1
21
321
...
987654321

행렬을 가로로 뒤집다

(... )⍣2이 작업을 두 번 수행하십시오.

⍉⊢⍪1↓⊖행렬 자체 의 조옮김 ( )은 첫 번째 행 ( ) 없이 수직 반전 된 행렬 ( ) 과 수직으로 연결 ( )1↓


4

R, 71 자

기록을 위해 :

s=c(1:9,8:1);for(i in s)cat(rep(" ",9-i),s[0:i],s[(i-1):0],"\n",sep="")

+1 – 다음과 함께 비용을 절약 할 수 있습니다message(rep(" ",9-i),s[c(1:i,i:1-1)])
flodel

@flodel 당신은 stderr로 출력한다는 점에 주목해야 for(i in s<-c(1:9,8:1))...하며 바이트를 절약 할 수도 있습니다
Giuseppe


4

k ( 64 50 자)

-1'(::;1_|:)@\:((|!9)#'" "),'$i*i:"J"$(1+!9)#'"1";

오래된 방법 :

-1',/(::;1_|:)@\:((|!9)#\:" "),',/'+(::;1_'|:')@\:i#\:,/$i:1+!9;


(1+!9)#'"1"입니다,\9#"1"
NGN

4

CJam, 31 27 바이트

CJam은이 도전보다 훨씬 새로운 것이므로이 답변을 수락 할 수 없습니다. 그러나 이것은 토요일 저녁의 작은 도전이었습니다. ;)

8S*9,:)+9*9/2%{_W%1>+z}2*N*

여기에서 테스트하십시오.

아이디어는 왼쪽 위 사분면을 먼저 형성하는 것입니다. 작동 방식은 다음과 같습니다.

먼저을 " 123456789"사용하여 문자열을 형성하십시오 8S*9,:)+. 이 문자열의 길이는 17 자입니다. 이제 문자열을 9 번 반복 한 다음을 사용하여 길이가 9 인 하위 문자열로 분할합니다 9/. 9와 17 사이의 불일치는 다른 모든 행을 한 문자 왼쪽으로 오프셋합니다. 각 부분 문자열을 자체 줄에 인쇄하면 다음과 같은 결과가 나타납니다.

        1
23456789 
       12
3456789  
      123
456789   
     1234
56789    
    12345
6789     
   123456
789      
  1234567
89       
 12345678
9        
123456789

따라서 우리가 다른 행을 모두 삭제하면 (편리하게 작동하여 2%) 원하는대로 하나의 사분면을 얻습니다.

        1
       12
      123
     1234
    12345
   123456
  1234567
 12345678
123456789

마지막으로 두 번 미러링하여 두 미러링 작업이 다른 축을 따라 이동하도록 그리드를 바꿉니다. 미러링 자체는 단지

_      "Duplicate all rows.";
 W%    "Reverse their order.";
   1>  "Discard the first row (the centre row).";
     + "Add the other rows.";

마지막으로 모든 줄을 개행과 함께 연결 N*합니다.



3

루비, 76 자

def f(a)a+a.reverse[1..-1]end;puts f [*1..9].map{|i|f([*1..i]*'').center 17}

개선을 환영합니다. :)


1
69 문자 :f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
패트릭 오스 시티

좋은 의견, 나는 '...'을 몰랐고 이것이 어떻게 작동하는지 이해하지 못했습니다.
GB

60 자 :[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
GB

3

Befunge-93 , 155 자

9:v:<,+55<v5*88<v-\9:$_68v
> v>     ^>3p2vpv  -1<!  *
, 1^  2p45*3+9<4:    ,:  +
g -^_75g94+4pg7^!    +^ ,<
1 : ^ `0    :-1$_:68*^$
^1_$:55+\-0\>:#$1-#$:_^

온라인으로 사용해보십시오!

확실히 더 골프를 칠 수는 있지만 내 첫 번째 Funge 프로그램이며 이미 머리가 아파요. 그래도 재미 있었어


3

자바 스크립트, 170 바이트

내 첫 번째 코드 골프 :)

골프

a="";function b(c){a+=" ".repeat(10-c);for(i=1;i<c;i++)a+=i;for(i=2;i<c;i++)a+=c-i;a+="\n";}for(i=2;i<11;i++)b(i);for(i=9;i>1;i--)b(i);document.write("<pre>"+a+"</pre>");

언 골프

var str = "";
function row(line) {
    str += " ".repeat(10 - line);
    for (var i = 1; i < line; i++) {
        str += i;
    }
    for (var i = 2; i < line; i++) {
        str += line - i;
    }
    str += "\n";
}
for (var line = 2; line < 11; line++) {
    row(line);
}
for (var line = 9; line > 1; line--) {
    row(line);
}
document.write("<pre>" + str + "</pre>");

PPCG에 오신 것을 환영합니다!
Евгений Новиков

2

56 54 자

-p스위치에 1 개의 문자를 추가했습니다 .

시퀀스를 생성하기 위해 제곱 된 반발을 사용합니다.

s//12345678987654321/;s|(.)|$/.$"x(9-$1).(1x$1)**2|eg

2

펄, 43 + 1

-E필요한 +1 추가say

say$"x(9-$_).(1x$_)**2for 1..9,reverse 1..8

편집 : 조금 단축


2

파이썬, 65

for i in map(int,str(int('1'*9)**2)):print' '*(9-i),int('1'*i)**2

붙이는 시도 I=int;의 모든 후속 인스턴스를 코드에 및 교체 int와 함께I
Cyoce

@Cyoce 나는 그것을 생각했다. 매번 2 문자를 절약 int하고 3 번 사용하므로 6 문자를 6 문자로 절약합니다.
cardboard_box

2

그루비 77 75

i=(-8..9);i.each{a->i.each{c=a.abs()+it.abs();print c>8?' ':9-c};println""}

구 버전:

(-8..9).each{a->(-8..9).each{c=a.abs()+it.abs();print c>8?' ':9-c};println""}

57 숯 그루비 솔루션을 추가했습니다. 당신은 대체 할 수있는 모두 each와 함께 any두 개의 문자를 저장합니다.
Matias Bjarland

2

스칼라-86 자

val a="543210/.-./012345";for(i<-a){for(j<-a;k=99-i-j)print(if(k<1)" "else k);println}

2

자바 스크립트, 137

재귀와 함께 :

function p(l,n,s){for(i=l;i;s+=" ",i--);for(i=1;i<=n;s+=i++);for(i-=2;i>0;s+=i--);return(s+="\n")+(l?p(l-1,n+1,"")+s:"")}alert(p(8,1,""))

CG에 처음 :)

또는 118

111111111**2더 높은 정밀도로 실행되는 JS 구현을 찾을 수 있다면 .
(여기 : 12345678987654320).

a="1",o="\n";for(i=0;i<9;i++,o+="         ".substr(i)+a*a+"\n",a+="1");for(i=8;i;i--)o+=o.split("\n")[i]+"\n";alert(o)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.