Намалюйте лямбда-блазона


16

Щоб відзначити 2497-ту річницю грецької перемоги в Саламісі в 480 р. До н. Намалюйте лямбда-блазона.

Лямбда-блазон - лямбда, намальована на грецьких щитах так:

images of red capital lambda on circular white and gold shield backgrounds

Головоломка: Враховуючи додатне непарне ціле число n, створіть художнє зображення ascii з наведеного вище щита.

Технічні умови:

n = 1:

( /\ )

n = 3:

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

n = 5

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

Графік: n = 3

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

                 x-axis

Опис:

Має бути рівно n \ символів і n / символів. В /s і \s не повинен торкатися країв екрану. Нижній і верхній кути щита буде позначено а (або, )якщо n = 1, де буде один )і один (. Завжди буде один простір між нижними кутами та лямбда, збільшуючи на осі y до 1, до тих пір, поки y + 1 == n. Поза межами кутів сторони щита буде позначено| . Верху щита немає.


7
Чому зворотний голос? (Ще 2)
— користувач202729

3
@ user202729 що ти маєш на увазі ще 2?
— jacksonecac

4
SE має обмеження символів коментаря, яке змушує коментарів бути не менше 15 символів.
— користувач202729

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
⊖економить байт, і половина ваших Mзайвих зайвих.
— Ніл

1
Крім того, ви Iθможете Nзберегти ще один байт.
— Ніл

Підсумовуючи пропозиції Ніла, 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, проте, намагатися вгадати визначення функції , якщо немає відповідності не включає в себе присутній.
— Джонатан Фрех

Подумайте, ви закреслили невірне число, шеф
— Веска

@Veskah True. ._.
— Джонатан

3

Сітківка , 41 байт

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

Спробуйте в Інтернеті! Пояснення:

.+
$* 

Перетворити в одинарне, але з використанням пробілів.

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

Використовуйте оператори префікса відповідності та суфікси для створення серії рядків із збільшенням кількості центрального простору в кожному рядку.

G`.

Однак є додатковий порожній рядок, який викидає остаточну транслітерацію, тому видаліть її тут.

sT`()`|`¶.*¶

У всіх рядках, окрім першого та останнього, змініть ()s на |s.







2

Batch, 218 bytes

@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%^|

As if |s weren't bad enough, ()s don't work well with if...else.


2

05ab1e (27 bytes)

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

try it online

explanation

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

I think '/¹N-ú is a byte shorter than ð¹N-×'/.
— Neil

Nice approach, but there are a few things to golf. One is what @Neil suggested above. In addition: "|(" can be „|( (there are builtins for 1, 2, and 3-char strings being ', „ and … respectively); and 0NQ¹<NQ~ can be ΂Nåè (Î seems to be bugged in the legacy version of TIO, but it does work in the latest version of 05AB1E, in which case you'll also have to replace ∞ with º). So in total (21 bytes): F„|(΂Nåè'/¹N-úðN×Jº, Try it online.
— Kevin Cruijssen



1

C# (.NET Core), 188 bytes

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

Try it online!

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 bytes 93 bytes

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 bytes

-2 Thanks to ASCII-only for pointing out extra parens
-1 Thanks to Mazzy for tweaking swap logic

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

Try it online!

Trying to tweak that $x= bit. There's probably a smarter way to get the 1st and last line out in a few less bytes. There is a better $x= but it isn't much cheaper.


1
89 bytes: Try it online!
— mazzy

0

Canvas, 12 bytes

┤|×(e⟳ +╴/+║

Try it here!

Explanation:

┤             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.