输出一个漂亮的盒子


17

您的挑战是准确输出以下框:

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

盒子的高度和宽度为50,空格为两个。

您必须编写输出或返回字符串且不输入任何内容的函数或程序。

最小字节获胜!


4
为什么最里面的+盒子的顶部和底部只有一层?这会使基于算法的答案更长一些,因为这意味着最里面的两层并不完全是正方形。
ETHproductions

@Pavel好。近距离投票已撤消:)
Digital Trauma '01

4
为什么要限制一个完整的程序?
Rɪᴋᴇʀ

1
@Pavel为什么?它确实没有增加任何挑战。
Rɪᴋᴇʀ

1
@Pavel .....没有 我的意思是有些人有,但是到目前为止,这并不是KG挑战的要求/标准。
Rɪᴋᴇʀ

Answers:


10

Pyke,20个 17字节

k25V". + "ohe@A.X

在这里尝试!

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

环绕声功能是针对像这样的问题而设计的!


14

J,25个字节

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

在线尝试!

说明

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.

我认为您可以避免回声。
Conor O'Brien

@ ConorO'Brien哦,输出规则已更改。...嗯,但是如果我删除echo,它甚至不会是一个函数,而只是一个值。尽管J无论如何都没有零参数函数。
Zgarb

我认为根据J的重复性质,这是允许的。在任何情况下,常量函数都可以视为零参数。
Conor O'Brien

11

C,115字节

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

定义将字符串输出到STDOUT 的函数f(称为f();)。


9

C,535个 478个 477字节

现在很多高尔夫:-/

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

这是输出;

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

2
妈的 我很佩服您的奉献精神。
Rɪᴋᴇʀ

我已经更改了限制,现在允许返回字符串的函数。
帕维尔

我只是意识到我可以打出几个字节来重写循环for(;i++<51;,现在我到处都是:-/
cleblanc

@cleblanc++i
dkudriavtsev

MFW我开始尝试理解这一点:i.imgur.com/TLV9gJ4.png +1
魔术八爪鱼

6

Haskell,72个字节

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

@Zgarb在Haskell中的解决方案。我还尝试通过在核心周围添加层来构造该框["..",".."],但是它长了9个字节(81个字节)。

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

5

堆积,无竞争,35字节

在这里尝试!

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

取消高尔夫:

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

非常简单。surround是一个很好的功能,它用一个填充实体围绕一个实体。例如,(0) 1 surround((1 1 1) (1 0 1) (1 1 1))$surroundsurround功能,未评估。fold取一个初始值,然后是要折叠的东西,然后是一个函数。在这种情况下,surroundfold编,包围初始空字符串''(当量ε)与所述串的每一字符。

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

首先创建一个字符串$' + .',然后将其乘以数字,然后重复每个字符。这给我们留下了:++ ..。然后将其转换为字符串。然后,我们重复该字符串三次,最后加上a .,为我们提供所需的字符串。


39个字节的另一种方法:

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

#\是insert,并以字符串的初始char作为起始值。它也仅适用于数组。


这种竞争不怎么激烈,挑战仅在几个小时前就上升了。
Pavel

@Pavel我一直在为此工作
Conor O'Brien

4

JavaScript(ES6),117个字节

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

非递归解决方案占用了我128个字节:

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

其中\n代表文字换行符。


4

C,97字节

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

果冻,18字节

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

在线尝试!

与Zgarb的J答案相同的方法12ŒRAabs([-12 … 12]),将x2每个元素重复两次,»þ`创建最大值表,ị“ + .”循环索引到字符串中,并Y通过换行符联接。


3

05AB1E39 35 33字节

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

在线尝试!

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

33字节版本现在更酷了,因为Emigna注释了为我节省2个字节:

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

在线尝试!


1
". + "DøJ3×'.«.pvy¤25yg-׫«})«»33个字节。
Emigna '17

… .+•â3fM~•3BSè.pvy¤25yg-׫«})«»在“冷却器版本”上为34个字节。
Emigna '17

酷不是单词哈哈的正确选择。“贫民窟”,也许吗?
Magic Octopus Urn

我很喜欢您对prefix命令的使用。辉煌!
Emigna

1
@Emigna前缀会形成一个三角形,如果您转置三角形并旋转它,然后将其与原始前缀结合起来,则可能可以删除字节。那是我无法达成的主要计划。
Magic Octopus Urn

2

MATL,21字节

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

在线尝试!

'. + '    % 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个字节

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

我认为您可以将索引表达式替换为[i%26-13,i/52].map(&:abs).max%4(节省一个字节)
Conor O'Brien



1

Haskell,385字节

    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

这里是第一轮代码高尔夫……期待看到其他人如何解决这个问题。

输出:

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

3
1)您有大量不必要的空白。2)将所有函数定义放在的where一行中,并;用于分离。3)f:f:[]f:[f] and d:'':'':[]`是d:" "。4)m接受参数但不使用它。内联mt。5)定义一个新函数#来替换replicatec#x=c<$[1..8*n+x]并像d#2和一样调用它' '#(-6)。6)mod 2 == 0可以evenodd高尔夫球手的替换或翻转测试和使用otherwise1<2。...
nimi

2
...总计: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

八度,53字节

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

从中心向外生成1到8的重复图案,并将其用作提取元素的索引 . ++ .

在线尝试!


1

Bash,191个字节

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

可以变小,但是比我的算法尝试小。


1

C#,203个字节

完整的可读程序:

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

高尔夫功能

()=>{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个字节

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

在线尝试!

说明

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

解释来了吗?
Pavel

@Pavel:当然!:)
Emigna '17

1

PowerShell171151字节

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

在线尝试!

哼哼的答案。我敢肯定,有一个较短的方法(我相信其他答案的长度),但这显示了一些巧妙的技巧。

说明:

1..12|%{' . +'[$_%4]} 以我们需要的正确模式生成一个字符串数组(长度为一个字符)。 在线尝试!

然后,我们在上面添加|%{($a+=$_+$_)})+"$a."一个数组,并根据上一行将其横向扩展。在线尝试!

然后将这些字符串发送到循环中|%{$c=if(++$i%2){('+','.')[($b=!$b)]}else{' '};$_.PadRight(25,$c)}。每次迭代时,我们都选择正确的字符(加号,点或空格),然后使用该.PadRight函数填充到适当数量的字符。在线尝试!

现在,我们有了右上角的基础。我们需要反转每个字符串|%{,($_+-join$_[($z=25..0)])*2}并将它们附加在一起,这样我们才能获得代码块的顶部。这是通过-join命令并向后索引完成的25..0。此外,我们将字符串封装在数组中,(...),并将它们加倍,*2这样我们就获得了完整的排名。在线尝试!

这些都存储$x在paren中并封装在paren中,因此它将字符串放置在管道中。最后,我们扭转$x(确保剪掉重复重复的中间行,否则我们..中间应有四个)并将它们留在管道中。隐式Write-Output在字符串之间插入换行符,因此我们免费获得换行符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.