Narysuj herb lambda

16

Aby uczcić 2497 rocznicę zwycięstwa Grecji w Salami w 480 rpne Narysuj herb lambda.

Blask lambda to lambda namalowany na greckich tarczach w taki sposób:

obrazy lambda z czerwonej stolicy na okrągłym tle białej i złotej tarczy

Układanka: Biorąc pod uwagę dodatnią nieparzystą liczbę całkowitą n, utwórz obraz ascii powyższej tarczy.

Dane techniczne:

n = 1:

( /\ )

n = 3:

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

n = 5

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

Wykres: n = 3

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

                 x-axis

Opis:

Powinny być dokładnie n \ znaków i n / znaków. W /s i \s nie powinna dotykać krawędzi tarczy. Dolne i górne rogi tarczy będą oznaczone znakiem (lub, )chyba że n = 1, gdzie będzie jeden )i jeden (. Zawsze będzie jedna spacja między dolnymi narożnikami a lambda, zwiększając się o 1 wraz z osią y do y + 1 == n. Nie narożniki strony tarczy zostaną oznaczone symbolem |. Nie ma góry tarczy.

jacksonecac
źródło
7
Dlaczego głosować? (
Pozostały
3
@ user202729 co masz na myśli jeszcze 2?
jacksonecac
4
SE ma ograniczenia znaków komentarza, które zmuszają komentarze do co najmniej 15 znaków.
user202729,
7
Dlaczego nie mogłeś czekać 3 lata, aby opublikować go na 2,5 rocznicę; -;
HyperNeutrino,
5
Dlaczego tylko nieparzyste liczby całkowite? : o
Felix Palmen

Odpowiedzi:

8

Węgiel drzewny ,  17  13 bajtów

Dzięki @Neil za uratowanie 4 bajtów!

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

Wypróbuj online!

Wyjaśnienie:

(↙                // 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.
Steadybox
źródło
1
oszczędza bajt, a połowa twoich jest niepotrzebna.
Neil,
1
Również twój Iθ może być , aby zapisać kolejny bajt.
Neil,
Podsumowując sugestie Neila, 13 bajtów
pan Xcoder,
@ Mr.Xcoder Dzięki, ale udało mi się już to zrobić.
Steadybox
Jest mały, ale wierzę, że twoje wyjaśnienie (→powinno oznaczać „... i przesuń się o krok w prawo
Kamil Drakari,
6

SOGL V0.12 , 17 14 bajtów

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

Wypróbuj tutaj!

Wyjaśnienie:

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                                     
dzaima
źródło
4

C (gcc) , 103 96 bajtów

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

Wypróbuj online!

Jonathan Frech
źródło
Przepraszam główny i obejmuje teraz? Ta społeczność się zmieniła.
Alec Teal
2
@AlecTeal Dopuszczalne jest napisanie funkcji, która wykonuje określone zadanie, a nie pełnego programu. Uwzględnia ogólnie, że liczą się do liczby bajtów, niektóre kompilatory C próbują jednak odgadnąć definicję funkcji, jeśli nie ma pasującego dopasowania.
Jonathan Frech
Myślisz, że
skreśliłeś
@Veskah True. ._.
Jonathan Frech
3

Siatkówka , 41 bajtów

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

Wypróbuj online! Wyjaśnienie:

.+
$* 

Konwertuj na unary, ale używając spacji.

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

Użyj operatorów prefiksu i sufiksu dopasowania, aby wygenerować serię wierszy ze zwiększającą się ilością miejsca środkowego w każdym wierszu.

G`.

Istnieje jednak dodatkowa pusta linia, która odrzuca ostateczną transliterację, więc usuń ją tutaj.

sT`()`|`¶.*¶

Na wszystkich liniach oprócz pierwszej i ostatniej zmień ()s na |s.

Neil
źródło
2

Perl 5 , 91 + 1 ( -p) = 92 bajty

$_='('.($s=$"x($q=$_))."/\\$s)";while(--$q){say;y/()/|/;s| /|/ |;s|\\ | \\|}s/\|/(/;s/\|/)/

Wypróbuj online!

Xcali
źródło
2

Java (OpenJDK 8) , 200 190 170 bajtów

n->{for(char i=0,s[];i<n;s[-~n-i]=47,s[2+n+i]=92,s[0]=i<1|i>n-2?40:'|',s[3+n+n]=i<1|i++>n-2?41:'|',System.out.println("".valueOf(s).replace('\0',' ')))s=new char[4+n+n];}

Wypróbuj online!

Roberto Graham
źródło
167 bajtów
ceilingcat
2

Pyth , 43 bajty

Jest to dość gigantyczne, biorąc pod uwagę, że zostało to zrobione na urządzeniach mobilnych: - /

j_m++++++@"(|"J!/,1QdK*;d\/*;y-Qd\\K@")|"JS

Wypróbuj online!

Pan Xcoder
źródło
2

Python 2 , 85 bajtów

n=a=input()
while a:print'(|'[1<a<n]+a*' '+'/'+(n-a)*'  '+'\\'+a*' '+')|'[1<a<n];a-=1

Wypróbuj online!

Lynn
źródło
2

R , 153 bajty

function(n){s=2*n+4
m=matrix('|',s,n)
m[3:s-1,]=' '
m[cbind(5:s-2,c(n:1,1:n))]=1
m[1,c(1,n)]='('
m[s,c(1,n)]=')'
m[m>0]=rep(c('/','\\'),n)
rbind(m,'\n')}

Wypróbuj online!

Nie dotyczy
źródło
2

Partia, 218 bajtów

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

Jakby |ów nie były na tyle złe, ()a nie działają dobrze z if... else.

Neil
źródło
2

05ab1e (27 bajtów)

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

spróbuj online

wyjaśnienie

F                                                #Loop n times        
 |("0NQ¹<NQ~è                                    #Use ( or |        
             ð¹N-×                               #put spaces (1)        
                  '/                             #put /                
                    ðN×                          #put more space                
                       J∞,                       #reverse image        
David Smith
źródło
Myślę, że '/¹N-úbajt jest krótszy niż ð¹N-×'/.
Neil
Przyjemne podejście, ale jest kilka rzeczy do gry w golfa. Jednym z nich jest to, co @Neil zasugerował powyżej. Ponadto: "|("może być „|((są builtins 1, 2 i 3, struny char jest ', i odpowiednio); i 0NQ¹<NQ~może być ΂Nåè( Îwydaje się być podsłuch w wersji starszej TiO, ale działa w najnowszej wersji 05AB1E, w takim przypadku będziesz też musiał wymienić z º). Łącznie ( 21 bajtów ): F„|(΂Nåè'/¹N-úðN×Jº, Wypróbuj online .
Kevin Cruijssen
2

Funky , 101 bajtów

n=>for(i=0;i<n;i++)print(((c=(i==n-1)or!i)?"(":"|")..(s=" "*n-i).."/"..(" "*i*2).."\\"..s..c?")":"|")

Wypróbuj online!

ATaco
źródło
1

Python 2 , 90 bajtów

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

Wypróbuj online!

-1 dzięki ovs .

Erik the Outgolfer
źródło
nie powiedzie się n=1, ale może być ustalona poprzez zastąpienie i%~-n<1z-~i%n<2
Rod
@Dziękuję, naprawiono
Erik the Outgolfer,
90 bajtów : '<space>'*i*2->'<space><space>'*i
ovs
@ovs @ _ @ dlaczego o tym nie pomyślałem
Erik the Outgolfer
1

C # (.NET Core) , 188 bajtów

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

Wypróbuj 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"," ");
}
Ayb4btu
źródło
1

Python 3, 110 bajtów 93 bajty

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

PowerShell , 93 91 90 89 bajtów

-2 Dzięki ASCII-tylko za wskazanie dodatkowych parens
-1 Dzięki Mazzy za ulepszenie logiki wymiany

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

Wypróbuj online!

Próbuję to ulepszyć $x=. Prawdopodobnie jest mądrzejszy sposób, aby uzyskać pierwszą i ostatnią linię w kilka mniej bajtów. Jest lepiej, $x=ale nie jest to znacznie tańsze.

Veskah
źródło
1
89 bajtów: Wypróbuj online!
mazzy
0

Płótno , 12 bajtów

┤|×(e⟳ +╴/+║

Wypróbuj tutaj!

Wyjaśnienie:

┤             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
dzaima
źródło