Lập trình sao!


18

Các thách thức

Viết chương trình hoặc chức năng in sao! Chương trình sẽ nhận được hai tham số theo đầu vào chuẩn: Kích thước của ngôi sao và số điểm của ngôi sao. Một ngôi sao có thể có kích thước bất kỳ trong khoảng từ 0 đến 10 và có 3, 4 hoặc 5 điểm. Các tham số đầu vào được phân tách bằng dấu phẩy, ví dụ: 5,3có nghĩa là kích thước 5 sao với 3 điểm. Những ngôi sao được sáng tác bởi các dấu sao*

Xem xét chương trình sẽ chỉ nhận được đầu vào hợp lệ.

Các bản in phải được đặt cách đều nhau để chúng ta có thể thấy các ngôi sao đẹp ở đầu ra!

Thông số giải thích

Điểm

Là số lượng vũ khí đếm từ dấu hoa thị trung tâm.

3 sao sao :

       *
       *
       *
     *   *
    *     *

Chúng được cấu tạo bởi một cánh tay thẳng đứng và hai cánh tay chéo. Sự tách biệt giữa các cánh tay chéo là2*size-1

4 sao

   *     *
    *   *
      *
    *   *
   *     *

Chúng có dạng X và được tạo bởi hai đường chéo. Sự tách biệt giữa các dòng là2*(size-1)+1

5 sao

     *
     *
 * * * * *
    * *
   *   *

Chúng được cấu tạo bởi một đường thẳng đứng và một đường ngang. Mỗi dấu hoa thị trong đường ngang được phân tách bằng một khoảng trắng. Ngoài ra, chúng có hai đường chéo, với sự tách biệt giữa chúng2*(size-2)+1

Kích thước

Kích thước là số lượng dấu sao có mỗi nhánh của ngôi sao tính từ dấu sao trung tâm (đã bao gồm).

Kích thước 1 sao được tạo bởi một dấu sao

*

Ví dụ kích thước 2 sao

3 điểm

       *
       *
     *   *

4 sao

    *   *
      *
    *   *

5 sao

     *
   * * *
    * *

Bạn có ví dụ về kích thước 3 sao trong phần giải thích tham số Điểm.

Tiêu chí chiến thắng

Mã ngắn nhất sẽ thắng. Mã phải được kiểm tra với các tham số đầu vào sau:3,2 3,3 4,2 4,3 5,2 5,3

Tặng kem

-25% ký tự được tính để tạo kích thước 6 được chỉ với các tiêu chí được giải thích trước đó (6 cánh tay và kích thước là số dấu hoa thị đếm từ dấu hoa thị trung tâm). Nó có thể là bất kỳ hình thức nào bạn muốn trong khi nó tôn trọng các thông số kỹ thuật. Một ví dụ về kích thước 6 sao với kích thước 3:

      *
      *
  * * * * *
    * * *
   *  *  *

6 điểm sao phải được kiểm tra với các đầu vào sau 6,2 6,3.


1
Trong ví dụ đầu tiên của bạn về một ngôi sao (5,3), hai điểm nằm ngang có phải là một dấu sao dài hơn không?
PhiNotPi

Vâng, đúng vậy. Đã sửa, Cảm ơn!
Averroes

3
"Chúa ơi ... đầy sao"
Drake Clarris

Đó nên là tiêu đề câu hỏi!
luser droog

Câu trả lời:


36

Toán học 80 76 67 ký tự

Một số người sẽ hỏi liệu đây có phải là nghệ thuật ASCII không, nhưng tôi không thể cưỡng lại.

Graphics@Table[Text["*", r {Cos@t, Sin@t}], {t,0,2π,2π/#1}, {r,0,#2-1}]&

Cách sử dụng (đặt kích thước phông chữ ở mức 24 để làm cho các ngôi sao có vẻ lớn.)

Graphics@Table[Text["*"~Style~24, r {Cos@t, Sin@t}], {t,0,2π,2π/#1}, {r,0,#2-1}] &[6,4]

sáu bốn


Đầu ra cho các trường hợp sau:

{{3, 2}, {3, 3}, {4, 2}, {4, 3},

{5, 2}, {5, 3}, {6, 2}, {6, 3},

{7, 4}, {8, 3}, {9, 2}, {12, 4}}

ngôi sao đóng khung


Làm thế nào nó hoạt động

(a) Ngôi sao đầu tiên nằm ở gốc của không gian tọa độ. Hãy hiển thị nó.

(b) Sau đó, chúng tôi sẽ hiển thị một điểm tại {1,0}.

(c) Sau đó 5 điểm cùng một lúc. Chúng tôi đã áp dụng một hàm thuần túy cho mỗi cặp tọa độ theo sau nó.

(d) Sử dụng Cos và Sin để xác định tọa độ

(e) Tọa độ chỉ hoạt động trên vòng tròn đơn vị; 6 là số lượng chùm sáng.

(f) Vẽ bán kính từ 0 đến 4 đơn vị.

options = Sequence[Axes -> True, ImageSize -> 225, BaseStyle -> 14];
a = Graphics[Text["*"~Style~{28, Blue}, {0, 0}], PlotLabel -> Style["a", 20], options];

b = Graphics[Text["*"~Style~{28, Blue}, {1, 0}], PlotLabel -> Style["b", 20], options];

c = Graphics[Text["*"~Style~{28, Blue}, {#1, #2}] & @@@ {{0, 0}, {1, 0}, {0, 1}, {-1, 0}, {0, -1}}, PlotLabel -> Style["c", 20], options];

d = Graphics[Text["*"~Style~{28, Blue}, {Cos@#, Sin@#}] & /@ {0, \[Pi]/3, 2 \[Pi]/3, \[Pi], 4 \[Pi]/3, 5 \[Pi]/3}, PlotLabel -> Style["d", 20], options];

e = Graphics@Table[Text["*"~Style~24, {Cos@t, Sin@t}], {t, 0, 2 \[Pi],  2 \[Pi]/#1}] &[6];

f = Graphics@Table[Text["*"~Style~24, r {Cos@t, Sin@t}], {t, 0, 2 \[Pi], 2 \[Pi]/#1}, {r, 0, #2 - 1}] &[6, 4];

GraphicsGrid[{{a, b, c}, {d, e, f}}, Dividers -> All]

giải trình


+1 Rất thú vị! Bạn có thể giải thích làm thế nào điều này hoạt động?
Cướp

1
Cảm ơn bạn đã giải thích, nó bắt đầu có ý nghĩa hơn. Tôi chỉ ước Mathicala không bị "khóa" và chủ yếu là cho mục đích giáo dục. Bạn có bất kỳ tài nguyên nào liên kết đến bản demo Mathicala IDE hoặc các ví dụ ngoài những tài nguyên mà Wolfram cung cấp không?
Cướp

Mathematica đã mở ra đáng kể với Định dạng Tài liệu Tính toán của nó, cho phép phân phối miễn phí các applet cho mục đích giáo dục, phi thương mại. Tuy nhiên, mã nguồn của Mathicala phần lớn là "bị khóa". Đối với tài nguyên, bạn có thể muốn nhìn vào http: /demonstrations.wolfram.com và cũng mathematica.stackexchange.com/questions/18/...
DavidC

7

Ruby, ASCII, 193 điểm 142 (189 ký tự - thưởng 25%)

def s r,d
f=->a,n{[n*Math.sin(a),n*Math.cos(a)]}
s=d*6
p=[]
s.times{|k|p<<" "*s}
c=s/2
p[c][c]=?*
r.times{|a|d.times{|l|x,y=f[6.28/r*a,d*l]
p[c+x.round][c+y.round]=?*}}
p.map{|j|puts j}
end

Kiểm tra trực tuyến

Tôi nghĩ rằng nó đủ điều kiện cho phần thưởng 6 sao.

      *     *     

       *  *       


   *  *  *  *  *  


        *  *      

      *     *     







     * *    

    * * *   

     * *    





      *           *     


        *       *       



          *   *         


*   *   *   *   *   *   *


          *   *         



        *       *       


      *           *   

3

Toán học , 65 64

Tôi chấp nhận phương pháp của David:

f@p_=Graphics@Array[Text["*",{Cos@#,Sin@#}&[2π/p[[1]]#]#2]&,p,0]

Sử dụng:

f @ {6,4}

nhập mô tả hình ảnh ở đây

Lỗi được tạo ra do sử dụng =chứ không phải :=và đó không phải là cách thích hợp để đưa ra định nghĩa, nhưng nó hoạt động ở đây.

Nếu một người được phép sử dụng dấu chấm thay vì dấu hoa thị thì điều này có thể được viết (52 ký tự):

f@p_:=Most@ListPolarPlot@Array[{2π/p[[1]]#,#2}&,p,0]

f @ {6, 4}

nhập mô tả hình ảnh ở đây


Tôi thích ý tưởng sử dụng các lớp của các hàm thuần túy.
DavidC

@David Cảm ơn. :-)
Mr.Wizard

@Averroes bạn nên chấp nhận câu trả lời này.
Bộ đệm đã đọc

0
use subs qw /N W E S NW NE SE SW Circler Printer/;
($size,$points)=split(/\,/,$ARGV[0]);
my $arrsize = $size>$points ? $size : $points;
for $my (0...2*$arrsize-2) {
    $starArray[$my]=(); 
}
if($size == 3) {
    @armlist=('N','SW','SE');
}
elsif($size == 4) {
    @armlist=('NE','NW','SW','SE');
}
elsif($size == 5) {
    @armlist=('E','N','W','SW','SE');
}
elsif($size == 6) {
    @armlist=('E','N','W','SW','S','SE');
}
elsif($size == 7) {
    @armlist=('E','N','W','SW','S','SE','NE');
}
elsif($size == 8) {
    @armlist=('E','N','W','SW','S','SE','NE','NW');
}
Circler;
Printer;
sub Circler{
    for (@armlist) {
        &{$_};
    }
}
sub Printer{
    for $my1 (0...2*$arrsize-2) {
        for $my2 (0...2*$arrsize-2) {
            print "$starArray[$my1]->[$my2]"."\t"; 
        }
        print "\n\n";
    }
}
sub N {
    for $my (0...$points-1) {
        $starArray[$arrsize-1-$my]->[$arrsize-1]="*"; 
    }
}
sub E {
    for $my (0...$points-1) {
        $starArray[$arrsize-1]->[$arrsize-1+$my]="*"; 
    }
}
sub W {
    for $my (0...$points-1) {
        $starArray[$arrsize-1]->[$arrsize-1-$my]="*"; 
    }
}
sub S {
    for $my (0...$points-1) {
        $starArray[$arrsize-1+$my]->[$arrsize-1]="*"; 
    }
}
sub NW {
    for $my (0...$points-1) {
        $starArray[$arrsize-1-$my]->[$arrsize-1-$my]="*"; 
    }
}
sub NE {
    for $my (0...$points-1) {
        $starArray[$arrsize-1-$my]->[$arrsize-1+$my]="*"; 
    }
}
sub SE {
    for $my (0...$points-1) {
        $starArray[$arrsize-1+$my]->[$arrsize-1+$my]="*"; 
    }
}
sub SW {
    for $my (0...$points-1) {
        $starArray[$arrsize-1+$my]->[$arrsize-1-$my]="*"; 
    }
}
__END__;

5
Đó là gì? Perl?
luser droog

7
Không thể, tôi chưa bao giờ thấy mã perl từ lâu
jamylak
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.