My Squiggly Lamp


13

Mientras me movía, rompí mi lámpara. Ahora necesito uno nuevo. ¡Es tu trabajo hacerme una lámpara! No estoy seguro de qué tamaño quiero, aunque sé que quiero uno ondulado.

Su programa / función debe incluir una entrada numérica e imprimir una lámpara con tantos garabatos / protuberancias.

Ejemplos:

Entrada:2

Salida:

/ - \
 ()
 ()
/ __ \

Entrada:3

Salida:

/ - \
 ()
 ()
 ()
/ __ \

Entrada:5

Salida:

/ - \
 ()
 ()
 ()
 ()
 ()
/ __ \

Reglas:

  • 0 y números negativos no importan
  • Para darle a las lámparas (un desafío de este tipo) más variadas, debe cambiar la pantalla de la lámpara.
    • Deben tener 4 caracteres de ancho y 1 de alto.
    • Pueden tener cualquier forma, incluso formas sin pantalla de lámpara.
    • No deben contener espacios en blanco.
    • La base debe permanecer igual.
  • Debe mostrar un ejemplo de entrada y salida con la pantalla de su lámpara.
  • ¡El código más corto gana!

¡Pero no hace garabatos en absoluto! Me hubiera encantado que las entradas> 5 hicieran garabatos.
Optimizador

22
Yo voté en contra. Creo que este es un arte ASCII aburrido. Hay una sección repetida en el medio y no hay superposición entre las partes, que también son demasiado cortas para comprimir. Solo tiene forma ABBB..BBBC. El requisito de cambiar una sección solo significa que las personas usarán una cadena corta incorporada.
xnor

77
¡Ya pueden dejar de votar a favor! Creo que OP recibió el mensaje.
xnor

1
@xnor Siento pena por el pobre chico. Esta es probablemente una de las preguntas más rechazadas
Beta Decay

1
No voté de ninguna manera, pero dada la similitud con Draw an ASCII Lightning Bolt , puedo entender a los votantes negativos. Un pequeño giro como tener una base más grande para una lámpara más alta, o tener una decoración repetida solo en cada enésimo garabato lo haría un poco diferente.
manatwork

Respuestas:


4

Pyth - 16 bytes

Utiliza comillas para el tono ya que N está preinicializado a eso.

*N4VQ+d`();"/__\

Pruébelo en línea aquí .

* 4            String repetition 4x, implicit print
 N             Preinitialized to Quote
VQ             For N in range(Q)
 +             String concat
  d            Space
   `()         Repr of empty tuple
;              Close for loop
"/__\          Implicitly print string, implicit close quote

Muestra para 5:

""""
 ()
 ()
 ()
 ()
 ()
/__\

7

Muñeco de nieve 0.2.0 , 42 caracteres

)vg10sB]"[--]
"sP:" ()
"sP;bR"/__"sP92wRsP

Ejecución de muestra:

llama@llama:...Code/snowman/ppcg53483lamp$ snowman lamp.snowman
5
[--]
 ()
 ()
 ()
 ()
 ()
/__\

Así que solo noté que olvidé implementar la capacidad de escapar de las barras diagonales inversas cuando resolví este desafío. Eso definitivamente será algo en la próxima versión, pero por ahora, esto es lo que hice para imprimir la línea final:

"/__"sP92wRsP

92es el código ASCII para una barra diagonal inversa, lo wRenvuelve en una matriz y ahora puedo imprimirlo sPporque las "cadenas" en Snowman son en realidad solo matrices de números.


77
¿Quieres construir una lámpara de nieve?
Alex A.

3

> <> , 43 41 38 bytes

"\__/"aiv
"&-1v!?:<&a" ()
~"!_\
?!;o>l

Entrada a través de un punto de código, por ejemplo, el espacio es 32. Esto usa parte del propio código del programa como pantalla, lo que da como resultado algo que parece una antena parabólica:

~\_!
 ()
 ()
 ()
 ()
 ()
/__\

(Sugerencia gracias a @randomra)

Para tres bytes más, podemos cambiar la tercera línea para agregar un poco más de personalización:

"\__/"aiv
"&-1v!?:<&a" ()
__\"\~"/
?!;o>l

Esto produce una de esas lámparas que disparan la luz hacia arriba, a falta de una mejor manera de decirlo:

\__/
 ()
 ()
 ()
 ()
 ()
/__\

3

R, 54 52 46 bytes

cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")

En esta versión, entrada y salida. están casi mezcladas:

{entrada / salida} PONER:

> cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")
1: 4
2: 
Read 1 item
RRRR
 ()
 ()
 ()
 ()
/__\

EDITAR 1 : -2 bytes gracias al comentario de @manatwork.
EDITAR 2 : -6 bytes. El crédito completo va a @manatwork nuevamente


1
Cambia nada más que el aspecto: " /_\\"debería ser "/__\\". Por cierto, ¿es eso \rnecesario?
manatwork el

@manatwork ¡Cambió la forma del pie de la lámpara, haciéndola más estable + tu comentario sobre \rme salvó dos bytes! Debería haber releído mi código! Gracias !
Frédéric

1
Hmm ... herramienta extraña. No se puede hacer que funcione de forma no interactiva. De todos modos, cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")parece funcionar.
manatwork el

@manatwork: bueno ... ¡Nunca pensé que esto podría funcionar! De hecho, es una buena solución. ¡R está lleno de sorpresas!
Frédéric

Bonjour Frédéric, si todavía está activo en PPCG puede guardar 5 bytes
JayCe

3

Paja , 26 bytes (no competitivos)

<#~('--'
)>( ()
)-*>(/__\)>

Úselo '--'como pantalla de lámpara, tome la entrada en unario ahora en decimal


¿Como funciona esto?
Conor O'Brien

@BetaDecay * por lo tanto no compiten
Conor O'Brien


2

JavaScript ES6, 34 bytes

i=>`|==|
${` ()
`.repeat(i)}/__\\`

Las nuevas líneas son significativas.

Ejemplo con entrada de 5:

|==|
 ()
 ()
 ()
 ()
 ()
/__\

2

sed, 28 bytes

s#.# ()\n#g
s#^\|$#/__\\\n#g

Toma entrada en unario. La sombra es la selección obvia (igual que la base).

Prueba de funcionamiento

$ echo -n 111 | sed -f lamp.sed
/__\
 ()
 ()
 ()
/__\

1

Gema: 30 caracteres

*=gema\n@repeat{*;\ ()\n}/__\\

Ejecución de muestra:

bash-4.3$ gema '*=gema\n@repeat{*;\ ()\n}/__\\' <<< 3
gema
 ()
 ()
 ()
/__\

1

jq: 30 caracteres

(Código de 29 caracteres + opción de línea de comando de 1 carácter).

8888,(range(.)|" ()"),"/__\\"

Ejecución de muestra:

bash-4.3$ jq -r '8888,(range(.)|" ()"),"/__\\"' <<< 3
8888
 ()
 ()
 ()
/__\

Prueba en línea ( -rno se admite el paso por la URL; compruebe usted mismo la salida sin formato).


1

C, 54 bytes

Llame f()con la altura deseada de la lámpara.

f(n){for(puts("||||");n--;puts(" ()"));puts("/__\\");}

Pruébalo con ideone.

Ejemplo de salida para 5:

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

1

Pyke, 15 bytes

" ()"~mQAD"/__\

Pruébalo aquí!

     ~m         - 1000
" ()"           -  " ()"
       QAD      - duplicate(^) input times
          "/__\ - "/__\"

Salidas:

1000
 ()
 ()
/__\


1

Espacio en blanco , 169 bytes

[S S S N
_Push_0][T  N
T   T   _Read_STDIN_as_integer][S S S T S T T   T   S S N
_Push_92_\][S S S T S T T   T   T   T   N
_Push_95__][S N
S _Duplicate_95__][S S S T  S T T   T   T   N
_Push_47_/][N
S S N
_Create_Label_LOOP][S S S N
_Push_0][T  T   T   _Retrieve_at_address_0][S S S T N
_Push_1][T  S S T   _Subtract][S N
S _Duplicate][S S S N
_Push_0][S N
T   _Swap_top_two][T    T   S _Store_at_address_0][N
T   T   S N
_If_neg_Jump_to_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S T S S T   N
_Push_41_)][S S S T S T S S S N
_Push_40_(][S S S T S S S S S N
_Push_32_space][N
S N
N
_Jump_to_Label_LOOP][N
S S S N
_Create_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S S S S T   N
_Push_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][N
S S T   N
_Create_Label_LOOP_2][T N
S S _Print_as_character][N
S N
T   N
_Jump_to_Label_LOOP_2]

Se agregaron letras S(espacio), T(tabulación) y N(nueva línea) solo como resaltado.
[..._some_action]agregado solo como explicación.

Pruébalo en línea (solo con espacios en bruto, pestañas y nuevas líneas).

Explicación en pseudocódigo:

Empuja todos los caracteres en orden inverso a la pila y luego los imprime en un bucle.

Integer i = STDIN as input
Push "\__/" to the stack
Start LOOP:
  i = i - 1
  if(i is negative):
    Go to function PRINT
  Push "\n)( " to the stack
  Go to next iteration of LOOP

function PRINT:
  Push "\n!!!!" to the stack
  Start LOOP_2:
    Print top as character to STDOUT
    Go to next iteration of LOOP_2

NOTA: ien el pseudocódigo anterior se almacena de nuevo en el montón en cada iteración de LOOP, porque no queremos dejarlo en la pila para que se imprima al final.


1

Lienzo , 8 bytes.

(×_¶/e⟳║

Pruébalo aquí!

Explicación:

(×        repeat "(" input times
  _¶/e    encase it on both sides in "_\n/"
          the 1st line is surrounded in "_" and the second ends and starts with "/"
      ⟳   rotate the string clockwise without changing characters
       ║  palindromize horizontally with 0 overlap

1

05AB1E , 17 15 13 11 bytes

„ (и„/_.ø)˜∞

-2 bytes (17 → 15) gracias a @EriktheOutgolfer .
-2 bytes (13 → 11) después de inspirarse en la respuesta de Canvas de @dzaima .

La tapa es igual a la base ( /__\).

Explicación:

 (            # Literal string " ("
   и           # Repeat " (" the input amount of times
               #  i.e. " (" and 3 → [' (',' (',' (']
    „/_        # Literal string "/_"
             # Surround the list of " (" with "/_" on both ends
               #  i.e. [' (',' (',' ('] → ['/_',[' (',' (',' (',' ('],'/_']
         ˜     # Flatten this list
               #  i.e. ['/_',[' (',' (',' ('],'/_'] → ['/_',' (',' (',' (','/_']
              # Mirror each item
               #  i.e. ['/_',' (',' (',' (','/_'] → ['/__\',' () ',' () ',' () ','/__\']
               # And output the list new-line delimited (implicitly due to the mirror)

Antigua respuesta de 13 bytes:

„/_D (Iиs)˜∞

Pruébalo en línea.


1

Excel, 31 bytes

Una función de hoja de trabajo anónima que toma la entrada como un valor numérico del rango [A1]y las salidas a la celda que llama.

Esta lámpara es musical y ayudará a animar y alegrar tu día.

="/\
"&REPT(" ()
",A1)&"/__\"

Salida

Amo las lamparas


1

PowerShell 5.1, 28 26 bytes

Gracias Mazzy por 2 bytes

8008;," ()"*"$args";"/__\"

Dado que la sombra puede tener 4 caracteres, usar un número ahorra un par de comillas. La parte más difícil fue encontrar un tono agradable.

Salida:

PS C:\Users\ItsMe\Desktop> .\scratch.ps1 4
8008
 ()
 ()
 ()
 ()
/__\

bonita pantalla de lámpara)
mazzy

1
intente esto8008;," ()"*"$args";"/__\"
mazzy

1

Python 2, 36 bytes

print"-"*4+"\n ()"*input()+"\n/__\\"

Para la entrada 4:

----
 ()
 ()
 ()
 ()
/__\

Tenga en cuenta que para Python que cualquier pantalla de lámpara que use tuberías es un byte menos.

-1 bytes gracias a @Alex!


1
Creo que si cambia la pantalla de la lámpara a un solo personaje y la multiplica por 4, puede guardar un byte:print"-"*4+"\n ()"*input()+"\n/__\\"
Alex


0

SWI-Prolog, 73 60 bytes

a(X):-write(golf),writef("%r",["\n ()",X]),write("\n/__\\").

a(5). salidas

golf
 ()
 ()
 ()
 ()
 ()
/__\

0

Julia, 36 bytes

n->print("|~~|\n"*" ()\n"^n*"/__\\")

Esto crea una función sin nombre que toma un entero como entrada e imprime en stdout.

Ejemplo:

julia> f(4)
|~~|
 ()
 ()
 ()
 ()
/__\

0

Bash + coreutils, 37 bytes

yes ' ()'|sed '1i####
'$1'{a/__\\
q}'

Las nuevas líneas son necesarias y se cuentan en el total de bytes. Se requiere GNU sed.

Correr:

./squiggly_lamp.sh 2

Salida:

####
 ()
 ()
/__\



0

Java 7 11, 84 83 37 bytes

n->"i!!i\n"+" ()\n".repeat(n)+"/__\\"

Pruébalo en línea. (NOTA: Java 11 aún no es compatible con TIO, por lo que String.repeat(int)se ha emulado conrepeat(String,int) el mismo número de bytes).

Usos i!!icomo gorra. ¡!!¡Se ve mejor , pero es dos bytes más.

Explicación:

n->                    // Method with integer parameter and String return-type
  "i!!i\n"             //  Return the cap + new-line
  " ()\n".repeat(n)    //   appended with " ()" and a new-line `n` amount of times
  "/__\\"              //   append with "/__\"




Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.