Eratosthenes Elek, Adım Adım


15

Bir sayı N verildiğinde , sola hizalanmış bir N x N sayı panosu çizin , 1 boşluk bırakın (boşluk olarak) ( N = 5 olan diyagramları göstereceğim )

   2  3  4  5
6  7  8  9  10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

İşiniz adım adım Eratosthenes Elekini inşa etmektir. İlk olarak, 2 ile başlayın. Asal, bu yüzden orada bırakın ve 2 ile bölünebilen diğer tüm sayıları uygun sayıda boşlukla değiştirin.

   2  3     5
   7     9    
11    13    15
   17    19   
21    23    25

Ardından, bir sonraki yazdırılmamış numaraya gidin ( 3bu durumda) ve aynısını yapın.

   2  3     5
   7          
11    13      
   17    19   
      23    25

Ve böylece, N'ye ulaşana kadar .

İlk önce tüm ızgarayı yazdırmanız gerekir ve her yeni numaraya her gittiğinizde, kartı katları çıkarılmış olarak yazdırın. Aralarına boş bir çizgi yazdırdığınızdan emin olun!

Örnekler

Parantez içindeki metin ()sadece referans içindir, yazdırmanıza gerek yoktur

N = 2:

  2 (complete grid)
3 4

  2 (remove multiples of 2)
3  

N = 3:

  2 3 (complete grid)
4 5 6
7 8 9

  2 3 (remove multiples of 2)
  5  
7   9

  2 3 (remove multiples of 3)
  5  
7    

Unutmayın, bu , bu nedenle en az bayt içeren kod kazanır.


Normalde bir için N × N Peşinde eleme durdurmak elek N .
Neil

1
Örneğin, asal değilse N=10, bir 100noktada kaldırılacaktır. 1003 rakam olduğundan tüm rakamlar 3 karaktere doldurulmalı mı?
mbomb007

4
Neden olur bıraktı -align numaralar?
Dennis

2
Sondaki yeni satırlar kabul edilebilir mi?
Dennis

2
Yerleşik ızgaralara izin veriliyor mu? Çıktı, gönderideki örnekle aynı görünecek, ancak bir dize olmayacak.
JungHwan Min

Yanıtlar:


7

Jöle , 34 bayt

Ṿ€“1“ ”ys³G
>®i©1ḍoṛ®¦
²R;1©ÇÐĿÑ€Y

Çevrimiçi deneyin!

Nasıl çalışır

²R;1©ÇÐĿÑ€Y  Main link. Argument: n (integer)

²            Yield n².
 R           Range; yield [1, ..., n²].
   1©        Yield 1 and copy it to the register.
  ;          Append 1 to the range.
             This is the initial state. Let's call it S.
     ÇÐĿ     Call the second helper link until the results are no longer unique.
             This returns all unique results as an array.
        Ṅ€   Call the first helper link on each result.
          Y  Join, separating by linefeeds.

>®i©1ḍoṛ®¦   Second helper link. Argument: S (state)

>®           Compare all integers in S with the value in the register.
  i 1        Find the first index of 1 (i.e., the first number that is greater
             than the register.
   ©         Copy the index to the register. Let's call the index p.
     ḍ       Test all numbers in S for divisibility by p. This yield 1 for
             multiples of p, 0 otherwise.
      o      Logical OR; replace 0's with the corresponding values of S.
       ṛ®¦   Replace the 0 at index p with the corresponding element of S (p).
             For the purposes of the explanation, S is now the updated state.

Ṿ€“1“ ”ys³G  First helper link. Argument: A (array)

Ṿ€           Uneval each; convert all integers in A into strings.
  “1“ ”y     Replace each string "1" with the string " ".
        s³   Split into chunks of length n (command-line argument).
          G  Grid; separate row items by spaces (left-padding since the row items
             are strings), the rows themselves by linefeeds.

5

Perl, 250 243 231 202 157 bayt

$n=<>;@a=0..($e=$n*$n);$a[1]=$";for$p(1..$n){next if!$a[$p];for(1..$e){$a[$_]=""if!($p~~[(1,$_)]||$_%$p);printf"%-*s",1+length$e,$a[$_];say""if!($_%$n)}say}

Mevcut golf online test! (olarak çalıştırdığınızdan emin olun perl -M5.010 main.pl)

İki gerçek satırın her biri \ n yerine 1 bayt kaydeder.

Örnek çıktı (7 girişi):

   2  3  4  5  6  7  
8  9  10 11 12 13 14 
15 16 17 18 19 20 21 
22 23 24 25 26 27 28 
29 30 31 32 33 34 35 
36 37 38 39 40 41 42 
43 44 45 46 47 48 49 

   2  3     5     7  
   9     11    13    
15    17    19    21 
   23    25    27    
29    31    33    35 
   37    39    41    
43    45    47    49 

   2  3     5     7  
         11    13    
      17    19       
   23    25          
29    31          35 
   37          41    
43          47    49 

   2  3     5     7  
         11    13    
      17    19       
   23                
29    31             
   37          41    
43          47    49 

   2  3     5     7  
         11    13    
      17    19       
   23                
29    31             
   37          41    
43          47       

Ben çok iyi golf vermedi pozitif, bu yüzden eve geldiğimde ne kadar tıraş olabilir görmek için başka bir göz atacağım.

Düzenleme 1: -7 bayt ("print sprintf" i bariz "printf" olarak değiştirir)

Düzenleme 2: Ayrı bir değişken oluşturmak yerine çağrılan tek bir yerde $ d kullanılarak 12 bayt kaydedildi, bazı bildirimleri birleştirerek ve başka bir yere boşluk ekleyerek nextilk foreachdöngü içindeki deyim için koşullardan birini kaldırarak . Ek olarak 29 bayt, döngüler için ikisini tek bir döngü halinde yeniden çalışarak, iki değişken bildirimi ortadan kaldırarak ve unlessifadeleri if-not ifadelerine dönüştürerek gölgelendi . Bildirmek my$e=$n*$n;sonra $ üç değiştiriyoruz n * $ n $ e (bana bunlardan biri için bir paren düşmesi izin) ± 0 bayt verim ortaya çıktı, ama yine de tuttu.

Düzenleme 3: @Dada sayesinde, başka bir 40 bayt dışarıda bırakıldı (değişken bildirimler, 'foreach' for 'olmak', birkaç yerde örtülü $ _ ve printf deyimi boyutunu küçültmek). İlave 1 bayt if!($c%$p||$c==$p||$p==1)dönüştürülerek tıraş edildi if!($p~~[(1,$_)]||$_%$p). Ne yazık ki, dizi etrafındaki [] gereklidir, çünkü smartmatch operatörü ~~ hala deneyseldir ve gerçek dizilerde düzgün çalışmıyor gibi görünür, ancak bunun yerine bunlara yapılan referanslar üzerinde çalışır. İki noktalı virgül ve sondan sonra boş bir tırnak işareti kaldırılarak 4 bayt daha kaldırıldı say.


1
Bu iyi bir başlangıç, ama çok daha fazla golf yapabilirsiniz. Değişkenleri bildirmeyin (bu yüzden kullanmayın my). Kullanmak yerine içeri -pgirmek için bayrak kullanın . Bunun yerine yazın (bu talimat eşdeğerdir). Durumuna etrafında parantez Bırak örneğin (deyim değiştirici konumda yerine hiçbir başlatmak için gereken parantezi. : . Sen bırakabilirsiniz değişken ve yerine kullanılacak wiil Yaz. ( `` Sprintf` doc bu konuda ayrıntılı bilgi için )N$_$n=<>forforeachifif!$c%$nif(!$c%$n)@a@a=0..$efor$_printf"%*s",1+length$e,$a[$c]*
Dada

1
Yerine $"kullanın " ". say""yerine print"\n"(kodunuzda yeni bir satırsonu var ama yorum yazamıyorum) ( -M5.010komut satırına eklemek için ekleyeceksiniz , ancak bu bayt sayımı sayılmaz). 0..$e=$n*$nBaşlatılmasında muhtemelen bir bayt kaydetmek için kullanabilirsiniz $e. Perl golf ipuçlarına bir göz atın, birçok yararlı ipucu içerir. Ama yeni bir perl golfçü görmek güzel, hoş geldiniz! :) (ve yazım hatalarımı affet, önceki yorumumu çok hızlı yazabilirim)
Dada

@Dada Tavsiyeniz için teşekkür ederiz! Ben komut satırında kod çalışan çok tanıdık değilim (Ben bir dosya olarak çalıştırmak eğilimindedir) ama ben bu şekilde yapmaya bir göz atacağım. Gelince if!$c%$n,! operatörü% operatörü üzerinde önceliğe sahiptir, bu yüzden teknik olarak bu if((!$c)%$n)$ c = 0 (ki istemediğim) dışında herhangi bir şey için yanlış çıkıyor. Diğer ipuçlarına gelince, ne yapabileceğimi göreceğim! Çok teşekkür ederim!
Gabriel Benamy

Sen yok etmek zorunda bir dosya içine koydu yanı ise bu değişiklikler çalışacaktır, komut satırında çalıştırın. Üzgünüm !, kontrol etmek için bilgisayarımda değildim. Sanırım 160 karaktere kadar inebilmelisin.
Dada

5

PHP, 155 Bayt

for(;$d++<$n=$argv[1];$x&$a[$d]<1?:print"\n".chunk_split(join($a),$n*$l))for($i=$d*$x=$d>1;$n**2>=$i+=$d;)$a[$i]=str_pad($x|$i<2?"":$i,$l=strlen($n**2)+1);

@Crypto -3 Bytes Teşekkür Ederim @Titus -6 Bytes Teşekkür Ederim

Dene

Baskı sonrası döngü koşulunda ilk kez kullandığımda

Yıkmak

for(;$d++<$n=$argv[1];
$x&$a[$d]<1?:print"\n".chunk_split(join($a),$n*$l))
#after loop print the grid if $d = 1 or is prime
for($i=$d*$x=$d>1;$n**2>=$i+=$d;)
$a[$i]=str_pad($x|$i<2?"":$i,$l=strlen($n**2)+1);
#fills the array at first run and replace positions with space in the next runs 

Önceki Sürüm 174 Bytes

for(;$d++<=$n=$argv[1];!($d<2||$a[$d]>0)?:print chunk_split(join($a),$n*$l)."\n")for($i=$d<2?1:2*$d;$i<=$m=$n**2;$i+=$d)$a[$i]=str_pad($d<2?($i<2?"":$i):" ",$l=strlen($m)+1);  

1
Koşulu değiştiren -3 bayt: !($d<2||$a[$d]>0) =>$d>1&&$a[$d]<1
Kripto

1
-1 baytlık tamsayı uzunluğu elde etmek için, bu bir numara kullanarak $l=strlen($m)+1için$l=log10($m)+2
Crypto

1
-3 bayt: diğer iki oluşum $i=$d*$x=$d>1yerine $i=$d<2?0:$dve bunun yerine$x$d>1
Titus

1
-2 bayt: $n*$n>=$i+=$dyerine ($i+=$d)<=$m=$n**2ve $n*$ndiğer oluşumu için$m
Titus

1
-1 bayt: sondaki yeni satır yerine lider
Titus

3

Groovy, 201 195 191 Bayt

{n->a=(1..n*n).toArray();y={a.collect{(it?"$it":"").padRight((""+n*n).size())}.collate(n).each{println it.join(" ")}};a[0]=0;y(a);(2..n).each{b->(b+1..n*n).each{if(it%b==0){a[it-1]=0}};y(a)}}

Bu mutlak bir küme ... Sola hizalanmak bayt sayımı öldürdü. Ama hey, işe yarıyor. İşte 4 için çıktı:

   2  3  4 
5  6  7  8 
9  10 11 12
13 14 15 16

   2  3    
5     7    
9     11   
13    15   

   2  3    
5     7    
      11   
13         

   2  3    
5     7    
      11   
13         

Ungolfed:

{
    n->
    a = (1..n*n).toArray();                           // Create initial array.
    y = {                                             // Createa  printing utility closure.
        a.collect {                                   // Create an array collection of...
            (it ? "$it":"").padRight((""+n*n).size()) // If 0, store "", else store number & right pad it.
        }.collate(n).each{                            // Collate by n (break into nxn grid).
            println it.join(" ")                      // print each separated by spaces.
        }
    };
    a[0]=0;                                           // Remove first element.
    y(a);                                             // Print initial status.
    (2..n).each{                                      // From 2 to n...
        b->
        (b+1..n*n).each{                              // From current number + 1 to end of grid...
            if(it%b==0){                              // If current grid position is divisible...
                a[it-1]=0                             // Replace with 0.
            }
        }
        y(a)                                          // Print it.
    }        
}


2
Bu bana sola hizalı görünmüyor.
Dennis

Düzeltildi ... Şimdiye kadar düzenleme şansım olmadı ...
Sihirli Ahtapot Urn

@Dennis Aslında yorumlarınızı gördüm ve yorumunuza göre değiştirdiğini düşündüm.
Sihirli Ahtapot Urn

3

Perl, 115 114 113 112 bayt

İçin +1 içerir -a

STDIN'de giriş numarası ile çalıştırın:

perl -M5.010 sieving.pl <<< 7

sieving.pl:

#!/usr/bin/perl -a
$_*=$_;$a.="$_"x$|++|$"x"@+".($_%"@F"?$":$/)for/\d+/..$_;*_=a;s^^$$_++||say;$.++;s//$&%$.|$&==$.?$&:$&&$_/eg^eg

Yeterince yeni bir perl gerekiyor, böylece -a ima -n. Perliniz çok eskiyse bir-n seçenek .

İzin verilen bir satırsonu yazdırır.


2

Python 2, 199202 bayt

+3 bayt (erken
durmuyordum) @Oliver sayesinde -1 bayt (bir alanı kaçırdım)

def f(n,p={()}):
 m=n*n;g=['']+[[i,''][any(i>n and i%n<1for n in p)]for i in range(2,m+1)];x=min(set(g)-p);i=0
 while i<m+n:print' '.join('%%%ds'%-len(`m`)%v for v in g[i:i+n]);i+=n
 if x<=n:f(n,p|{x})

repl.it


1
Sen arasında boşluk kaldırabilirsiniz 1vefor
Oliver Ni

2

JavaScript (ES6), 190 189 bayt

Doğrudan konsola yazdırır.

f=(w,k=1,a=[...Array(w*w)].map((_,n)=>n&&n+1))=>k++<=w&&(k==2|a[k-2]&&console.log(a.map((n,x)=>`${n||''}    `.slice(0,`_${w*w}`.length)+(++x%w?'':`
`)).join``),f(w,k,a.map(n=>n==k|n%k&&n)))

gösteri


2

Toplu, 464 bayt

@echo off
set/an=%1,s=n*n,t=s,c=1
set p=
:l
set/ac+=1,t/=10
set p= %p%
if %t% gtr 0 goto l
for /l %%i in (1,1,%1)do call:i %%i
exit/b
:i
set l=
set/af=0
call:f %1 %1
if %f%==0 for /l %%j in (1,1,%s%)do call:j %1 %%j
exit/b
:j
set/am=%2,f=!(m-1),g=%2%%n
call:f %1 %2
if %f% gtr 0 set m=
set m=%m% %p%
call set l=%%l%%%%m:~0,%c%%%
if %g%==0 echo(%l%&set l=
if %2==%s% echo(
exit/b
:f
for /l %%l in (2,1,%1)do if %%l neq %2 set/af+=!(%2%%%%l)

Bu biraz zahmetliydi. Açıklama: Döngüyü kullanarak nistenen sütun genişliğini cve uygun dolgu miktarını hesaplayabilmesi için kare pyaparak başlar :l. - dan 1sonraki dış döngü, nher bir ızgara için bir kez çalışır ve alt rutini çağırır :i. İlk olarak değer 1 veya asal olup olmadığını kontrol eder; değilse, bu ızgara atlanır. İç döngü 1için n*ndaha sonra alt yordam çağrı, satır ve ızgaranın sütun ele:j. Her değer, şimdiye kadar bulunan asal sayılardan biri olup olmadığını veya şu ana kadar bulunan asal sayılardan hiçbirinin bölündüğünü kontrol eder. Öyleyse, değer çıktı arabelleğine birleştirilir ve daha sonra istenen sütun genişliğine kadar doldurulur. Tampon her yazdırılır ve temizlenirn ve ızgaranın sonuna fazladan boş bir satır eklenir. :fEtiket faktörü denetimi alt yordam gösterir; f (x, y), f2 arasındaki her tam sayı için 1 ekler ve xbuy hariç , ykendisini hariç tutar .


2

R 195 191 185 204 bayt

f=function(N){a=b=1:N^2;i=1;a[1]="";S=sprintf;while(i<=N){for(j in b)cat(a[j]<-S(S("%%-%is",nchar(N^2)),if(j==i|j%%i|i<2)a[j]else ""),if(j%%N)"" else"\n");cat("\n");i=(grep("\\d",a[-(1:i)],v=T)[1]:1)[1]}}

Kaydedilen 6 bayt için @Billywob'a teşekkürler!

Girintili, yeni satırlarla:

f=function(N){
   a=b=1:N^2 #Initial array
   i=1 #Turn counter
   a[1]="" #1 never shown
   S=sprintf
   while(i<=N){
      for(j in b)
         cat(a[j]<-S(S("%%-%is",nchar(N^2)),if(j==i|j%%i|i<2)a[j]else ""),
             if(j%%N)"" else"\n") #Newline at end of row
      cat("\n") #Newline between turns
      i=(grep("\\d",a[-(1:i)],v=T)[1]:1)[1] #Select next prime as next i
   }
}

Kullanımı:

> f(2)
  2 
3 4 

  2 
3   

> f(3)
  2 3 
4 5 6 
7 8 9 

  2 3 
  5   
7   9 

  2 3 
  5   
7     

> f(9)
   2  3  4  5  6  7  8  9  
10 11 12 13 14 15 16 17 18 
19 20 21 22 23 24 25 26 27 
28 29 30 31 32 33 34 35 36 
37 38 39 40 41 42 43 44 45 
46 47 48 49 50 51 52 53 54 
55 56 57 58 59 60 61 62 63 
64 65 66 67 68 69 70 71 72 
73 74 75 76 77 78 79 80 81 

   2  3     5     7     9  
   11    13    15    17    
19    21    23    25    27 
   29    31    33    35    
37    39    41    43    45 
   47    49    51    53    
55    57    59    61    63 
   65    67    69    71    
73    75    77    79    81 

   2  3     5     7        
   11    13          17    
19          23    25       
   29    31          35    
37          41    43       
   47    49          53    
55          59    61       
   65    67          71    
73          77    79       

   2  3     5     7        
   11    13          17    
19          23             
   29    31                
37          41    43       
   47    49          53    
            59    61       
         67          71    
73          77    79       

   2  3     5     7        
   11    13          17    
19          23             
   29    31                
37          41    43       
   47                53    
            59    61       
         67          71    
73                79       

> f(12)
    2   3   4   5   6   7   8   9   10  11  12  
13  14  15  16  17  18  19  20  21  22  23  24  
25  26  27  28  29  30  31  32  33  34  35  36  
37  38  39  40  41  42  43  44  45  46  47  48  
49  50  51  52  53  54  55  56  57  58  59  60  
61  62  63  64  65  66  67  68  69  70  71  72  
73  74  75  76  77  78  79  80  81  82  83  84  
85  86  87  88  89  90  91  92  93  94  95  96  
97  98  99  100 101 102 103 104 105 106 107 108 
109 110 111 112 113 114 115 116 117 118 119 120 
121 122 123 124 125 126 127 128 129 130 131 132 
133 134 135 136 137 138 139 140 141 142 143 144 

    2   3       5       7       9       11      
13      15      17      19      21      23      
25      27      29      31      33      35      
37      39      41      43      45      47      
49      51      53      55      57      59      
61      63      65      67      69      71      
73      75      77      79      81      83      
85      87      89      91      93      95      
97      99      101     103     105     107     
109     111     113     115     117     119     
121     123     125     127     129     131     
133     135     137     139     141     143     

    2   3       5       7               11      
13              17      19              23      
25              29      31              35      
37              41      43              47      
49              53      55              59      
61              65      67              71      
73              77      79              83      
85              89      91              95      
97              101     103             107     
109             113     115             119     
121             125     127             131     
133             137     139             143     

    2   3       5       7               11      
13              17      19              23      
                29      31                      
37              41      43              47      
49              53                      59      
61                      67              71      
73              77      79              83      
                89      91                      
97              101     103             107     
109             113                     119     
121                     127             131     
133             137     139             143     

    2   3       5       7               11      
13              17      19              23      
                29      31                      
37              41      43              47      
                53                      59      
61                      67              71      
73                      79              83      
                89                              
97              101     103             107     
109             113                             
121                     127             131     
                137     139             143     

    2   3       5       7               11      
13              17      19              23      
                29      31                      
37              41      43              47      
                53                      59      
61                      67              71      
73                      79              83      
                89                              
97              101     103             107     
109             113                             
                        127             131     
                137     139                     

Güzel, asla kodgolfing gereksinimlerine uymak için matrislerin nasıl düzgün yazdırılacağını anlayamıyorum. Yine de birkaç bayt kaydedebilirsiniz. Exponentiation operatörü ^, sekanslar üretilirken vektörlenmeyen tek operatördür , yani :örneğin 1:2^2almak için kullanabilirsiniz 1 2 3 4. İkincisi a=b=1:n^2, daha sonra for(j in b)döngü için başka bir vektör tanımlamak yerine kullanabilirsiniz . Size birkaç bayt tasarruf etmelidir.
Billywob

Aslında! Teşekkürler! Operatör önceliğinin kesin sırasını asla hatırlayamıyorum ...
plannapus

Neden f (2) ve f (3) 'deki sayılar arasında üç ve f (9)' daki iki boşluk var? Her zaman bir boşluk olmalı.
Oliver Ni

Ah doğru 3 karakter norm olarak ayarladım çünkü N = 10 ile test ediyordum, düzeltmeme izin ver.
plannapus

1

J, 125 bayt

p=:3 :'}."1,./('' '',.>)"1|:(-%:#y)]\((a:"_)`(<@":)@.*)"+y'
3 :'p@>~.|.(]*](*@|~+.=)({[:I.*){])&.>/\.(<"+i.-y),<]`>:@.*i.*:y'

Bu açık, J örtülü değil, ama örtük bir şekilde golf oynamak için bir yol olmalı.

kullanım

   p =: 3 :'}."1,./('' '',.>)"1|:(-%:#y)]\((a:"_)`(<@":)@.*)"+y'
   f =: 3 :'p@>~.|.(]*](*@|~+.=)({[:I.*){])&.>/\.(<"+i.-y),<]`>:@.*i.*:y'
   f 2
  2
3 4

  2
3  
   f 3
  2 3
4 5 6
7 8 9

  2 3
  5  
7   9

  2 3
  5  
7    
   f 4
   2  3  4 
5  6  7  8 
9  10 11 12
13 14 15 16

   2  3    
5     7    
9     11   
13    15   

   2  3    
5     7    
      11   
13         
   f 5
   2  3  4  5 
6  7  8  9  10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

   2  3     5 
   7     9    
11    13    15
   17    19   
21    23    25

   2  3     5 
   7          
11    13      
   17    19   
      23    25

   2  3     5 
   7          
11    13      
   17    19   
      23      

1

Mathematica, 133 bayt

Grid[#,Alignment->Left]~Print~"
"&/@FoldList[#/.(##|1&@@(2~r~i#2)->Null)&,(r=Range)[i=#^2]~Partition~#/.Rule[1,],Prime@r@PrimePi@#];&

1

PHP, 155 150 147 145 142 140 bayt

for(;$k++<$n=$argv[1];)if($k<2||$a[$k]){for($i=0;$i++<$n*$n;)echo$a[$i]=$k>1?$i>$k&$i%$k<1?"":$a[$i]:($i<2?"":$i),"\t\n"[$i%$n<1];echo"\n";}

Yıkmak

for(;$k++<$n=$argv[1];)
    if($k<2||$a[$k])    // if first iteration or number unprinted ...
{
    for($i=0;$i++<$n*$n;)
        echo
            $a[$i]=$k>1
                ?$i>$k&$i%$k<1
                    ?""         // sieve
                    :$a[$i]     // or copy value
                :($i<2?"":$i)   // first iteration: init grid
            ,
            // append tab, linebreak every $n columns
            "\t\n"[$i%$n<1]
        ;
    // blank line after each iteration
    echo"\n";
}

1
$a[$i]="";yerine unset($a[$i]);4 bayt kurtarmalı
Jörg Hülsermann

$i%$k<1!($i%$k)Bir bayt kurtarmak yerine
Jörg Hülsermann
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.