Yıldız programlama!


18

Meydan okuma

Yıldızları basan bir program veya işlev yazın! Program, standart girdi ile iki parametre alacaktır: Yıldızın boyutu ve yıldızın nokta sayısı. Bir yıldız 0 ile 10 arasında herhangi bir boyutta olabilir ve 3, 4 veya 5 puana sahip olabilir. Giriş parametreleri bir virgülle ayrılır, örneğin: 5,33 noktalı bir 5 yıldız boyutu anlamına gelir. Yıldızlar yıldızlardan oluşur*

Programın yalnızca geçerli girişler alacağını düşünün.

Çıktıda güzel yıldızlar görebilmemiz için baskıların doğru aralıklarla yerleştirilmesi gerekir!

Parametre açıklamaları

makas

Merkezi yıldızdan sayan silah sayısıdır.

3 puan yıldız :

       *
       *
       *
     *   *
    *     *

Dikey bir kol ve iki çapraz koldan oluşurlar. Çapraz kollar arasındaki ayrım2*size-1

4 puan yıldız

   *     *
    *   *
      *
    *   *
   *     *

Bir X formuna sahiptirler ve iki çapraz çizgiden oluşurlar. Çizgiler arasındaki ayrım2*(size-1)+1

5 puan yıldız

     *
     *
 * * * * *
    * *
   *   *

Dikey bir çizgi ve yatay bir çizgiden oluşurlar. Yatay çizgideki her yıldız bir boşlukla ayrılır. Ayrıca, aralarında bir ayrım bulunan iki çapraz çizgi vardır.2*(size-2)+1

Boyut

Boyut, yıldızın her bir kolunun merkezi yıldız işaretinden (dahil) saydığı yıldızların sayısıdır.

Boyut 1 yıldız tek bir yıldız işaretinden oluşur

*

Boyut 2 yıldız örnekleri

3 puan

       *
       *
     *   *

4 puan yıldız

    *   *
      *
    *   *

5 puan yıldız

     *
   * * *
    * *

Points parametresi açıklamasında 3 yıldız boyutuyla ilgili örnekleriniz var.

Kazanma kriterleri

En kısa kod kazanır. Kodun aşağıdaki giriş parametreleriyle kontrol edilmesi gerekir:3,2 3,3 4,2 4,3 5,2 5,3

Bonus

% -25 karakter , daha önce açıklanan ölçütlere işaret eden 6 beden oluşturmak için sayılır (6 kol ve boyut, merkezi yıldızdan sayılan yıldız sayısıdır). Spesifikasyonlara uyurken istediğiniz herhangi bir form olabilir. 3 boyutlu 6 yıldızlı bir yıldız örneği:

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

6 puanlı yıldız aşağıdaki girişlerle kontrol edilmelidir 6,2 6,3.


1
İlk (5,3) yıldız örneğinizde, iki yatay noktanın birer yıldız daha uzun olması gerekir mi?
— PhiNotPi

Evet öyle. Düzeltildi, teşekkürler!
— Averroes

3
"Tanrım ...
— Yıldızlarla

Soru başlığı bu olmalı!
— luser droog

Yanıtlar:


36

Mathematica 80 76 67 karakter

Bazıları bunun ASCII sanatı olup olmadığını sorgulayacaktı, ama dayanamadım.

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

Kullanım (yıldızların büyük görünmesi için yazı tipi boyutunu 24 olarak ayarlamak.)

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

altı dört


Aşağıdaki durumlar için çıktı :

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

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

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

çerçeveli yıldızlar


Nasıl çalışır

(a) İlk yıldız bir koordinat boşluğunun kökenindedir. Gösterelim.

(b) Daha sonra {1,0} konumunda bir nokta görüntüleriz.

(c) Daha sonra aynı anda 5 puan. Her bir koordinat çiftine saf bir fonksiyon uyguladık.

(d) Koordinatları belirlemek için Cos ve Sin kullanın

(e) Koordinatlar yalnızca birim çember üzerinde çalışır; 6 ışık huzmesi sayısıdır.

(f) 0 ila 4 birim arası yarıçapları çizin.

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]

açıklama


+1 Çok ilginç! Bunun nasıl çalıştığını açıklayabilir misiniz?
— Rob

1
Açıklama için teşekkürler, daha anlamlı olmaya başlıyor. Keşke Mathematica o kadar "kilitli" olmasaydı ve çoğunlukla eğitim amaçlıydı. Mathematica IDE demosuna veya Wolfram'ın sağladığı örneklerin ötesinde örneklere bağlantı veren kaynaklarınız var mı?
— Rob

Mathematica, uygulamaların eğitim amaçlı, ticari olmayan amaçlarla ücretsiz dağıtılmasını sağlayan Hesaplanabilir Belge Biçimi ile önemli ölçüde açıldı. Ancak Mathematica'nın kaynak kodu büyük ölçüde "kilitlidir". Kaynaklara gelince, http bakmak isteyebilirsiniz: /demonstrations.wolfram.com ve ayrıca mathematica.stackexchange.com/questions/18/...
— DavidC

7

Ruby, ASCII, 193 skor 142 (189 karakter -% 25 bonus)

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

Çevrimiçi test edin

Bence bu 6 ışınlı yıldız bonusu için uygun.

      *     *     

       *  *       


   *  *  *  *  *  


        *  *      

      *     *     







     * *    

    * * *   

     * *    





      *           *     


        *       *       



          *   *         


*   *   *   *   *   *   *


          *   *         



        *       *       


      *           *   

3

Mathematica , 65 64

David'in yöntemini benim almam:

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

kullanın:

f @ {6,4}

resim açıklamasını buraya girin

Hatalar =yerine kullanımı nedeniyle üretilir :=ve bir tanım yapmanın doğru yolu değildir, ancak burada işe yarar .

Yıldız işareti yerine nokta kullanılmasına izin verilirse, bu yazılabilir (52 karakter):

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

f @ {6, 4}

resim açıklamasını buraya girin


Saf fonksiyon katmanları kullanma fikrini seviyorum.
— DavidC

@David Teşekkürler. :-)
— Mr.Wizard

@Averroes bu yanıtı kabul etmelisiniz.
— Tampon Üzerine

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
O nedir? Perl?
— luser droog

7
Olamaz, perl kodunu daha önce hiç görmedim
— jamylak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.