Đèn Squiggly của tôi


13

Trong khi di chuyển, tôi đã phá vỡ đèn của tôi. Bây giờ, tôi cần một cái mới. Đó là công việc của bạn để làm cho tôi một đèn! Tôi không chắc chắn kích thước tôi muốn, mặc dù tôi biết tôi muốn một kích thước nguệch ngoạc.

Chương trình / chức năng của bạn phải nhận một đầu vào số và in ra một đèn với nhiều tiếng lách cách / va chạm.

Ví dụ:

Đầu vào:2

Đầu ra:

/ - \
 ()
 ()
/ __ \

Đầu vào:3

Đầu ra:

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

Đầu vào:5

Đầu ra:

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

Quy tắc:

  • 0 & số âm không quan trọng
  • Để cung cấp cho các loại đèn (một thách thức này) nhiều loại, bạn phải thay đổi bóng đèn.
    • Chúng phải rộng 4 ký tự và cao 1 ký tự.
    • Chúng có thể ở bất kỳ hình dạng nào, bao gồm cả hình dạng không bóng đèn.
    • Chúng không được chứa khoảng trắng.
    • Các cơ sở phải giữ nguyên.
  • Bạn phải hiển thị một ví dụ đầu vào và đầu ra với bóng đèn của bạn.
  • Mã ngắn nhất sẽ thắng!

Nhưng nó không hề vặn vẹo chút nào!. Sẽ thích nếu đầu vào> 5 làm cho nó lộn xộn.
Tối ưu hóa

22
Tôi hạ bệ. Tôi nghĩ rằng đây là một nghệ thuật ASCII nhàm chán. Có một phần lặp lại ở giữa và không có sự chồng chéo giữa các phần, quá ngắn để nén. Nó chỉ có hình thức ABBB..BBBC. Yêu cầu thay đổi một phần chỉ có nghĩa là mọi người sẽ sử dụng một chuỗi tích hợp ngắn.
xnor

7
Tất cả các bạn có thể ngừng downvote rồi! Tôi nghĩ OP đã nhận được tin nhắn.
xnor

1
@xnor Mình thấy tiếc cho thằng nhà nghèo. Đây có lẽ là một trong những câu hỏi được đánh giá thấp nhất từ ​​trước đến nay: / i.stack.imgur.com/T4A7X.jpg
Beta Decay

1
Không được bình chọn theo bất kỳ cách nào bản thân tôi, nhưng với sự tương đồng với Vẽ một tia sét ASCII , tôi có thể hiểu được các nhược điểm. Một số xoắn nhỏ như có đế lớn hơn cho đèn cao hơn, hoặc có một trang trí lặp đi lặp lại chỉ trên mỗi squiggle thứ n sẽ làm cho nó một chút khác biệt.
manatwork

Câu trả lời:


4

Pyth - 16 byte

Sử dụng dấu ngoặc kép cho bóng vì N được khởi tạo trước đó.

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

Hãy thử trực tuyến tại đây .

* 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

Mẫu cho 5:

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

7

Người tuyết 0.2.0 , 42 ký tự

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

Chạy mẫu:

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

Vì vậy, tôi chỉ nhận thấy rằng tôi đã quên thực hiện khả năng thoát dấu gạch chéo ngược trong chuỗi khi tôi giải quyết thách thức này. Đó chắc chắn sẽ là một điều trong phiên bản tiếp theo, nhưng bây giờ, đây là những gì tôi đã làm để in dòng cuối cùng:

"/__"sP92wRsP

92là mã ASCII cho dấu gạch chéo ngược, wRbao bọc nó trong một mảng và bây giờ tôi có thể in nó bằng sP"chuỗi" trong Snowman thực sự chỉ là mảng số.


7
Bạn có muốn xây dựng một đèn tuyết?
Alex A.

3

> <> , 43 41 38 byte

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

Đầu vào thông qua một điểm mã, ví dụ: không gian là 32. Điều này sử dụng một phần mã riêng của chương trình làm chao đèn, dẫn đến một cái gì đó trông giống như một đĩa vệ tinh:

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

(Đề xuất cảm ơn @randomra)

Để có thêm ba byte, chúng ta có thể thay đổi dòng thứ ba để thêm một chút tùy chỉnh:

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

Điều này tạo ra một trong những đèn phát sáng lên, vì không có cách nào tốt hơn để đặt nó:

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

3

R, 54 52 46 byte

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

Trong phiên bản này, đầu vàođầu ra gần như được trộn lẫn với nhau:

{vào / ra} PUT:

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

EDIT 1 : -2 byte nhờ bình luận @manatwork.
EDIT 2 : -6 byte. Tín dụng đầy đủ vào @manatwork một lần nữa


1
Thay đổi không có gì ngoài vẻ ngoài: " /_\\"nên được "/__\\". BTW, điều đó có \rcần thiết không?
manatwork

@manatwork Nó đã thay đổi hình dạng của chân đèn, làm cho nó ổn định hơn + nhận xét của bạn về việc \rtiết kiệm cho tôi hai byte! Nên đọc lại mã của tôi! Cảm ơn !
Frédéric

1
Hmm công cụ lạ Wemm. Không thể làm cho nó hoạt động không tương tác. Dù sao, cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")dường như để làm việc.
manatwork

@manatwork: tốt ... Tôi chưa bao giờ nghĩ rằng điều này có thể làm việc! Đó thực sự là một giải pháp tốt. R đầy bất ngờ!
Frédéric

Bonjour Frédéric, nếu bạn vẫn hoạt động trên PPCG, bạn có thể lưu 5 byte
JayCe

3

Rơm , 26 byte (không cạnh tranh)

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

Sử dụng '--'làm bóng đèn, lấy đầu vào trong unary bây giờ ở dạng thập phân


Cái này hoạt động ra sao?
Conor O'Brien

@BetaDecay * do đó không lọc
Conor O'Brien


2

JavaScript ES6, 34 byte

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

Các dòng mới là quan trọng

Ví dụ với đầu vào là 5:

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

2

sed, 28 byte

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

Đưa đầu vào trong unary. Bóng là sự lựa chọn rõ ràng (giống như cơ sở).

Chạy thử nghiệm

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

1

Gema: 30 ký tự

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

Chạy mẫu:

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

1

jq: 30 ký tự

(Mã 29 ký tự + 1 ký tự tùy chọn dòng lệnh.)

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

Chạy mẫu:

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

Kiểm tra trực tuyến (Chuyển -rqua URL không được hỗ trợ - hãy tự kiểm tra Đầu ra thô.)





1

Khoảng trắng , 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]

Chữ cái S(dấu cách), T(tab) và N(dòng mới) được thêm vào dưới dạng chỉ tô sáng.
[..._some_action]chỉ thêm vào giải thích.

Dùng thử trực tuyến (chỉ có không gian thô, tab và dòng mới).

Giải thích bằng mã giả:

Đẩy tất cả các ký tự theo thứ tự đảo ngược vào ngăn xếp, và sau đó in chúng trong một vòng lặp.

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

LƯU Ý: itrong mã giả ở trên được lưu trữ lại trong heap trong mỗi lần lặp lại LOOP, bởi vì chúng tôi không muốn để nó trên ngăn xếp được in ở cuối.


1

Canvas , 8 byte

(×_¶/e⟳║

Hãy thử nó ở đây!

Giải trình:

(×        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) nhờ @EriktheOutgolfer .
-2 byte (13 → 11) sau khi được truyền cảm hứng từ câu trả lời Canvas của @dzaima .

Cap giống như cơ sở ( /__\).

Giải trình:

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

Câu trả lời cũ 13 byte:

„/_D (Iиs)˜∞

Hãy thử trực tuyến.


1

Excel, 31 byte

Hàm bảng tính ẩn danh nhận đầu vào dưới dạng số từ phạm vi [A1] và xuất ra ô gọi.

Đèn này là âm nhạc - và sẽ giúp làm sống động và làm sáng ngày của bạn.

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

Đầu ra

Tôi yêu đèn


1

PowerShell 5.1, 28 26 byte

Cảm ơn Mazzy vì 2 byte

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

Vì bóng râm có thể là 4 ký tự bất kỳ, sử dụng một số sẽ lưu một cặp dấu ngoặc kép. Phần khó nhất là tìm một bóng trông đẹp.

Đầu ra:

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

bóng đèn đẹp)
mazzy

1
thử cái này8008;," ()"*"$args";"/__\"
mazzy

1

Python 2, 36 byte

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

Đối với đầu vào 4:

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

Lưu ý rằng đối với Python, bất kỳ bóng đèn nào sử dụng đường ống đều ít hơn một byte.

-1 byte nhờ @Alex!


1
Tôi nghĩ rằng nếu bạn thay đổi chao đèn thành một ký tự và nhân nó với 4, bạn có thể lưu một 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). đầu ra

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

0

Julia, 36 byte

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

Điều này tạo ra một hàm không tên, lấy một số nguyên làm đầu vào và in ra thiết bị xuất chuẩn.

Thí dụ:

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

0

Bash + coreutils, 37 byte

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

Các dòng mới là cần thiết và được tính trong tổng số byte. GNU sed là bắt buộc.

Chạy:

./squiggly_lamp.sh 2

Đầu ra:

####
 ()
 ()
/__\



0

Java 7 11, 84 83 37 byte

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

Hãy thử trực tuyến. (LƯU Ý: Java 11 chưa được hỗ trợ trên TIO, do đó, String.repeat(int)đã được mô phỏng với repeat(String,int)cùng số đếm byte.)

Sử dụng i!!inhư nắp. ¡!!¡có vẻ tốt hơn , nhưng là hai byte nhiều hơn.

Giải trình:

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

Trước , 38 byte

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

Hãy thử trực tuyến!

Mẫu

1
|MM|
 ()
/__\

2
|MM|
 ()
 ()
/__\

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

2
Bạn có thể cung cấp một liên kết đến một môi trường thử nghiệm trực tuyến để người ta có thể dễ dàng chạy trình của bạn không?
Jonathan Frech

Liên kết TIO @JonathanFrech hiện có sẵn
snail_


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.