Küçük Chandler üzgün. Onu neşelendirmek için bir bulut çizin


57

Küçük Chandler üzgün. Onu neşelendirmek için bir bulut çizin.
Not: Bir bulut çizmek onu neşelendirmez.

Bir daire, bir Kartezyen düzlemindeki dairenin x konumu olan bir Kartezyen düzlemindeki dairenin y konumu ve dairenin yarıçapı (x,y,r)olduğu 3-dipli olarak tanımlanabilir . ve olumsuz olabilir. daima olumludur. Giriş 3 tuples ayrılmış boşluk şeklindeki dairelerin bir listesidir. Örneğin:xyrxyr

3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8

3,1,1Aracı "merkez noktası olan bir daire, 3,11 yarıçaplı. 3,2,1.5Merkez noktası olan bir daireye anlamına gelen" 3,21,5 yarıçaplı.

Girdideki tüm bu çevreleri bir grafiğe çizersek, şöyle görünür (Yalnızca netlik için ızgara çizgileri ve etiketler ekledim; zorunlu değiller):

grafik

Tüm dairelerin nasıl yapışkan olduklarına dikkat edin . Yani hepsi birbiriyle örtüşüyor, öyle ki diğerlerinden ayrılmış küçük daireler grubu olmadan büyük bir grup oluşturuyorlar. Girişin uyumlu olacağı garanti edilir.

Şimdi, bu dairelerin oluşturduğu "sınırın" çevresini dolaşarak, diğer çizgilerin hiçbiri olmadan çizdiğimizi varsayalım. Tüm çevrelerin oluşturduğu silüetin sınırlarını çizmek gibi olur. Ortaya çıkan bulut şuna benzer:

bulut

Dolayısıyla, bu bulut yalnızca kenarlık oluşturan girdideki çemberlerin yaylarını çizerek, tek bir şekle neden olacak şekilde oluşturulmuştur. Başka bir deyişle, bulut yalnızca başka bir dairenin içinde olmayan yayların çizilmesiyle oluşur. Programınız yukarıda açıklanan biçimde girdi alacak ve ortaya çıkan bulutu görüntüleyen bir resim çıkartacaktır. Bulutun genel şekli doğru olmalıdır, ancak ölçek, renk, çizgi kalınlığı ve tepe noktalarına nasıl baktığı size bağlıdır. Bulutun görünür olması gerektiğine dikkat edin, "Bu program beyaz bir arka plan üzerinde beyaz bir bulut çizer" gibi bir şey çekemezsiniz, "Bu program sonsuz küçük ölçekte bir bulut çizer", "Bu program 0 ile bir bulut çizer çizgi kalınlığı ", vb. Ayrıca kenarlığın renginin dolgu veya arka plan renginden farklı olması gerektiğini unutmayın.

Başka bir örnek. Giriş:

1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7

Çıktı:

cloud2

Bulutta bir "delik" varsa, deliği de çizmelisiniz. Giriş:

0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4 

Çıktı:

cloud3

İşte önemli bir kural: Programınız sadece sınırı oluşturan çizgileri çizmelidir. Bu, sadece daireleri tamamen çizemeyeceğiniz ve ardından daireleri beyaz bir dolgu ile biraz daha küçük çizeceğiniz anlamına gelmez - çünkü bu yöntem hala kenarlık oluşturmayan çizgiler çizer, daha sonra onları kapatır. Kuralın amacı, "daireleri çizin, ardından daireleri beyaz bir dolguyla tekrar çizin" uygulamalarını veya buna benzer bir şeyi engellemekti. Cevabın, gerçekte çizmeden önce bir şeyler nereye çizileceğini hesaplaması bekleniyor.

Bu kod golf, yani en kısa karakter sayısı kazanır.


13
Amaç kazanma ölçütüne sahip bir grafik çıktı sorusu için +1 (ve ilk paragraf).
Dennis,

2
Bir çizgi çizip sonra silip silmediğimizi nasıl anlarsınız? Söylenen satırları iç bitmaplere dönüştürmek tamam mı? Değilse, bir vektörle bitmap gösterimi arasındaki sınır nerede? Eğer evet ise, neden birincil tuvalle aynı şeyi yapmamıza izin vermiyoruz (bildiğimiz çift tamponludur, böylece kullanıcı geçici çizgilerimizi göremez)?
John Dvorak

1
@JanDvorak Kuralın amacı, "daireleri çiz, sonra daireleri beyaz dolguyla tekrar çiz" uygulamalarını veya buna benzer herhangi bir şeyi engellemekti. Cevabın, gerçekte çizmeden önce bir şeyler nereye çizileceğini hesaplaması bekleniyor . Daha net yapmak için düzenleme yapacağım.
pelin otu

15
Bu soru yüklü Cloud to Butt ( chrome.google.com/webstore/detail/cloud-to-butt-plus/… ) ile kesinlikle komiktir .
Erty Seidohl

9
@KomeKittens "Kaybettim" Bulutta "delik varsa", deliği de çizmelisin.
Erty Seidohl

Yanıtlar:


25

Mathematica 177 126 121 119

Disk Bölgeleri ile Çözme: Matematikçilerin Yaklaşımı

Mantık

  • Bölge 1'i (R1), daireleri (iç kısımları olmadan) oluşturun;
  • Bölge 2'yi (R2), diskleri (daire sınırları olmadan) oluşturun.
  • Bölge 3'ü yaratın (R3 = R1-R2).
  • -

bölge çıkarımı

Bu kesinlikle aşağıda verilen yaklaşımdır. Yukarıdaki 3 rakamı üretti.

input = "3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8";
circles = ((x - #)^2 + (y - #2)^2 == #3^2) & @@@ 
     ToExpression[#~StringSplit~","] &@(StringSplit@input);
R1 = ImplicitRegion[Or @@ circles, {x, y}];
r1 = RegionPlot[R1, PlotLabel -> "R1: circles containing borders", 
   AspectRatio -> 1, PlotRange -> {{-1, 5}, {-1, 5}}];

innerDisks = ((x - #)^2 + (y - #2)^2 < #3^2) & @@@ 
     ToExpression[#~StringSplit~","] &@(StringSplit@input);
R2 = ImplicitRegion[Or @@ innerDisks, {x, y}];
r2 = RegionPlot[R2, PlotLabel -> "R2: disks within circle borders", 
   AspectRatio -> 1, PlotRange -> {{-1, 5}, {-1, 5}}];
R3 = RegionDifference[R1, R2]
r3 = RegionPlot[R3, PlotLabel -> "R3 = R1-R2", AspectRatio -> 1, 
   PlotRange -> {{-1, 5}, {-1, 5}}];
GraphicsGrid[{{r1, r2, r3}}, ImageSize -> 600]

Örtük bölge # 1, çevrelerin birliğidir. Örtük bölge # 2, dairelerin içinde yer alan disklerin birliğidir. Aralarındaki fark sınırdır.

RegionDifference [
ImplicitRegion [(- 3 + x) ^ 2 + (-1 + y) ^ 2 == 1 || (-3 + x) ^ 2 + (-2 + y) ^ 2 == 2.25 || (-1 + x) ^ 2 + (-2 + y) ^ 2 == 0,49 || (-0.9 + x) ^ 2 + (-1.2 + y) ^ 2 == 1.44 || (-1 + x) ^ 2 + y ^ 2 == 0,64, {x, y}],
ImplicitRegion [(- 3 + x) ^ 2 + (-1 + y) ^ 2 <1 || (-3 + x) ^ 2 + (-2 + y) ^ 2 <2.25 || (-1 + x) ^ 2 + (-2 + y) ^ 2 <0.49 || (-0.9 + x) ^ 2 + (-1.2 + y) ^ 2 <1.44 || (-1 + x) ^ 2 + y ^ 2 <0.64, {x, y}]]


Disk Bölgelerine Göre Çözme: mühendisin yaklaşımı (119 karakter)

Aşağıdaki disk bölgelerinin birleşmesini alır, o bölgeyi ayrıştırır ve sınırını bulur. Diyagramdaki noktalar Delaunay ağının aralıklarını göstermektedir. İlgi sınırını sağlayan nesneyi (bulutun ana hatları) vurgulamak için aşağıda ayrıklaştırılmış bölgeyi gösteririz.

s = StringSplit;RegionBoundary@DiscretizeRegion[RegionUnion[Disk[{#, #2}, #3] &@@@
ToExpression[#~s~","] &@(s@InputString[])]]

"3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8"

Bölge sınırı isteğe bağlıdır.

reg1


Kenarları Algılayarak Çözme: Fotoğrafçının Yaklaşımı - 121 karakter

Kenar algılama

Diskleri siyah olarak çizer, görüntüyü rasterleştirir, kenarları algılar ve siyah ve beyazı ters çevirir.

s=StringSplit;ColorNegate@EdgeDetect@Rasterize@Graphics[Disk[{#,#2},#3]&@@@
((ToExpression/@s[#,","])&/@s[InputString[]])]

5 bayt tarafından tıraş edildi:RegionBoundary@DiscretizeRegion@RegionUnion[{#,#2}~Disk~#3&@@@ToExpression[#~s~","]&@s@InputString[s=StringSplit]]
Martin Ender

Potansiyel olarak s=StringSplitbilgi istemi içinde? Bunu tekrar ön tarafa taşımayı deneyin, hala geçerli sürümünüzden daha kısa olmalıdır.
Martin Ender

27

T-SQL 235 234 229 212 171 73 bayt

Bu, SQL Server 2012+'de uzamsal işlevselliği kullanır. SSMS'de çalıştırıldığında (SQL Server Management Studio'yu) uzamsal bir sonuç bölmesi oluşturur. Girdi @ değişkeninden. Girdi tablodan alınabilirse daha da azaltabilirim.

Tablo girişine şimdi izin verildi.

SELECT Geometry::UnionAggregate(Geometry::Point(X,Y,0).STBuffer(R))FROM A

Önceki çözümü aşağıda bıraktım.

DECLARE @ VARCHAR(999)='WITH a AS(SELECT *FROM(VALUES('+REPLACE(@i,' ','),(')+'))A(X,Y,R))SELECT Geometry::UnionAggregate(Geometry::Point(X,Y,0).STBuffer(R))FROM a'EXEC(@)

Düzenleme : Başıboş alanı fazlalığı çıkarın içine ve alt sorgu

171: CTE ile değiştirilmiş tablo oluşturma ve @ ile @.

görüntü tanımını buraya girin

Dinamik SQL'in Yıkılması

DECLARE @i VARCHAR(100) = '1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7' -- Input
DECLARE @ VARCHAR(999) = '
WITH a AS(                                       --CTE to produce rows of x,y,r 
    SELECT *FROM(VALUES('+
        REPLACE(@i,' ','),(')                    --Format @i to a value set
        +'))A(X,Y,R)
)
SELECT Geometry::UnionAggregate(                 --Aggregate Buffered Points
    Geometry::Point(X,Y,0).STBuffer(R)           --Create point and buffer
    )               
FROM a                                           --from the table variable
'
EXEC(@)                                          --Execute Dynamic sql

Bir hata 'A' has fewer columns than were specified in the column list
mesajı

@JesanFafon @i giriş değişkeninizin doğru ayarlandığından emin olun. DECLARE @i VARCHAR(100) = '1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7'. Ne yazık ki o anda test edemez ve SQLfiddle 2012. için güzel oynamıyor
MickyT

SQL geometri fonksiyonları ile iyi iş çıkardınız. İyi haberler! Önceden var olan tabloya göre girdilere şimdi açıkça izin verilir . Tablo oluşturma ve popülasyonun bayt sayısına dahil edilmesi gerekmez.
BradC

Birkaç karakter oynadım. Bağlantı bir sonuç üretmiyor. Ancak ms-sql server yönetim stüdyosunda çalışıyor. Senaryo burada , tadını çıkar.
Kullanmaktan

@ t-clausen.dk Bunun için teşekkür ederim, fakat güncelleyeceğim için onu tablo girişine izin vereceğim. Bunu geri
çekmeyecektim

23

Mathematica, 175 158 149 bayt

s=StringSplit;l=ToExpression[#~s~","]&@s@InputString[];RegionPlot[Or@@(Norm@{x-#,y-#2}<#3&@@@l),{x,m=Min@(k={{##}-#3,{##}+#3}&@@@l),M=Max@k},{y,m,M}]

Sanal alandaki bu yaklaşımın geçerli olması gerektiği konusundaki tartışmadan hatırlıyorum, ancak kuralların yeni ifadeleriyle nasıl yer aldığından tam olarak emin değilim, bu yüzden @Lilac, kuralları ihlal ettiğini düşünüyorsanız bana bildirin.

Temel olarak, bulut içindeki tüm noktalar için doğru olan ve dışındaki tüm noktalar için yanlış olan mantıklı bir koşul yaratıyorum. Daha RegionPlotsonra ifadenin olduğu tüm noktaların bölgesini ve Trueetrafındaki bir taslağı oluşturduğu için onu besliyorum .

görüntü tanımını buraya girin

Ungolfed:

s = StringSplit;
l = ToExpression[#~s~","] &@s@InputString[];
RegionPlot[
 Or @@ (Norm@{x - #, y - #2} < #3 & @@@ l), 
 {x, m = Min@(k = {{##} - #3, {##} + #3} & @@@ l), M = Max@k},
 {y, m, M}
]

1
ImplicitRegionkomplo için uygun x ve y değerlerini otomatik olarak bulur. 122 karakter:s = StringSplit; RegionPlot@ ImplicitRegion[ Or @@ (((x - #)^2 + (y - #2)^2 < #3^2) & @@@ (ToExpression[#~s~","] &@(s@InputString[]))), {x, y}]
DavidC

@DavidCarraher Maalesef bu, görüntünün en boy oranını bozar. (Tüm bu bölgelerin işlediğini bilmek güzel - aynı zamanda kullandıklarınızı da - yalnızca RegionPlotşu ana kadar görmüştüm .)
Martin Ender

Muhtemelen zaten ,AspectRatio-> 1kodu tam olarak bulunduğu yerde tekrar 149 bayta getirdiğini not etmişsinizdir.
DavidC

2
Bana mı öyle geliyor, yoksa bu görüntü Marvin Paranoid Android'e mi benziyor?
paqogomez

16

Python 3,3 ( 183 177 164 160 bayt)

B=list(map(eval,input().split()))
print("".join(" ## "[sum(any(r*r>(x-d%80/4+10)**2+(y+d//80/4-10)**2for
x,y,r in B)for d in[i,i+1,i+80])]for i in range(6400)))

Windows'da varsayılan olduğunu bildiğim 80 karakter genişliğinde bir konsol gerektiriyor. Konsolunuzun kare yazı tipi varsa en iyi sonucu verir. İşte bazı test girişlerinden bazı alıntılar.

Orijinal:

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

Bir diğeri:

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

Delik:

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

1
Bunun tek bilimsel sanat çözümü olduğunu seviyorum.
vmrob

ithalat yok ... etkileyici!
Richard Green,

15

Python - 253 249 215 199

Bu, geometri işlemleri üst üste gelen çemberlerin birliğinin (= tamponlanmış noktaların) taslaklarını çizerek çözümü basit bir şekilde yazdıran müthiş düzgün kütüphane için bir reklamdır :

from pylab import*
from shapely.geometry import*
c=Point()
for s in raw_input().split():
 x,y,r=eval(s)
 c=c.union(Point(x,y).buffer(r))
plot(*c.exterior.xy)
for i in c.interiors:
 plot(*i.xy)
show()

Çıktı:

üç bulutlar

Düzenleme (ler):

  • 249: Değiştirilen sys.argv[1:]tarafından raw_input().split()bir tasarrufimport sys
  • 215: Kaldırılan k={'color':'k'}yerini lüks, savefigtarafındanshow
  • 199: map(float,s.split(','))Tarafından değiştirildieval(s)

11

Python - 535

import math as m
import matplotlib.pyplot as l
c = "3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8"
a = [[float(y) for y in x.split(",")] for x in c.split(" ")]
for a2 in a:
    for x in xrange(0,200):
        q=x*m.pi/100.0
        p=(a2[0]+m.sin(q)*a2[2], a2[1]+m.cos(q)*a2[2])
        cc = []
        for z in a:            
            if z != a2:               
                if ((z[0] - p[0]) ** 2 + (z[1] - p[1]) ** 2 ) < (z[2] ** 2) :
                    cc.append(z)
        if not cc: 
            l.scatter(p[0],p[1])
l.show()

2
Bunun, örneğin from math import*boşluk bırakmadan, yalnızca tek harfli değişken adları kullanarak, liste kavrama kullanarak (ör cc=[z for z in a if z!=a2 and (z[0]…)].) Daha fazla golf oynama potansiyeli vardır . Ayrıca Python'da golf oynamak için ipuçlarına göz atın .
Wrzlprmft 23:14

Bazı karakterleri, yerine tek harfli bir değişken adı kullanarak kaydedebilirsiniz a2.
ProgramFOX

teşekkürler wrzl ... Muhtemelen bu gece golf oynamaya başlayacağım (şu anda yapılacak diğer şeyler ancak toprağa bir miktar koymak istedi)
Richard Green

1
yes @ProgramFOX ... bu işe yarayan ve hata ayıklayabileceğim bir sürümdü .. bu gece daha kısa olacak ...
Richard Green

3
@ JamesWilliams baton almak istiyorsanız ... lütfen yapın .. Kod koruyucu değilim! Kendi girişiniz kadar eklemek için çekinmeyin (orijinali
Richard Green

9

Python - 296 249 231 223 212

from pylab import*
a=map(eval,raw_input().split())
for x,y,r in a:
 for i in range(200):
  q=i*pi/100;p=x+r*sin(q);t=y+r*cos(q);[z for z in a if z!=(x,y,r)and(z[0]-p)**2+(z[1]-t)**2<z[2]**2]or scatter(p,t)
show()

Credit orijinal çözüm için @ richard-green'e (izin verildi) gider , ben sadece biraz aşağı çektim.


7
peki bu benim oyumu alır ...
Richard Green

1
Bunun pylabyerine içe aktararak biraz daha tasarruf edebilirsiniz matplotlib.pyplot.
21'de ojdo

Ben kullanılırsa, mobil cihazlarda anda @odjo from pylab import *Hala çağırmak mümkün olacaktır show()ve scatter()herhangi bir referans olmaksızın?
James Williams

1
@JamesWilliams onaylandı! Pylab, birçok MATLAB benzeri fonksiyonlar içeren bir isim alanı araştırmacısıdır :-)
ojdo

Sen kullanarak bu kısaltabilirsiniz [eval(i)for i in raw_input().split()]Python en olarak evaldönüşler 1,2,3bir başlığın içine. Ayrıca tabii değiştirmek zorunda kalacak [x,y,r]bir etmek (x,y,r).
KSab

7

JavaScript (E6) + HTML 322

JSFiddle

Her daire, yaklaşık 100 küçük yay halinde alt bölümlere ayrılır ve orta noktası diğer dairelerin içinde değilse, her yay çizilir.

<canvas id='c'/>
<script>
t=c.getContext("2d"),z=99,c.width=c.height=400,
l=prompt().split(' ').map(c=>c.split(',').map(v=>40*v)),
l.map(c=>{
  for(i=z;--i+z;)
    s=4/z,r=c[2],x=c[0]+r*Math.cos(a=i*s),y=c[1]+r*Math.sin(a),
    t.beginPath(),
    l.some(q=>c!=q&(d=x-q[0],e=y-q[1],d*d+e*e<q[2]*q[2]))||t.arc(z+c[0],z+c[1],r,a-s,a+s),
    t.stroke()
})
</script>

7

Python 274 bayt

Bu işlem stdin'den girdi alır ve ekrandaki her noktayı kontrol eder, pikselleri giderken birer birer çizer. Tam olarak verimli değil ama tüm kuralları takip ediyor.

c=[eval(s)for s in raw_input().split()]
import pygame
S=pygame.display.set_mode((500,500))
S.fill([255]*3)
for p in((x,y)for x in range(500)for y in range(500)if 0<min((((x-250)/25.-a)**2+((y-250)/25.-b)**2)**.5-r for(a,b,r)in c)<.1):S.set_at(p,[0]*3)
pygame.display.update()

Pygame ekranının çizim tamamlanır tamamlanmaz sona ereceğini unutmayın, cevabımın bir parçası olarak eklemem gerekip gerekmediğinden emin değildim, ancak görüntülemek için sonunda içeri girebilir raw_inputveya küçük bir döngü ekleyebilirsiniz. İşletim sisteminin yanıt vermemesinden şikayet etmesini durdurmak ve bunun gibi:

alive = True
while alive:
    pygame.display.update()
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            alive = False

Örnek resimler:

1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7, 1,2,0.7 görüntü tanımını buraya girin

0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4 görüntü tanımını buraya girin


3
@ edc65 Ne demek istediğinden emin değilim. Tam olarak yaptığı şey, dairelerin dışında 0 ila 0,1 birim (0 ila 2,5 piksel) arasında olan herhangi bir pikseli doldurmaktır. Matematiksel olarak çizmek için doğru yayları bulması gerektiğini mi söylüyorsunuz? Soruyu okumaktan bu benim için bir kısıtlama gibi görünmüyordu.
KSab

4

Perl - 430

@e=map{[map{int($_*32)}split',']}(split' ',<>);for$g(@e){for(0..3){($a[$_]>($q=$$g[$_&1]+(($_>>1)*2-1)*$$g[2]))^($_>>1)&&($a[$_]=$q)}}for(2,3){$a[$_]-=$a[$_-2]-1}for(@e){($x,$y,$r)=@$_;$x-=$a[0];$y-=$a[1];for$k($x-$r..$x+$r){for$l($y-$r..$y+$r){$i=(int(sqrt(($x-$k)**2+($y-$l)**2)+0.5)<=>$r)-1;$f[$l][$k]=($j=$f[$l][$k])<-1||$i<-1?-2:$i||$j;}}}print"P1
$a[2] $a[3]
".join("
",map{join' ',map{$_+1?0:1}@$_,('0')x($a[2]-@$_)}@f)."
"

Stdout'a bir pbm dosyası yazar.

Test görüntüsü (png'ye dönüştürülmüş):

İkinci test görüntüsü (png'ye dönüştürülmüş)

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.