Keluarkan kotak yang cantik


17

Tantangan Anda adalah dengan tepat menampilkan kotak berikut:

..................................................
..................................................
..                                              ..
..                                              ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..  ++                                      ++  ..
..  ++                                      ++  ..
..  ++  ..................................  ++  ..
..  ++  ..................................  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..................................  ++  ..
..  ++  ..................................  ++  ..
..  ++                                      ++  ..
..  ++                                      ++  ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..                                              ..
..                                              ..
..................................................
..................................................

Kotak itu tinggi dan lebar 50, spasi dua lebar.

Anda harus menulis fungsi atau program yang menghasilkan atau mengembalikan string dan tidak mengambil input.

Bytes paling sedikit menang!


4
Adakah alasan mengapa +kotak terdalam hanya memiliki 1 lapisan di bagian atas dan bawah? Itu akan membuat jawaban berbasis algoritma agak lebih lama, karena itu berarti dua lapisan terdalam tidak persis persegi.
ETHproduk

@Pavel OK. Close-vote retracted :)
Digital Trauma

4
Mengapa pembatasan pada program yang lengkap?
Rɪᴋᴇʀ

1
@Pavel kenapa? Itu benar-benar tidak menambah tantangan.
Rɪᴋᴇʀ

1
@Pavel ..... tidak. Maksud saya, ya ada yang memilikinya, tapi itu bukan persyaratan / standar untuk tantangan KG.
Rɪᴋᴇʀ

Jawaban:


10

Pyke, 20 17 byte

k25V". + "ohe@A.X

Coba di sini!

k                 - out = ""
 25V              - repeat 25 times:
          oh      -     (o++)+1
            e     -    ^//2
    ". + "   @    -   " + ."[^] (wraps around)
              A.X -  out = surround(out, ^)

Fungsi surround dibuat untuk pertanyaan seperti ini!


14

J , 25 byte

echo'. + '{~4|>./~2#|i:12

Cobalah online!

Penjelasan

echo'. + '{~4|>./~2#|i:12
                     i:12  Range from -12 to 12.
                    |      Take absolute values,
                  2#       duplicate every element,
                /~         compute "multiplication table"
              >.           using maximum,
            4|             take mod 4 of every element,
    '. + '{~               index into this string,
echo                       print char matrix for everyone to see.

Saya pikir Anda dapat meninggalkan gema.
Conor O'Brien

@ ConorO'Brien Oh, aturan keluaran berubah. ... Hmm, tetapi jika saya menghapus echo, itu bahkan bukan fungsi, hanya sebuah nilai. Meskipun J tidak memiliki fungsi argumen nol.
Zgarb

Saya pikir itu diperbolehkan sesuai sifat pengganti J. Dalam kasus apa pun, fungsi konstan dapat dianggap sebagai argumen nol.
Conor O'Brien

11

C, 115 byte

#define M(x,y)x<(y)?x:y
f(i){for(i=2549;i;i--)putchar(i%51?". + "[(M(i%51-1,M(50-i%51,M(i/51,49-i/51))))/2%4]:10);}

Menentukan fungsi f(panggilan sebagai f();) yang mencetak string ke STDOUT.


9

C, 535 478 477 Bytes

Nah, itu banyak golf: - /

i;main(j){for(;++i<51;puts(""))for(j=0;++j<51;)putchar(i<3|i>48?46:j<3|j>48?46:i>4&i<47&j>4&j<47?i<7|(i>44&i<47)|(j>2&j<7)|(j>44&j<47)?43:j>8&j<43&((i>8&i<11)|(i>40&i<43))?46:i>9&i<41&((j>8&j<11)|(j>40&j<43))?46:i>13&i<37&((j>12&j<15)|(j>36&j<39))?43:((i>12&i<15)|(i>36&i<39))&j>12&j<39?43:i>17&i<33&((j>16&j<19)|(j>32&j<35))?46:((i>16&i<19)|(i>32&i<35))&j>16&j<35?46:i>21&i<29&((j>20&j<23)|(j>28&j<31))?43:((i>20&i<23)|(i>28&i<31))&j>20&j<31?43:i>24&i<27&j>24&j<27?46:32:32);}

Inilah hasilnya;

..................................................
..................................................
..                                              ..
..                                              ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..  ++                                      ++  ..
..  ++                                      ++  ..
..  ++  ..................................  ++  ..
..  ++  ..................................  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..................................  ++  ..
..  ++  ..................................  ++  ..
..  ++                                      ++  ..
..  ++                                      ++  ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..                                              ..
..                                              ..
..................................................
..................................................

2
Sial Saya mengagumi dedikasi Anda.
Rɪᴋᴇʀ

Saya telah mengubah batasan, fungsi yang mengembalikan string diizinkan sekarang.
Pavel

Saya baru sadar saya bisa bermain golf beberapa byte keluar menulis ulang loop for(;i++<51;dan sekarang saya pergi oleh satu di mana-mana: - /
cleblanc

@cleblanc++i
dkudriavtsev

MFW Saya mulai mencoba memahami ini: i.imgur.com/TLV9gJ4.png +1
Guci Gurita Ajaib

6

Haskell, 72 byte

q=(\n->[n,n]).abs=<<[-12..12]
unlines[[". + "!!mod(max x y)4|y<-q]|x<-q]

@ Solusi Zgarb di Haskell. Saya juga mencoba untuk membangun kotak dengan menambahkan lapisan di sekitar inti ["..",".."], tetapi itu adalah 9 byte lebih lama (81 byte).

e!b=e:e:b++[e,e];s#c=(c!)<$>(c<$s!!0)!s
unlines$foldl(#)["..",".."]" + . + . + ."

5

Stacked, noncompeting, 35 byte

Coba di sini!

ε'.'3$' + .'2*tostr*+$surroundfold

Tidak Disatukan:

'' '.  ++  ..  ++  ..  ++  ..' $surround fold

Cukup sederhana. surroundadalah fungsi yang, mengelilingi entitas dengan entitas fill. Sebagai contoh, (0) 1 surroundadalah ((1 1 1) (1 0 1) (1 1 1)). $surroundadalah surroundsebagai fungsi, tidak dievaluasi. foldmengambil nilai awal, lalu sesuatu untuk dilipat, lalu fungsi. Dalam kasus ini, surroundadalah folded, mengelilingi string yang awalnya kosong ''(equiv. ε) Dengan masing-masing karakter string.

'.'3$' + .'2*tostr*+

Ini pertama kali membuat string karakter $' + .', yang, ketika dikalikan dengan angka, mengulangi setiap karakter. Ini membuat kita dengan: ++ ... Ini kemudian dicor ke string. Kemudian, kami mengulangi string ini tiga kali, dan akhirnya menambahkan ., memberi kami string yang diinginkan.


Pendekatan yang berbeda untuk 39 byte:

' .'3$' + .'2*tostr*+toarr$surround#\out

#\adalah memasukkan dan mengambil karakter awal dari string sebagai nilai awal. Ini juga hanya berfungsi pada Array.


Bagaimana ini tidak bersaing, tantangannya naik hanya beberapa jam yang lalu.
Pavel

@Pavel Saya selalu mengerjakan ini
Conor O'Brien

4

JavaScript (ES6), 117 byte

f=(n=12,c=`. + `[n%4],t=c.repeat(n*4+2))=>n?t+`
${t}
${f(n-1).replace(/^|$/gm,c+c)}
${t}
`+t:`..
..`
console.log(f())

Solusi non rekursif membawa saya 128 byte:

console.log([...Array(100)].map((_,i,a)=>a.map((_,j)=>`. + `[j=j>50?j-50:51-j,(i>j?i:j)%8>>1],i=i>50?i-50:51-i).join``).join`\n`)

Dimana \nmewakili karakter baris baru literal.


4

C, 97 byte

i,x,y;main(){for(;i<2550;putchar(++i%51?". + "[(x*x<y*y?y:x)&3]:10))x=i%51/2-12,y=i/102-12;}

3

Jelly , 18 byte

12ŒRAx2»þ`ị“ + .”Y

Cobalah online!

Pendekatan yang sama dengan jawaban J Zgarb: 12ŒRAadalah abs([-12 … 12]), x2mengulangi setiap elemen dua kali, »þ`membuat tabel maksimum, secara ị“ + .”siklik mengindeks ke dalam string, dan Ybergabung dengan baris baru.


3

05AB1E , 39 35 33 byte

•â3fM~•3B…012… .+‡.pvyD¤sg25s-׫«})«»

Cobalah online!

•â3fM~•3B                               # Push 1100220011002200110022001
         …012… .+‡                      # Push ..  ++  ..  ++  ..  ++  .
                  .p                    # All prefixes of the above string.
                    vy            }     # For each prefix.
                      D¤sg25s-×         # Repeat the last letter until length is 25.
                               «Â«      # Concat, bifurcate, concat.
                                   )«» # Wrap to array, bifurcate, concat, print.

Versi 33 Byte yang lebih keren sekarang karena Emigna berkomentar menyelamatkan saya 2 byte:

". + "DøJ3×'.«.pvy¤25yg-׫«})«»

Cobalah online!


1
". + "DøJ3×'.«.pvy¤25yg-׫«})«»selama 33 byte.
Emigna

… .+•â3fM~•3BSè.pvy¤25yg-׫«})«»selama 34 byte pada "versi dingin".
Emigna

Keren bukan pilihan kata yang tepat haha. "Kurang Ghetto", mungkin?
Magic Gurita Guci

Saya suka Anda menggunakan perintah awalan. Cemerlang!
Emigna

1
@Emigna awalan membuat segitiga, jika Anda memindahkan segitiga dan memutarnya, kemudian menggabungkannya dengan awalan asli Anda mungkin dapat memotong byte. Itu adalah rencana utama yang tidak bisa saya dapatkan.
Magic Gurita Guci

2

MATL , 21 byte

'. + '[]25:"TTYaQ]2/)

Cobalah online!

'. + '    % Push this string
[]        % Push empty array. This will be used as "seed"
25:"      % Do the following 25 times
  TTYa    %   Extend the array with a frame of zeros
  Q       %   Add 1 to each entry
]         % End
2/        % Divide by 2
)         % Index modularly into the string. Non-integer indices are rounded
          % Implicitly display

2

Ruby, 77 byte

-623.upto(676){|i|print i%26>0?". + "[[(i%26-13).abs,(i/52).abs].max%4]*2:$/}

Saya pikir Anda dapat mengganti ekspresi indeks dengan [i%26-13,i/52].map(&:abs).max%4(menghemat satu byte)
Conor O'Brien



1

Haskell, 385 Bytes

    b 0 = ["..", ".."]
b n = f:f:s:s:m (b (n - 1)) ++s:s:f:f:[]
    where f = replicate (8*n+2) $ d
          s = l++replicate ((8*n)-6) ' ' ++r
          m (x:xs) = map (\x -> l ++ x ++ r ) $ t
          l = d:d:' ':' ':[]
          r = reverse l
          t = b (n - 1)
          d :: Char
          d | n `mod` 2 == 0 = '.'
            | n `mod` 2 == 1 = '+'
main = mapM_ putStrLn $ b 6

Putaran pertama kode golf di sini ... menanti untuk melihat bagaimana orang lain menangani yang ini.

Keluaran:

..................................................
..................................................
..                                              ..
..                                              ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..  ++                                      ++  ..
..  ++                                      ++  ..
..  ++  ..................................  ++  ..
..  ++  ..................................  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++      ++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..  ++++++++++  ..  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..              ..  ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++  ..................  ++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++                      ++  ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..  ++++++++++++++++++++++++++  ..  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..                              ..  ++  ..
..  ++  ..................................  ++  ..
..  ++  ..................................  ++  ..
..  ++                                      ++  ..
..  ++                                      ++  ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..  ++++++++++++++++++++++++++++++++++++++++++  ..
..                                              ..
..                                              ..
..................................................
..................................................

3
1) Anda memiliki banyak ruang kosong yang tidak perlu. 2) menempatkan semua definisi fungsi whereke dalam satu baris dan digunakan ;untuk pemisahan. 3) f:f:[]is f:[f] and d: '': '': [] `is d:" ". 4) mmengambil parameter tetapi tidak menggunakannya. Sebaris mdan t. 5) mendefinisikan fungsi baru #untuk menggantikan replicate: c#x=c<$[1..8*n+x]dan menyebutnya suka d#2dan ' '#(-6). 6) mod 2 == 0bisa diganti dengan even, atau flip tes dan penggunaan odddan pegolf otherwise: 1<2. ...
nimi

2
... semua dalam semua: b n=f:f:s:s:map(\x->l++x++r)(b$n-1)++s:s:f:[f]where f=d#2;s=l++' '#(-6)++r;l=d:d:" ";r=reverse l;d|odd n='+'|1<2='.';c#x=c<$[1..8*n+x].
nimi

1

Oktaf, 53 byte

 '.  ++  .'(mod(bsxfun(@max,x=[24:-1:0 0:24],x'),8)+1)

Hasilkan pola berulang 1 sampai 8 dari pusat ke luar dan gunakan sebagai indeks untuk ekstraksi elemen . ++ .

Cobalah secara Online!


1

Bash, 191 byte

echo H4sIAGUcgFgAA73VOw7AIAyD4b2n6F6J+x+v6k5CnPy1F6ZPAvNaS80li4/cUvrkKWdGapOak3O5DDmVS5G8XI5k5ZIkLpclUbk02ZfLk125f5B4JIljLY59cZwxx31x3H3HO5aFIo7/pZIpqWZClHSJmg55AeBhTxb2CQAA|base64 -d|gunzip

Mungkin bisa lebih kecil, tetapi lebih kecil dari upaya algoritmik saya.


1

C #, 203 byte

Program yang lengkap dan mudah dibaca:

using System;
public class P
{
    public static void Main(string[] a)
    {
        Func<string> f = () =>
        {
            var z = 25;
            var t = "";
            Func<int, string> c = (q) => q % 4 == 0 ? ".." : (q % 4 != 2 ? "  " : "++");
            for (var y = 0; y < z; y++)
            {
                var l = "";
                for (var x = 0; x < z; x++)
                        l += ((y > z / 2) ? (x >= y | x < z - y) : (x < y | x >= z - y)) ? c(x):c(y);
                l += "\n";
                t += l + l;
            }
            return t;
        };

        Console.Write(f());
        Console.ReadKey();
    }
}

Fungsi golf :

()=>{var z=25;var t="";Func<int,string>c=(q)=>q%4==0?"..":(q%4!=2?"  ":"++");for(var y=0;y<z;y++){var l="";for(var x=0;x<z;x++)l+=((y>z/2)?(x>=y|x<z-y):(x<y|x>=z-y))?c(x):c(y);l+="\n";t+=l+l;}return t;};

1

05AB1E , 33 byte

14G" . +"NL¤¸13N-.׫€D¨Â«èD})¨Â«»

Cobalah online!

Penjelasan

14G                               # for N in [1 ... 13]
   " . +"                         # push this string
         NL                       # push range [1 ... N]
           ¤¸13N-.×               # push a list of 13-N repetitions 
                                  # of the last element of the above range
                   «              # concatenate the two ranges
                    €D            # duplicate each element
                      ¨           # remove the last element
                       «         # concatenate a reversed copy to the list
                         è        # use the elements of the list to index into the string
                          D       # duplicate the resulting string
                           }      # end loop
                            )     # wrap the strings in a list
                             ¨    # remove the last element
                              «  # concatenate a reversed copy
                                » # join the list on newlines

Penjelasan yang akan datang?
Pavel

@Pavel: tentu saja! :)
Emigna

1

PowerShell , 171 151 byte

($x=(1..12|%{' . +'[$_%4]}|%{($a+=$_+$_)})+"$a."|%{$c=if(++$i%2){('+','.')[($b=!$b)]}else{' '};$_.PadRight(25,$c)}|%{,($_+-join$_[25..0])*2});$x[23..0]

Cobalah online!

Ho-hum menjawab. Saya yakin ada cara yang lebih pendek (mengingat jawaban yang panjang, saya yakin), tetapi ini menunjukkan beberapa trik yang rapi.

Penjelasan:

1..12|%{' . +'[$_%4]} menghasilkan array string (panjang satu karakter), dalam pola yang benar yang kita butuhkan. Cobalah online!

Kami kemudian menambahkan |%{($a+=$_+$_)})+"$a."yang mengambil array dan memperluasnya berdasarkan baris sebelumnya. Cobalah online!

String itu kemudian dikirim ke dalam satu lingkaran |%{$c=if(++$i%2){('+','.')[($b=!$b)]}else{' '};$_.PadRight(25,$c)},. Setiap iterasi, kami memilih karakter yang benar (baik plus, titik, atau spasi), dan kemudian menggunakan .PadRightfungsi untuk menambah jumlah karakter yang sesuai. Cobalah online!

Sekarang, kita memiliki fondasi sudut kanan atas. Kita perlu membalik setiap string |%{,($_+-join$_[($z=25..0)])*2}dan menambahkannya bersama sehingga kita bisa mendapatkan bagian atas blok. Ini dilakukan dengan -joinperintah dan pengindeksan mundur 25..0. Selain itu, kami merangkum string dalam array ,(...)dan membuat mereka menjadi dua *2sehingga kami mendapatkan seluruh bagian atas.Cobalah online!

Itu semua disimpan ke dalam $xdan dienkapsulasi dalam parens sehingga menempatkan string pada pipa. Akhirnya, kami mundur $x(pastikan untuk menghapus baris tengah duplikat-duplikat, kalau tidak kita akan memiliki empat ..di tengah) dan meninggalkan yang ada di dalam pipa. Implisit Write-Outputmenempelkan baris baru di antara string, jadi kami mendapatkannya secara gratis.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.