Disegna il blasone lambda


16

Per celebrare il 2497 ° anniversario della vittoria greca a Salamina nel 480 a.C. Disegna il blasone lambda.

Il blasone lambda era il lambda dipinto su scudi greci in questo modo:

immagini di lambda capitale rossa su sfondi scudi circolari bianchi e oro

Puzzle: dato un numero dispari positivo n, produce un'immagine arte ascii dello scudo sopra.

specifiche tecniche:

n = 1:

( /\ )

n = 3:

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

n = 5

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

Grafico: n = 3

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

                 x-axis

Descrizione:

Dovrebbero esserci esattamente n \ caratteri e n / caratteri. Le /s e \s non devono toccare il bordo dello scudo. Gli angoli inferiore e superiore dello scudo saranno indicati con a (o, a )meno che n = 1, dove ci saranno uno )e uno (. Ci sarà sempre uno spazio tra gli angoli inferiori e la lambda, aumentando di 1 con l'asse y fino a y + 1 == n. Non gli angoli del lato dello scudo saranno indicati con |. Non c'è la parte superiore dello scudo.


7
Perché votare? (2 in più)
user202729,

3
@ user202729 cosa intendi con 2 in più?
jacksonecac,

4
SE ha una limitazione del carattere di commento, che impone che i commenti siano almeno 15 caratteri.
user202729

7
Perché non avresti potuto aspettare 3 anni per pubblicarlo per il 2,5 ° anniversario; -;
HyperNeutrino,

5
Perché solo numeri dispari? : o
Felix Palmen,

Risposte:


8

Carbone ,  17  13 byte

Grazie a @Neil per aver salvato 4 byte!

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

Provalo online!

Spiegazione:

(↙                // 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
ti fa risparmiare un byte e metà dei tuoi messaggi non sono necessari.
Neil,

1
Inoltre, Iθpuoi salvare un altro byte.
Neil,

Riassumendo i suggerimenti di Neil, 13 byte
Mr. Xcoder,

@ Mr.Xcoder Grazie, ma sono già riuscito a farlo.
Steadybox,

È piccolo, ma credo che la tua spiegazione (→dovrebbe significare "... e muovi di un passo a destra "
Kamil Drakari,

6

SOGL V0.12 , 17 14 byte

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

Provalo qui!

Spiegazione:

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 byte

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

Provalo online!


Scusiamo il principale e include ora? Questa comunità è cambiata.
Alec Teal,

2
@AlecTeal È accettabile scrivere una funzione che esegue l'attività specificata anziché un programma completo. Include, in generale, do conteggio verso il numero di byte, alcuni compilatori C, invece, tentano di indovinare una definizione di funzione, se non corrispondenza include sono presenti.
Jonathan Frech,

Pensa di aver cancellato il numero sbagliato, capo
Veskah

@Veskah True. ._.
Jonathan Frech,

3

Retina , 41 byte

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

Provalo online! Spiegazione:

.+
$* 

Converti in unario, ma usando gli spazi.

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

Utilizzare gli operatori prefisso e suffisso di corrispondenza per generare una serie di linee con quantità crescenti di spazio centrale su ciascuna linea.

G`.

Tuttavia, c'è una riga vuota in più, che elimina la traslitterazione finale, quindi eliminala qui.

sT`()`|`¶.*¶

Su tutte le righe tranne la prima e l'ultima, cambia la ()s in |s.






2

R , 153 byte

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

Provalo online!


2

Lotto, 218 byte

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

Come se |s non bastasse, ()s non funzionano bene con if... else.


2

05ab1e (27 byte)

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

provalo online

spiegazione

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

Penso che '/¹N-úsia un byte più breve di ð¹N-×'/.
Neil,

Bel approccio, ma ci sono alcune cose da golf. Uno è ciò che @Neil ha suggerito sopra. Inoltre: "|("può essere „|((esistono stringhe incorporate per 1, 2 e 3 caratteri ', e rispettivamente); e0NQ¹<NQ~ può essere ΂Nåè( Îsembra essere spiati nella versione precedente di TIO, ma funziona nella versione più recente di 05AB1E, nel qual caso si dovrà anche sostituire con º). Quindi, in totale ( 21 byte ): F„|(΂Nåè'/¹N-úðN×Jº, provalo online .
Kevin Cruijssen,



1

C # (.NET Core) , 188 byte

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

Provalo 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 byte 93 byte

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 byte

-2 Grazie a ASCII-only per la segnalazione di parentesi extra
-1 Grazie a Mazzy per l'ottimizzazione della logica di scambio

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

Provalo online!

Sto provando a modificare quel $x=po '. C'è probabilmente un modo più intelligente per ottenere la prima e l'ultima riga in pochi byte in meno. C'è un migliore $x=ma non è molto più economico.



0

Tela , 12 byte

┤|×(e⟳ +╴/+║

Provalo qui!

Spiegazione:

┤             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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.