지미 다양성의 장면


25

아시다시피, 최근여러 가지 멋진 지미 도전이 나타 났습니다. 이 도전에서, 당신은 우리의 사랑하는 친구의 곡예 기술에 도전했습니다. 이제 우리에게는 다른 도전이 있습니다. 오늘 당신은 지미의 다른 유형을 식별 할 것입니다!


설명

지미에는 3 가지 종류가 있습니다 : 난쟁이, 곡예사, 보디 빌더.

This is dwarf Jimmy:               o

This is acrobat Jimmy:            /o\

This is bodybuilder Jimmy:       /-o-\

이 지미는 모두 좋은 친구이며 서로 같은 줄에 서기를 좋아합니다. 당신의 임무는 다음과 같이 지미 장면이 주어진 것입니다.

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

드워프, 곡예사 및 보디 빌더의 양을 각각 줄에 출력합니다.

도전

  • 위의 예와 같이 합리적인 형태로 Jimmy 장면으로 입력하십시오.

    1. 입력 문자열은 한 줄이어야하며 선택적으로 3 가지 종류의 Jimmys와 선택적인 공백이 포함됩니다.

    2. 문자열에 반드시 모든 지미 품종 또는 공백이 포함되는 것은 아닙니다.

    3. 문자열은에없는 문자를 포함하지 않습니다 o/\ -.

    4. 지미 품종의 모든 조합이 가능합니다. 즉, 동일하거나 다른 유형의 Jimmy가 서로 옆에있을 수 있습니다. 당신은 그것을 설명해야합니다.

    5. 선행 및 후행 공백은 선택 사항이며 반드시 필요한 것은 아닙니다. 프로그램은 선행 및 / 또는 후행 공백이 있거나없는 문자열을 고려해야합니다.

    6. 문자열은 유효한 Jimmys와 공백 만 포함해야합니다. 예를 들어, ---///---유효한 Jimmy 시퀀스가 ​​아니므로 허용되지 않습니다.

  • 세 개의 숫자를 출력합니다 : 장면에서 드워프, 곡예사 및 보디 빌더 수 (각 순서).

    1. 이것은 공백으로 분리 된 정수로 콘솔에 출력되거나, 일종의 컨테이너 (예 : 배열 유형)로서 함수의 리턴 값일 수 있습니다.

    2. 이 규칙 위의 맨 위 글 머리표에 언급 된대로 형식에 관계없이 출력을 정렬해야합니다.

  • 표준 규칙 및 허점이 적용됩니다.

테스트 사례

     /-o-\           /-o-\     o/o\  /-o-\       /-o-\                /-o-\
OUTPUT: 1 1 5


      o o               /o\    o o      o                    /o\             /o\
OUTPUT: 5 3 0


 /-o-\     /-o-\            /-o-\/-o-\   o /o\/o\    /-o-\o /-o-\       /o\/-o-\
OUTPUT: 2 3 7


  /-o-\  o                 /-o-\               o/o\
OUTPUT: 2 1 2

더 많은 테스트 사례를 원하는 경우이 도구 를 사용하여 더 많은 무작위 테스트 사례를 생성하십시오.

채점

이것은 이므로 바이트 단위의 최저 점수가 이깁니다.

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

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

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

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

<!-- Run the snippet to see the leaderboard. Report any bugs to @xMikee1 on Github. -->    <iframe src="https://ozewski.github.io/ppcg-leaderboard/?id=188391" 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>


모든 입력에 적어도 하나의 선행 및 후행 공간이 있다고 가정 할 수 있습니까?
얽히고 설킨

7
@connectyourcharger보다 표준적인 방법은 주문을 지정하기 위해 답변을 요구하는 것입니다.
만료 된 데이터

4
명확하게 말하자면, 난쟁이 지미가 함께 서있을 수 있습니까? 다른 제안은 없습니다. 그렇다면 테스트 케이스는 oo /o\ o o좋을 것입니다
Veskah

1
@Veskah : 테스트 케이스 생성기는 시퀀스를 생성 할 수 oo있습니다.
재귀

8
jimmy 태그 가 있어야합니다 .
MilkyWay90

답변:


8

젤리 , (12?) 13 바이트

ċⱮ“-/o”H1¦ŻIṚ

정수 목록을 생성하는 문자 목록을 허용하는 모나드 링크 [ dwarves, acrobats, and body-builders]( 출력을 지정할 수 있으면 바이트 저장 )

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

방법?

모든 Jimmys는 o; 드워프가 아닌 사람은 모두 /; 모든 보디 빌더는 2를 보여줍니다 -. 이것들을 세고의 수를 반으로 줄이고 -빼기를 수행하여 지미 수를 찾으십시오.

ċⱮ“-/o”H1¦ŻIṚ - Link: list of characters
  “-/o”       - list of characters ['-', '/', 'o']
 Ɱ            - map across right with:
ċ             -   count occurrences   = [n('-'), n('/'), n('o')]
         ¦    - sparse application...
        1     - ...to indices: [1] -- i.e. n('-')
       H      - ...action: halve    = [n('-')/2, n('/'), n('o')]
          Ż   - prepend a zero =   [0, n('-')/2, n('/'), n('o')]
           I  - incremental differences
              -     = [n('-')/2, n('/')-n('-')/2, n('o')-n('/')]
            Ṛ - reverse
              -     = [n('o')-n('/'), n('/')-n('-')/2, n('-')/2]

21

Python 3.8 (시험판) , 51 바이트

lambda s:((c:=s.count)('o')-c('/'),c('/o'),c('/-'))

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


마침내 파이썬은 이와 같은 것을 추가했습니다. 파이썬이 할당을 표현식으로 허용 할 때까지 잠시 기다렸습니다. 부끄러운 일이지만 여분의 바이트가 필요합니다. : P
HyperNeutrino

@HyperNeutrino 기본적으로 사이트에 "Python 3.8 (시험판)"이 표시되는 이유 중 하나입니다. 그것은 그 자체가 아니면 또 다른 제한은, 그입니다 성명의 유일한 표현 (이 경우 대신 일반 할당을 선호 할 수도)는 괄호해야한다 (2 바이트) 없습니다.
Outgolfer Erik

첫 번째는 어떻게 ('o')전화를 걸지 않고 호출 c됩니까?
Quinn

할당 발현 양수인 @Quinn s.countc다음을 반환합니다.
Outgolfer Erik

@ErikTheOutgolfer 쿨, TIL
Quinn



5

J , 36 25 바이트

콜 덕분에 -11 바이트!

2-/\0,~1 1 2%~1#.'o/-'=/]

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

독창적 인 솔루션

J , 36 바이트

[:(-/@}:,-/@}.,{:)1 1 2%~1#.'o/-'=/]

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

설명:

                            'o/-'=/] compare the input with each one of "o/-" characters
                                     / the result is a 3-row matrix /
                         1#.         add up each row to find the number of occurences
                                     of each character, the result is a vector of 3 items
                  1 1 2%~            divide the last item by 2 to find the number of 
                                     bodybuilder Jimmys
[:(              )                   use the result to construct the following vector:
               {:                    the last item
              ,                      appended to
         -/@}.                       the difference of the second and the third items
        ,                            appended to
   -/@}:                             the difference of the first and the second items

샘플 J 세션 :

a=:'  /-o-\  o                 /-o-\               o/o\'
   'o/-'=/a
0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1#.'o/-'=/a
5 3 4  
   1 1 2%~1#.'o/-'=/a
5 3 2
   (-/@}:,-/@}.,{:)1 1 2%~1#.'o/-'=/a
2 1 2


더 이상 내 의견을 편집 할 수 없습니다. 올바른 경우 25 바이트 입니다. 0을 추가하는 다른 방법을 사용합니다.
cole

1
@cole Hah, 종종 나에게 발생하기 때문에 패턴을 보지 못했습니다. 고맙습니다!
Galen Ivanov

불행히도 나는 당신이 그 설명에서 편집 할 때만 그것을 보았습니다. 항상 설명하는 많은 노력을 잃어 버리는 것은 항상 부끄러운 일입니다.

@cole 그래서 내 실수에 대한 설명을 계속 볼 수 있습니다 :)
Galen Ivanov

5

CSV로 Excel, 130 바이트

,=LEN(A3)-LEN(A4)
=SUBSTITUTE(A1,"-o",""),=(LEN(A2)-LEN(A3))/2
=SUBSTITUTE(A2,"/o",""),=(LEN(A1)-LEN(A2))/2
=SUBSTITUTE(A3,"o","")

먼저 공간에 입력을 삽입 ,하고 .csv로 저장 한 다음 Excel에서 엽니 다. 출력 난쟁이, 아크로바트와의 보디 빌더 B1, B2그리고 B3각각.


엑셀, 244 바이트

=LEN(SUBSTITUTE(SUBSTITUTE(A1,"-o",""),"/o",""))-LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"-o",""),"/o",""),"o",""))&" "&(LEN(SUBSTITUTE(A1,"-o",""))-LEN(SUBSTITUTE(SUBSTITUTE(A1,"-o",""),"/o","")))/2&" "&(LEN(A1)-LEN(SUBSTITUTE(A1,"-o","")))/2


4

코 틀린 131 130 129 121 117 97 96 88 바이트

fun String.j(b:Int=count{'-'==it}/2,a:Int=count{'/'==it})=listOf(count{'o'==it}-a,a-b,b)

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

편집-Wew, 100 미만으로 받았습니다! 더 축소 할 수 있을지 모르겠지만 시간 만 말해 줄 것입니다 ...

편집-너무 빨리 스포크하고 문자열 대신 목록을 사용하여 바이트를 하나 더 삭제했습니다.

확장 기능 사용을 제안하는 AsoLeo 덕분에 편집-빼기 8 바이트


1
확장 방법에 대해 알려 드리겠습니다 fun String.j(b:Int=count{'-'==it}/2,a:Int=count{'/'==it})=listOf(count{'o'==it}-a,a-b,b). 친구 : 88 바이트.
아소 레오

@AsoLeo nice, 실제로 원래 확장 기능으로 작성했지만 내 바이트가 더 많기 때문에 다른 것을 엉망으로 만들었습니다
Quinn

3

망막 , 39 35 바이트

편집 : @FryAmTheEggMan 덕분에 -4 바이트

^((o)|(/o.)|(/-o-.)| )*
$#2 $#3 $#4

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

설명:

간단한 교체 단계. 정규식과 일치하는 모든 항목을 찾고 ^((o)|(/o.)|(/-o-.)| )*(전체 문자열을 한 번 일치시켜야 함) 그룹 2, 3 및 4의 캡처 수로 대체합니다. 정규식은 다음과 같습니다.

^((o)|(/o.)|(/-o-.)| )*
^                               start at the beginning of the string
 (                       )*     have any amount of Jimmy / spaces
     |       |         |        select one of:
  (o)                           capturing group 2 - dwarf
      (/o.)                   capturing group 3 - acrobat
              (/-o-.)         capturing group 4 - bodybuilder

우리는 입력으로 시작 ^하거나 끝이 일치하는 것으로 계산해야합니다. Retina의 대체 구문 $n에서 n 번째 캡처 그룹을 참조하고 수정자는 #일치 한 횟수를 계산합니다.


문자열은 지미 만 보장되므로 이스케이프를 줄이면 바이트를 절약 할 수 있습니다. 온라인으로 사용해보십시오!
FryAmTheEggman

3

자바 스크립트, 55 바이트

정규식 패턴 매칭을 사용하여 문자열을 검색하여 o, o-또는 o-\; 인덱스를 결정하기 위해 각 일치 길이를 사용하여 배열의 해당 카운트를 증가시킵니다.

s=>s.replace(/o-?\\?/g,m=>a[m.length-1]++,a=[0,0,0])&&a

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


1
@JonathanAllan 나는 대답을 다시 썼다.
darrylyeo






1

펄 5 -p , 41 바이트

$_=1*s/o(?!\\|-)//g.$".1*s|/o||g.$".y/o//

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

o뒤 따르 \거나 -난쟁이를 찾지 않고 나타나는 횟수를 계산하여 문자열에서 제거합니다. 그런 다음 /o곡예사를 찾아서 문자열에서 제거 하는 횟수를 센다 . 그런 다음 o바디 빌더를 결정하기 위해 남은 수를 계산합니다 . 숫자 사이에 공백을 삽입하고 결과를 내재적으로 출력합니다.



@NahuelFouilleul 줄 끝에 드워프가 있으면 작동하지 않습니다. 바디 빌더로 계산합니다.
Xcali

true, 그렇지 않으면 -4 바이트 만 제거1*
Nahuel Fouilleul

@NahuelFouilleul 그것은 작동하지 않습니다. 이러한 유형의 예가 없으면 undef대신 ( )을 출력하지 않습니다 0.
Xcali

좋아, 나는 단지 테스트 사례를 보았다
15:09에 Nahuel Fouilleul


1

SNOBOL4 (CSNOBOL4) , 135 바이트

	I =INPUT
B	I '-o' =	:F(A)
	B =B + 1	:(B)
A	I '/o' =	:F(D)
	A =A + 1	:(A)
D	I 'o' =	:F(O)
	D =D + 1	:(D)
O	OUTPUT =+D ' ' +A ' ' +B
END

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

문자열에서 , 및 을 제거 -o하고 매번 적절한 카운터를 증가시킵니다. 팔과 다리를 많이 뒤에 잎 ( , , 아무것도)./oo/-\\


0

넷째 (gforth) , 118 바이트

: c -rot 0 tuck do over i + c@ 3 pick = - loop nip nip ;
: f 2dup '/ c >r 2dup '- c 2/ -rot 'o c i - . r> over - . . ;

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

설명

  • 백작하기 /, -o문자
  • 보디 빌더는 -문자 수를 2로 나눈 값입니다
  • Acrobat은 /문자 수에서 바디 빌더 수를 뺀 값입니다.
  • 드워프는 o문자 수에서 Acrobat 및 보디 빌더 수를 뺀 수입니다.

코드 설명

\ c counts the number of occurrences of the given character in a string
\ stack usage is ( c-addr u1 w1 - u )
: c                 \ start a new word definition
  -rot 0 tuck       \ sets up parameters for a counted loop
  do                \ loop from 0 to string-length - 1 (inclusive)
    over i +        \ get the address of the current character in the string
    c@              \ get the ascii value of the current character              
    3 pick =        \ compare it to the character we're counting
    -               \ subtract result from the accumulator (subtract because -1 = true in forth)
  loop              \ end the loop
  nip nip           \ remove extra values from the stack
;                   \ end the word definition

\ Main function 
: f                 \ start a new word definition
  2dup              \ duplicate the string address and length
  '/ c >r           \ count the number of '/' characters and stick the result on the return stack
  2dup '- c 2/      \ count the number of '-' characters and divide by 2
  -rot 'o c         \ move the string to the top of the stack and count the number of 'o characters
  i - .             \ calculate number of dwarf jimmy's and print
  r> over - .       \ calculate number of acrobat jimmy's and print (drop '/' count from return stack)
  .                 \ print number of body-builder jimmy's
;                   \ end word definition

0

05AB1E , 13 바이트

…-/oS¢ć;š0š¥R

출력 순서 가 허용 된 경우 if 를 제거하여 12 바이트 가 될 수 있습니다 .R[bodybuilder, acrobat, dwarf]

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

부등가 바이트 대안 :

…-/oS¢R`;0)üα

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

…-/o           # Push string "-/o"
    S          # Split to a list of characters: ["-","/","o"]
     ¢         # Count the occurrence of each character in the (implicit) input-string
      ć        # Extract the head; pop and push head and remainder-list
       ;       # Halve this head
        š      # And prepend it back in front of the remainder-list
         0š    # Then also prepend a 0
           ¥   # Get the deltas (forward differences)
            R  # And reverse the list to get the required order of output-counts
               # (after which the result is output implicitly)

…-/oS¢         # Same as above
      R        # Reverse this list
       `       # Pop the list and push its values separately to the stack
        ;      # Halve the top value on the stack
         0     # Push a 0
          )    # Wrap all values on the stack into a list
           ü   # For each overlapping pair of values:
            α  #  Get the absolute difference between the two values
               # (after which the result is output implicitly)

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