Güzel bir kutu çıktı


17

Zorluklarınız tam olarak aşağıdaki kutuyu çıkarmaktır:

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

Kutu yükseklik ve genişlik 50, boşluklar iki genişliktedir.

Bir dize çıktısı veren veya döndüren ve girdi almayan bir işlev veya program yazmalısınız.

Birkaç bayt kazanır!


4
En içteki +kutunun üstte ve altta sadece 1 katmanı olmasının bir nedeni var mı? Bu, algoritma tabanlı cevapları biraz daha uzatır, çünkü en içteki iki katmanın tam olarak kare olmadığı anlamına gelir.
ETHproductions

@Pavel tamam. Yakın oylama geri çekildi :)
Digital Trauma

4
Neden tam bir programın kısıtlanması?
Rɪᴋᴇʀ

1
@Pavel neden? Bu meydan okumaya gerçekten hiçbir şey katmıyor.
Rɪᴋᴇʀ

1
@Pavel ..... hayır. Demek istediğim evet, bazıları buna sahip, ancak KG zorlukları için açık ara bir gereklilik / standart değil.
Rɪᴋᴇʀ

Yanıtlar:


10

Pyke, 20 17 bayt

k25V". + "ohe@A.X

Burada deneyin!

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

Surround fonksiyonu bu gibi soruları için yapılmıştır !


14

J , 25 bayt

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

Çevrimiçi deneyin!

açıklama

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.

Sanırım yankıyı bırakabilirsin.
Conor O'Brien

@ ConorO'Brien Oh, çıktı kuralı değişti. ... Hmm, ama kaldırırsam echo, bu bir işlev olmayacak, sadece bir değer. Her ne kadar J sıfır argüman işlevine sahip olmasa da.
Zgarb

Bence J'nin repl tabiatına göre buna izin veriliyor. Her durumda, sabit işlevlerin sıfır bağımsız değişken olduğu düşünülebilir.
Conor O'Brien

11

C, 115 bayt

#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);}

Dizeyi STDOUT'a yazdıran bir işlevi f(farklı çağır f();) tanımlar .


9

Cı, 535 478 477 bayt

Şimdi bu çok fazla 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);}

İşte çıktı;

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

2
Vay be. Size olan bağlılığınıza hayranım.
Rɪᴋᴇʀ

Kısıtlamayı değiştirdim, bir dize döndüren işlevler şimdi izin verilir.
Pavel

Ben sadece döngüler yeniden yazma birkaç bayt golf olabilir fark for(;i++<51;ve şimdi her yerde bir tarafından kapalı: - /
cleblanc

@cleblanc++i
dkudriavtsev

MFW Bunu anlamaya çalıştım: i.imgur.com/TLV9gJ4.png +1
Sihirli Ahtapot Urn

6

Haskell, 72 bayt

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

@ Zgarb'ın Haskell'deki çözümü . Ayrıca, çekirdeğin etrafına katmanlar ekleyerek kutuyu oluşturmaya çalıştım ["..",".."], ancak 9 bayt daha uzun (81 bayt).

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

5

Yığılmış, rakipsiz, 35 bayt

Burada deneyin!

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

Ungolfed:

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

Oldukça basit. surroundbir öğeyi dolgu varlığıyla çevreleyen bir işlevdir. Örneğin, (0) 1 surroundbir ((1 1 1) (1 0 1) (1 1 1)). $surroundolduğu surroundbir fonksiyonu olarak değerlendirilmez. foldönce bir başlangıç ​​değeri, sonra katlanacak bir şey, sonra bir işlev alır. Bu durumda, surroundbir foldilk boş bir dizge çevreleyen, ed ''(eşi. εDizisinin her bir karakteri ile).

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

Bu önce bir karakter dizesi yapar $' + .', bir sayı ile çarpıldığında her karakteri tekrarlar. Bu bizi şöyle bırakır:++ .. . Bu daha sonra bir dizeye dökülür. Ardından, bu dizeyi üç kez tekrarlıyoruz ve nihayet a'nın başına ., istenen dizeyi vererek başlıyoruz .


39 bayt için farklı bir yaklaşım:

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

#\insert ve dizenin ilk karakterini başlangıç ​​değeri olarak alır. Ayrıca yalnızca Diziler üzerinde de çalışır.


Bu nasıl rakipsiz, meydan okuma sadece birkaç saat önce arttı.
Pavel

@Pavel Her zaman bunun üzerinde çalışıyorum
Conor O'Brien

4

JavaScript (ES6), 117 bayt

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())

Yinelemesiz çözüm beni 128 bayt aldı:

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`)

Burada \ngerçek satırsonu karakterini temsil eder.


4

C, 97 bayt

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

Jöle , 18 bayt

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

Çevrimiçi deneyin!

Zgarb en J cevap olarak aynı yaklaşım: 12ŒRAolup abs([-12 … 12]), x2iki kez her eleman tekrarlar, »þ`maksimumlar, bir tablo oluşturur ị“ + .”bir dizeye döngüsel endeksler ve Ysatırbaşıyla katılır.


3

05AB1E , 39 35 33 bayt

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

Çevrimiçi deneyin!

•â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.

Emigna bana 2 baytlık tasarruf sağladığına yorum yaptığı için şimdi daha serin olan Bayt versiyonu:

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

Çevrimiçi deneyin!


1
". + "DøJ3×'.«.pvy¤25yg-׫«})«»33 bayt için.
Emigna

… .+•â3fM~•3BSè.pvy¤25yg-׫«})«»"soğutucu sürümü" de 34 bayt için.
Emigna

Cool kelimesinin doğru seçimi değildi haha. "Az Getto", belki?
Sihirli Ahtapot Urn

Önek komutunu kullanımınızı seviyorum. Parlak!
Emigna

1
@Emigna önekleri bir üçgen yapar, üçgeni transpoze ederseniz ve döndürürseniz, baytları tıraş edebileceğiniz orijinal öneklerle birleştirin. Alamadığım ana plan buydu.
Sihirli Ahtapot Urn

2

MATL , 21 bayt

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

Çevrimiçi deneyin!

'. + '    % 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 bytes

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

Sanırım dizin ifadesini [i%26-13,i/52].map(&:abs).max%4(bayt kaydeder) ile değiştirebilirsiniz
Conor O'Brien



1

Haskell, 385 Bayt

    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

Kod turunun ilk turu burada ... başkalarının bununla nasıl başa çıktığını görmek için sabırsızlanıyoruz.

Çıktı:

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

3
1) Tonlarca gereksiz boşluk var. 2) tüm fonksiyon tanımlarını wheretek bir satıra koyun ve ;ayırma için kullanın . 3) f:f:[]olan f:[f] and d: ' ':'': [] `dır d:" ". 4) mbir parametre alır ancak kullanmaz. Satır içi mve t. 5) yeni bir işlev tanımlar #yerine replicate: c#x=c<$[1..8*n+x]ve benzeri yer çağrı d#2ve ' '#(-6). 6) mod 2 == 0ile değiştirilebilir evenveya testi ve kullanılmasını çevirmek oddve golfçü en otherwise: 1<2. ...
nimi

2
... sonuçta: 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

Oktav, 53 bayt

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

Merkezden dışa doğru 1'den 8'e kadar yinelenen desen oluşturun ve . ++ .

Çevrimiçi Deneyin!


1

Bash, 191 bayt

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

Muhtemelen daha küçük olabilir, ancak algoritmik girişimlerimden daha küçüktü.


1

C #, 203 bayt

Eksiksiz, okunabilir program:

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();
    }
}

Golf fonksiyonu :

()=>{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 bayt

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

Çevrimiçi deneyin!

açıklama

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

Explanation to come?
Pavel

@Pavel: of course! :)
Emigna

1

PowerShell, 171 151 bytes

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

Try it online!

Ho-hum answer. I'm sure there's a shorter way (given the lengths of the other answers, I'm confident), but this shows some neat tricks.

Explanation:

1..12|%{' . +'[$_%4]} generates an array of strings (of one character in length), in the correct pattern we need. Try it online!

We then add on |%{($a+=$_+$_)})+"$a." which takes the array and expands it sideways based on the previous row. Try it online!

Those strings are then sent into a loop, |%{$c=if(++$i%2){('+','.')[($b=!$b)]}else{' '};$_.PadRight(25,$c)}. Each iteration, we're choosing the correct character (either a plus, a dot, or a space), and then using the .PadRight function to pad out to the appropriate number of characters. Try it online!

Now, we have the foundation of the upper-right corner. We need to reverse each string |%{,($_+-join$_[($z=25..0)])*2} and append them together so we can get the top of the block. This is done with the -join command and indexing backward 25..0. Additionally, we encapsulate the strings in an array ,(...) and make 'em double *2 so we get the whole top. Try it online!

That is all stored into $x and encapsulated in parens so it places the strings on the pipeline. Finally, we reverse $x (being sure to snip out the duplicate-duplicate middle row, else we'd have four .. in the middle) and leave those on the pipeline. An implicit Write-Output sticks a newline between the strings, so we get that for free.

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.