Vẽ một tam giác phi


11

Làm rõ: Về cơ bản, bạn cần thực hiện điều này

Hàm toàn phần của Euler có tên phi.

Hãy thử tính phi (8)

Đầu tiên, liệt kê tất cả các số 8 trở xuống, không bao gồm 0 hoặc dưới

8
7
6
5
4
3
2
1

Bây giờ hãy tìm những con số không chia sẻ một yếu tố với 8 (1 không được tính) và đặt một số #vào vị trí của chúng.

8
#
6
#
4
#
2
#

Xóa các số.

#

#

#

#
                                                 -

Bây giờ làm điều này, nhưng xâu chuỗi các đầu ra lại với nhau trong một hình tam giác

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

# ra số chia sẻ không yếu tố

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

Xóa số:

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

Đây sẽ là đầu ra cho đầu vào 9 (kể từ 9 cột.)

Hàng đầu + dấu vết mới cho phép.


Cần phải làm rõ.

4
Nếu bạn cần làm rõ, hãy thử hộp cát trước.
Rɪᴋᴇʀ

Tôi có thể xuất ra như một danh sách các dòng không?
Maltysen

Hàng đầu cho phép?
Luis Mendo

Câu trả lời:


7

MATL , 17 15 byte

:Gq:!Zd1=RP35*c

Hãy thử trực tuyến!

Nếu một dòng mới hàng đầu được chấp nhận: 13 byte :

:t!Zd1=RP35*c

Giải trình

:     % 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

Công dụng tuyệt vời của char(0):)
Suever

@Suever Hóa ra nó rất hữu ích!
Luis Mendo



2

JavaScript (ES6), 112 byte

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`

Trường hợp \nđại diện cho nhân vật dòng chữ mới. Giải pháp thay thế, cũng 112 byte:

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

Java, 162 158 byte

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;}

Chương trình đầy đủ (không cập nhật)

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));
    }
}

Đầu ra đầu vào:

9

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

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

Tạo shortcutted hoặc vào một ống đơn, sau đó đặt i ++ và j ++ vào lệnh gọi g. Sẽ tiết kiệm được 3 byte. Ngoài ra, bạn không cần parens trong bộ ba trong d. Thêm 2 byte
Màu xanh

i ++ sẽ không hoạt động vì lồng nhau.
Leaky Nun

1

SQL (PostGreSQL9.4), 239 291 byte

Tạo một tuyên bố chuẩn bị có thể được thực thi. Tôi chắc chắn rằng tôi có thể mất khá nhiều byte trong số này, nhưng tôi sẽ phải chọn nó sau. Có tham gia chéo trên phạm vi từ 1 đến n. Tính toán GCD trong một liên kết bên. Trong đó GCD là 1 và sê-ri A lớn hơn sê-ri B xuất ra '#' nếu không thì là khoảng trắng. Tổng hợp các kết quả thành một chuỗi được nhóm theo chuỗi 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

Chạy theo cách sau

execute p(13)

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

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

Và dọn dẹp với

deallocate p

0

Ruby, 84 byte

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

0

Python 2 (120 byte)

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.