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


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

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

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

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