지미가 밧줄에 매달릴 수 있습니까?


18

또 다른 지미는 그의 원래 아버지에 의해 도전합니다. 이러한 다른 사랑스러운 도전을 참조하십시오 .


아시다시피, 최근 우리는 플랫폼에서 지미와 관련된 문제를보고 있습니다. 지미는 내가 전에 언급 한 바와 같이 곡예사이며, 소매에 다른 트릭을 가지고 있습니다.

이 트릭 중 하나는 밧줄에 매달려 있습니다. 다음은 Jimmy가 매달릴 수있는 로프의 예입니다.

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

지미가 밧줄에 매달리면 다음과 같이 보입니다.

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

그는 로프의 왼쪽이나 오른쪽에 매달릴 수 있습니다.

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

유효합니다. 그러나 그는 단지 한 신체 부위에 매달릴 수 없으므로 다음과 같이하십시오.

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

유효하지 않다. 그가 한 신체 부위에 매달려있을 때, 지미는 그것을 덮지 않기 때문에 로프의 다른 절반이 보입니다.

또한 지미는 밧줄의 바닥에 매달려있는 것을 좋아하지 않습니다.

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

유효하지 않다.

도전

위의 상황과 같은 지미 상황을 입력하고 지미가 진실하거나 허위 가치를 통해 밧줄에 매달릴 지 여부를 출력하십시오.

사양

  • 입력을받는 프로그램을 작성하십시오. 이것은 기능이나 다른 적절한 입력 방법을 통해 이루어질 수 있습니다.

    1. 입력은 위에서 예시 한 바와 같이 하나의 지미와 로프의 장면이어야합니다.
  • 프로그램은 지미가 밧줄에 매달릴 수 있는지 또는 밧줄에서 떨어질 것인지에 따라 콘솔에 진실하거나 거짓된 값을 출력해야합니다.

  • 지미가 밧줄에 매달릴 수있는 기준 :

    1. 그의 신체 부위 중 2 개가 로프에 있습니다.

    2. 그는 밧줄의 바닥에 없습니다.

    3. 그는 공중에 떠 있지 않습니다.

  • 로프가 직선이고 ||세그먼트 로 구성 되며 높이가 한 자보다 길 다고 가정 할 수 있습니다 .

  • 하나의 전체 로프와 하나의 단일 지미가 장면에 더 이상 존재하지 않을 것이라고 가정 할 수 있습니다.

  • 로프 하단에 줄 바꿈 문자가 없다고 가정 할 수 있습니다.

  • 로프 앞뒤의 양의 앞뒤 공간을 모두 덮어야합니다.

테스트 사례

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


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


        ||
       /o\                    TRUTHY
        ||


            ||
           /o\                FALSY


         /o\
          ||                  TRUTHY


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

채점

이것은 이므로 약 일주일 후에 가장 낮은 바이트 단위의 점수가 이깁니다.

리더 보드

아래 위젯 / 스 니펫을 확장하여이 게시물의 리더 보드를 볼 수 있습니다. 게시물을 순위에 포함 # header text시키려면 다음 정보 가 포함 된 헤더 ( )가 필요합니다 .

  • 언어의 이름 (쉼표 ,또는 대시 로 끝남 -) 다음에 ...

  • 헤더에 표시 할 마지막 숫자 인 바이트 수입니다.

예를 들어, JavaScript (ES6), 72 bytes유효하지만 Fortran, 143 bytes (8-bit)바이트 수는 헤더의 마지막 숫자가 아니기 때문에 유효하지 않습니다 (답은 8 바이트로 인식되므로이를 활용하지 마십시오).

<!-- Run the snippet to see the leaderboard. Report any bugs to @ozewski on Github. -->    <iframe src="https://ozewski.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
로프는 항상 같은 수의 공간을 갖습니까? 아니면 다를 수 있습니까?
프로그래머 프로그래머

@Maxwell 그것은 다를 수 있습니다.
connectyourcharger

각 줄이 별도의 문자열이거나 하나의 단일 문자열이어야하는 목록과 같은 입력을 취할 수 있습니까?
프로그래머 프로그래머

19
지미는 정말로 휴가를 보내야한다
Luis Mendo

7
@LuisMendo Jimmy는 자신이하는 일에 전념하고 있습니다!
connectyourcharger

답변:


13

Japt , 5 바이트

나는 이것이 옳다고 생각한다 . 나는 16 시간 동안 일을 해왔고 내 이름은 거의 알지 못해서 놀라지 않을 것입니다!

Õø|io

시도 해봐

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

2
16 시간? 지금 의 그 헌신!
connectyourcharger

2
5 바이트를 기록하는 데 16 시간이 걸렸습니까? ;-)
Cullub

휴식이 필요한 것 같습니다 (작은 조언이 작은 지미에게도 적용됨).
ihavenoidea

@connectyourcharger, 아니, 그건 내 인생이야! 헌신은 쉬지 않고 그것을 할 것입니다. 내가 한거야!
얽히고 설킨

1
@ihavenoidea, Pfft! 죽었을 때 잠을 잘거야!
얽히고 설킨

22

파이썬 2 또는 3 ,  33  30 바이트

Maxwell 덕분에 -3

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

줄 목록을 받아들이는 명명되지 않은 함수

온라인으로 사용해보십시오!

어떻게?

지미에 의해 가려진 로프 부분은 바닥이 아니어야합니다.

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)

세 바이트를 저장 :lambda l:'o'in map(max,l[:-1])
프로그래머

오, 매우 멍청합니다-고마워요!
Jonathan Allan

ASCII 값을 매우 영리하게 사용합니다. 좋은.
기금 모니카의 소송

16

파이썬 2, 28 바이트

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

온라인으로 사용해보십시오!

어떻게 작동합니까? 문자열 목록으로 입력을 받고 zip은 문자열을 조인합니다. "|"가 있으면 지미는 밧줄에 머물러 있습니다. "o"아래에 있으므로이 코드는 모든 행을 결합하고 "o"와 "|"가 있는지 확인합니다.

주석이 달린 코드 :

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

(오래된 답변) Python 2 또는 3, 39 바이트

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

문자열 목록으로 입력을받는 함수로, 각 문자열은 서로 다른 줄입니다.

xnor 덕분에 -11 바이트! Jonathan Allan 덕분에 -2 바이트!

온라인으로 사용해보십시오! (더 많은 테스트 사례를 시도하려면 입력 상자의 각 줄 뒤에 "."를 입력하십시오.)

이것은 어떻게 작동합니까? 지미가 밧줄에 완전히 꽂혀 있으면 그 줄에는 "|"가 없습니다. 문자. 따라서 각 줄을 확인할 수 있으며 "|"가없는 줄이 있으면 지미가 밧줄에 머물 수 있다는 것을 알고 있습니다. 그러나 지미는 밧줄의 바닥에 매달릴 수 없습니다. 따라서 우리는 수표에 마지막 줄을 포함시키지 않습니다. 마지막 줄이 로프의 다른 부분이라면 문제가되지 않을 것입니다. 유효한 행을 더 높게 찾을 수 있기는하지만 마지막 줄이 Jimmy가있는 줄이면 찾을 수 없습니다. "|"없이 어디서나 False를 반환합니다.


라인에 "/"가 있는지 확인하지 않고 수행 할 수 있습니까?
xnor

@xnor 응! -11 바이트
프로그래머 프로그래머

1
이렇게 몇 가지를 저장하십시오 :lambda x:1-all("|"in i for i in x[:-1])
Jonathan Allan

1
너는 더 빨랐어 :)
Daniil Tutubalin

1
@KlaymenDK이 함수는 x가 아니라 x [:-1]을 반복합니다. 파이썬에서는 음수 인덱스를 사용할 수 있기 때문에 x [:-1]은 최종 요소를 제외한 목록의 모든 요소입니다. 따라서 지미가 밧줄의 맨 아래에 있으면 (올바르게) 잘못된 결과를 반환합니다.
프로그래머 프로그래머

8

젤리 ,  9 7  6 바이트

Ṗ<”|ṀẠ

라인리스트를받는 모나 딕 링크

온라인으로 사용해보십시오!

어떻게?

지미에 의해 가려진 로프 부분은 바닥이 아니어야합니다.

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

1
Jimmies에 대한 이러한 도전을 쓰는 것이 너무 이상하다고 생각합니다. 여러 개의 지미가 같은 밧줄에 매달려 있다고 생각하면 이상한 느낌이 들기 시작합니다.
connectyourcharger

1
@connectyourcharger 예식?
부정 7

@negativeseven 가능합니다. 모든 지미 게시물을 색인하기 위해 메타 커뮤니티 위키를 이미 고려했습니다.
connectyourcharger

1
9 바이트, 그리고 다시 한 번, 누군가가 어떻게 죽을 수 있는지 알아 냈습니다.
IMustBeSomeone

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


5

brainfuck, 79 64 바이트

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

온라인으로 사용해보십시오!

진실을 위해 0x01 바이트를 출력하고 거짓을 위해 아무것도 출력하지 않습니다.

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 바이트

Çü%àθ

온라인으로 사용해보십시오!

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

입력에 나타날 수있는 유일한 문자는 \o/ |각각의 코드 포인트 92, 111, 47, 32, 124입니다 (행 배열은 입력을 선택했기 때문에 줄 바꿈이 없습니다). 이 숫자 중 두 가지를 모듈화하여 가능한 결과는 0, 13, 15, 17, 19, 28, 30, 32, 45, 47, 92, 111입니다. 111은 그 중 가장 크고 1로 끝나는 유일한 것입니다 따라서 코드에 111이 목록에있는 경우에만 코드가 출력됩니다 (05AB1E에서는 1 만 적용됨). 111은 111 ( o) % 124 ( |)이므로 입력 값에 o위의 a 가있는 경우에만 발생합니다 |.


1
pairwise 모듈로에 매우 좋습니다.
Kevin Cruijssen



2

자바 스크립트, 39 33 바이트

2 바이트를 골라 낸 @Daniil Tutubalin에게 감사합니다.

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

이것은 왼쪽 팔이 나타나고 로프가 보이지 않는 라인과 일치합니다.

온라인으로 사용해보십시오!


그가 밧줄의 바닥에 있다면 그것은 실패한 것처럼 보인다
fəˈnɛtɪk

그가 바닥에 있다면 실패해야합니까? 지미는 밧줄의 바닥에 있다면 떨어지기 때문에
프로그래머

나는 그를 밧줄의 맨 아래에 놓았을 때 어떤 이유로 든 함수가 1을 반환
했음을 의미합니다.

흠, 그럼 신경 쓰지 마
프로그래머 프로그래머

1
무엇에 대해 /^ *.o. *\n/?
tsh

2

/// , 53 50 바이트

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

온라인으로 사용해보십시오!

///에 입력을받는 다른 방법이 없기 때문에 하드 코딩됩니다.

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

설명:

일반적인 방법은 Jimmy를 단항 1로 바꾸고 위험에 처한 모든 상황에서 그를 제거하는 것입니다. 그가 살아남 으면 그는 출력됩니다. 그가하지 않으면 아무것도 없습니다. 의 ~코드는를 대신 //하여 코드를 3 바이트 줄입니다. 그것들은 설명에서 생략된다.

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

          {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\
           ||.

온라인으로 사용해보십시오!


2

루비 2.5.5, 22 바이트

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

줄 배열을 예상합니다. 이 시점 Array#all?(pattern)이 추가 되었으므로 버전 2.5.5 이상이 필요합니다 .

입력이 항상 Jimmy와 로프의 유효한 장면이어야한다는 제약 때문에 마지막 라인 이전의 라인 중 하나라도 로프가 가려 졌는지 여부로 요약됩니다.




1

레티 나 , 9 바이트

m`^[^|]+^

온라인으로 사용해보십시오!

이제는 이전에 Retina에서 프로그래밍 한 적이 없지만이 작업을 할 수있는 한 가능합니다. (1) 입력의 시작, (2) no "|"를 포함하는 문자열을 찾는 정규식입니다. 문자 및 (3) 줄 바꿈.

정규식이나 Retina에 더 익숙한 사람들은 제안을 제안하는 것이 좋습니다. Neil 덕분에 -2 바이트!


두 가지 대안 : 1) \n새 줄이 아니므로 |어쨌든 일치하므로 마지막 ^줄은 실제로 줄 바꿈과 일치하기 때문에 충분 하지 않습니다 . 2) 멀티 라인 모드에서 개행 후에는 항상 그렇기 때문에 대신에 필로우 를 사용 \n하고 후행을 제거하십시오 ^.
Neil


1

Befunge-98 (PyFunge) , 26 24 바이트

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

온라인으로 사용해보십시오!

다음과 같은 경우 리턴 코드 3으로 종료 \n공백이 아닌 문자가 3 개이고 마지막 행에 , 그렇지 않으면 EOF에서 리턴 코드 0으로 종료합니다. 따라서 이것은 마지막 줄 바꿈을 포함하지 않는 마지막 줄에 의존합니다.

해부

]~                     :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 (레거시) , 6 바이트

ζJ„o|å

@Shaggy 의 Japt 답변 포트 .

줄 목록으로 입력하십시오.

온라인으로 사용해보십시오.

설명:

ζ       # 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

느릅 나무 0.19, 68 바이트

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

행 목록으로 입력을받습니다. 마지막 줄을 무시하고 줄이 없는지 확인합니다 '|'. 로프가 Jimmy로 완전히 덮여 있음을 나타냅니다.

여기에서 모든 테스트 사례를 확인 하십시오 .




0

피 레트, 79 바이트

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

줄 배열을 문자열로 예상합니다. link(0,l)모든 행이 1 씩 아래로 이동 한 곳에 사본을 만듭니다 . 각 행을 통과 r하며 n여기서 n은 r 아래의 행입니다. 지미의 몸 "o"이 어떤 위치에 있다면 그 아래 줄에 파이프가 있습니다 (즉, 지미가 밧줄에 매달려 있고 바닥에 있지 않습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.