Thử thách về advacado


16

Lấy cảm hứng từ điều này . Không có quả bơ nào bị hại khi thực hiện thử thách này.

Xin chào

Quan sát quả bơ nghệ thuật ASCII này:

    ###### 
   #      #
   # #### #
  #  # p# #
  ## #### #
   #      #
    ######

Bơ này bao gồm một mặt ngoài của #s (cụ thể là chuỗi đầu tiên và cuối cùng của #s trên mỗi dòng) và một hố (hình dạng của #s trong quả bơ không chạm vào bên ngoài quả bơ).

Thông qua các thí nghiệm nghiêm ngặt về những quả bơ nghệ thuật ASCII này, tôi đã phát hiện ra những điều sau đây:

avocado juice in fluid ounces = number of spaces inside avocado but outside pit (the pit is marked with a p in the example) + 2 * number of spaces inside pit

time to juice avocado in minutes = 13 * number of spaces inside pit

Ví dụ, quả bơ này sẽ mất 26 (2 khoảng trống bên trong hố * 13) phút để ép và sẽ cho 23 (19 khoảng trống bên trong quả bơ nhưng bên ngoài hố + 2 * 2 khoảng trống trong hố) fl oz nước ép.

Thử thách

Đưa ra một đầu vào của chính xác một quả bơ nghệ thuật ASCII, chẳng hạn như một quả bơ ở trên chỉ bao gồm #và khoảng trắng, xuất ra lượng thời gian tính bằng phút để lấy nước và lượng nước ép mà nó sẽ tạo ra theo bất kỳ thứ tự nào.

Bạn có thể cho rằng quả bơ đầu vào sẽ luôn có chính xác một hố và cả quả bơ và hố sẽ luôn được đóng lại. Hố và bơ sẽ luôn được kết nối, và bất kỳ tập hợp con nào của hố cũng sẽ được kết nối. Bơ và hố sẽ luôn luôn lồi. Lưu ý rằng vỏ bơ có thể dày tùy ý.

Đầu vào và đầu ra mẫu

    ###### 
   #      #
   # #### #
  #  #  # # -> 26 23
  ## #### #
   #      #
    ######


   #######
  #       #
  #  ###   ##
  #  #  #   # -> 26 35
  #   ##   #
  #        #
  ##########

Đây là , vì vậy mã ngắn nhất tính bằng byte thắng.


Bản sao có thể có của Bạn trong phòng lớn nhất?
Mego

3
@Mego Tôi đã nói chuyện với mọi người trong cuộc trò chuyện và chúng tôi quyết định nó đủ khác biệt do hố bơ.
một spaghetto

3
Tôi vẫn nghĩ đó là một bản dupe.
Mego

1
@DigitalTrauma Đã sửa.
một spaghetto

1
Vẫn có vẻ khá không rõ bộ đầu vào hợp lệ là gì.
frageum

Câu trả lời:


6

Pyth, 59 51 byte

*Ksm/.s.s.sd\ \#\ \ fq4l:T"#+"4.z13+-/s.sR\ .zdK*2K

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

Đầu ra thời gian để sử dụng advacado (tiếng Anh hoàn toàn chính xác) trước và trên dòng tiếp theo số lượng juic.

Giải trình

Mã - Tổng quan

* Ksm / .sssd \ \ # \ \ fq4l: T "# +" 4.z13 + - / s.sR \ .zdK * 2K # .z = danh sách tất cả các dòng đầu vào

                    fq4l: T "# +" 4.z # Nhận các đường pit
   m / .sssd \ \ # \ \ # Ánh xạ các đường pit đến số lượng khoảng trắng
 Ks # Tổng số lượng không gian hố và gán cho K
* 13 # In thời gian juic
                                     /s.sR \ .zd # Đếm tất cả các khoảng trắng trong advacado
                                    - K # Trừ kích thước hố từ nó
                                   + * 2K # Thực hiện phần còn lại của số lượng và in nó


Giải thích chi tiết về các phần tính toán kích thước xem bên dưới.

Lấy kích thước advacado

Hãy nhìn vào cái này:

    ###### 
   # #
   # #### #
  # # # #
  ## #### #
   # #
    ######

Đầu tiên, khoảng trắng hàng đầu và dấu vết được loại bỏ. Sau đó, chúng tôi gói mọi thứ trong một dòng, kết quả là chuỗi này:

#######      ## #### ##  #  # ### #### ##      #######

Điều này chứa tất cả các khoảng trắng trong advacado, vì vậy chúng ta chỉ cần đếm chúng (advacado sẽ luôn luôn lồi, vì vậy điều này hoạt động cho tất cả các đầu vào hợp lệ). Con số này vẫn chứa các khoảng trống trong hố, nhưng để tính toán lượng nước ép, chúng ta chỉ cần các khoảng trống trong quả mà không có các khoảng trống. Vì vậy, chúng ta cần phải tính toán chúng quá.

Mã cho điều đó được giải thích chi tiết:

/s.sR \ .zd # .z = danh sách tất cả các dòng đầu vào

  .sR \ .z # dải khoảng cách từ mọi dòng đầu vào
 s # Nối tất cả các dòng
/ d # Đếm tất cả các khoảng trắng

Lấy kích thước hố

Đây là một chút phức tạp hơn. Đầu tiên, chúng tôi loại bỏ các dòng không đóng góp vào kích thước hố. Điều này được thực hiện bằng cách lọc ra tất cả các dòng có ít hơn 4 nhóm băm (sử dụng biểu thức chính quy #+và đếm các kết quả khớp của nó). Trong ví dụ trên, chỉ có một dòng sẽ tồn tại trong quá trình này:

  #  #--# #

Các không gian tôi đánh dấu bằng một -ở đây là những không gian chúng ta cần phải tính. Vì vậy, chúng tôi chỉ tước bỏ khoảng trắng, sau đó băm và sau đó là khoảng trắng để lại cho chúng tôi điều này:

#  #

Ở đó chúng ta chỉ cần đếm không gian. Chúng tôi làm tất cả những điều đó cho mọi dòng tồn tại trong quá trình lọc, tổng hợp mọi thứ và chúng tôi đã hoàn thành. Phần còn lại là toán học tầm thường.

Mã cho điều đó được giải thích chi tiết:

sm / .sssd \ \ # \ \ fq4l: T "# +" 4.z # .z = danh sách tất cả các dòng đầu vào

                  f .z # lọc đầu vào
                     l: T "# +" Độ dài 4 # của các trận đấu cho biểu thức chính quy `# +`
                   q4 # nếu có 4 nhóm băm thì đó là một đường pit
 m # ánh xạ các đường pit đến ...
  / \ # Sự xuất hiện của không gian trong ..
   .sssd \ \ # \ # ... đường pit bị tước (xem giải thích ở trên)
s # Tổng tất cả số lượng khoảng trống trong hố


5

Võng mạc , 70

  • 25 byte được lưu nhờ vào @FryAmTheEggman và @randomra
T` `i` (? <= # + # +) * (? = # + + #)
T` `f` # + #
Tôi
13 đô la
((i) | (f) | \ W) +
$ # 2 $ # 3

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


1
Nếu không nó sẽ giúp nhưng tôi đã nhận được 90 byte bằng cách sử dụng $*... vẫn cảm thấy thực sự có thể chơi được mặc dù ...
FryAmTheEggman

2
@FryAmTheEggman Ohh, bạn có thể sử dụng nghĩa đen với $*_? Điều đó thật tuyệt. Tôi quản lý để có được 70 byte .
Randomra

1
@randomra yeah, nó thực sự sẽ sử dụng bất kỳ "mã thông báo" nào, và rất hay! Tôi đã cố gắng để đưa ra một chương trình tương tự, nhưng tôi vẫn tiếp tục nhận được bị mắc kẹt với việc phải làm thêm phân tích, tái sử dụng flà rất thông minh! Thật tệ khi "đối số" đúng đắn $*chỉ có thể là một nhân vật chứ không phải là một mã thông báo ... có thể là một loại thay thế khác cho tương lai? : 0
FryAmTheEggman

@randomra rất tuyệt - cảm ơn!
Chấn thương kỹ thuật số

3

Con trăn 141 119 byte

import sys
s=str.strip;l=len;o=i=0
for x in sys.stdin:x=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#'))
print o+2*i,13*i

1
Chào mừng bạn đến với Câu đố lập trình & Code Golf! Nếu bạn xác địnhs với s=str.strip, cơ thể vòng lặp có thể trở thành x=s(s(x),'#');y=s(x);o+=l(x)-l(y);i+=l(s(y,'#')). Ngoài ra, có một không gian không chức năng trên dòng cuối cùng.
Dennis

ahh tôi thậm chí không biết bạn có thể làm điều đó, cảm ơn :)
mtp
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.