La mia lampada Squiggly


13

Mentre mi muovevo, ho rotto la mia lampada. Ora ne ho bisogno di uno nuovo. Il tuo compito è farmi una lampada! Non sono sicuro di quale taglia desidero, anche se so di volerne una agitata.

Il tuo programma / funzione deve contenere un input numerico e stampare una lampada con tanti scricchiolii / dossi.

Esempi:

Ingresso:2

Produzione:

/ - \
 ()
 ()
/ __ \

Ingresso:3

Produzione:

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

Ingresso:5

Produzione:

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

Regole:

  • 0 e numeri negativi non contano
  • Per dare alle lampade (una sfida del genere) più di una varietà, è necessario cambiare il paralume.
    • Devono essere larghi 4 caratteri e alti 1 carattere.
    • Possono essere di qualsiasi forma, comprese quelle senza paralume.
    • Non devono contenere spazi bianchi.
    • La base deve rimanere la stessa.
  • È necessario mostrare un esempio di input e output con il paralume.
  • Il codice più corto vince!

Ma non si agita affatto !. Mi sarebbe piaciuto se gli input> 5 lo avessero fatto vacillare.
Ottimizzatore

22
Ho effettuato il downgrade. Penso che questa sia un'arte ASCII noiosa. C'è una sezione ripetuta nel mezzo e nessuna sovrapposizione tra le parti, anch'esse troppo corte da comprimere. Ha solo forma ABBB..BBBC. Il requisito di cambiare una sezione significa solo che le persone useranno una breve stringa incorporata.
xnor

7
Puoi già smettere di effettuare il downvoting! Penso che OP abbia ricevuto il messaggio.
xnor

1
@xnor Mi dispiace per il povero ragazzo. Questa è probabilmente una delle domande più sottovalutate di sempre: / i.stack.imgur.com/T4A7X.jpg
Decadimento beta

1
Non ho votato in alcun modo me stesso, ma data la somiglianza con Disegna un lampo ASCII , posso capire i downvoter. Qualche piccola svolta come avere una base più grande per una lampada più alta, o avere una decorazione ripetuta solo su ogni ennesimo squiggle lo renderebbe un po 'diverso.
arte

Risposte:


4

Pyth - 16 byte

Usa le virgolette per l'ombra poiché N è preinizializzato a quello.

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

Provalo online qui .

* 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

Esempio per 5:

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

7

Pupazzo di neve 0.2.0 , 42 caratteri

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

Esecuzione di esempio:

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

Quindi ho notato che ho dimenticato di implementare la capacità di sfuggire alle barre rovesciate all'interno delle stringhe quando ho risolto questa sfida. Questo sarà sicuramente qualcosa nella prossima versione, ma per ora, ecco cosa ho fatto per stampare la riga finale:

"/__"sP92wRsP

92è il codice ASCII per una barra rovesciata, lo wRavvolge in un array e ora posso stamparlo sPperché "stringhe" in Snowman sono in realtà solo matrici di numeri.


7
Vuoi costruire una lampada da neve?
Alex A.

3

> <> , 43 41 38 byte

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

L'immissione tramite un punto di codice, ad es. Lo spazio è 32. Questo utilizza parte del codice del programma come paralume, risultando in qualcosa che assomiglia a un'antenna parabolica:

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

(Suggerimento grazie a @randomra)

Per altri tre byte, possiamo cambiare la terza riga per aggiungere un po 'più di personalizzazione:

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

Questo produce una di quelle lampade che sparano luce verso l'alto, per mancanza di un modo migliore per dirlo:

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

3

R, 54 52 46 byte

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

In questa versione, input e output sono quasi mescolati insieme:

{in / out} PUT:

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

MODIFICA 1 : -2 byte grazie al commento di @manatwork.
EDIT 2 : -6 byte. Il credito completo va di nuovo a @manatwork


1
Non cambia altro che l'aspetto: " /_\\"dovrebbe essere "/__\\". A proposito, è \rnecessario?
arte

@manatwork Ha cambiato la forma del piede della lampada, rendendola più stabile + la tua osservazione su di \rme mi ha salvato due byte! Avrei dovuto rileggere il mio codice! Grazie !
Frédéric,

1
Hmm ... Strano strumento. Non riesco a farlo funzionare in modo non interattivo. Comunque, cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")sembra funzionare.
arte

@manatwork: beh ... non avrei mai pensato che potesse funzionare! È davvero una bella soluzione. R è piena di sorprese!
Frédéric,

Bonjour Frédéric, se sei ancora attivo su PPCG puoi risparmiare 5 byte
JayCe



2

JavaScript ES6, 34 byte

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

Le nuove linee sono significative

Esempio con input di 5:

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

2

sed, 28 byte

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

Riceve input in unario. L'ombra è la selezione ovvia (uguale alla base).

Prova

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

1

Gema: 30 personaggi

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

Esecuzione di esempio:

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

1

jq: 30 caratteri

(Codice di 29 caratteri + opzione della riga di comando di 1 carattere.)

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

Esecuzione di esempio:

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

Test online (il passaggio -rtramite URL non è supportato: controlla tu stesso l'output non elaborato).


1

C, 54 byte

Chiama f()con l'altezza desiderata della lampada.

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

Provalo su ideone.

Esempio di output per 5:

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

1

Pyke, 15 byte

" ()"~mQAD"/__\

Provalo qui!

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

Uscite:

1000
 ()
 ()
/__\


1

Spazio bianco , 169 byte

[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]

Lettere S(spazio), T(scheda) e N(nuova riga) aggiunti solo come evidenziazione.
[..._some_action]aggiunto solo come spiegazione.

Provalo online (solo con spazi non elaborati, schede e nuove righe).

Spiegazione in pseudo-codice:

Spinge tutti i personaggi in ordine inverso nella pila, quindi li stampa in un ciclo.

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: inello pseudo-codice sopra riportato viene archiviato nuovamente nell'heap in ogni iterazione di LOOP, perché non vogliamo lasciarlo in pila per essere stampato alla fine.


1

Tela , 8 byte

(×_¶/e⟳║

Provalo qui!

Spiegazione:

(×        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 byte

„ (и„/_.ø)˜∞

-2 byte (17 → 15) grazie a @EriktheOutgolfer .
-2 byte (13 → 11) dopo essere stato ispirato dalla risposta Canvas di @dzaima .

Cap è uguale a base ( /__\).

Spiegazione:

 (            # 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)

Risposta di 13 byte precedenti:

„/_D (Iиs)˜∞

Provalo online.


1

Excel, 31 byte

Una funzione di foglio di lavoro anonima che accetta input come un numero dall'intervallo [A1]e output nella cella chiamante.

Questa lampada è musicale e aiuterà a ravvivare e alleggerire la tua giornata.

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

Produzione

I love lamp


1

PowerShell 5.1, 28 26 byte

Grazie Mazzy per 2 byte

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

Poiché la tonalità può essere di 4 caratteri, l'utilizzo di un numero consente di salvare un paio di virgolette. La parte più difficile è stata trovare una bella ombra.

Produzione:

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

bel paralume)
mazzy

1
prova questo8008;," ()"*"$args";"/__\"
mazzy

1

Python 2, 36 byte

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

Per l'ingresso 4:

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

Si noti che per Python qualsiasi paralume che utilizza tubi è un byte in meno.

-1 byte grazie a @Alex!


1
Penso che se cambi il paralume in un singolo carattere e lo moltiplichi per 4 puoi salvare un byte:print"-"*4+"\n ()"*input()+"\n/__\\"
Alex


0

SWI-Prolog, 73 60 byte

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

a(5). uscite

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

0

Julia, 36 byte

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

Questo crea una funzione senza nome che accetta un numero intero come input e stampa su stdout.

Esempio:

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

0

Bash + coreutils, 37 byte

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

Le newline sono necessarie e contate nel totale dei byte. È richiesto GNU sed.

Correre:

./squiggly_lamp.sh 2

Produzione:

####
 ()
 ()
/__\



0

Java 7 11, 84 83 37 byte

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

Provalo online. (NOTA: Java 11 non è ancora supportato su TIO, quindi String.repeat(int)è stato emulato repeat(String,int)per lo stesso conteggio byte.)

Utilizza i!!icome tappo. ¡!!¡sembra migliore , ma è di due byte in più.

Spiegazione:

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 "/__\"


0

Avanti , 38 byte

I"|MM|"Wr
~W" ()"oN<s!:-1~
@W"/__\"oN<

Provalo online!

Campioni

1
|MM|
 ()
/__\

2
|MM|
 ()
 ()
/__\

3
|MM|
 ()
 ()
 ()
/__\

2
Could you maybe provide a link to an online testing environment so one can easily run your submission?
Jonathan Frech

@JonathanFrech TIO link now available
snail_


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.