Dibuja el lambda blazon

16

Para celebrar el 2497 aniversario de la victoria griega en Salamina en 480 a. C. Dibuja el lambda blazon.

El lambda blazon era el lambda pintado en escudos griegos así:

imágenes de lambda de capital rojo sobre fondos circulares de escudo blanco y dorado

Rompecabezas: Dado un entero impar positivo n, produce una imagen de arte ascii del escudo anterior.

Especificaciones:

n = 1:

( /\ )

n = 3:

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

n = 5

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

Gráfico: n = 3

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

                 x-axis

Descripción:

Debe haber exactamente n \ caracteres yn / caracteres. Los /sys \no deben tocar el borde del escudo. Las esquinas inferior y superior del escudo se denotarán con un (o a )menos que n = 1 donde habrá uno )y uno (. Siempre habrá un espacio entre las esquinas inferiores y la lambda, aumentando en 1 con el eje y hasta y + 1 == n. Las esquinas no del lado del escudo se denotarán con |. No hay escudo superior.

jacksonecac
fuente
77
¿Por qué downvote? (2 más para ir)
user202729
3
@ user202729 ¿a qué te refieres con 2 más?
jacksonecac
44
SE tiene una restricción de caracteres de comentario, que obliga a los comentarios a tener al menos 15 caracteres.
usuario202729
77
¿Por qué no podría haber esperado 3 años para publicarlo para el aniversario 2.5k'; -;
HyperNeutrino
55
¿Por qué solo enteros impares? : o
Felix Palmen

Respuestas:

8

Carbón ,  17  13 bytes

¡Gracias a @Neil por guardar 4 bytes!

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

Pruébalo en línea!

Explicación:

(↙                // 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
fuente
1
le ahorra un byte y la mitad de sus correos electrónicos son innecesarios.
Neil
1
Además, Iθpuede guardar otro byte.
Neil
Resumiendo las sugerencias de Neil, 13 bytes
Sr. Xcoder
@ Mr.Xcoder Gracias, pero ya pude hacer eso.
Steadybox
Es pequeño, pero creo que su explicación (→debería significar "... y avanzar un paso hacia la derecha "
Kamil Drakari
6

SOGL V0.12 , 17 14 bytes

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

Pruébalo aquí!

Explicación:

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
fuente
4

C (gcc) , 103 96 bytes

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

Pruébalo en línea!

Jonathan Frech
fuente
Exculpamos lo principal e incluye ahora? Esta comunidad ha cambiado.
Alec Teal
2
@AlecTeal Es aceptable escribir una función que realice la tarea especificada en lugar de un programa completo. En general, las cuentas cuentan para el recuento de bytes, algunos compiladores de C, sin embargo, intentan adivinar una definición de función si no se incluyen las coincidencias.
Jonathan Frech
Creo que tachó el número equivocado, jefe
Veskah
@Veskah Cierto. ._.
Jonathan Frech
3

Retina , 41 bytes

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

Pruébalo en línea! Explicación:

.+
$* 

Convierte a unario, pero usando espacios.

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

Utilice los operadores de prefijo y sufijo de coincidencia para generar una serie de líneas con cantidades crecientes de espacio central en cada línea.

G`.

Sin embargo, hay una línea en blanco adicional, que elimina la transliteración final, así que elimínela aquí.

sT`()`|`¶.*¶

En todas las líneas, excepto la primera y la última, cambie ()s por |s.

Neil
fuente
2

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

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

Pruébalo en línea!

Xcali
fuente
2

Java (OpenJDK 8) , 200 190 170 bytes

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

Pruébalo en línea!

Roberto Graham
fuente
167 bytes
ceilingcat
2

Pyth , 43 bytes

Esto es bastante gigantesco dado que se ha hecho en dispositivos móviles: - /

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

Pruébalo en línea!

Sr. Xcoder
fuente
2

R , 153 bytes

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

Pruébalo en línea!

NofP
fuente
2

Lote, 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%^|

Como si |s no eran lo suficientemente mala, ()s no funcionan bien con if... else.

Neil
fuente
2

05ab1e (27 bytes)

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

pruébalo en línea

explicación

F                                                #Loop n times        
 |("0NQ¹<NQ~è                                    #Use ( or |        
             ð¹N-×                               #put spaces (1)        
                  '/                             #put /                
                    ðN×                          #put more space                
                       J∞,                       #reverse image        
David Smith
fuente
Creo que '/¹N-úes un byte más corto que ð¹N-×'/.
Neil
Buen enfoque, pero hay algunas cosas para el golf. Uno es lo que @Neil sugirió anteriormente. Además: "|("puede ser „|((hay builtins para 1, 2 y 3 cadenas de caracteres ', y respectivamente); y 0NQ¹<NQ~puede ser ΂Nåè( Îparece ser intervenidos en la versión legado de TIO, pero funciona en la última versión de 05AB1E, en cuyo caso también tendrá que reemplazar con º). Entonces, en total ( 21 bytes ): F„|(΂Nåè'/¹N-úðN×Jº, Pruébelo en línea .
Kevin Cruijssen
2

Funky , 101 bytes

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

Pruébalo en línea!

Un taco
fuente
1

Python 2 , 90 bytes

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

Pruébalo en línea!

-1 gracias a los ovs .

Erik el Outgolfer
fuente
falla n=1, pero se puede solucionar reemplazando i%~-n<1con-~i%n<2
Rod
@ Rod gracias, arreglado
Erik the Outgolfer
90 bytes : '<space>'*i*2->'<space><space>'*i
ovs
@ovs @ _ @ ¿por qué no pensé en eso
Erik the Outgolfer
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"," ");}

Pruébalo en línea!

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
fuente
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
mypetlion
fuente
1

PowerShell , 93 91 90 89 bytes

-2 Gracias a ASCII-only por señalar parens adicionales
-1 Gracias a Mazzy por ajustar la lógica de intercambio

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

Pruébalo en línea!

Tratando de modificar ese $x=bit. Probablemente haya una forma más inteligente de obtener la primera y última línea en unos pocos bytes menos. Hay una mejor $x=pero no es mucho más barata.

Veskah
fuente
1
89 bytes: ¡ Pruébelo en línea!
mazzy
0

Lienzo , 12 bytes.

┤|×(e⟳ +╴/+║

Pruébalo aquí!

Explicación:

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