วาดรูปสามเหลี่ยมพี


11

การชี้แจง: โดยทั่วไปคุณต้องทำสิ่งนี้

ฟังก์ชัน totient ของออยเลอร์มีชื่อ phi

ลองคำนวณ phi (8)

ก่อนอื่นให้ระบุหมายเลขทั้งหมด 8 และต่ำกว่าไม่รวม 0 หรือต่ำกว่า

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

คำตอบ:


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


3

Pyth - 22 ไบต์

จะพยายามตีกอล์ฟต่อไป

j_.tmsm@"# "n1idkSdSQd

ลองมันออนไลน์ได้ที่นี่


ฉันทำใน 20 ไบต์
Leun Nun

ดี .... 21 ไบต์
Leun Nun

2

JavaScript (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

Java, 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

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

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

สร้างทางลัดหรือลงในไพพ์เดี่ยวจากนั้นใส่ i ++ และ j ++ ลงในการเรียกไปที่ g จะบันทึก 3 ไบต์ นอกจากนี้คุณไม่จำเป็นต้องมี parens ใน trinary ใน d 2 ไบต์เพิ่มเติม
สีน้ำเงิน

i ++ จะไม่ทำงานเพราะอยู่ซ้อนกัน
Leun Nun

1

SQL (PostGreSQL9.4), 239 291ไบต์

สร้างคำสั่งที่เตรียมไว้ซึ่งสามารถดำเนินการได้ ฉันแน่ใจว่าฉันอาจใช้เวลาไม่กี่ไบต์จากนี้ แต่ฉันจะต้องเลือกมันในภายหลัง Cross เข้าร่วมในช่วง 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

Python 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.