Нарисуйте лямбда-герб


16

Чтобы отпраздновать 2497-ю годовщину победы Греции в Саламине в 480 году до нашей эры. Нарисуйте лямбда-герб.

Лямбда-герб - это лямбда, нарисованная на греческих щитах так:

изображения красной столицы лямбды на круглых белых и золотых щитах

Головоломка: Учитывая положительное нечетное целое число n, создайте изображение ascii art вышеупомянутого щита.

Характеристики:

п = 1:

( /\ )

п = 3:

(   /\   )
|  /  \  | 
( /    \ )

п = 5

(     /\     )
|    /  \    |
|   /    \   |
|  /      \  |
( /        \ )

График: n = 3

          2|   (   /\   )
y-axis    1|   |  /  \  | 
          0|   ( /    \ )
               ___________  
               0123456789

                 x-axis

Описание:

Должно быть ровно n \ символов и n / символов. В /s и \s не должен касаться краев экрана. Нижний и верхний углы экрана будут обозначены символом a (или, )если n = 1, где будет один )и один (. Между нижними углами и лямбдой всегда будет один пробел, увеличиваясь на 1 с осью y до y + 1 == n. Номера углов стороны экрана будут обозначены |. Там нет щита сверху.


7
Почему понизить? (
Осталось

3
@ user202729 что значит еще 2?
jacksonecac

4
В SE есть ограничение на количество комментариев, которое должно содержать не менее 15 символов.
user202729

7
Почему вы не могли ждать 3 года, чтобы опубликовать его к 2,5-летию; -;
HyperNeutrino

5
Почему только нечетные целые числа? : o
Феликс Пальмен

Ответы:


8

Древесный уголь ,  17  13 байт

Спасибо @Neil за сохранение 4 байта!

(↙↓⊖θM↑(→↗N‖M

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

Объяснение:

(↙                // Print '(' and move one step down and to the left.
  ↓⊖θ             // Print n-1 '|'s downwards.
     M↑          // Move one step up.
        (→        // Print '(' and move one step to the right.
          ↗N      // Print n '/'s towards the upper right corner.
            ‖M    // Mirror the left half to produce the right half.

1
экономит вам байт, и половина ваших ненужных.
Нил

1
Кроме того, вы Iθможете сохранить еще один байт.
Нил

Подводя итог предложения Нейла, 13 байт
г-н Xcoder

@ Mr.Xcoder Спасибо, но я уже успел это сделать.
Steadybox

Оно маленькое, но я верю, что ваше объяснение (→должно означать «... и сделать один шаг вправо »
Камил Дракари

6

SOGL V0.12 , 17 14 байтов

┐*ƨ(Κm«@.╚┼┼╬³

Попробуй здесь!

Объяснение:

example input: 3
┐*              push a string of input amount of "|"                      "|||"
  ƨ(            push "("                                                  "|||", "(("
    Κ           prepend that to the vertical bar string                   "((|||"
     m          mold that string as the input (remove excess characters)  "((|"
      «         put the first character at the end                        "(|("
       @        push a space                                              "(|(", " "
        .╚      create a diagonal of input length                         "(|(", " ", ["  /", " / ", "/  "]
          ┼┼    append those three horizontally together                  ["(   /", "|  / ", "( /  "]
            ╬³  palindromize that all                                     

4

C (gcc) , 103 96 байт

f(n,j,b){for(j=n;j--;printf("%c%*c%*c%*c\n","|("[b],j+2,47,n+n-j+~j,92,j+2,"|)"[b=j<1|n-2<j]));}

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


Мы извиняемся за основное и включаем сейчас? Это сообщество изменилось.
Алек Тил

2
@AlecTeal Допустимо написать функцию, которая выполняет указанную задачу, а не полную программу. Включает в общем сделай засчитан счетчику байты, некоторые компиляторы C, однако, пытаться угадать определение функции , если нет соответствия не включает в себя присутствует.
Джонатан Фрех

Думаю, вы вычеркнули не тот номер, шеф
Веска

@ Веска Правда. ._.
Джонатан Фрех

3

Сетчатка , 41 байт

.+
$* 
 
( $'/$`$`\$' )¶
G`.
sT`()`|`¶.*¶

Попробуйте онлайн! Объяснение:

.+
$* 

Преобразовать в одинарный, но с использованием пробелов.

 
( $'/$`$`\$' )¶

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

G`.

Однако есть дополнительная пустая строка, которая отбрасывает окончательную транслитерацию, поэтому удалите ее здесь.

sT`()`|`¶.*¶

Во всех строках, кроме первой и последней, измените ()s на |s.







2

Пакет, 218 байт

@echo off
set s=
for /l %%i in (1,1,%1)do call set s= %%s%%
set s=%s%/\%s%
echo (%s%)
for /l %%i in (2,1,%1)do call:l %1 %%i
exit/b
:l
set s=%s: /=/ %
set s=%s:\ = \%
if %1==%2 (echo ^(%s%^))else echo ^|%s%^|

Как будто |ей было недостаточно, ()ей не очень хорошо работать с if... else.


2

05ab1e (27 байт)

F"|("0NQ¹<NQ~èð¹N-×'/ðN×J∞,

попробуйте это онлайн

объяснение

F                                                #Loop n times        
 |("0NQ¹<NQ~è                                    #Use ( or |        
             ð¹N-×                               #put spaces (1)        
                  '/                             #put /                
                    ðN×                          #put more space                
                       J∞,                       #reverse image        

Я думаю '/¹N-ú, что байт короче ð¹N-×'/.
Нил

Хороший подход, но в гольфе есть несколько вещей. Одним из них является то, что @Neil предложил выше. Кроме того: "|("может быть „|((есть встроенные для 1, 2 и 3-символьных строк ', и соответственно); и 0NQ¹<NQ~может быть ΂Nåè( Îкажется, ошибка в устаревшей версии TIO, но она работает в последней версии 05AB1E, и в этом случае вам также придется заменить наº ). Итак, всего ( 21 байт ): F„|(΂Nåè'/¹N-úðN×Jº, попробуйте онлайн .
Кевин Круйссен


1

Python 2 , 90 байт

n=input()
for i in range(n):m=-~i%n<2;s=' '*(n-i);print'|('[m]+s+'/'+'  '*i+'\\'+s+'|)'[m]

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

-1 благодаря овсам .


не удается n=1, но можно исправить, заменив i%~-n<1на-~i%n<2
Rod

@ Спасибо спасибо, исправлено
Эрик Outgolfer

90 байт : '<space>'*i*2->'<space><space>'*i
овс

@ovs @ _ @ почему я об этом не подумал
Эрик Аутгольфер,

1

C # (.NET Core) , 188 байт

n=>{int y=0,i=-1;var s="";while(y<n){var r=new char[n*2+4];r[n+1-y]='/';r[n+2+y]='\\';if(y<2|y++>n-2)i++;r[0]="(|("[i];r[n*2+3]=")|)"[i];s+=new string(r)+"\n";}return s.Replace("\0"," ");}

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

Degolfed

n=>{
    int y=0,i=-1;
    var s="";

    while(y<n){
        var r=new char[n*2+4];
        r[n+1-y]='/';
        r[n+2+y]='\\';

        if(y<2 | y++>n-2)
            i++;

        r[0] = "(|("[i];
        r[n*2+3] = ")|)"[i];

        s += new string(r)+"\n";
    }

    return s.Replace("\0"," ");
}

1

Python 3, 110 байтов 93 байта

b=c=int(input())*2
d,e='/\\'
while b:print('(|%%ss)|'[2<b<c::2]%f' {d+e:^{c}} ');d+='  ';b-=2

1

PowerShell , 93 91 90 89 байт

-2 Спасибо ASCII-только за указание дополнительных паренов
-1 Спасибо Маззи за настройку логики обмена

param($n)0..--$n|%{"|("[!($x=($n-$_)*$_)]+($y=" "*($n-$_+1))+"/"+"  "*$_+"\$y"+"|)"[!$x]}

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

Пытаюсь настроить это $x=немного. Вероятно, есть более разумный способ получить 1-ю и последнюю строку за несколько меньших байтов. Есть лучшее, $x=но не намного дешевле.



0

Холст , 12 байт

┤|×(e⟳ +╴/+║

Попробуй это здесь!

Объяснение:

┤             decrease the input by 2
 |×           repeat "|" vertically - if the amount is -1 (for input of 1), ir just removes the item currently
   (          push "("
    e        encase in that parentheis - if that first string isn't there, currently it just fails doing anything and leaves the parenthesis on the stack
     ⟳       rotate clockwise
       +     append horizontally a space
        ╴/   get a diagonal the length of the input
          +  append it horizontally to the current result
           ║  and palindromize horizontally with 0 overlap
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.