My Squiggly Lamp

13

Sambil bergerak, saya memecahkan lampu saya. Sekarang, saya perlu yang baru. Tugasmu untuk membuatkanku lampu! Saya tidak yakin ukuran apa yang saya inginkan, meskipun saya tahu saya ingin yang berlekuk-lekuk.

Program / fungsi Anda harus menerima input angka, dan mencetak lampu dengan banyak coretan / gundukan.

Contoh:

Memasukkan:2

Keluaran:

/ - \
 ()
 ()
/ __ \

Memasukkan:3

Keluaran:

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

Memasukkan:5

Keluaran:

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

Aturan:

  • 0 & angka negatif tidak masalah
  • Untuk memberi lampu (tantangan ini) lebih banyak variasi, Anda harus mengubah kap lampu.
    • Lebar mereka harus 4 karakter dan tinggi 1 karakter.
    • Mereka bisa dalam bentuk apa pun, termasuk bentuk non-kap lampu.
    • Mereka tidak boleh mengandung spasi putih.
    • Basis harus tetap sama.
  • Anda harus menunjukkan contoh input & output dengan kap lampu Anda.
  • Kode terpendek menang!
tahap
sumber
Tapi itu tidak bertengkar sama sekali !. Akan sangat senang jika input> 5 membuatnya berlekuk.
Pengoptimal
22
Saya menurunkan suara. Saya pikir ini adalah seni ASCII yang membosankan. Ada bagian berulang di tengah dan tidak ada tumpang tindih antara bagian, yang juga terlalu pendek untuk dikompres. Itu hanya memiliki bentuk ABBB..BBBC. Persyaratan untuk mengubah bagian hanya berarti orang akan menggunakan string bawaan yang pendek.
xnor
7
Anda semua bisa berhenti downvoting! Saya pikir OP mendapat pesannya.
xnor
1
@ xnor Saya merasa kasihan pada orang miskin. Ini mungkin salah satu pertanyaan yang paling banyak downvoted: / i.stack.imgur.com/T4A7X.jpg
Beta Decay
1
Tidak memilih dengan cara apa pun sendiri, tetapi mengingat kesamaan dengan Draw a ASCII Lightning Bolt , saya dapat memahami downvoter. Beberapa twist kecil seperti memiliki dasar yang lebih besar untuk lampu yang lebih tinggi, atau memiliki hiasan berulang hanya pada setiap coretan ke-7 akan membuatnya sedikit berbeda.
manatwork

Jawaban:

4

Pyth - 16 byte

Menggunakan tanda kutip untuk naungan karena N diinisialisasi dengan itu.

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

Cobalah online di sini .

* 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

Sampel untuk 5:

""""
 ()
 ()
 ()
 ()
 ()
/__\
Maltysen
sumber
7

Snowman 0.2.0 , 42 karakter

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

Contoh dijalankan:

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

Jadi saya hanya memperhatikan bahwa saya lupa menerapkan kemampuan untuk melarikan diri backslash dalam string ketika saya memecahkan tantangan ini. Itu pasti akan menjadi sesuatu di versi berikutnya, tetapi untuk sekarang, inilah yang saya lakukan untuk mencetak baris terakhir:

"/__"sP92wRsP

92adalah kode ASCII untuk garis miring terbalik, wRmembungkusnya dalam sebuah array, dan sekarang saya dapat mencetaknya dengan sP"string" di Snowman sebenarnya hanya array angka.

Gagang pintu
sumber
7
Apakah Anda ingin membuat lampu salju?
Alex A.
3

> <> , 43 41 38 byte

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

Input melalui titik kode, mis. Spasi 32. Ini menggunakan bagian dari kode program sendiri sebagai kap lampu, sehingga menghasilkan sesuatu yang terlihat seperti parabola:

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

(Saran terima kasih kepada @randomra)

Untuk tiga byte lagi, kita dapat mengubah baris ketiga untuk menambahkan sedikit penyesuaian:

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

Ini menghasilkan salah satu dari lampu yang menembakkan cahaya ke atas, karena tidak ada cara yang lebih baik untuk meletakkannya:

\__/
 ()
 ()
 ()
 ()
 ()
/__\
Sp3000
sumber
3

R, 54 52 46 byte

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

Dalam versi ini, input dan output hampir dicampur bersama:

{masuk / keluar} PUT:

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

EDIT 1 : -2 byte berkat komentar @manatwork.
EDIT 2 : -6 byte. Kredit penuh kembali ke @manatwork

Frédéric
sumber
1
Tidak mengubah apa pun kecuali tampilan: " /_\\"seharusnya "/__\\". BTW, apakah itu \rperlu?
manatwork
@manatwork Itu memang mengubah bentuk kaki lampu, membuatnya lebih stabil + komentar Anda tentang \rmenyelamatkan saya dua byte! Seharusnya baca ulang kode saya! Terima kasih!
Frédéric
1
Hmm ... Alat aneh. Tidak dapat membuatnya bekerja secara non-interaktif. Lagi pula, cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")sepertinya berhasil.
manatwork
@manatwork: yah ... Saya tidak pernah berpikir ini bisa berhasil! Ini memang solusi yang bagus. R penuh kejutan!
Frédéric
Bonjour Frédéric, jika Anda masih aktif di PPCG Anda dapat menghemat 5 byte
JayCe
3

Straw , 26 byte (tidak bersaing)

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

Gunakan '--'sebagai kap lampu, ambil input di unary sekarang dalam desimal

TuxCrafting
sumber
Bagaimana cara kerjanya?
Conor O'Brien
@BetaDecay * karenanya tidak bersaing
Conor O'Brien
2

CJam, 18 byte

"/__\
"" ()
"ri*1$

Contoh dijalankan untuk input 5:

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

Cobalah online di sini

Pengoptimal
sumber
2

JavaScript ES6, 34 byte

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

Baris baru itu penting

Contoh dengan input 5:

|==|
 ()
 ()
 ()
 ()
 ()
/__\
Downgoat
sumber
2

sed, 28 byte

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

Mengambil input di unary. Warna adalah pilihan yang jelas (sama seperti pangkalan).

Uji coba

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

Gema: 30 karakter

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

Contoh dijalankan:

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

jq: 30 karakter

(29 karakter kode + 1 opsi baris perintah karakter.)

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

Contoh dijalankan:

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

Tes online (Melewati -rURL tidak didukung - periksa sendiri Output Raw.)

manatwork
sumber
1

C, 54 byte

Panggil f()dengan ketinggian lampu yang diinginkan.

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

Cobalah di ideone.

Contoh output untuk 5:

||||
 ()
 ()
 ()
 ()
 ()
/__\
owacoder
sumber
1

Pyke, 15 byte

" ()"~mQAD"/__\

Coba di sini!

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

Output:

1000
 ()
 ()
/__\
Biru
sumber
1

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

Huruf S(spasi), T(tab), dan N(baris baru) ditambahkan hanya sebagai penyorotan.
[..._some_action]ditambahkan sebagai penjelasan saja.

Cobalah online (dengan spasi, tab, dan baris baru saja).

Penjelasan dalam pseudo-code:

Dorong semua karakter dalam urutan terbalik ke tumpukan, lalu cetak dalam satu lingkaran.

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

CATATAN: idalam pseudo-code di atas disimpan kembali di tumpukan di setiap iterasi LOOP, karena kami tidak ingin meninggalkannya di tumpukan yang akan dicetak di akhir.

Kevin Cruijssen
sumber
1

Kanvas , 8 byte

(×_¶/e⟳║

Coba di sini!

Penjelasan:

(×        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
dzaima
sumber
1

05AB1E , 17 15 13 11 byte

„ (и„/_.ø)˜∞

-2 byte (17 → 15) berkat @EriktheOutgolfer .
-2 byte (13 → 11) setelah diilhami oleh jawaban Canvas @dzaima .

Tutup sama dengan alas ( /__\).

Penjelasan:

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

Jawaban lama 13 byte:

„/_D (Iиs)˜∞

Cobalah online.

Kevin Cruijssen
sumber
1

Excel, 31 byte

Fungsi lembar kerja anonim yang mengambil input sebagai numerik dari rentang [A1]dan output ke sel panggilan.

Lampu ini musikal - dan akan membantu menghidupkan dan meringankan hari Anda.

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

Keluaran

Saya suka lampu

Taylor Scott
sumber
1

PowerShell 5.1, 28 26 Bytes

Terima kasih Mazzy untuk 2 byte

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

Karena keteduhan dapat berupa 4 karakter, menggunakan angka menyimpan sepasang tanda kutip. Bagian tersulit adalah menemukan warna yang tampak bagus.

Keluaran:

PS C:\Users\ItsMe\Desktop> .\scratch.ps1 4
8008
 ()
 ()
 ()
 ()
/__\
Veskah
sumber
kap lampu yang bagus)
mazzy
1
coba ini8008;," ()"*"$args";"/__\"
mazzy
1

Python 2, 36 byte

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

Untuk input 4:

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

Perhatikan bahwa untuk Python bahwa setiap kap lampu menggunakan pipa kurang dari satu byte.

-1 byte, terima kasih kepada @Alex!

Peluruhan Beta
sumber
1
Saya pikir jika Anda mengubah kap lampu ke satu karakter dan kalikan dengan 4 Anda dapat menghemat satu byte:print"-"*4+"\n ()"*input()+"\n/__\\"
Alex
1

Japt , 17 byte

Æ` ()`Ãi¥² p"/__\

Cobalah online!

Output untuk 5adalah:

====
 ()
 ()
 ()
 ()
 ()
/__\
Oliver
sumber
Trik yang bagus dengan ¥.
Shaggy
@Shaggy Terima kasih! : D
Oliver
0

SWI-Prolog, 73 60 byte

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

a(5). output

golf
 ()
 ()
 ()
 ()
 ()
/__\
Fatalisasi
sumber
0

Julia, 36 byte

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

Ini menciptakan fungsi tanpa nama yang mengambil integer sebagai input dan mencetak ke stdout.

Contoh:

julia> f(4)
|~~|
 ()
 ()
 ()
 ()
/__\
Alex A.
sumber
0

Bash + coreutils, 37 byte

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

Baris baru diperlukan dan dihitung dalam total byte. Diperlukan GNU sed.

Lari:

./squiggly_lamp.sh 2

Keluaran:

####
 ()
 ()
/__\
seshoumara
sumber
0

Ruby, 42 byte

i=gets.to_i
puts "|--|\n#{" ()\n"*i}/__\\"
dkudriavtsev
sumber
0

Java 7 11, 84 83 37 byte

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

Cobalah online. (CATATAN: Java 11 belum didukung pada TIO, jadi String.repeat(int)telah ditiru dengan repeat(String,int)untuk byte-count yang sama.)

Digunakan i!!isebagai topi. ¡!!¡terlihat lebih baik , tetapi dua byte lebih banyak.

Penjelasan:

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 "/__\"
Kevin Cruijssen
sumber
0

Di depan , 38 byte

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

Cobalah online!

Sampel

1
|MM|
 ()
/__\

2
|MM|
 ()
 ()
/__\

3
|MM|
 ()
 ()
 ()
/__\
siput_
sumber
2
Bisakah Anda memberikan tautan ke lingkungan pengujian online sehingga orang dapat dengan mudah menjalankan kiriman Anda?
Jonathan Frech
@JonathanFrech TIO tautan kini tersedia
snail_
0

PHP, 38 byte

/--\<?while($argn--)echo"
 ()"?>

/__\

Simpan ke file; jalankan sebagai pipa dengan -nFatau coba online .

Titus
sumber