Lambda blazon çizin


16

M.Ö. 480'de Salamis'teki Yunan zaferinin 2497. yılını kutlamak için. Lambda blazon çizin.

Lambda blazon, Yunan kalkanlarına boyanmış lambda idi:

dairesel beyaz ve altın kalkan arka plan üzerinde kırmızı sermaye lambda görüntüleri

Bulmaca: Pozitif tek bir tamsayı n verildiğinde, yukarıdaki kalkanın bir ascii sanat görüntüsü üretin.

Özellikler:

n = 1:

( /\ )

n = 3:

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

n = 5

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

Grafik: n = 3

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

                 x-axis

Açıklama:

Tam olarak n \ karakter ve n / karakter olmalıdır. /Ler ve \lar kalkanın kenarına temas etmemelidir. Kalkanın alt ve üst köşeleri ile birlikte ifade edilecek (veya )sürece n = 1 burada bir olacaktır )ve bir (. Alt köşeler ve lambda arasında her zaman y ekseni olana kadar 1 oranında artacaktır y + 1 == n. Kalkan tarafının köşeleri olmayan ile belirtilecektir |. Kalkan üstü yoktur.


7
Neden oy kullanmıyorsunuz? (2 daha gitmek için)
user202729

3
@ user202729 2 tane daha ne demek?
jacksonecac

4
SE'nin yorum karakteri kısıtlaması vardır ve bu da yorumları en az 15 karakter olmaya zorlar.
user202729

7
Neden 2.5k'uncu yıldönümü için 3 yıl beklemediniz; -;
HyperNeutrino

5
Neden sadece tek tamsayılar? : o
Felix Palmen

Yanıtlar:


8

Kömür ,  17  13 bayt

4 bayt kaydettiği için @Neil'e teşekkürler!

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

Çevrimiçi deneyin!

Açıklama:

(↙                // 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
size bir bayt kazandırır ve dosyalarınızın yarısı gereksizdir.
Neil

1
Ayrıca, başka bir bayt kaydetmek Iθolabilir .
Neil

Neil'in önerilerini özetliyor, 13 bayt
Bay Xcoder

@ Mr.Xcoder Teşekkürler, ama bunları zaten yaptım.
Steadybox

Küçük, ama açıklamanıza inanıyorum ki (→"... ve bir adım sağa
geçin

6

SOGL V0.12 , 17 14 bayt

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

Buradan Deneyin!

Açıklama:

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 bayt

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

Çevrimiçi deneyin!


Biz ana bahane ve şimdi içerir? Bu topluluk değişti.
Alec Teal

2
@AlecTeal Tam bir program yerine belirtilen görevi yerine getiren bir işlev yazmak kabul edilebilir. Genel olarak içerir do bayt sayısı doğru sayımı, bazı C derleyicileri Ancak eşleşen mevcut içeriyorsa bir işlev tanımını tahmin etmeye çalışırlar.
Jonathan Frech

Yanlış sayıyı aştığınızı düşünün şef
Veskah

@Veskah True. ._.
Jonathan Frech

3

Retina , 41 bayt

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

Çevrimiçi deneyin!Açıklama:

.+
$* 

Unary'e dönüştürün, ancak boşlukları kullanın.

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

Her satırda artan merkez alanı miktarlarına sahip bir dizi satır oluşturmak için eşleme önekini ve sonek işleçlerini kullanın.

G`.

Ancak, son harf çevirisi yapan ekstra boş bir satır var, bu yüzden buradan silin.

sT`()`|`¶.*¶

İlk ve son hariç tüm satırlarda ()s'yi s olarak değiştirin |.






2

R , 153 bayt

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

Çevrimiçi deneyin!


2

Toplu, 218 bayt

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

Sanki |ler yeterince kötü değilmiş, ()s ile iyi çalışmaz if... else.


2

05ab1e (27 bayt)

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

çevrimiçi dene

açıklama

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

Bence '/¹N-údaha kısa bir bayt ð¹N-×'/.
Neil

Güzel bir yaklaşım, ama golf için birkaç şey var. Biri @Neil'in yukarıda önerdiği şey . Buna ek olarak: "|("olabilir „|((1 için yerleşiklere, 2 vardır ve 3-Char şeritleri olmak ', ve sırası ile); ve 0NQ¹<NQ~olabilir ΂Nåè( ÎTIO'nun eski sürümünde hata almış gibi görünüyor, ancak 05AB1E'nin en son sürümünde çalışıyor, bu durumda da değiştirmeniz gerekir ile º). Toplamda ( 21 bayt ): F„|(΂Nåè'/¹N-úðN×Jº, Çevrimiçi deneyin .
Kevin Cruijssen



1

C # (.NET Core) , 188 bayt

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

Çevrimiçi deneyin!

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

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 bayt

-2 Sadece ekstra ebeveynleri işaret ettiği için ASCII
sayesinde -1 Takas mantığını değiştirdiği için Mazzy'ye teşekkürler

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

Çevrimiçi deneyin!

O $x=biti değiştirmeye çalışıyorum. Muhtemelen daha az bayt ile 1. ve son satırı çıkarmanın daha akıllı bir yolu var. Daha iyisi var $x=ama çok daha ucuz değil.



0

Tuval , 12 bayt

┤|×(e⟳ +╴/+║

Burada deneyin!

Açıklama:

┤             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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.