Jimmy có thể treo trên dây của mình?


18

Lại thêm một thử thách nữa của người cha gốc. Xem những thách thức đáng yêu khác .


Như các bạn đã biết, gần đây chúng ta đã thấy những thách thức liên quan đến Jimmy trên các nền tảng. Bây giờ, Jimmy là một người nhào lộn như tôi đã đề cập trước đây, và anh ta có những mánh khóe khác.

Một trong những thủ thuật này được treo bằng dây thừng. Đây là một ví dụ về một sợi dây mà Jimmy có thể treo từ:

            ||
            ||
            ||
            ||
            ||
            ||

Khi Jimmy treo trên một sợi dây, nó trông như thế này:

            ||
            ||
           /o\
            ||
            ||
            ||

Anh ta có thể treo bên trái hoặc bên phải của sợi dây, vì vậy điều này:

            ||
            ||
            ||
            /o\
            ||
            ||

cũng có giá trị Nhưng anh ta không thể treo chỉ bằng một bộ phận cơ thể, nên mọi thứ như thế này:

            ||
            ||
            ||
          /o\|
            ||
            ||

không có hiệu lực. Lưu ý rằng khi anh ta bị treo bởi một bộ phận cơ thể, nửa kia của sợi dây có thể nhìn thấy được vì Jimmy không che đậy nó.

Ngoài ra, Jimmy không thích treo dưới đáy sợi dây - nó làm anh sợ - vì vậy điều này:

            ||
            ||
            ||
            ||
            ||
            /o\

không có hiệu lực.

Các thách thức

Đưa đầu vào của một tình huống của Jimmy giống như các tình huống ở trên và đưa ra liệu Jimmy có bám vào sợi dây hay không thông qua giá trị trung thực hoặc giả.

Các chi tiết cụ thể

  • Viết chương trình nhận đầu vào. Điều này có thể thông qua một chức năng hoặc bất kỳ phương thức nhập liệu thích hợp khác.

    1. Đầu vào phải là một cảnh của một Jimmy và một sợi dây như được minh họa ở trên.
  • Chương trình sẽ đưa ra một giá trị trung thực hoặc giả cho bảng điều khiển dựa trên việc liệu Jimmy có thể bám vào sợi dây hoặc nếu anh ta rơi ra khỏi sợi dây, tương ứng.

  • Các tiêu chí để Jimmy có thể treo trên dây:

    1. Hai bộ phận cơ thể của anh ta nằm trên sợi dây.

    2. Anh ta không ở dưới cùng của sợi dây.

    3. Anh ta không lơ lửng giữa không trung.

  • Bạn có thể giả sử sợi dây sẽ thẳng, được tạo thành từ ||các phân đoạn và sẽ dài hơn một ký tự về chiều cao.

  • Bạn có thể giả định toàn bộ một sợi dây và một số ít Jimmy sẽ có mặt trong cảnh của bạn, không hơn không kém.

  • Bạn có thể cho rằng sẽ không có dòng mới nào ở dưới cùng của sợi dây.

  • Bạn phải bao gồm bất kỳ số lượng không gian hàng đầu hoặc dấu trước và sau sợi dây.

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

           ||
           ||
           ||                 TRUTHY
           /o\
           ||
           ||


            ||
            ||
          /o\|                FALSY
            ||
            ||


        ||
       /o\                    TRUTHY
        ||


            ||
           /o\                FALSY


         /o\
          ||                  TRUTHY


            ||
            ||
       /o\  ||                FALSY
            ||
            ||

Chấm điểm

Đây là , vì vậy điểm số thấp nhất tính bằng byte sẽ thắng sau khoảng một tuần.

Bảng xếp hạng

Bạn có thể xem bảng xếp hạng cho bài đăng này bằng cách mở rộng tiện ích / đoạn trích bên dưới. Để bài đăng của bạn được đưa vào bảng xếp hạng, bạn cần một tiêu đề ( # header text) với thông tin sau:

  • Tên của ngôn ngữ (kết thúc bằng dấu phẩy ,hoặc dấu gạch ngang -), theo sau là ...

  • Số byte, là số cuối cùng xuất hiện trong tiêu đề của bạn.

Ví dụ: JavaScript (ES6), 72 byteshợp lệ, nhưng Fortran, 143 bytes (8-bit)không hợp lệ vì số byte không phải là số cuối cùng trong tiêu đề (câu trả lời của bạn sẽ được nhận ra là 8 byte - không tận dụng điều này).

<!-- Run the snippet to see the leaderboard. Report any bugs to @xMikee1 on Github. -->    <iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=187759" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>


1
Là sợi dây luôn luôn có cùng số lượng không gian trước nó, hoặc có thể thay đổi?
lập trình viên

@Maxwell Điều đó có thể thay đổi.
Connectyourcharger

Chúng ta có thể lấy đầu vào như một danh sách, trong đó mỗi dòng là một chuỗi riêng biệt hay nó phải là một chuỗi đơn?
lập trình viên

19
Jimmy thực sự nên có một kỳ nghỉ
Luis Mendo

7
@LuisMendo Jimmy dành riêng cho những gì anh ấy làm!
Connectyourcharger

Câu trả lời:


13

Japt , 5 byte

Tôi nghĩ điều này là đúng; Tôi đã làm việc trong 16 giờ liền và hầu như không biết tên của mình nên tôi sẽ không ngạc nhiên nếu không!

Õø|io

Thử nó

Õø|io     :Implicit input
Õ         :Transpose
 ø        :Contains?
  |io     :  "|" prepended with "o"

2
16 giờ? Bây giờ đó là sự cống hiến!
Trình kết nối

2
Đợi bạn mất 16 giờ để ghi 5 byte? ;-)
Cullub

Có vẻ như bạn cần nghỉ ngơi (lời khuyên tương tự dành cho cậu bé Jimmy!).
ihavenoidea

@connectyourcharger, không, đó là cuộc sống của tôi! Tận tâm sẽ được làm điều đó mà không nghỉ ngơi. Những gì tôi đã làm!
Shaggy

1
@ihavenoidea, Pfft! Tôi sẽ ngủ khi tôi chết!
Shaggy

22

Python 2 hoặc 3 ,  33  30 byte

-3 cảm ơn Maxwell

lambda l:'o'in map(max,l[:-1])

Hàm không tên chấp nhận danh sách các dòng

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

Làm sao?

Cần phải có một phần của sợi dây bị che khuất bởi Jimmy không phải là phần dưới cùng.

lambda l:'o'in map(max,l[:-1])
lambda l:                      # a function taking l (the lines as strings)
                       l[:-1]  # strip off the last line
               map(max,      ) # maximum of each line (where '|'>'o'>'\'>'/'>' ')
         'o'in                 # was 'o' one of them? (hence Jimmy obscured all the rope)

Lưu ba byte:lambda l:'o'in map(max,l[:-1])
lập trình viên

Ồ, rất sắc sảo - cảm ơn!
Jonathan Allan

Đó là cách sử dụng rất thông minh các giá trị ASCII. Đẹp.
Vụ kiện của Quỹ Monica

16

Python 2, 28 byte

lambda x:"o', '|"in`zip(*x)`

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

Làm thế nào nó hoạt động? Nó nhận đầu vào là một danh sách các chuỗi và zip tham gia chuỗi. Jimmy vẫn ở trên dây nếu có "|" bên dưới một "o", vì vậy mã này tham gia tất cả các dòng và kiểm tra xem có "o" theo sau là "|" không.

Mã chú thích:

lambda x: # Creates an anonymous function that takes one argument
  "o', '|" # If this substring is in the zip object, then Jimmy's "o" is above a "|"
    in
    `    # Back quotes change the object into its string representation
    zip(*x)` # Joins the lines together

(Câu trả lời cũ) Python 2 hoặc 3, 39 byte

lambda x:1-all("|"in i for i in x[:-1])

Một hàm lấy đầu vào là một danh sách các chuỗi, mỗi chuỗi là một dòng khác nhau.

-11 byte nhờ xnor! -2 byte nhờ Jonathan Allan!

Hãy thử trực tuyến! (Nếu bạn muốn thử nhiều trường hợp kiểm tra hơn, chỉ cần đặt "." Sau mỗi bộ dòng trong hộp nhập.)

Cái này hoạt động ra sao? Chà, nếu Jimmy hoàn toàn nằm trên sợi dây, thì dòng đó sẽ không có bất kỳ "|" nào nhân vật. Do đó, chúng tôi có thể kiểm tra từng dòng và nếu chúng tôi tìm thấy bất kỳ dòng nào không có "|" các nhân vật, sau đó chúng ta biết rằng Jimmy có thể ở trên dây. Tuy nhiên, Jimmy không thể bám vào đáy của sợi dây; do đó, chúng tôi không bao gồm dòng cuối cùng trong kiểm tra của chúng tôi. Nếu dòng cuối cùng chỉ là một phần khác của dây, thì điều đó sẽ không thành vấn đề, bởi vì chúng ta vẫn sẽ tìm thấy một hàng hợp lệ cao hơn, nhưng nếu dòng cuối cùng là một dòng với Jimmy, thì nó sẽ không tìm thấy một dòng không có "|" bất cứ nơi nào, và sẽ trả về Sai.


Bạn có thể làm điều đó mà không cần kiểm tra xem dòng có "/" không?
xnor

@xnor Yup! -11 byte
lập trình viên

1
Lưu một cặp vợ chồng như vậy:lambda x:1-all("|"in i for i in x[:-1])
Jonathan Allan

1
Ouch, bạn đã nhanh hơn :)
Daniil Tutubalin

1
@KlaymenDK Hàm lặp qua x [: - 1], không phải x. x [: - 1] là tất cả các thành phần của danh sách ngoại trừ thành phần cuối cùng, bởi vì trong Python bạn có thể sử dụng các chỉ số phủ định. Do đó, nó (chính xác) trả về kết quả sai lệch nếu Jimmy ở dưới cùng của sợi dây.
lập trình viên

8

Thạch ,  9 7  6 byte

Ṗ<”|ṀẠ

Một liên kết đơn âm chấp nhận một danh sách các dòng

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

Làm sao?

Cần phải có một phần của sợi dây bị che khuất bởi Jimmy không phải là phần dưới cùng.

Ṗ<”|ṀẠ - Main Link: list of lines of characters
Ṗ      - remove last line
  ”|   - pipe character
 <     - less than? (vectorises) - Note that all other characters are
    Ṁ  - maximum
     Ạ - all?

1
Tôi cảm thấy thật kỳ lạ khi viết những thử thách này về Jimmies. Nó bắt đầu làm cho bạn cảm thấy kỳ lạ khi bạn tưởng tượng nhiều Jimmies treo trên cùng một sợi dây.
Connectyourcharger

1
@connectyourcharger Điềm báo?
âm bảy

@negativeeven Có thể. Tôi đã xem xét một wiki cộng đồng meta để lập chỉ mục tất cả các bài viết của Jimmy.
Trình kết nối

1
Chín byte, và một lần nữa, chúng ta vẫn tìm ra cách ai đó có thể chết.
IMustBeSomeone

1
" Note that all other characters are [less than '|']"?
Erik the Outgolfer

5

Brainfuck, 79 64 byte

>>+<<,[----------[<]>>[.-]+<[>-]+[---------<-->]<[<]>>[-]<[>]<,]

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

Xuất ra byte 0x01 cho sự thật và không có gì cho sai.

Z: 0
A: input
B: 0
C: has no | been found on this line?

>>+<<                       initialize C to 1
,[                          loop over each char

  ----------                set A to 0 if input was \n
  [<]>>                     move to C if input was \n; B otherwise
  [                         if input was \n and C is true
    .-                      output 1
  ]

  +                         this will reinitialize C to 1 if input was \n
                            but also clobber B with 1 if it wasn't
                            now we have { 0   0   0  (1)} if input was \n;
                                        { 0   _  (1)  _ } otherwise
  <[>-]                     clear own cell if the one to the left is positive
                            this yields { 0   0  (0)  1 } and
                                        { 0   _  (0)  _ } as desired

  +[---------<-->]          set A to 0 if input was |
  <[<]>>                    move to C if input was |; B otherwise
  [-]                       zero out current cell: clears C if input was |
  <[>]<                     realign pointer onto A

,]                          break on end of input



4

05AB1E , 5 byte

Çü%àθ

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

Ç         # convert the input to a 2D array of codepoints
 ü%       # pairwise modulo (vectorized)
   à      # maximum (*not* vectorized, returns a single number)
    θ     # tail (last digit)

Các ký tự duy nhất có thể xuất hiện trong đầu vào là \o/ |, với các mật mã tương ứng 92, 111, 47, 32, 124 (không có dòng mới, vì chúng tôi đã chọn lấy đầu vào làm một mảng các dòng). Các kết quả có thể có bằng cách điều chỉnh hai trong số các số này là 0, 13, 15, 17, 19, 28, 30, 32, 45, 47, 92, 111. 111 là số lớn nhất và cũng là số duy nhất kết thúc bằng 1 , vì vậy mã sẽ xuất ra sự thật nếu và chỉ khi 111 có mặt trong danh sách (chỉ có 1 là sự thật trong 05AB1E). 111 là 111 ( o)% 124 ( |) và do đó chỉ xảy ra nếu có một oở trên a |trong đầu vào.


1
Rất đẹp với modulo cặp.
Kevin Cruijssen



2

JavaScript, 39 33 byte

Cảm ơn @Daniil Tutubalin đã chơi golf 2 byte

x=>!!x.match(/^( *)\/[^|]*\n/m)

Điều này phù hợp với bất kỳ dòng nào không phải là dòng mà cánh tay trái của anh ấy xuất hiện và không có dây nào hiển thị.

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


Nó dường như thất bại nếu anh ta ở dưới cùng của sợi dây
fəˈnɛtɪk

Nó sẽ thất bại nếu anh ta ở dưới đáy, phải không? Bởi vì Jimmy ngã nếu anh ta ở dưới cùng cho sợi dây
lập trình

Ý tôi là khi tôi đặt anh ta ở dưới cùng của sợi dây, chức năng của bạn vì lý do nào đó đã trả lại 1
fnɛtɪk

Hừm, đừng bận tâm.
lập trình viên

1
Thế còn /^ *.o. *\n/?
tsh

2

/// , 53 50 byte

/~/\/\~/\/o\\/1~1 /1~ 1/1~|1~/1|~/|~/1.~/ ~/.~/
~.

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

Vì không có cách nào khác để nhận đầu vào trong ///, nên nó được mã hóa cứng:

/~/\/\~/\/o\\/1~1 /1~ 1/1~|1~/1|~/|~/1.~/ ~/.~/
~<INPUT HERE>.

Giải trình:

Cách tiếp cận chung là thay thế Jimmy bằng unary 1, sau đó loại anh ta khỏi mọi tình huống mà anh ta đang gặp nguy hiểm. Nếu anh ta sống sót, anh ta đã thoát ra. Nếu anh ta không, thì không có gì. Mã ~trong là một thay thế cho //, cho phép mã được rút ngắn 3 byte ở đây. Họ được bỏ qua từ lời giải thích.

/{/\//
/}/\/\//

          {The top two lines allow me to leave comments without disturbing the code.}

/\/o\\/1/ {Replace Jimmy with a 1.}
/1 /1/    {Get rid of any spaces in front of Jimmy. This moves Jimmy towards the rope from the left.}
/ 1/1/    {Get rid of any spaces after Jimmy. This moves Jimmy towards the rope from the right.}

/|1//     {If Jimmy is touching the rope, remove him and the rope.}
/1|//     {This is based on the observation that in all cases where Jimmy is safe, there is no visible rope on his line.}


/|//      {Remove any remaining rope. If Jimmy was touching a rope, it's already too late for him.}
/1.//     {This handles the case where Jimmy is at the bottom of the rope (hence the period at the end).}


/ //      {The remaining lines clean up the output.}
/.//
/
//

           ||
           ||
           ||
           /o\
           ||.

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


2

Ruby 2.5.5, 22 byte

->x{x.pop;!x.all? /\|/}

Mong đợi một loạt các dòng. Yêu cầu tối thiểu phiên bản 2.5.5 vì đây là khiArray#all?(pattern) được thêm vào.

Do các ràng buộc rằng đầu vào sẽ luôn là cảnh hợp lệ của Jimmy và một sợi dây, nó sẽ hiểu rõ liệu bất kỳ dòng nào trước dòng cuối cùng có bị che khuất không.




1

Võng mạc , 9 byte

m`^[^|]+^

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

Bây giờ, tôi chưa bao giờ lập trình ở Retina trước đây, nhưng theo như tôi có thể nói điều này hoạt động. Đó là một biểu thức chính quy tìm thấy một chuỗi chứa (1) đầu của đầu vào, (2) không "|" ký tự và (3) một dòng mới.

Những người quen thuộc hơn với biểu thức thông thường hoặc Retina được khuyến khích đưa ra đề xuất. -2 byte nhờ Neil!


Hai lựa chọn thay thế: 1) Loại bỏ \nbởi vì một dòng mới không phải là một |và vì vậy nó sẽ phù hợp với bất kỳ điều gì, và ^đủ để đảm bảo rằng bạn thực sự phù hợp với một dòng mới. 2) Sử dụng pilcrow thay vì \nvà xóa dấu vết ^(vì điều đó luôn đúng sau một dòng mới ở chế độ đa dòng).
Neil


1

Befunge-98 (PyFunge) , 26 24 byte

]~:a-!#v_' `+
^_-3q#$<
@

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

Thoát với mã trả về 3 nếu \n gặp phải và dòng cuối cùng chứa 3 ký tự không phải khoảng trắng, nếu không thì thoát với mã trả về 0 trên EOF. Do đó, điều này phụ thuộc vào dòng cuối cùng không chứa một dòng mới.

Mổ xẻ

]~                     :a-!#v_                ' `+
 Read character,      Branch downwards if   Increment counter on 
 branch up (and        equal to 10 ('\n')   the stack if greater
 loop around) if                            than 32 (' ') and
 end of stream                              implicitly loop

^_-3q#$<                    <
 Return with code 3
 if counter is equal to 3,
 otherwise reset counter
 and return to beginning

@
 Return with exit
 code 0

1

05AB1E (di sản) , 6 byte

ζJ„o|å

Cảng @Shaggy Japt câu trả lời 's .

Nhập dưới dạng danh sách các dòng.

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

Giải trình:

ζ       # Zip/transpose the (implicit) strings in the input-list, with space as filler
        # (NOTE: zip/transpose doesn't work on string-list in the new version of 05AB1E,
        #  which is why we use the legacy version)
 J      # Join these zipped/transposed lines together to a single string
  o  # And check if it contains the string "o|"
        # (after which the result is output implicitly)


1

Elm 0,19, 68 byte

f r=List.any(not<<String.contains"|")(List.take((List.length r)-1)r)

Lấy đầu vào là một danh sách các dòng. Bỏ qua dòng cuối cùng, nó kiểm tra xem có cái nào không'|' trong chúng hay không - ngụ ý sợi dây được bao phủ hoàn toàn bởi Jimmy.

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




0

Pyret, 79 byte

{(l):all2({(r,n):string-char-at(n,string-index-of(r,"o") == "|")},l,link(0,l))}

Yêu cầu một mảng các dòng dưới dạng chuỗi. Tạo một bản sao trong link(0,l)đó tất cả các hàng được dịch chuyển xuống một. Đi qua mỗi hàng rntrong đó n là hàng bên dưới r. Kiểm tra xem nếu cơ thể của Jimmy "o"ở một vị trí nào đó, thì hàng bên dưới nó có một đường ống ở đó (tức là của Jimmy treo trên dây và không ở dưới cùng).

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.