자손 피라미드 그리기 (추가)


11

도전

음이 아닌 정수 시퀀스가 ​​주어지면 자식이 두 부모 숫자의 합인 하위 피라미드를 출력하는 함수를 만듭니다.

결과는 tab을 사용하여 문자열로 출력됩니다 \t.

참고 : 각 줄의 후행 탭은 필요하지 않습니다

1\t\t2\t\t3\n\t3\t\t5\t\n\t\t8\t\t results in 
1       2       3
    3       5   
        8       

선택적으로 결과는 빈 위치를 공백으로 사용하여 배열로 출력 될 수 있습니다.

[[1,,2,,3],
[,3,,5,],
[,,8,,]]

예:

주어진 4,5,7,3,4,2출력 :

4       5       7       3       4       2
    9       12      10      7       6
        21      22      17      13
            43      39      30
                82      69
                    151

규칙

  • 표준 규칙이 적용됩니다
  • 구분 기호 또는 배열을 사용하여 문자열이 될 수 있습니다.
  • 선행 / 트레일 링 줄 바꾸기 및 탭이 허용됩니다 (단, 출력이 역 피라미드 인 경우 필요하지 않음)

테스트 사례

Input: 1,3,5

1       3       5
    4       8
        12


Input: 9,8,7,6,5

9       8       7       6       5
    17      15      13      11
        32      28      24
            60      52
                112


Input: 5,5,2,5

[[5,,5,,2,,5],
[,10,,7,,7,],
[,,17,,14,,],
[,,,31,,,]]

Input: 3,3,3

[[3,,3,,3],
[,6,,6,],
[,,12,,]]

승리 기준은


참고 : 이 과제는 파스칼 생성 삼각형에 매우 가깝습니다 . 차이점은 커스텀 시작 순서입니다 (파스칼은 1에서 시작하여 상승 모드에서 입력 및 하강 모드에서 진행).

샌드 박스 게시물



non-negative integers우리는 처리 0해야합니까? 빈 공간이 0s 로 채워지면 골프가 될 가능성이 있습니다 .
JungHwan Min

빈 위치에 탭이나 빈 문자열 / 배열이있는 배열을 반환 할 수 있습니까?
Adám

2
"리딩 / 트레일 링 줄 바꿈 및 탭 허용"-배열 출력의 맨 아래에 빈 결과도 포함 할 수 있습니까?
Jonathan Allan

1
@JonathanAllan 후행 줄 바꿈과 탭이 허용됩니다
아담

답변:


4

APL (Dyalog Unicode) , 31 28 바이트 SBCS

암묵적 접두사 기능. 단일 공간을 빈 슬롯 마커로 사용합니다. 숫자 / 공백 목록을 반환합니다.

⍳∘≢{∊(⍺⍴''),,∘' '¨2+/⍣⍺⊢⍵}¨⊂

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

⍳∘≢{... }¨⊂ 각 기능 아래 적용 ɩ ndices  의  함께 탈리 전체 인수 :

⊢⍵ 올바른 논증을 낳다 (원래 입력)

2+/⍣⍺ 왼쪽 인수로 표시된 횟수만큼 페어 단위 합계를 적용하십시오.

,∘' '¨ 각 숫자에 공백을 추가하십시오

(), 다음을 추가하십시오.

  ⍺⍴'' 빈 문자열의 왼쪽 인수 요소 (공백으로 채워짐)

ε NLIST (편평한)




3

젤리 ,  14  13 바이트

14-> 13은 후행 공백 전용 항목이 목록 형식 출력에 허용된다고 가정합니다. 나는 14에 복귀해야하지 않을 경우 ( 질문 )

+ƝƬK€z⁶Zṙ"JC$

모나 딕 링크. 출력은 공백 문자를 공백으로 사용하는 목록의 목록입니다 (단일 후행 공백 전용 항목 포함).

온라인으로 사용해보십시오! 전체 프로그램으로 모나드 링크를 실행하면 스매싱 된 출력이 내재적으로 인쇄되므로 목록 구조를 표시하는 바닥 글이 포함됩니다.


3

껍질 , 22 바이트

zoΣ~+R"	"oJ"		"msNU¡Ẋ+

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

설명

z(Σ~+R" "(J"  "ms))NU¡Ẋ+  -- example input: [1,2,3]
                     ¡    -- infinitely do and collect in list
                      Ẋ+  -- | sum adjacent
                          -- : [[1,2,3],[3,5],[8],[],[],...
                    U     -- keep up until first repetition: [[1,2,3],[3,5],[8],[]]
z(                )N      -- zip with natural numbers under (example on 1 [1,2,3])
   ~+    (       )        -- | join arguments modified by
     R" "                 -- | | replicate tab: " "
               ms         -- | | show each: ["1","2","3"]
          J"  "           -- | | join with 2 tabs: ["1","  ","2","  ","3"]
                          -- | : [" ","1","  ","2","  ","3"]
  Σ                       -- | concatenate: " 1  2  3"
                          -- : [" 1  2  3","  3  5","   8"]



2

파이썬 3 , 101 93 80 바이트

(7 바이트를 저장 map(str,x)하는 대신 for in및 초기화 Y 등 '') 및 후행 줄 바꿈 (지웠어 x and[대신 print(), 덕분에 조 왕 .

(저장된 13 바이트 [*map(sum,zip(x,x[1:]))]대신 [x[j]+x[j+1]for j in range(len(x)-1)]덕분에) OVS .

f=lambda x,y='':x and[y+'		'.join(map(str,x))]+f([*map(sum,zip(x,x[1:]))],y+'	')

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


@ovs : 아, 멋지다. 합계를 매핑 할 수 있다는 것을 깨달았습니다. 감사!
Emigna

1

망막 , 35 바이트

+¶<`\d+ *(?=(\d+)?)
    $#1*$.(*_$1*)   

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

+

버퍼 변경이 멈출 때까지 반복하십시오.

¶<`

치환하기 전에 버퍼의 내용을 후행 줄 바꿈으로 인쇄하십시오.

\d+ *(?=(\d+)?)
    $#1*$.(*_$1*)   

단일 숫자를 한 쌍의 탭으로 대체하지만 숫자 다음에 탭, 합계 및 다른 탭이있는 다른 숫자를 대체하십시오.



1

빨강 , 151 바이트

func[b][m: length? b repeat n m[loop n - 1[prin"^-"]print replace/all
form b" ""^-^-"c: copy[]repeat i -1 + length? b[append c b/(i) + b/(i + 1)]b: c]]

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

더 읽기 쉬운 :

f: func [ b ] [
    m: length? b
    repeat n m [
        loop n - 1 [ prin tab ]
        print replace/all form b " " rejoin [ tab tab ]
        c: copy []
        repeat i (length? b) - 1 [
            append c b/(i) + b/(i + 1)
        ]
        b: c
    ]
]


1

C # (Visual C # 컴파일러) 163 바이트

b=>{var s="";var c=b.Length;for(int i=0;i<c;i++){for(int z=0;z<i;z++)s+="\t";for(int x=0;x<c-i;x++){s+=b[x]+"\t\t";b[x]=x==c-i-1?0:b[x]+b[x+1];}s+="\n";}return s;}

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

읽을 수있는 :

b =>    {
            var s = "";
            var c = b.Length;
            for (int i = 0; i < c; i++)
            {
                for (int z = 0; z < i; z++)
                    s += "\t";
                for (int x = 0; x < c - i; x++)
                {
                    s += b[x] + "\t\t";
                    b[x] = x == c - i - 1 ? 0 : b[x] + b[x + 1];
                }
                s += "\n";
            }
            return s;
        }

1

apt -Rx , 20 18 바이트

두 번째 줄에는 후행 탭이 있습니다.

Nc¡=ä+
Ëq' ² iEç'  

시도 해봐


설명

                  :Implicit input of array U
N                 :The array of inputs (NOT the input array)
 c                :Concatenate
  ¡               :  Map U
    ä+            :    Consecutive sums of U
   =              :    Reassign to U for next iteration
\n                :Reassign the resulting 2D-array to U
Ë                 :Map each array at index E
 q                :  Join with
  '\t             :   Tab
     ²            :   Repeated twice
       i          :  Prepend
          '\t     :   Tab
         ç        :   Repeated
        E         :   E times
                  :Implicitly join with newlines, trim (not strictly necessary) and output.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.