Выведите красивую коробочку


17

Ваша задача - точно вывести следующее поле:

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

Ящик имеет высоту и ширину 50, пространства два ширины.

Вы должны написать функцию или программу, которая выводит или возвращает строку и не требует ввода.

Побеждает несколько байтов!


4
Любая причина, почему самая внутренняя +коробка имеет только 1 слой сверху и снизу? Это сделает ответы на основе алгоритма несколько более длинными, поскольку это означает, что два самых внутренних слоя не совсем квадратные.
— ETHproductions

@ Павел в порядке.
— Цифровая травма

4
Почему ограничение на полную программу?
— 17

1
@ Павел, почему? Это действительно ничего не добавляет к проблеме.
— Rɪᴋᴇʀ

1
@ Павел ..... нет. Я имею в виду, да, у некоторых это есть, но это далеко не требование / стандарт для вызовов КГ.
— Rɪᴋᴇʀ

Ответы:



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.

Я думаю, что вы можете оставить эхо.
— Конор О'Брайен

@ ConorO'Brien О, правило вывода изменилось. ... Хм, но если я уберу echo, это будет даже не функция, а значение. Хотя у J все равно нет функций с нулевым аргументом.
— Згарб

Я думаю, что это разрешено в соответствии с характером реплея J. В любом случае, постоянные функции могут рассматриваться как аргументы с нулевым аргументом.
— Конор О'Брайен

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

Определяет функцию f(вызов как f();), которая печатает строку в STDOUT.


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

Ungolfed:

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

Довольно просто. surroundэто функция, которая, ну, в общем, окружает объект с объектом заполнения. Например, (0) 1 surroundесть ((1 1 1) (1 0 1) (1 1 1)). $surroundв surroundкачестве функции, не оценивается. foldпринимает начальное значение, затем что-то, чтобы сложить, затем функцию. В этом случае, surroundбудет foldэды, окружающих первоначально пустая строку ''(эквив. ε) С каждым символом строки.

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

Сначала создается строка символов $' + .', которая при умножении на число повторяет каждый символ. Это оставляет нас с: ++ ... Это тогда приведено к последовательности. Затем мы повторяем эту строку трижды и, наконец, добавляем a ., давая нам желаемую строку.


Другой подход для 39 байтов:

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

#\это вставка и принимает начальный символ строки в качестве начального значения. Это также работает только на массивах.


Как это неконкурентоспособно, задача поднялась всего несколько часов назад.
— Павел

@Pavel Я всегда работаю над этим
— Конор О'Брайен

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

Попробуйте онлайн!

Тот же подход, что и у J-ответа Згарба: 12ŒRAесть abs([-12 … 12]), x2повторяет каждый элемент дважды, »þ`создает таблицу максимумов, ị“ + .”циклически индексирует в строку и Yобъединяет их с помощью новых строк.


3

05AB1E , 39 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-байтовая версия, которая теперь круче, потому что Эминья прокомментировал сохранение 2 байта:

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

Попробуйте онлайн!


1
". + "DøJ3×'.«.pvy¤25yg-׫«})«»для 33 байтов.
— Emigna

… .+•â3fM~•3BSè.pvy¤25yg-׫«})«»для 34 байтов на "более прохладной версии".
— Emigna

Круто был не правильный выбор слова хаха. "Меньше гетто", может быть?
— Волшебная Урна Осьминога

Мне очень нравится, что вы используете префиксную команду. Brilliant!
— Emigna

1
@Emigna префиксы образуют треугольник, если вы транспонируете треугольник и поворачиваете его, а затем объединяете его с оригинальными префиксами, которые вы можете сбрить байты. Это был основной план, к которому я не мог прийти.
— Волшебная Урна Осьминога

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




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:[]is f:[f] and d: '': '': [] `is d:" ". 4) mпринимает параметр, но не использует его. Встроенный mи t. 5) определить новую функцию #для замены replicate: c#x=c<$[1..8*n+x]и назвать ее как d#2и ' '#(-6). 6) mod 2 == 0можно заменить evenили перевернуть тест и использоватьodd и гольфиста otherwise: 1<2. ...
— Ними

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

Баш, 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: конечно! :)
— Emigna

1

PowerShell , 171 151 байт

($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паренонах и инкапсулируется в них, поэтому строки помещаются в конвейер. Наконец, мы переворачиваемся $x(обязательно вырезаем дубликат-дубликат среднего ряда, иначе у нас будет четыре ..в середине) и оставляем их на конвейере. Неявный Write-Outputвводит новую строку между строками, поэтому мы получаем это бесплатно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.