Meine schnörkellose Lampe


13

Während ich mich bewegte, zerbrach ich meine Lampe. Jetzt brauche ich einen neuen. Es ist deine Aufgabe, mich zu einer Lampe zu machen! Ich bin mir nicht sicher, welche Größe ich haben möchte, obwohl ich weiß, dass ich eine schnörkellose haben möchte.

Ihr Programm / Ihre Funktion muss eine Zahleneingabe aufnehmen und eine Lampe mit so vielen Kringeln / Unebenheiten ausdrucken.

Beispiele:

Eingang:2

Ausgabe:

/ - \
 ()
 ()
/ __ \

Eingang:3

Ausgabe:

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

Eingang:5

Ausgabe:

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

Regeln:

  • 0 und negative Zahlen spielen keine Rolle
  • Um die Lampen (und diese Herausforderung) abwechslungsreicher zu gestalten, müssen Sie den Lampenschirm ändern.
    • Sie müssen 4 Zeichen breit und 1 Zeichen hoch sein.
    • Sie können in jeder Form vorliegen, einschließlich Formen ohne Lampenschirm.
    • Sie dürfen keine Leerzeichen enthalten.
    • Die Basis muss gleich bleiben.
  • Sie müssen ein Beispiel für die Ein- und Ausgabe mit Ihrem Lampenschirm zeigen.
  • Kürzester Code gewinnt!

Aber es kräuselt sich überhaupt nicht !. Hätte es geliebt, wenn Eingaben> 5 es kringeln ließen.
Optimierer

22
Ich habe abgestimmt. Ich halte das für eine langweilige ASCII-Kunst. Es gibt einen wiederholten Abschnitt in der Mitte und keine Überlappung zwischen den Teilen, die auch zu kurz sind, um sie zu komprimieren. Es hat nur Form ABBB..BBBC. Die Anforderung, einen Abschnitt zu ändern, bedeutet lediglich, dass Benutzer eine kurze integrierte Zeichenfolge verwenden.
21.

7
Sie können alle schon aufhören, abzustimmen! Ich denke, OP hat die Nachricht verstanden.
xnor

1
@xnor Der arme Kerl tut mir leid. Dies ist wahrscheinlich eine der am schlechtesten bewerteten Fragen aller Zeiten: / i.stack.imgur.com/T4A7X.jpg
Beta Decay

1
Ich habe nicht in irgendeiner Weise selbst abgestimmt, aber angesichts der Ähnlichkeit mit Draw a ASCII Lightning Bolt kann ich die Downvoter verstehen. Eine kleine Wendung wie ein größerer Sockel für eine höhere Lampe oder eine wiederholte Dekoration nur bei jedem n-ten Kringel würde es ein wenig anders machen.
Manatwork

Antworten:


4

Pyth - 16 Bytes

Verwendet Anführungszeichen für den Farbton, da N dafür vorinitialisiert ist.

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

Probieren Sie es hier online aus .

* 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

Probe für 5:

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

7

Schneemann 0.2.0 , 42 Zeichen

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

Probelauf:

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

Daher habe ich erst gemerkt, dass ich vergessen habe, die Fähigkeit, Backslashes zu umgehen, in Strings zu implementieren, als ich diese Herausforderung gelöst habe. Das wird definitiv eine Sache in der nächsten Version sein, aber im Moment habe ich Folgendes getan, um die letzte Zeile auszudrucken:

"/__"sP92wRsP

92ist der ASCII-Code für einen Backslash, wRder in ein Array eingeschlossen wird, und ich kann ihn jetzt mit drucken, sPda "Strings" in Snowman eigentlich nur Arrays von Zahlen sind.


7
Möchten Sie eine Schneelampe bauen?
Alex A.

3

> <> , 43 41 38 Bytes

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

Die Eingabe erfolgt über einen Codepunkt, z. B. ist die Leertaste 32. Dabei wird ein Teil des programmeigenen Codes als Lampenschirm verwendet, was zu einer Art Satellitenschüssel führt:

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

(Vorschlag danke an @randomra)

Für drei weitere Bytes können wir die dritte Zeile ändern, um etwas mehr Anpassung hinzuzufügen:

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

Dies erzeugt eine dieser Lampen, die das Licht nach oben schießen, da es nicht besser ausgedrückt werden kann:

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

3

R 54 52 46 Bytes

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

In dieser Version sind Eingabe und Ausgabe fast gemischt:

{in / out} PUT:

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

BEARBEITEN 1 : -2 Bytes dank @manatwork Kommentar.
EDIT 2 : -6 Bytes. Der volle Kredit geht wieder an @manatwork


1
Ändert nichts als das Aussehen: " /_\\"sollte sein "/__\\". BTW, ist das \rnotwendig?
Manatwork

@manatwork Es hat die Form des Lampenfußes geändert und ihn stabiler gemacht + Ihre Bemerkung über \rhat mir zwei Bytes gespart! Hätte meinen Code noch einmal lesen sollen! Vielen Dank !
Frédéric

1
Hmm ... seltsames Werkzeug. Kann es nicht schaffen, nicht interaktiv zu arbeiten. Wie auch immer, cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")scheint zu funktionieren.
Manatwork

@manatwork: na ja ... ich hätte nie gedacht, dass das funktionieren könnte! Es ist in der Tat eine schöne Lösung. R steckt voller Überraschungen!
Frédéric

Bonjour Frédéric, wenn Sie immer noch auf PPCG aktiv sind , können Sie 5 Bytes sparen
JayCe



2

JavaScript ES6, 34 Byte

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

Die Zeilenumbrüche sind erheblich

Beispiel mit Eingabe von 5:

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

2

sed, 28 bytes

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

Nimmt unäre Eingaben auf. Der Farbton ist die offensichtliche Auswahl (genauso wie die Basis).

Testlauf

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

1

Gema: 30 Zeichen

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

Probelauf:

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

1

jq: 30 Zeichen

(29 Zeichen Code + 1 Zeichen Befehlszeilenoption.)

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

Probelauf:

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

Online-Test (Das Übergeben einer -rURL wird nicht unterstützt. Prüfen Sie die Raw-Ausgabe selbst.)


1

C 54 Bytes

Rufen Sie f()mit der gewünschten Höhe der Lampe.

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

Probiere es auf ideone aus.

Beispielausgabe für 5:

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



1

Leerzeichen , 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]

Buchstaben S(Leerzeichen), T(Tabulator) und (Zeilenvorschub) werden Nnur als Hervorhebungen hinzugefügt.
[..._some_action]nur als Erklärung hinzugefügt.

Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).

Erklärung im Pseudocode:

Schiebt alle Zeichen in umgekehrter Reihenfolge auf den Stapel und druckt sie dann in einer Schleife.

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

HINWEIS: iDer oben genannte Pseudocode wird in jeder Iteration von wieder im Heap gespeichert LOOP, da er am Ende nicht auf dem zu druckenden Stapel belassen werden soll.


1

Canvas , 8 Bytes

(×_¶/e⟳║

Probieren Sie es hier aus!

Erläuterung:

(×        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) dank @EriktheOutgolfer .
-2 Byte (13 → 11), nachdem Sie von @dzaima inspiriert wurden Canvas-Antwort .

Kappe ist die gleiche wie die Basis (/__\ ).

Erläuterung:

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

Alte 13-Byte-Antwort:

„/_D (Iиs)˜∞

Probieren Sie es online aus.


1

Excel, 31 Bytes

Eine anonyme Arbeitsblattfunktion, die Eingaben als Zahlenwert aus dem Bereich akzeptiert [A1] und an die aufrufende Zelle ausgibt.

Diese Lampe ist musikalisch - und wird dazu beitragen, Ihren Tag zu beleben und aufzuhellen.

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

Ausgabe

Ich liebe Lampe


1

PowerShell 5.1, 28 26 Bytes

Danke Mazzy für 2 Bytes

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

Da der Schatten aus 4 beliebigen Zeichen bestehen kann, werden bei Verwendung einer Zahl zwei Anführungszeichen gespeichert. Das Schwierigste war, einen gut aussehenden Farbton zu finden.

Ausgabe:

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

schöner Lampenschirm)
mazzy

1
Versuchen Sie dies8008;," ()"*"$args";"/__\"
mazzy

1

Python 2, 36 Bytes

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

Für Eingabe 4:

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

Beachten Sie, dass für Python jeder Lampenschirm, der Pipes verwendet, ein Byte weniger ist.

-1 Bytes dank @Alex!


1
Ich denke, wenn Sie den Lampenschirm in ein einzelnes Zeichen ändern und mit 4 multiplizieren, können Sie ein Byte sparen:print"-"*4+"\n ()"*input()+"\n/__\\"
Alex


0

SWI-Prolog, 73 60 Bytes

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

a(5). Ausgänge

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

0

Julia, 36 Bytes

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

Dadurch wird eine unbenannte Funktion erstellt, die eine Ganzzahl als Eingabe verwendet und an stdout ausgibt.

Beispiel:

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

0

Bash + Coreutils, 37 Bytes

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

Die Zeilenumbrüche sind notwendig und werden in der Bytesumme gezählt. GNU sed ist erforderlich.

Lauf:

./squiggly_lamp.sh 2

Ausgabe:

####
 ()
 ()
/__\



0

Java 7 11, 84 83 37 Bytes

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

Probieren Sie es online aus. (HINWEIS: Java 11 wird von TIO noch nicht unterstützt, wurde also String.repeat(int)mit repeat(String,int)derselben Bytezahl emuliert .)

Verwendet i!!ials Kappe. ¡!!¡sieht besser aus , ist aber zwei Bytes mehr.

Erläuterung:

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

Voraus 38 Bytes

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

Probieren Sie es online!

Proben

1
|MM|
 ()
/__\

2
|MM|
 ()
 ()
/__\

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

2
Könnten Sie vielleicht einen Link zu einer Online-Testumgebung bereitstellen, damit Ihre Einreichung problemlos ausgeführt werden kann?
Jonathan Frech

@ JonathanFrech TIO Link jetzt verfügbar
snail_


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.