Có bao nhiêu Jimmys có thể phù hợp?


29

Trong thử thách đơn giản nhưng thú vị này , bạn được yêu cầu xác định xem liệu Jimmy có sụp đổ nền tảng của họ hay không. Jimmy có ba bộ phận cơ thể /, o\sắp xếp như thế này

/o\

Nền tảng được đại diện với -. Jimmy sẽ rơi ra khỏi nền tảng của họ nếu họ có hai hoặc nhiều bộ phận cơ thể không trực tiếp trên một nền tảng.

Vài ví dụ:

   /o\
- -------

Jimmy sẽ cân bằng vì tất cả các bộ phận cơ thể của họ ở trên a -.

   /o\
    ------   ---

Jimmy sẽ cân bằng vì hai phần cơ thể ở trên -s.

 /o\
-- ----  --

Jimmy sẽ cân bằng mặc dù chúng được phân chia giữa hai nền tảng

  /o\
   -

Jimmy sẽ không cân bằng vì hai phần cơ thể không nằm trên một nền tảng.


Nhiệm vụ của bạn là viết một chương trình lấy một nền tảng là một thùng chứa dài chỉ chứa -s và s (ví dụ: một chuỗi) và xuất ra số lượng Jimmys có thể được đặt trên nền tảng sao cho không ai trong số chúng sẽ rơi và không ai trong số chúng sẽ rơi chồng chéo. Một Jimmy có thể có một trong các bộ phận cơ thể của họ ở bên trái của đầu chuỗi hoặc bên phải của cuối chuỗi.

Đây là để các câu trả lời được tính theo byte với ít byte hơn là mục tiêu.

Các trường hợp thử nghiệm

Đầu vào

-  -  -

- -
--
-- --
----
- -- --
------- -

Đầu ra tương ứng

0
0
1
1
2
2
2
3

Câu trả lời:


15

JavaScript (ES6),  45 41  40 byte

Đã lưu 4 byte nhờ @Shaggy

s=>(0+s+0).split(/.--|-.-|--./).length-1

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



7
@Shaggy Cảm ơn! Tôi biết có điều gì đó không ổn ở đó, nhưng tôi phải giúp vợ tôi ở một số cấp độ Super Mario Galaxy trong khi đó ... và đó cũng là một vấn đề về các nền tảng bị hỏng. : p
Arnauld

2
điều đó ---cũng không phù hợp với tôi, cho đến khi tôi làm việc trên cảng của mình và nhận ra họ không cần thiết. Hãy nghĩ rằng tôi sẽ gọi nó là một ngày ở đây, lấy một túi lon và tự mình ném vào SMG - đã không chơi nó trong một thời đại.
Xù xì

Và bây giờ tất cả các câu trả lời khác đang sử dụng cùng một regex.
Cœur

8

Python 2 , 53 byte

lambda s:len(re.findall('.--|-.-|--.',`s`))
import re

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

Dựa trên regex của Arnauld . Tham lam tìm kiếm tất cả các chuỗi con 3 chiều dài không chồng lấp với hai hoặc nhiều hơn -. Một mẹo nhỏ là làm `s`bao vây chuỗi đầu vào trong dấu ngoặc kép dưới dạng phần đệm để chừa chỗ cho Jimmys treo ở hai đầu như

/o\/o\
'----'

Python 2 , 57 byte

f=lambda s:'--'in s[:3]*2and-~f(s[3:])or s>''and f(s[1:])

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

Yêu cầu định dạng I / O cheesy của đầu vào đã có trong dấu ngoặc kép. Đầu ra Falsecho 0.

Một hàm đệ quy đặt mỗi Jimmy ở vị trí ngoài cùng bên trái được phép, bằng cách đặt Jimmy trên ba ký tự đầu tiên nếu chúng có thể giữ Jimmy hoặc xóa ký tự đầu tiên. Một mẹo dễ thương là kiểm tra xem s[:3]có chứa hai hoặc nhiều hơn -bằng cách thực hiện hay không '--'in s[:3]*2, kết hợp hai bản sao s[:3]và kiểm tra hai bản liền kề -.



3

Japt , 16 byte

Dựa trên giải pháp JS gốc của Arnauld. Tôi đã thử một vài phương pháp khác nhau để có được phần đệm cần thiết ở hai bên của đầu vào nhưng tất cả đều có cùng độ dài - vẫn đang tìm kiếm một cách ngắn hơn ...

ûUÊÄÄ è".--|-."ê

Kiểm tra nó

ûUÊÄÄ è".--|-."ê     :Implicit input of string U
û                    :Centre pad with spaces to length
 UÊ                  :  Length of U
   ÄÄ                :  Add 1, twice
      è              :Count the occurrences of
       ".--|-."ê     :  ".--|-." palindromised, resulting in the RegEx /.--|-.-|--./g

3

Excel, 96 byte

A1= nền tảng. Được nhập dưới dạng mảng Công thức Ctrl+ Shift+Enter

=SUM(IF(LEN(TRIM(MID(IF(MOD(LEN(A1),3)=1," ","")&A1,3*ROW(INDIRECT("A1:A"&LEN(A1)))-2,3)))>1,1))

3

05AB1E , 16 byte

ðì‚ε3ôʒ'-¢2@}g}à

Chắc chắn có thể bị đánh gôn .. Đôi khi thật khó chịu khi thấy tất cả các câu trả lời regex này trong một thử thách khi sử dụng 05AB1E, điều này thiếu regex dưới bất kỳ hình thức nào. ;)

Dùng thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

ðì            # Prepend a space before the (implicit) input
             # Pair it with the unmodified (implicit) input
   ε          # Map both to:
    3ô        #  Split them into parts of size 3
      ʒ       #  Filter these parts by:
       '-¢   '#   Where the amount of "-"
          2@  #   Is larger than or equal to 2
      }g      #  After the filter: take the length to get the amount of items left
            # After the map: get the maximum of the two
              # (which is output implicitly as result)



2

Java 8, 41 byte

s->(0+s+10).split(".--|--.|-.-").length-1

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

Câu trả lời JavaScript của @Arnauld , ngoại trừ đó +0+10sửa các trường hợp kiểm tra như ----. Điều này là cần thiết bởi vì phần String#splitdựng sẵn trong Java sẽ loại bỏ các chuỗi rỗng theo mặc định. Điều này có thể được thay đổi bằng cách thêm một tham số bổ sung vào splitnội dung ( 0theo mặc định trong split-builtin với một đối số Chuỗi đơn). Để trích dẫn việc sử dụng tham số bổ sung này từ các tài liệu:


nn-1n
n
nvà dấu chuỗi trống sẽ bị loại bỏ .

Bởi vì điều này, thường .split("...",-1)được sử dụng để giữ lại TẤT CẢ các chuỗi trống và tôi cũng có thể đã sử dụng nó cho câu trả lời này ( Hãy thử trực tuyến ). Trong trường hợp này, việc thay đổi +0để +10tiết kiệm hai byte qua ,-1, mặc dù. :)



0

Than , 25 byte

Pθ↖Fθ¿›№KM-¹«⊞υωM³→»→⎚ILυ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

Pθ↖

In nền tảng mà không di chuyển con trỏ, sau đó di chuyển con trỏ lên và sang trái vì đó là vị trí tiềm năng đầu tiên của Jimmy.

Fθ

Tìm kiếm nhiều Jimmies như có vị trí nền tảng.

¿›№KM-¹

Kiểm tra xem liệu có nhiều hơn một phần của nền tảng tại vị trí này.

«⊞υω

Nếu vậy thì lưu ý một vị trí hợp lệ của Jimmy ...

M³→»

... Và di chuyển ba nhân vật sang phải để Jimmies không trùng nhau.

Mặt khác, vị trí tiềm năng tiếp theo của Jimmy là một nhân vật ở bên phải.

⎚ILυ

Xóa nền tảng và xuất số lượng vị trí được phát hiện.



0

Elm 0,19, 108 byte

import Regex as R
f p=List.length<|R.find(Maybe.withDefault R.never<|R.fromString".--|-.-|--.")(" "++p++" ")

Dựa trên biểu thức chính thức trong câu trả lời JavaScript của Arnauld . Xác nhận tất cả các trường hợp thử nghiệm ở đây .

Giải pháp thay thế không có regex, dài hơn đáng kể ở 171 byte :

f p=(String.foldl(\z{x,y,s,c}->let(t,d)=if s<1&&List.length(List.filter((==)'-')[x,y,z])>1 then(2,c+1)else(max 0 s-1,c)in{x=y,y=z,s=t,c=d}){x=' ',y=' ',s=0,c=0}(p++" ")).c

Xác nhận tất cả các trường hợp thử nghiệm ở đây .

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.