Çizgi çizme karakterlerini kullanarak bir sudoku panosu çizin


20

Bu kod golf. Bu meydan okuma için, bir yöntemi kabul edeceğim (tam bir programa ihtiyacınız yok), ancak yöntem imzası bayt sayısına doğru sayıyor ve tam imzayı (lamdba değil) görmek istiyorum. Yöntemin girdisi, 81 öğeli bir tamsayı dizisidir. Yöntemin çıktı / dönüş değeri diziyi bir ascii sudoku panosu olarak temsil eden bir dizedir.

Ezoterik bir dil ya da kesinlikle yöntemleri olmayan bir şey kullanıyorsanız, adapte olabilirsiniz, ancak dil bunu destekliyorsa, bir şeyin "gerçek" ungolfed programa bağlı olabileceğini görmek istiyorum. yöntem vücudun kendisi ile çalışmak için bir acıdır. Bu gereksinim Jelly veya 05AB1E gibi dilleri engellemek değil, Java gibi dillerin bu platform için anlamlı bir şey oluşturmasını kolaylaştırmak içindir.

Giriş için 1-9 tamsayı değerleri bariz anlamlara sahip olmalıdır. 0 değeri her zaman boş bir hücre olarak yorumlanmalıdır. 1-9 aralığının dışındaki herhangi bir şeyi boş hücre olarak da yorumlayabilirsiniz, ancak bu gerekli değildir. Diziden buluta konumlandırma sol üstte başlar ve bir sonraki satıra geçmeden önce her satırı soldan sağa doldurur.

Kutular için, dışarıda ve her 3x3 bölge arasında çift çizgiler ve diğer hücreler arasında tek çizgiler istiyorum. Bunlar çizgi çizme karakterleriyle çizilmelidir (G / Ç biçiminiz dizeleri bir karakter dizisi yerine bayt dizisi olarak temsil ediyorsa, bunları UTF-8 veya kod sayfası 347 gibi iyi bilinen bir kodlamada temsil etmelisiniz).

Bu meydan okuma için, ben am DEĞİL sudoku bulmaca oluşturmak isteyen. Bu işlevin girdisidir. Ben am DEĞİL bulmacayı çözmek isteyen. Sizden sadece size verileni "çizmek" için bir dize üretmenizi istiyorum (mümkün olduğunca az bayt).

Örnek Giriş:

Dizi için değerler:

{ 8, 5, 0, 0, 0, 2, 4, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 2, 3, 0, 5, 0, 0, 0, 9, 0, 0 ,0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 7, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 4, 0}

Değerler, diliniz için doğal olan herhangi bir mekanizmayı kullanabilir: int [], ArrayList, sıra, tuple, basamak dizisi, her hücre için girişte bir değere sahip olduğunuz sürece (yalnızca doldurulmuş hücreler için konumlarla eşleme yok) ). Girişin sağlandığını unutmayın ... bayt sayımınızın bir parçası değildir. Ancak girdi herhangi bir sudoku bulmacasını temsil edebilir ve bulmacanın geçerli bir çözümü bile olmayabilir . O bulmaca varsaymak alabilirim olduğunu yazdırılabilir. Örneğin 82 elementle bir şey elde edemezsiniz.

Ayrıca makul bir sabit genişlikli yazı tipi kabul edersiniz.

İlgili Çıktı:

╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗
║ 8 │ 5 │ ║ │ │ 2 ║ 4 │ │ ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║ 7 │ 2 │ ║ │ │ ║ │ │ 9 ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║ │ │ 4 ║ │ │ ║ │ │ ║
╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣
│ │ │ ║ 1 │ │ 7 ║ │ │ 2 ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║ 3 │ │ 5 ║ │ │ ║ 9 │ │ ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║ │ 4 │ ║ │ │ ║ │ │ ║
╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣
│ │ │ ║ │ 8 │ ║ │ 7 │ ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║ │ 1 │ 7 ║ │ │ ║ │ │ ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
│ │ │ ║ │ 3 │ 6 ║ │ 4 │ ║
╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝

4
Yöntem kısmından emin misiniz? Bu pek çok dil için anlamsızdır (örn. Yöntemsiz diller).
Cyoce

1
Yöntemleri olmayan diller için uyum sağlayabilirsiniz. Ama eğer yaparlarsa, "gerçek" bir programa bağlanmak için gerçekten yararlı olabilecek bir şey arıyorum. Bunu soruya ekleyeceğim.
Joel Coehoorn

2
Lambdalara izin vermemenin sebebi nedir? Bunlar kesinlikle "gerçek" bir programa ve aynı zamanda adlandırılmış işlevlere / yöntemlere
Julian Wolf

2
Nitpicky ama önemli: "ASCII kutu çizim karakteri" diye bir şey yoktur. ASCII, 0 ile 127 arasındaki kodları kapsar, hiçbiri kutu çizim karakteri değildir. Son zamanlarda, Unicode standarttır, ancak birkaç farklı kodlaması vardır: UTF-8, UTF-16 vb. Codepage 437 gibi daha eski kodlamalar, tek baytlık kutu çizim karakterlerini destekler. ASCII aralığının dışındaki karakterleri kullandığınızda, hangi kodlamaların geçerli olduğunu belirtmelisiniz. en.wikipedia.org/wiki/Box-drawing_character en.wikipedia.org/wiki/Unicode
Level River St

2
Nesne yönelimli olmayan dillerde bir yönteme mümkün olan en yakın eşdeğeri elde etmek için "Yöntem" muhtemelen "adlandırılmış işlev" olmalıdır. (Örneğin, yaygın olarak kullanılan bir dil olan C'nin yöntemleri yoktur, ancak işlevleri vardır.) Hangi yöntemlerin olduğunu bildiğim çoğu dilde, bu dil adlandırılmış bir işleve eşdeğerdir. (Bilinen en iyi istisna, adlandırılmış bir işlev kullanmanın, bu yöntem için bir yöntem kullanmaktan çok daha mantıklı olacağı C ++ 'dır. .)

Yanıtlar:


9

Python 3 , 232 bayt

Bu aşağı golf yardımcı olanlar için teşekkürler.

Şifreleme içindeki şifreleme ...

q=lambda x,y:x+y+x+y+x
r=lambda a,b,c,d,e:a+q(q(b*3,c),d)+e+"\n"
print(((r(*"╔═╤╦╗")+q(q("║ %d │ %d │ %d "*3+"║\n",r(*"╟─┼╫╢")),r(*"╠═╪╬╣"))+r(*"╚═╧╩╝"))%eval(input())).replace(*"0 "))

Çevrimiçi deneyin!

Golf oynamak için.


Bunu nasıl fark etmedim ... Python 2'yi kullanmamın tüm nedeni bu, ama teşekkürler.
Sızan Rahibe

1
Aslında Python 3'ü kullanmaktan daha iyi durumdasınız çünkü o zaman ilk satıra ihtiyacınız olmayacak.
Outgolfer Erik

1
Son satırda daha fazla paren kaldırabilirsiniz: tio
Conor O'Brien

F tanımını kaldırın ve i=["╔"+(g+"╦")*2+g+"╗"]+d+2*(["╠"+(e+"╬")*2+e+"╣"]+d)+["╚"+(h+"╩")*2+h+"╝"]4 bayt olarak tanımladığım i olarak tanımlayın
officialaimm

7

C (GCC) , 398 395 291 bayt

Ters dize çalışarak 3 bayt ve Leaky Nun sayesinde 104 (!) Bayt kurtardı.

#include<locale.h>
#define q(x,y) x y x y x
#define D L"╝"q(q("═══","╧"),"╩")"╚"q(q("\n║"q(q(" & ","│"),"║")"║","\n╢"q(q("───","┼"),"╫")"╟"),"\n╣"q(q("═══","╪"),"╬")"╠")"\n╗"q(q("═══","╤"),"╦")"╔"
i;f(int*t){setlocale(LC_ALL,"");for(i=721;i--;)wprintf(L"%lc",D[i]%19?D[i]:*t++?48+t[-1]:32);}

Çevrimiçi deneyin!

C (gcc) , 395 bayt

Bunu burada tutacağım, böylece programın nasıl çalıştığı konusunda daha açık.

#include<locale.h>
#define A L"\n╢───┼───┼───╫───┼───┼───╫───┼───┼───╟"
#define B L"\n║ & │ & │ & ║ & │ & │ & ║ & │ & │ & ║"
#define C L"\n╣═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╠"
#define E B A B A B
#define D L"╝═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╚"E C E C E L"\n╗═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╔"
i;f(int*t){setlocale(LC_ALL,"");for(i=721;i--;)wprintf(L"%lc",D[i]%19?D[i]:*t++?48+t[-1]:32);}

Çevrimiçi deneyin!

C'de unicode ile çalışmak ... maliyetlidir. int*Bağlantıda ve belirtimde gösterildiği gibi girişi alır .

Ben dize hardcoding yerine bazı sayı büyü kullanarak bayt kaydedebilir miyim göreceğim.



@LeakyNun Huh, teşekkürler! TIO'ya göre 291 bayt
Conor O'Brien

TIO, SBCS kullanarak sayıyor .
Leaky Nun

6

PHP , 297 bayt

<?for(;$l<19;$l++)echo$l&1?strtr(vsprintf(str_pad("",67,"║ %d │ %d │ %d "),array_slice($_GET,9*($l/2^0)-9,9)),0," "):str_pad([╔,╟,╠,╚][$b=$l?$l<18?$l%6<1?2:1:3:0],108,strtr("11101110111".[╦,╫,╬,╩][$b],[[╤,═],[┼,─],[╪,═],[╧,═]][$b])).[╗,╢,╣,╝][$b],"
";

Çevrimiçi deneyin!

Expanded

for(;$l<19;$l++)  # loop thrpugh lines
  echo$l&1 # Output
    ?strtr(
        vsprintf(str_pad("",67,"║ %d │ %d │ %d ") # formated string for lines with numbers
        ,array_slice($_GET,9*($l/2^0)-9,9)) # nine items of the input array
      ,0," ") #replace zeros with space
    :str_pad([╔,╟,╠,╚][$b=$l?$l<18?$l%6<1?2:1:3:0] # start character non number lines and switch number four cases
      ,108 # fill too 108 bytes
      ,strtr("11101110111".[╦,╫,╬,╩][$b] # with string 
        ,[[╤,═],[┼,─],[╪,═],[╧,═]][$b]))  #replace ones and zero with the two character in array chosed 
    .[╗,╢,╣,╝][$b] # end row with chosen character
  ,"
    "; # end line with new line

her iki versiyon için de kullanılan fonksiyonlar

vsprintf , strtr , str_pad , array_slice , array_chunk

PHP , 313 bayt

<?$r=($s=str_pad)(╔,108,($t=strtr)(($p=11101110111).╦,[╤,═])).╗;foreach(array_chunk($_GET,9)as$v)$r.=$t(vsprintf($s("
",68,"║ %d │ %d │ %d "),$v),0," ").(++$k%9?$k%3?$s("
╟",109,$t($p.╫,[┼,─])).╢:$s("
╠",109,$t($p.╬,[╪,═])).╣:"");echo$r.$s("
╚",109,$t($p.╩,[╧,═])).╝;

Çevrimiçi deneyin!


Bu nasıl çalışıyor?
Cyoce

@Cyoce Yeni
sürümüm

5

T-SQL, 445 437 bayt (381 karakterde)

DECLARE @r INT=0,@ NVARCHAR(999)=N'╔=╤=╤=╦=╤=╤=╦=╤=╤=╗P'p:SELECT @+=FORMAT(CAST(SUBSTRING(a,@r*9+1,9)AS INT),N'║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║P')FROM t
SET @r+=1IF @r=9SET @+=N'╚=╧=╧=╩=╧=╧=╩=╧=╧=╝P'ELSE IF @r%3=0SET @+=N'╠=╪=╪=╬=╪=╪=╬=╪=╪=╣P'ELSE SET @+=N'╟-┼-┼-╫-┼-┼-╫-┼-┼-╢P'IF @r<9GOTO p
PRINT REPLACE(REPLACE(REPLACE(REPLACE(@,'=',N'═══'),'-',N'───'),'0',' '),'P',CHAR(13))

Giriş kolonu saklanan basamak bir dizi yoluyladır a önceden var olan Tablo t , onaylı yöntemlere göre .

Biçim ve Açıklama :

DECLARE @r INT=0, @ NVARCHAR(999)= N'╔=╤=╤=╦=╤=╤=╦=╤=╤=╗P'
p:
    SELECT @+= FORMAT(CAST(SUBSTRING(a, @r*9+1, 9) AS INT),
        N'║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║P') FROM t
    SET @r+=1
    IF @r=9 SET @+= N'╚=╧=╧=╩=╧=╧=╩=╧=╧=╝P'
    ELSE IF @r%3=0 SET @+= N'╠=╪=╪=╬=╪=╪=╬=╪=╪=╣P'
    ELSE SET @+= N'╟-┼-┼-╫-┼-┼-╫-┼-┼-╢P'
IF @r<9 GOTO p
PRINT REPLACE(REPLACE(REPLACE(REPLACE(@, '=',N'═══'), '-',N'───'), '0',' '), 'P',CHAR(13))

Halkanın üst satırda ben kolon gelen giriş dizesi sonraki 9 basamak alıyorum a önceden var tabloda t .

Bu rakam dizesini bir tamsayıya dönüştürüyorum ve FORMATözel bir metin şablonu kullanarak görüntülemek için .Net işlevini kullanıyorum '║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║P'.

Bundan sonra uygun bölücü çizgisini eklerim ve çıktıdan önce bayt tasarrufu yapan bazı değişiklikler yaparım.

Çıktı, sonuçlar bölmesinde görüntülenir:

╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗
║ 8 │ 5 │   ║   │   │ 2 ║ 4 │   │   ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║ 7 │ 2 │   ║   │   │   ║   │   │ 9 ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║   │   │ 4 ║   │   │   ║   │   │   ║
╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣
║   │   │   ║ 1 │   │ 7 ║   │   │ 2 ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║ 3 │   │ 5 ║   │   │   ║ 9 │   │   ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║   │ 4 │   ║   │   │   ║   │   │   ║
╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣
║   │   │   ║   │ 8 │   ║   │ 7 │   ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║   │ 1 │ 7 ║   │   │   ║   │   │   ║
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
║   │   │   ║   │ 3 │ 6 ║   │ 4 │   ║
╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝

Daha önce diğer çizim karakterleri için bazı ek yedeklerim vardı, ama sonuçta beni byte kurtarmadılar.

DÜZENLEME 1 : 1@r yerine sıfırdan başlayarak ve bazı gereksiz alanları kaldırarak 8 bayt kaydetti .


4

Retina , 196167 bayt

.{27}
¶N#=XZ#Q¶|$&
\d{9}\B
$&¶M#─┼Y#P¶|
\d{3}
 $& |
\B\d
 │ $&
^¶.*
B#=RT#E
$
¶H#=UW#K
+`#([^#¶]+)([^#¶])#
#$1#$2#$1#$2#$1#
#(.)#
$1$1$1
T`0=|#L` ═-╬

Çevrimiçi deneyin! Uzunluğu 81 olan bir dize olarak girdi alır. Açıklama: Kutu çizim karakterleri üç bayta mal olduğundan, unicode kod noktaları kodda ═-╬temsil edilir =|#A-Z(tüm karakterler kullanılmaz, ancak aralıklara yapışmak bayt kazandırır). Ayrıca satırlar #işaretler kullanılarak sıkıştırılır : 'a a#bcd#egenişler abbbcbbbcbbbdbbbcbbbcbbbdbbbcbbbcbbbe.

.{27}
¶N#=XZ#Q¶|$&

╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣Her üçüncü satır için ekler , artı 27'nin her grubunun başında a .

\d{9}\B
$&¶M#─┼Y#P¶|

╟───┼───┼───╫───┼───┼───╫───┼───┼───╢Diğer satırlar arasına ekler , artı bu satırların başlangıcında s.

\d{3}
 $& |

Her üç basamaktan sonra ekler . Tüm s şimdi eklenmiştir.

\B\d
 │ $&

|Kalan tüm basamak çiftlerinin arasına s ekler . (Bu, bir borudan ziyade gerçek kutu çizim karakteri. Maalesef karakterlerin ─│┼, yer tutucuları kullanırken değer vermek için birbirlerinden çok uzak kodlar ve çift kutu karakterleri var.)

^¶.*
B#=RT#E

İlk satırı olarak değiştirir ╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗(bu, ilk satırı ilk sıra eklemeden 1 bayt kaydeder).

$
¶H#=UW#K

╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝Son satırdan sonra ekler .

+`#([^#¶]+)([^#¶])#
#$1#$2#$1#$2#$1#

a#bcd#eÖnce a#bc#d#bc#d#bc#e, sonra için genişler a#b#c#b#c#b#d#b#c#b#c#b#d#b#c#b#c#b#e.

#(.)#
$1$1$1

Olarak #b#değiştirildi bbb. Bu dekompresyonu tamamlar.

T`0=|#L` ═-╬

Tüm sıfır girişleri siler ve yer tutucuları kutu çizim karakterleriyle değiştirir.


0Boşluk ile değiştirmeyi unuttun .
Sızan Rahibe

Ayrıca, sınır ve 3x3 bölgelerden ziyade her satırın etrafında çift çizgi vardır.
Joel Coehoorn

@JoelCoehoorn Düzeltildi, üzgünüm.
Neil

@LeakyNun Teşekkürler, bunu gözden kaçırmıştım. (Ayrıca, boşluklarla biten veya özellikle yalnızca içeren satırlardan kaçınmayı seviyorum, bu yüzden 2 baytlık alternatif bir tasarruf aradım.)
Neil

3

SOGL V0.12 , 174 172 164 160 158 bayt

«ž#>]Wž²6√±_ΕΨ╥╬]v←ē⅓ZΗ⌡z∫◄‽q   §↑╗∑Ολ[Μ↕z↓/∆Yn⁄:Ο║χ≥¾▓g*≈]═+π℮─6⁽SE/⁷,0+►Ƨ⌡u\^⁄-▼0cΦ“╤─┼╬│║═╔╗╚╝”Φ⅜nΡ¡ΞΨīŗ(`½│uģ“ ╬ζ─{ζ} 6Δ¹∑A'⁄─{IaW}¹∑#¶ŗ3 ¶ŗ ”+Ƨøp+!!┌d0@ŗčŗ

Aşırı uzun açıklama:

...“                          push a big base-43 encoded number; will be used later. It's pushed here to save a byte on a quote
    ...”                      push "╤─┼╬│║═╔╗╚╝" - the chars in SOGLs encoding
        ...“                  push 679301851737965572513837476350078477
             ╬                push "╬"
              ζ               convert it to its codepoint (9580)
               ─              convert that number to an array of base-9580 numbers
                {ζ}           convert each number to a character (pushing each on the stack)
                    6Δ        push all ascii chars up to 6 (" !"#$%&'()*+,-./0123456")
                      ¹∑      join all the strings on the stack together ("╤─┼╬│║═╔╗╚╝╦╟╫╢╠╪╣╧╩ !"#$%&'()*+,-./0123456")
                        A     save on variable `A`. Now ontop of the stack is the 1st big number
                         '⁄─  onvert from base 43

{   }                           for each number do
 I                                increase
  aW                              get its position in the variable A
     ¹∑                         join all the strings ontop of the stack (the loop above pushed each char separately)
       #¶ŗ                      replace quote (") characters with newlines
          3 ¶ŗ                  replace 3s with "¶"
               ”+               append "”"
                 Ƨøp+           append "øp"
                     !!         execute the created code as SOGL
                       ┌        push "-"
                        d       push variable d - defaults to string input. In a full program could be set as an input
                         0@ŗ    replace zeroes with spaces
                            č   chop into an array
                             ŗ  replace ["-" with input chopped - so each iteratively]

Yürütülen program:

───!#
 - $
¶%&¶'(
)╪)╪)+
)╤)╤),
)╧)╧).
┼#
+╬+/
0!╫0!1
,╦,2
.╩.4
5│$║&
#0
═══)
$│$5
║&&%
╠/╬+╣6'*
╟1╫0!╢(
(6
╔2╦,╗6'**╚4╩.╝”øp

son satır hariç hepsi sadece in the entire program replace occurrences of the last char of this line with the rest of this line. Karakterlerin yarısını rastgele ascii yapmak mümkün olmasının nedeni budur (ancak boşlukların, tire işaretlerinin ve tırnak işaretlerinin kullanışlı bir şekilde kullanılmasını anlamak biraz zaman aldı)

...”    push the whole sudoku grid
    øp  print nothing (prevents bug that this code would already print and pop the result)

Buradan Deneyin!
Çevrimiçi tercüman kodu daha doğru çünkü sekmeler SE ile çalışmaz

-8 bayt: anakartın tamamını sıkıştıran kaba kuvvet değişimi, ardından yabancı karakterleri (kod sayfasına) kod noktalarıyla değiştirir. Bunu yapmak eski programdan bir saat daha az sürdü ...
-4 bayt: sıkıştırılmış dizgeyi sıkıştırmak ...
-2 bayt: dizi yerine değişken + dize kullanmak


2

JavaScript (ES6), 246 bayt / 198 karakter

(n,r=(x,y)=>x+y+x+y+x,q=s=>([u,w,x,y,z]=[...s[0]],u+r(r(w+w+w,x),y)+z+`
`))=>q`╔═╤╦╗`+n.reduce((o,v,i)=>o+"║││"[i++%3]+` ${v||" "} `+(i%9?e:`║
`+(i-27&&i-54?i<81?q`╟─┼╫╢`:e:q`╠═╪╬╣`)),e="")+q`╚═╧╩╝`

Girdi, bir tamsayı dizisidir. Aynı iki yardımcı işlevi kullanarak sona erdiLeaky Nun'in Python cevabı ile , bu yüzden kredi oraya gidiyor.

Eğer function , 263 bayt / 215 karakter

function g(n,r=(x,y)=>x+y+x+y+x,q=s=>([u,w,x,y,z]=[...s[0]],u+r(r(w+w+w,x),y)+z+`
`)){return q`╔═╤╦╗`+n.reduce((o,v,i)=>o+"║││"[i++%3]+` ${v||" "} `+(i%9?e:`║
`+(i-27&&i-54?i<81?q`╟─┼╫╢`:e:q`╠═╪╬╣`)),e="")+q`╚═╧╩╝`}

Snippet'i Test Et

81 sayının herhangi bir girişi desteklenir ( 1234, 1, 2, 3, 4. [1 2 3 4], Vb.). En iyi tam sayfa olarak görüntülenir.

f=
(n,r=(x,y)=>x+y+x+y+x,q=s=>([u,w,x,y,z]=[...s[0]],u+r(r(w+w+w,x),y)+z+`
`))=>q`╔═╤╦╗`+n.reduce((o,v,i)=>o+"║││"[i++%3]+` ${v||" "} `+(i%9?e:`║
`+(i-27&&i-54?i<81?q`╟─┼╫╢`:e:q`╠═╪╬╣`)),e="")+q`╚═╧╩╝`

onload=I.oninput=_=>O.innerHTML=(m=I.value.match(/\d/g))&&m.length==81?f(m.map(x=>+x)):''
<textarea id=I rows=3 style="width:95%">8, 5, 0, 0, 0, 2, 4, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 2, 3, 0, 5, 0, 0, 0, 9, 0, 0 ,0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 7, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 4, 0</textarea>
<pre id=O>


2

Toplu, 332 bayt

@echo off
set/ps=
set s=%s:0= %
call:l É Í Ñ Ë »
set t="Ç Ä Å × ¶"
for %%i in (%t% %t% "Ì Í Ø Î ¹" %t% %t% "Ì Í Ø Î ¹" %t% %t% "È Í Ï Ê ¼")do call:c %%~i
exit/b
:c
set t=º
for %%j in (³ ³ º ³ ³ º ³ ³ º)do call set t=%%t%% %%s:~,1%% %%j&call set s=%%s:~1%%
echo %t%
:l
set t=%2%2%2%3%2%2%2%3%2%2%2
echo %1%t%%4%t%%4%t%%5

Konsolun CP437'de olması gerekir. Bu sizin varsayılanınız CHCP 437değilse, konsolunuz TrueType yazı tiplerine ayarlanmışsa komutu kullanarak değiştirebilirsiniz . (Raster yazı tipleri yalnızca CP437 zaten varsayılan kod sayfanızsa çalışır.) Kod CP437'de böyle görünür:

@echo off
set/ps=
set s=%s:0= %
call:l ╔ ═ ╤ ╦ ╗
set t="╟ ─ ┼ ╫ ╢"
for %%i in (%t% %t% "╠ ═ ╪ ╬ ╣" %t% %t% "╠ ═ ╪ ╬ ╣" %t% %t% "╚ ═ ╧ ╩ ╝")do call:c %%~i
exit/b
:c
set t=║
for %%j in (│ │ ║ │ │ ║ │ │ ║)do call set t=%%t%% %%s:~,1%% %%j&call set s=%%s:~1%%
echo %t%
:l
set t=%2%2%2%3%2%2%2%3%2%2%2
echo %1%t%%4%t%%4%t%%5

2

Diğer cevaplardan toplanan fikirler ile:

C # (.NET Core) , 401 bayt, 349 Karakter

string s(string x){Func<string,string,string>q=(m,n)=>m+n+m+n+m;var a="╔"+q(q("=","╤"),"╦")+"╗";for(var i=0;i<9;) {a+=int.Parse(x.Substring(i*9,9)).ToString("\n║"+q(q(" 0 ","│"),"║")+"║\n")+(i++<8?(i%3>0?"╟"+q(q("-","┼"),"╫")+"╢":"╠"+q(q("=","╪"),"╬")+"╣"):"╚"+q(q("=","╧"),"╩")+"╝");}return a.Replace("=","═══").Replace("-","───").Replace("0"," ");}

Ungolfed:

static public string s(string x)
{
    Func<string,string,string>q=(m,n)=>m+n+m+n+m;
    var a="╔"+q(q("=","╤"),"╦")+"╗";
    for (var i=0;i<9;) //once per row
    {
        //parse that row to an int, then spit out a formatted string
        a += int.Parse(x.Substring(i*9,9)).ToString("\n║"+q(q(" 0 ","│"),"║")+"║\n") 
          // as well as a trailing row for the box
          + (i++<8?(i%3>0?"╟"+q(q("-","┼"),"╫")+"╢":"╠"+q(q("=","╪"),"╬")+"╣"):"╚"+q(q("=","╧"),"╩")+"╝");
    }
    //expand placeholder characters before returning
    return a.Replace("=","═══").Replace("-","───").Replace("0"," ");
}

Çevrimiçi deneyin!

Cevabım:

C # (.NET Çekirdek) , 509 430 418 bayt, 328 karakter

string b(string x){var a="╔=╤=╤=╦=╤=╤=╦=╤=╤=╗\n║";for(int i=0,j=0,k,l,m;j<3;j++)for(k=0;k<3;k++){for(l=0;l<3;l++)for(m=0;m<3;)a+=" "+x[i++]+(m++<2?" │":" ║");a+=i<80?(k<2?"\n╟-┼-┼-╫-┼-┼-╫-┼-┼-╢\n║":"\n╠=╪=╪=╬=╪=╪=╬=╪=╪=╣\n║"):"\n╚=╧=╧=╩=╧=╧=╩=╧=╧=╝";}return a.Replace("=","═══").Replace("-","───").Replace("0"," ");}

Ungolfed:

public string s(string x)
{
    var a = "╔=╤=╤=╦=╤=╤=╦=╤=╤=╗\n║";
    for (int i=0,j=0,k,l,m;j<3;j++)
    {
        for (k = 0; k < 3;k++)
        {
            for (l = 0; l < 3; l++)
            {
                for (m = 0; m < 3;)
                    a += " " + x[i++] + (m++ < 2 ? " │" : " ║");
            }
            a += i < 80 ? (k < 2 ? "\n╟-┼-┼-╫-┼-┼-╫-┼-┼-╢\n║": "\n╠=╪=╪=╬=╪=╪=╬=╪=╪=╣\n║") 
                        : "\n╚=╧=╧=╩=╧=╧=╩=╧=╧=╝";
        }
    }
    return a.Replace("=", "═══").Replace("-","───").Replace("0"," ");
}

I also looked at using a lambda for the `for` loops here, but it actually cost me one byte (saved 10 bytes per loop, with 41 bytes of overhead).

Çevrimiçi deneyin!


Her çizim karakterini iki bayt olarak saymanız mı gerekiyor?
BradC

Yaptım, şimdi düzelttim. Söz konusu karakterlere hitap etmek ve bayt yerine karakter saymak istemiştim, ama sanırım şimdi çok geç.
Joel Coehoorn

Evet, bayt daha zordur, bazı ascii oyuncuları baytları kurtarır ancak karakterleri etkilemez (hatta karakterlere zarar vermez). T-SQL üzerinde çalışıyorum ve char vs nchar oldukça büyük bir fark.
BradC

1

Yonga , 3645 bayt

... bu bir yazım hatası değil ...

ooooooZZ-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-).
|`xxxx-x--(x---x---x---x---x-v-x---x---x---x---x---x-.`K-)-K-)-K-)-K-).
|b|`xx-x--(x-v-x---x-v-x---x-x-x---x-v-x---x-v-x---x-x-x---x-v-x---x-.`K-).
|>xd`x-x(v-x-x-x-v-x-x-x-v-x-x-x-v-x-x-x-v-x-x-x-v-x-x-x-v-x-x-x-v-x-x-x-.|
||`--x-x-x(x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x/.
|`--z',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\',/\','
`-. |,< >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.| >.|
*-x-/xZ/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ^/xZ'
Z~' |`'|`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`' |`','`'
    `)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)-K-)'
=
oooooo).h
`)))--^M^Zh
=
oooooo
|    `(--------------------------------------------------------------------------------------------------------va
KZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^cg
)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx-xKZvvZ
xxxxxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxxx-Kxxxx}e
)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)x))xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)x))xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)x)b`feac
  c
=
oooooo
,'   `(--------------------------------------------------------------------------------------------------------.cba
KZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^x^^)v--.
xx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxxx-xK-'f e`.
)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx-x-K-+Z+Z}e
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxK^}b gac
xxxxxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxxx-K^d
=
oooooo
,-'
KZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZtabgfv------.
)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx-xK^^x-Zv-vZ}e
xxxxxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxxxK^---^}cade,]b
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)-K----^-^^~'
,v'
db
=
oooooo
,--' `(--------------------------------------------------------------------------------------------------------v-.,-v-ZZZZZZZZZZZZf
KZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'a{x.df
)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xx)xxKx-xxv+Zc
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)x-KZx+bge
xx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxx)xxxxxxxxxxxx---K\--^c
 a^b
=
oooooo
,---'`(--------------------------------------------------.
KZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'gf
)xxxxx)xxxxx)xxxxx)xxxxx)xxxxx)xxxxx)xxxxx)xxxxx)xxxxx)xx-^KZc
)xxxxx)x)xxx)x)xxx)xxxxx)x)xxx)x)xxx)xxxxx)x)xxx)x)xxx)xxbahKZ\ZZZ
x))xxxxxxxxxxxxxxxx))xxxxxxxxxxxxxxxx))xxxxxxxxxxxxxxxx))-K-eh|fff
 ,--K-v-v-K--v-vK-v---K-----K-----K-----K-----K-----K `--Z-Z--'
A/ab/B/e/C/cd/D/-e/A
*}s

Çevrimiçi deneyin! , bir çeşit. TIO sürümü, yolun yaklaşık üçte birini (toooooo 60 saniyeden daha kısa bir sürede sona ermesi sonra ) içerir. Tam sürüm makinemde yaklaşık 1m25s sürüyor ve TIO yaklaşık yarım hızlı görünüyor. Bu aynı zamanda TIO'nun sadece ilk 7 çıkış hattını gösterdiği anlamına gelir.

İlk taslağım büyük bir 19758 bayt ağırlığındaydı ve kaçmak için yaklaşık 8m30 aldım. Nihai çözüm, golf öncesi, sadece 2m07s alan bir 5980 baytlık bir spry idi.

Öyleyse, nasıl çalışır?

Bu, 82 bayt, 81 basamaklı bir dize alır ve bunu bir sonlandırıcı izler. \0veya \nhatta başka bir sayı yapacaktır. (Bu uygulama aslında sadece ilk 81'e bakar, ancak en az bir tane daha gerektirir, çünkü Chip girdisini tükettiğinde sonlandırılacaktır. Bu kabul edilemezse, bayrak -z, sonsuz sayıda\0 bayt Kısaltılmış TIO kodu aslında 81 baytın tümüne ulaşmaz, bu nedenle nokta orada tartışmalıdır.

Bunu uyguladığım şekilde, sadece girdinin düşük 4 bitine bakar, bu yüzden her şey, gerçek ikili verilerden, Shakespeare'in daha az bilinen çalışmalarına kadar bir sudoku 'bulmaca' olabilir. Düşük 4 biti sıfır olan herhangi bir karakter boşluk (özel bir durum) olarak görünür, diğer tüm karakterler123456789:;<=>? . (Yani, son birkaç rakam basamak değildir, ancak normal sudokuda da 10 geçerli bir sayı değildir).

Kutu çizim karakterleri için, her biri 3 bayta eşit olan UTF-8 üretir.

Gerçek uygulama ne olacak?

Chip, entegre devrelerden ilham alan bir 3D dildir. Telleri, mantık kapıları ve bellek hücreleri vardır. Çoğu malzeme 2B düzlemlerde yapılır, ancak bu düzlemler birbiri üzerine istiflenebilir. Bu program böyle oluşturulur.

İle başlayan çizgiler = katman ayırıcılarıdır. Ardından, katmanlar üst ve sol taraflar hizalı olacak şekilde istiflenir. oVar sinyaller tek bir katmandan diğerine geçmesine izin vererek, iğne olarak görev yapar.

Buradaki her katmanın bir amacı vardır, bunları işlev olarak düşünebilirsiniz. İlk katman her şeyi kontrol eder; sırayla diğer katmanların her birini 'çağırır'. Burada soldan sağa yinelenen bir desen var. Bu model, şu anda 19 çıktı hattından hangisini yazdırdığımızı takip ediyor.

İkinci katman oldukça küçüktür ve çok küçük bir işi vardır. Sayı 0x80içeren satırlar dışındaki tüm çıktı satırları için biti ayarlar . bit'e hkarşılık gelen Çip öğesidir 0x80. Alfabenin (alt uç haracılığıylaa sekiz çıkış bitlerini tanımlayabilir).

Üçüncü katman, baskı etine gerçekten girdiğimiz yerdir. Bu katman birinci satırdan sorumlu. Golf edilmemiş versiyonun sekiz satırı vardır xve) her baytın sekiz bitinin her biri için ' . Bununla birlikte, aynı görevi daha az satırda gerçekleştirmek için bitlerdeki desenlerden yararlanabiliriz.

Dördüncü katman, üçüncüye çok benzer. Yatay çift çizgileri idare eder.

Beşinci katman son satırı işler. Diğer katmanların sahip olduğu üst kısımdaki telin eksik olduğunu unutmayın. Çünkü kontrolü sıralayıcıya geri döndürmemize gerek yoktur. Bunun yerine, burada yürütmeyi sonlandırabiliriz t.

Altıncı katman yatay tek çizgileri işler.

Yedi katman, sayıların yazdırıldığı yerdir. Her dokuz sayısal satır için "çağrılır". Yürütülmesinin bir parçası olarak 9 bayt girdi tüketir.


1

JavaScript (ES6), 222 bayt

ES6 işlevleri için kısa sözdizimi kullanma - utf8, 222 bayt ( https://mothereff.in/byte-counter ) olarak kodlanmış 174 karakter . Kullanmak function ...16 bayt daha gerektirir.

F=v=>[1,...v].map((x,i)=>'│║│'[i%3]+` ${x||' '} `+(i%9?'':`║
${[h,r,s,u,t]=i%27?'─╟╫┼╢':i>80?'═╚╩╧╝':i?'═╠╬╪╣':'═╔╦╤╗',r+(s=(u=(h+=h+h)+u+h+u+h)+s)+s+u+t}
`)).join``.slice(6)

Daha az golf

F=v=>{
   // horizontal lines are appended after each 9th element
   // so I need to prepend a dummy first element to draw the top horizontal line
   v = [1, ...v];
   return v.map( (x,i) => 
     '│║│'[i % 3] + ` ${x||' '} ` // left bar and cell value
     + ( i % 9 ? '' // add horizontal line after each 9th element
       // the line drawing characters are chosen according to the value of i
       : `║\n${ [h, r, s, u, t] = 
         i % 27 != 0
         ? '─╟╫┼╢'
         : i > 80 
           ? '═╚╩╧╝' // i==81, bottom row
           : i != 0
             ? '═╠╬╪╣'
             : '═╔╦╤╗', // i==0, top row
         r + (s = (u = (h += h + h) + u + h + u + h) + s) + s + u + t
         }\n`
       )
   ).join``
   .slice(6) // cut the first cell (the dummy element)
}

F=v=>[1,...v].map((x,i)=>'│║│'[i%3]+` ${x||' '} `+(i%9?'':`║
${[h,r,s,u,t]=i%27?'─╟╫┼╢':i>80?'═╚╩╧╝':i?'═╠╬╪╣':'═╔╦╤╗',r+(s=(u=(h+=h+h)+u+h+u+h)+s)+s+u+t}
`)).join``.slice(6)

function go() {
  var i=I.value
  i = i.match(/\d+/g).map(x => +x); // convert strings to numbers
  O.textContent = F(i)
}
#I { width: 90% }
<input id=I value='8 5 0 0 0 2 4 0 0 7 2 0 0 0 0 0 0 9 0 0 4 0 0 0 0 0 0 0 0 0 1 0 7 0 0 2 3 0 5 0 0 0 9 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 8 0 0 7 0 0 1 7 0 0 0 0 0 0 0 0 0 0 3 6 0 4 0'>
<button onclick='go()'>go</button>
<pre id=O></pre>


1

Java (OpenJDK 8) , 279 bayt

String f(int[]a){String P="0121213121213121214",R[]={"╔═╤╦╗","║ │║║x","╟─┼╫╢","╠═╪╬╣","╚═╧╩╝"},r="";for(int X:P.getBytes()){for(int x:P.replace("1",R[X-=48].length()>5?"151":"111").getBytes())r+=R[X].charAt(x-48);r+="\n";}for(int i:a)r=r.replaceFirst("x",i>0?""+i:" ");return r;}

Çevrimiçi deneyin!

Bayt sayısı için, Java tarafından yerel olarak desteklenen CP-437 kullanın .IBM437 (son API'ler) ya daCp437 (eski API'ler) ; bu karakter kümesinin bu karakter kümesini varsayılan karakter kümesi olarak kullanan bir sistem kullanın.

Bu kod Java 5'ten itibaren uyumludur, ancak yalnızca Java 8'de test edilmiştir.

açıklama

String f(int[]a){
  String P="0121213121213121214",                         // Both lines and rows are repeated according to this pattern.
         R[]={"╔═╤╦╗","║ │║║x","╟─┼╫╢","╠═╪╬╣","╚═╧╩╝"},  // Characters found on each line.
                                                          //   (note the 'x')
         r="";                                            // The string under construction
  for (int X: P.getBytes()) {                             // For each line,
    for (int x:                                           //  For each character in the pattern,
         P.replace("1",R[X-=48].length()>5?"151":"111")   //    *but* with a cell width of 3,
                                                          //    and with an optional character ('x')
         .getBytes())
      r+=R[X].charAt(x-48);                               //   append the real mapped character
    r+="\n";                                              //  then append a new line
  }
  for(int i:a)                                            // For each number in the input
    r = r.replaceFirst("x",i>0?""+i:" ");                 //  replace the first 'x' with that number.
                                                          //    (or space if zero)
  return r;                                               // Return the constructed string.
}

1

Tcl , 599 bayt (295 karakter)

Çok naif bir yaklaşım, ama bunu herhangi bir önlemle kazanan olmasa bile yapmak zorunda kaldım:

puts ╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗
set r ║ 
lmap x $L {if !$x {set x \ }
set r $r\ $x\ [expr [incr i]%3?"│":"║"]
if ![expr $i%9] {puts $r\n[expr $i%27?"╟───┼───┼───╫───┼───┼───╫───┼───┼───╢":$i<72?"╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣":"╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝"]
set r ║}}

Çevrimiçi deneyin!


bu 599 UTF-8 bayttır.
Baytları

@dzaima: Biliyorum, bir klavyede ne yaptığımı yapabilirim, o kadar gerçek ki neredeyse tadabilirsiniz
tadabileceğin

@dzaima: Bu yüzden çok naif bir yaklaşım
sergiol
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.