문의 응답자


12
  • 원본 : https://james-iry.blogspot.co.at/2009/05/brief-incomplete-and-mostly-wrong.html

    Alain Colmerauer는 논리 프로그래밍 언어 인 Prolog를 설계했습니다. 그의 목표는 2 살짜리 아이처럼 지능적인 프로그래밍 언어를 만드는 것이 었습니다. 자신의 목표에 성공했음을 증명하기 위해 모든 문의에 대해 "아니오"라고 대답 한 Prolog 프로그램을 발표했습니다.
    뭐든지 물어보세요!
    ?-

  • (물론 그는 그렇지 않았습니다.) 당신의 임무는 Alain Colmerauer의 프로그램보다 더 지능적인 프로그램을 만드는 것입니다. 프롤로그에있을 필요는 없습니다.

사양

  • 입력이 끝나고 ?하나 이상이 있으면 ,마지막 ,부터 끝까지 텍스트를 반환합니다 ?.

  • 와 그렇지, 만약 입력이 종료 ?반환 No.

  • 그렇지 않으면을 반환하십시오 Yes.

규칙

  • 표준 허점이 없습니다.
  • 입 / 출력은 표준 입 / 출력 방법을 통해 이루어집니다.
  • 프로그램은 적어도 1 번의 문의를 받아야합니다.
  • 처리 된 조회를 출력해야합니다.
  • YesNo의 대소 문자를 구분 예에 있습니다.
  • 입력에가 포함되어 있으면 입력에 ?하나만 ?있고 항상 마지막 문자가됩니다.
  • 입력은 항상 문구 / 문장입니다. 이 문구 / 문장 만 문자를 포함하지 않습니다 ,하고 ?, 예를 들어 ,, ?,?유효 입력하지 않습니다. (이 경우 어구 / 문장은 빈 문자열이므로 제출은 어쨌든 구현할 수 있습니다.)
  • 또한 입력은로 끝나지 않습니다 ,?.
  • 마지막 바로 뒤에 ,또는 바로 앞에 공백이 있으면 ?출력에 포함해야합니다.

Hmm. -> Yes
Alright, -> Yes
Ask me anything! -> Yes
Ask me a question, please! -> Yes
Are you okay? -> No
No? -> No
Hey,does this program work? -> does this program work

Quotes in the following test cases should not be outputted.
They are used as a delimiter here.

Okay, so this does work ? -> " so this does work "
Please, add, a, test, case, containing, multiple, commas? -> " commas"

채점

이것은 이므로 바이트 단위의 최단 답변이 이깁니다.


6
입력에가 포함되어 있으면 ?하나만 있고 항상 마지막 문자 가된다고 보장 됩니까?
얽히고 설킨

3
쉼표가 여러 개 포함 된 테스트 사례를 추가하십시오.
manatwork

8
답변을 조기에 수락하면 다른 사용자가 새로운 답변을 게시하지 못하게 될 수 있습니다. 이는 도전이 수행 된 것처럼 보이기 때문입니다.
Arnauld

3
You are guaranteed that if the input includes a ?, the input will only have one ? and it will always be the last character.따라서 이러한 테스트 사례는 필요하지 않습니다.

8
ends with ,?유효한 입력은?
GammaFunction

답변:


6

05AB1E , 20 19 바이트

'?åi',¡”€–”0ǝθ¨ë”…Ü

@Grimy 덕분에 -1 바이트 .

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

설명:

'?åi          '# If the (implicit) input contains a "?":
    ',¡       '#  Split the (implicit) input on ","
       ”€–”    #  Push dictionary string "Not"
           0ǝ  #  Insert it at the first position (index 0) in the list
       θ       #  Then get the last item of the list
        ¨      #  And remove the last character
               #  (either the "?" of the original input; or the "t" in "Not")
      ë        # Else:
       ”…Ü     #  Push dictionary string "Yes"
               # (after which the top of the stack is output implicitly as result)

내이 05AB1E 팁을 참조하십시오 (섹션 어떻게 사전을 사용하는 방법을? ) 이유를 이해하는 ”€–”것입니다 "Not"하고 ”…Ü있다 "Yes".



@ 그림 오, 똑똑한 생각. 감사! :)
Kevin Cruijssen

8

파이썬 3 , 62 바이트

lambda s:['Yes',*s[:-1].split(','),'No'][~(','in s)*('?'in s)]

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

표현식 ~(','in s)*('?'in s)평가 0(즉, 'Yes'문자열이 포함되지 않은 경우) '?', 다른 -1(즉 'No'문자열이 포함되지 않은 경우) ',', 그렇지 않으면 -2(즉, 마지막 문자를 제외한 문자열의 마지막 쉼표로 구분 된 섹션).


5

자바 스크립트 (ES6),  53  52 바이트

s=>(m=s.match(/(,?)([^,]*)\?/))?m[1]?m[2]:'No':'Yes'

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

댓글

s =>                  // s = input string
  ( m = s.match(      // m is the result of matching in s:
  //     +------------>    an optional comma
  //     |     +------>    followed by a string containing no comma
  //     |     |   +-->    followed by a question mark
  //   <--><-----><>     
      /(,?)([^,]*)\?/
  )) ?                // if m is not null:
    m[1] ?            //   if the comma exists:
      m[2]            //     output the string following it
    :                 //   else:
      'No'            //     output 'No'
  :                   // else:
    'Yes'             //   output 'Yes'

웰프는 JS 솔루션을 찾고 있었고,이 크기의 두 배로 끝났습니다.
랜덤 녀석

4

, 23 22 바이트

¿№θ?¿№θ,⁻⊟⪪θ,¦?¦No¦Yes

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 편집 : @KevinCruijssen 덕분에 1 바이트가 절약되었습니다. 설명:

¿№θ?

문자열에 ?s가 포함되어 있습니까?

¿№θ,

,s가 포함되어 있습니까?

⊟⪪θ,

에서 문자열을 나누고 ,마지막을 가져갑니다.

⁻...?

를 삭제하고 ?결과를 출력하십시오.

No

,s 가 없으면 출력 No합니다.

Yes

?s 가 없으면 출력 Yes합니다.


-1 변화 Print(Join(Split(Pop(Split(q, ",")), "?"), w)Print(Minus(Pop(Split(q, ",")), "?");
케빈 Cruijssen

@KevinCruijssen 고마워, 나는 그 일을 잊어 버렸습니다 Minus. 게다가, 나는 두 개의 분리기를 절약 한 것에 대해 나 자신을 기쁘게 생각했다.
Neil


3

Pyth , 25 바이트

?qeQ\??}\,QPecQ\,"No""Yes

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

?q                          # if       ==
  eQ\?                      #    Q[-1]    "?":
      ?}                    #   if     in   
        \,Q                 #      ","    Q:
             cQ\,           #     return split(Q, ",")
            e               #                         [-1] (last element)
           P                #                             [:-1] (remove the trailing ?)
                 "No"       #   else: return "No"
                     "Yes"  # else: return "Yes" (last " implicit)



3

레티 나 , 32 28 바이트

^'?K`Yes
.+,(.*)\?
$1
'?K`No

-4에서 팁 바이트 @Neil .

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

설명:

   K`       # Replace any (implicit) input, which does
^           # NOT
 '?        '# contain a "?"
     Yes    # with "Yes"

.+          # Match 1 or more characters
  ,         # followed by a comma
    .*      # followed by zero or more characters,
   (  )     # (captured in capture group 1)
       \?   # followed by a (trailing) "?"
$1          # And replace it with just the match of capture group 1,
            # (so everything between the last comma and trailing question mark)

  K`        # Replace any remaining string, which does
'?         '# contain a "?"
    No      # with "No"

            # (after which the result is output implicitly)

Retina 1의 K무대에는 조건부가 내장되어 있다는 것을 알고 있습니까? 나는하지 않았다. 아마 몇 바이트를 절약 할 수 있습니다.
Neil

나는 사슬에 얼마나 확실하지 않다 @Neil K및 조건은 &정직합니다. 나는 이것을K 정규식과 함께 사용하는 방법을 알고 있지만, 조건부와 결합하여 /에 대한 삼항 if-else를 모방하는 방법은 무엇입니까? YesNo
Kevin Cruijssen

당신은 &나를 놀라게하는 것이 필요하지 않으며 ?, 마지막에 있어야 한다는 것을 알고 있기 때문에 문자열이나 더 나은 문자로 일치시킬 수 있습니다 .
Neil

@ 닐 그래서 이렇게 ? 어느 것도 32 바이트입니다.
Kevin Cruijssen

1
좀 빠지는; 여전히 정규 표현식에서 일치하지만 대신 문자열이나 문자가 허용됩니다.
Neil

2

IBM / Lotus Notes 공식, 79 바이트

@If(@Ends(i;"?");@If(@Contains(i;",");@Left(@RightBack(i;",");"?");"No");"Yes")

공식에 대한 TIO가 없으므로 ...

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


2

파이썬 3 , 98 87 바이트

ElPedro 덕분에 -9 바이트

x=input();o="Yes"
if"?"==x[-1]:o=x[(x.rfind(",")+1):-1]if x.count(",")else"No"
print(o)

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

이것은 다른 답변에 의해 확실하게 구타되었지만 Python에서 골프를 조금 더 시도하고 있습니다. 조언 부탁드립니다!


1
인쇄물을 사용하여 할당을 피한 다음 람다는 이제 하나의 명령문이기 때문에 람다를 사용하고 if대신 인라인 명령문을 목록 색인화로 단축 in한 다음 사용할 조건을 단축 한 다음 너무 가깝기 때문에 모두 버릴 수 있습니다 . 기존 답변
Jo King

원래의 접근 방식을 바꾸지 않고 두 번의 골프로 87로 줄이십시오 . 온라인으로 사용해보십시오!
ElPedro

당신은 대체 할 수 if x.count(",")와 함께 if~x.find(",")한 바이트를 저장. 문자열을 찾을 str.find-1없는지 평가합니다 . 단항 연산자로이를 보완 0하면 하위 문자열이없는 경우에만 결과가 발생합니다. 또는 if","in x 4 바이트 이하로 대체 할 수 있습니다 .
Jitse







1

파이썬 2 , 66 63 62 바이트

lambda i:("Yes",("No",i[i.rfind(",")+1:-1])[","in i])["?"in i]

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

-3 업데이트 된 설명을 확인한 후 "입력에 하나만 있고 항상 마지막 문자가됩니다."

@ChasBrown 덕분에 -1

기본적으로 내 Lotus Notes 응답 포트입니다 . 흥미롭게도 위에서 언급 한 설명은보다 @Ends4 바이트 저렴 하기 때문에 Notes의 답변에 도움이되지 않습니다 @Contains. @In기능 만 있다면 ...


2
을 사용하여 1 바이트저장하십시오rfind .
Chas Brown


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