숫자의 삼각파 인쇄


14

파도의 진폭과주기가 주어지면 파도를 인쇄하십시오. 자세한 내용은 샘플 출력을 참조하십시오. 총 파형 수는주기와 같으며 각 파형의 높이는 진폭과 같습니다. 진폭과주기는 10보다 작습니다. 후행 공백은 무시할 수 있지만 선행 공백은 무시할 수 없습니다.

Sample Input
3 2

Sample Output
  3           3    
 232         232  
12321 12321 12321 12321
       232         232
        3           3  

2
이것은 죄보다 삼각형처럼 보입니다.
JB

나는 이것이 ascii-art태그 아래에 있다고 생각합니다 . 그러나 예술 부분은 아직 존재하지 않습니다. 아스키 그래픽에 대한 다른 태그가 있어야합니까?
Juan

당신은 주파수가 아니라 "기간 수"를 의미한다고 생각합니다. 자동차의 RPM과 같이 빈도 는 (주기 수) / 시간입니다.
Dr. belisarius

@Juan, ascii-art 질문을 검색하는 사람들은 아마도이 질문이 결과에 포함되는 것을보고 싶지 않을 것입니다
gnibbler

각 줄마다 공백이 허용됩니까? 세 글자를 구해 주 겠어요.
FUZxxl

답변:


4

Dyalog APL, 43 40 바이트

{⍉⊃⍪/⍺⍴⊂(⌽⍪⊢)(n,1-n←2×⍵)↑↑b⍴¨⍕¨b←a,1↓⌽a←⍳⍵}

{⍉⊃⍪/⍺⍴⊂(⌽⍪⊢)n(1-n←2×⍵)↑↑⍴∘⍕¨⍨a,1↓⌽a←⍳⍵}( 감사합니다, Moris Zucca )

이것은 진폭이 오른쪽 인수 ( )이고주기가 왼쪽 인수 ( ) 인 2 차원 함수입니다 . 사용자 입력을 읽는 프로그램은 같은 수의 문자를 사용합니다.

Martin Büttner의 CJam 답변 에서 영감을 얻으십시오 .

{⍉⊃⍪/⍺⍴⊂(⌽⍪⊢)n(1-n←2×⍵)↑↑⍴∘⍕¨⍨a,1↓⌽a←⍳⍵}
                                   a←⍳⍵ ⍝ numbers 1 2 3, call them "a"
                                  ⌽     ⍝ reverse them: 3 2 1
                                1↓      ⍝ drop one: 2 1
                              a,        ⍝ prepend "a": 1 2 3 2 1
                         ⍴∘⍕¨⍨          ⍝ format a[i] and repeat it a[i] times:
                                        ⍝     (,'1') '22' '333' '22' (,'1')
                        ↑               ⍝ mix, i.e. obtain a character matrix:
                                        ⍝    ┌───┐
                                        ⍝    │1  │
                                        ⍝    │22 │
                                        ⍝    │333│
                                        ⍝    │22 │
                                        ⍝    │1  │
                                        ⍝    └───┘
             n(1-n←2×⍵)↑                ⍝ take a 2×⍵ by 1-2×⍵ matrix
                                        ⍝ (negative length extends backwards):
                                        ⍝    ┌─────┐
                                        ⍝    │  1  │
                                        ⍝    │  22 │
                                        ⍝    │  333│
                                        ⍝    │  22 │
                                        ⍝    │  1  │
                                        ⍝    │     │
                                        ⍝    └─────┘
        (⌽⍪⊢)                           ⍝ the reverse of it, vertically joined with it
                                        ⍝    ┌─────┐
                                        ⍝    │  1  │
                                        ⍝    │ 22  │
                                        ⍝    │333  │
                                        ⍝    │ 22  │
                                        ⍝    │  1  │
                                        ⍝    │     │
                                        ⍝    │  1  │
                                        ⍝    │  22 │
                                        ⍝    │  333│
                                        ⍝    │  22 │
                                        ⍝    │  1  │
                                        ⍝    │     │
                                        ⍝    └─────┘
     ⍺⍴⊂                                ⍝ take ⍺ copies
  ⊃⍪/                                   ⍝ join them vertically
 ⍉                                      ⍝ transpose

하하와 나는 APL을 한 번에 상당한 마진으로 이겼 기 때문에 너무 기뻤습니다. : D
Martin Ender

당신이하지 않았다면 나는 시도하지 않았을 것입니다 :) 그건 그렇고, 그것은 당신의 답변뿐만 아니라 다른 APL 답변이 잘못된 출력을 생성하는 것처럼 보입니다. 샘플에 따르면 삼각형은 중심선에서 만나야합니다.
ngn

오, 잘 잡아라!
Martin Ender

1
2 개 더 골프를하실 수 있습니다 : b⍴¨⍕¨b ← ⍴∘⍕¨⍨으로 다시 쓸 수 있다고 생각합니다. 큰 대답 btw, 나는 그것을 많이 좋아한다!
Moris Zucca

정말 친절 하구나! 난 그냥도 단축 할 수 깨달았다 (n,1-n←2×⍵)n(1-n←2×⍵).
ngn

4

파이썬-135 자

A,F=map(int,raw_input().split());R=range
for y in R(-A+1,A):print"".join((" %s"%x)[-x<s*y<1]for s in(1,-1)for x in R(1,A)+R(A,-1,-1))*F

선행 공백이있는이 버전은 132 자입니다.

A,F=map(int,raw_input().split());R=range
for y in R(-A+1,A):print"".join((" %s"%x)[-x<s*y<1]for s in(1,-1)for x in R(A)+R(A,0,-1))*F

stdin에서 읽을 필요가 없거나 입력이 쉼표로 분리되어 있어도 상당히 짧을 수 있습니다

쉼표로 구분 된 입력의 경우 첫 번째 줄은

A,F=input();R=range

4

APL (77)

,/{×⍎⍵:⍵⋄' '}¨¨⊃∘↑∘⍕¨¨K⍴⊂(⊖M),⍨M←(2⍴N+N-1)↑(0 1↓M),⍨⌽M←(⌽⊖/¨M)×≥/¨M←⍳2⍴⊃N K←⎕

3

J, 87 자

프로그램으로 :

b=:]\@(]#~' '~:])(":@:>:@i.@-)
,.~^:(<:Y)(,.|.)@(' ',.~((<:({."1|."1)b),.b),' '$~2<:])X
        Y                                              X

다음과 같이 실행됩니다.

,.~^:(<:2)(,.|.)@(' ',.~((<:({."1|."1)b),.b),' '$~2#<:) 3
  3           3         
 232         232        
12321 12321 12321 12321 
       232         232  
        3           3   
,.~^:(<:4)(,.|.)@(' ',.~((<:({."1|."1)b),.b),' '$~2#<:) 2
 2       2       2       2       2       2       2       2      
121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 
     2       2       2       2       2       2       2       2 

함수 F로 필요한 경우 5 자 이상입니다.

3 F 2
  3           3         
 232         232        
12321 12321 12321 12321 
       232         232  
        3           3   

나는 그것이 인수를 취하는 것으로 간주되는지 의심 스럽다.

2

하스켈 ( 226 225 222 220 214)

Haskell에서의 나의 시도 :

import List
n!k|n>k=p:n!(k+1)++[p]|0<1=[p]where p=(n-1)?" "++k?show k++(n-k)?" ">>=id
f[n,k]=k?(n!1++(2*n-1)?' ':map reverse(n!1)++[(2*n-1)?' '])>>=id
main=interact$unlines.transpose.f.map read.words
(?)=replicate

죄송합니다. (€)최적화되었습니다. 1 €에 3 바이트가 필요합니다! 각 바이트는 1 바이트 만 걸립니다.
사양을 만족하지 않는 "베타 버전"은 다음과 같습니다.

import List

-- Creates a single wave of numbers. k should be equal to 1
-- and is used for internal stuff,
wave n k|n==k=[peek]
        |otherwise = peek:wave n(k+1)++[peek] where
  peek=replicate(n-1)" "++replicate k(show k)++replicate(n-k)" ">>=id

-- Creates a full wave
-- k: number of waves, n: size of waves
fullWave[n,k]=unlines.transpose.concat.replicate k$wave n 1++map reverse(wave n 1)

main=interact$fullWave.map read.words

1
EUR 운영자! 내가 처음 만났을 때 :)
JB

1
나는 프로그래밍 언어에서 €가 너무 많이 구별된다고 생각했다. 그리고 사용하지 않은 op를 찾고 있었기 때문에 매우 편리했습니다.
FUZxxl

4
무엇을합니까? 1.35 * 미국 운영자입니까? :)
gnibbler


1

CJam, 45 바이트

CJam 은이 도전보다 훨씬 젊으 므로이 답변은 녹색 확인 표시를 사용할 수 없습니다 (marinus의 APL 답변으로 업데이트되어야 함). 그래도 이것은 여전히 ​​재미있는 작은 운동이었습니다.

r~:I2*,{)IS*I@I\-z-_a*+I~)>I(S*+}%_Wf%+r~*zN*

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

아이디어는 다음과 같이 반주기를 수직 으로 생성하는 것입니다 .

  1  
 22  
333  
 22  
  1  

(SE가 삼키는 다음 빈 줄). 그런 다음 복제되고 각 행이 반전되고 기간의 후반이 추가됩니다. 그런 다음 전체 기간이 횟수만큼 반복되고 궁극적으로 그리드가 수평을 따라 파동을 향하도록 바뀝니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.