파이 삼각형 그리기


11

설명 : 기본적으로이를 만들어야 합니다

오일러의 참을성있는 기능은 이름이 phi입니다.

phi (8)를 계산해 봅시다

먼저 0을 포함하지 않고 8 이하의 모든 숫자를 나열하십시오.

8
7
6
5
4
3
2
1

이제 어떤 숫자가 8과 (1을 세지 않는) 요소를 공유하지 않는지를 찾아 #제자리에 배치하십시오.

8
#
6
#
4
#
2
#

숫자를 제거하십시오.

#

#

#

#
                                                 -

이제이 작업을 수행하지만 출력을 삼각형으로 묶습니다.

        9
       88
      777
     6666
    55555
   444444
  3333333
 22222222
111111111
---------
123456789

# 비 요소 공유 번호

        9
       8#
      7##
     6#66
    5####
   4#4#4#
  3##3##3
 2#2#2#2#
#########

숫자를 제거하십시오 :

        #
       ##
      #
     ####
    # # #
   ## ## 
  # # # #
#########

이것은 9 열부터 입력 9에 대한 출력입니다.

선행 + 후행 줄 바꿈이 허용됩니다.


설명이 필요했습니다.

4
명확히해야 할 경우 먼저 샌드 박스를 사용해보십시오.
Rɪᴋᴇʀ

줄 목록으로 출력 할 수 있습니까?
Maltysen

주요 개행이 허용됩니까?
Luis Mendo 1

답변:


7

MATL , 17 15 바이트

:Gq:!Zd1=RP35*c

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

선행 줄 바꿈이 허용되는 경우 : 13 바이트 :

:t!Zd1=RP35*c

설명

:     % Take input N. Generate row vector [1 2 ... N]
Gq:   % Row vector [1 2 ... N-1].
      % (In the 13-byte version this is replaced by function `t`, which duplicates
      % the array [1 2 ... N])
!     % Transpose into column vector
Zd    % GCD, element-wise with broadcast. Gives (N-1)×N matrix
1=    % True for entries that equal 1, corresponding to relatively prime pairs.
      % The rest of entries are set to false, i.e. 0.
R     % Upper triangular part: set values below diagonal to 0
P     % Flip matrix vertically
35*   % Multiply each entry by 35 (ASCII for '#')
c     % Convert to char. 0 will be displayed as a space. Implicitly display

char(0):)의 좋은 사용
Suever

@Suever 그것은 매우 유용한 것으로 판명되었습니다!
Luis Mendo



2

자바 스크립트 (ES6), 112 바이트

n=>[...s=` `.repeat(n)].map(_=>s.replace(/./g,_=>`# `[+g(n+1,i++)],n-=i=1),g=(i,j)=>i?i>j||g(j%i,i):j>1).join`\n`

어디 \n리터럴 개행 문자를 나타냅니다. 대체 솔루션, 112 바이트 :

n=>(s=`# `.repeat(n)).replace(r=/../g,_=>s.replace(r,m=>m[+g(n+1,i++)],n-=i=1)+`
`,g=(i,j)=>i?i>j||g(j%i,i):j>1)

1

자바 162 158 바이트

int g(int a,int b){return a<1?b:g(b%a,a);}
String d(int n){String r="";for(int i=0;i<n;i++){for(int j=1;j<=n;)r+=i+j<n|g(n-i,j++)>1?" ":"#";r+="\n";}return r;}

전체 프로그램 (업데이트되지 않음)

import java.util.Scanner;

public class Q79082 {
    int gcd_ungolfed(int a,int b){
        if(a==0) return b;
        return gcd_ungolfed(b%a,a);
    }
    void draw_ungolfed(int n){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(i+j<=n || gcd_ungolfed(n+1-i,j)!=1){
                    System.out.print(" ");
                }else{
                    System.out.print("#");
                }
            }
            System.out.println();
        }
    }
    int g(int a,int b){return a<1?b:g(b%a,a);}
    String d(int n){String r="";for(int i=0;i<n;i++){for(int j=1;j<=n;j++)r+=(i+j<n||g(n-i,j)>1)?" ":"#";r+="\n";}return r;}
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.close();
        new Q79082().draw_ungolfed(n);
        System.out.println(new Q79082().d(n));
    }
}

입출력:

9

        #
       ##
      #  
     ####
    # # #
   ## ## 
  # # # #
#########

        #
       ##
      #  
     ####
    # # #
   ## ## 
  # # # #
#########

바로 가기 또는 단일 파이프로 만든 다음 g를 호출 할 때 i ++ 및 j ++를 넣습니다. 3 바이트를 절약합니다. 또한 d의 삼항에있는 파렌이 필요하지 않습니다. 2 바이트 더
Blue 1

중첩 때문에 i ++가 작동하지 않습니다.
Leaky Nun

1

SQL (PostGreSQL9.4), 239 291 바이트

실행할 수있는 준비된 명령문을 작성합니다. 아마 이것에서 꽤 많은 바이트를 취할 수 있다고 확신하지만 나중에 그것을 선택해야합니다. 1에서 n 사이의 교차 결합을 수행합니다. 측면 조인에서 GCD를 계산합니다. GCD가 1이고 시리즈 A가 시리즈 B보다 큰 경우 '#'이 없으면 공백이 출력됩니다. 결과를 시리즈 B별로 그룹화 된 문자열로 집계하십시오.

prepare p(int)as
select string_agg(coalesce(CASE WHEN b<=a AND x=1THEN'#'END,' '),'')from generate_series(1,$1)a,generate_series(1,$1)b,LATERAL(SELECT MAX(G)x FROM generate_series(1,LEAST(a,b))g WHERE a%g+b%g=0)g
group by b
order by b desc

다음과 같은 방법으로 실행

execute p(13)

string_agg
----------------

            #
           ##
          # #
         ## #
        # # #
       ######
      #   # #
     #### ###
    # # # # #
   ## ## ## #
  # # # # # #
#############

그리고 정리

deallocate p

0

루비, 84 바이트

->n{s=[];n.times{|i|j=0;m=n-i;s<<(?#*n).gsub(/./){m.gcd(j+=1)>1||m>j ?' ':$&}};s*$/}

0

파이썬 2 (120 바이트)

g=lambda m,n:m if n<1 else g(n,m%n)
r=range(input())
for i in r[:0:-1]:print''.join('# '[i>j+1 or g(i,j+1)>1]for j in r)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.