Người trả lời câu hỏi


12
  • Bản gốc: https://james-iry.blogspot.co.at/2009/05/brief-incomplete-and-elyly-wrong.html

    Alain Colmerauer đã thiết kế ngôn ngữ lập trình logic Prolog. Mục tiêu của anh là tạo ra một ngôn ngữ lập trình thông minh như một đứa trẻ hai tuổi. Để chứng minh rằng mình đã thành công trong mục tiêu của mình, anh ấy đã trình bày một chương trình Prolog trả lời "Không" một cách hiệu quả cho tất cả các câu hỏi.
    Hỏi tôi bất cứ điều gì!
    ? -

  • (Tất nhiên là anh ấy đã không làm.) Nhiệm vụ của bạn là tạo ra một chương trình thông minh hơn chương trình của Alain Colmerauer. Điều này không phải là trong Prolog.

Cụ thể

  • Nếu đầu vào kết thúc bằng ?và có ít nhất một ,, hãy trả lại văn bản từ cuối cùng ,cho đến trước cuối cùng ?.

  • Khác, nếu đầu vào kết thúc với ?trở lại No.

  • Khác, trở về Yes.

Quy tắc

  • Không có sơ hở tiêu chuẩn.
  • Đầu vào / đầu ra sẽ được thực hiện thông qua các phương thức đầu vào / đầu ra tiêu chuẩn của chúng tôi.
  • Chương trình của bạn phải mất ít nhất 1 yêu cầu.
  • Bạn nên xuất yêu cầu xử lý.
  • Các YesNo'là trường hợp nhạy cảm trong các ví dụ.
  • Bạn được đảm bảo rằng nếu đầu vào bao gồm a ?, đầu vào sẽ chỉ có một ?và nó sẽ luôn là ký tự cuối cùng.
  • Đầu vào sẽ luôn là một cụm từ / câu. Đây cụm từ / câu sẽ không bao giờ chỉ chứa các ký tự ,?, ví dụ ,, ?,?không phải là đầu vào hợp lệ. (Mặc dù các bài nộp có thể thực hiện nó bằng mọi cách, vì cụm từ / câu là một chuỗi trống trong những trường hợp này.)
  • Ngoài ra, đầu vào sẽ không bao giờ kết thúc với ,?.
  • Nếu có khoảng trắng ngay sau lần cuối ,hoặc ngay trước dấu ?, chúng sẽ được đưa vào đầu ra.

Ví dụ

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"

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.


6
Chúng tôi có đảm bảo rằng nếu đầu vào bao gồm a ?, sẽ chỉ có một và nó sẽ luôn là ký tự cuối cùng?
Xù xì

3
Vui lòng thêm một trường hợp thử nghiệm có chứa nhiều dấu phẩy.
manatwork

8
Chấp nhận câu trả lời sớm có thể không khuyến khích người dùng khác đăng câu trả lời mới, vì có vẻ như thử thách đã được thực hiện.
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.Do đó, các trường hợp thử nghiệm là không hoàn hảo.

8
ends with ,?một đầu vào hợp lệ?
GammaFactor

Câu trả lời:


6

05AB1E , 20 19 byte

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

-1 byte nhờ @Grimy .

Hãy 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:

'?å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)

Xem mẹo 05AB1E này của tôi (phần Làm thế nào để sử dụng từ điển? ) Để hiểu tại sao ”€–”"Not"”…Ü"Yes".



@Grimy ơi, suy nghĩ thông minh. Cảm ơn! :)
Kevin Cruijssen

8

Python 3 , 62 byte

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

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

Biểu thức ước lượng ~(','in s)*('?'in s)thành 0(tức là 'Yes') nếu chuỗi không chứa a '?', khác -1(tức là 'No') nếu chuỗi không chứa a ','và ngược lại -2(tức là phần được phân tách bằng dấu phẩy của chuỗi không bao gồm ký tự cuối cùng).


5

JavaScript (ES6),  53  52 byte

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

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

Đã bình luận

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'

Welp, đang tìm kiếm một giải pháp JS, kết thúc với thứ gì đó gấp đôi kích thước này.
chàng ngẫu nhiên

4

Than , 23 22 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉnh sửa: Đã lưu 1 byte nhờ @KevinCruijssen. Giải trình:

¿№θ?

Chuỗi có chứa bất kỳ ?s?

¿№θ,

Nó có chứa bất kỳ ,s?

⊟⪪θ,

Tách chuỗi trên ,s và lấy cuối cùng.

⁻...?

Xóa ?và xuất kết quả.

No

Nếu không có ,s thì đầu ra No.

Yes

Nếu không có ?s thì đầu ra Yes.


-1 đổi Print(Join(Split(Pop(Split(q, ",")), "?"), w)thànhPrint(Minus(Pop(Split(q, ",")), "?");
Kevin Cruijssen

@KevinCruijssen Cảm ơn, tôi đã quên điều Minusđó. Ngoài ra, tôi cảm thấy hài lòng với bản thân vì đã cứu hai dải phân cách.
Neil


3

Bình thường , 25 byte

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

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

?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

Võng mạc , 32 28 byte

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

-4 byte với các mẹo từ @Neil .

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

Giải trình:

   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)

Bạn có biết rằng Ksân khấu của Retina 1 có điều kiện tích hợp không? Tôi đã không. Nó có thể giúp bạn tiết kiệm một vài byte.
Neil

@Neil Tôi không chắc chắn làm thế nào để xâu chuỗi Kvà có điều kiện &để hoàn toàn trung thực. Tôi biết cách sử dụng Kvới regex để khớp như thế này , nhưng làm cách nào để kết hợp nó với điều kiện để bắt chước một ternary if-other cho Yes/ No?
Kevin Cruijssen

Bạn không cần &, đó là điều làm tôi ngạc nhiên, và bạn chỉ có thể ghép trên một chuỗi, hoặc tốt hơn là một ký tự, vì bạn biết rằng bất kỳ ?phải ở cuối.
Neil

@Neil Vậy, như thế này? Đó cũng là 32 byte rõ ràng.
Kevin Cruijssen

1
Không hẳn; bạn vẫn khớp với biểu thức chính quy, nhưng thay vào đó bạn cho phép một chuỗi hoặc ký tự.
Neil

2

Công thức ghi chú IBM / Lotus, 79 byte

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

Không có TIO cho Công thức nên ...

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


2

Python 3 , 98 87 byte

-9 byte nhờ ElPedro

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

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

Điều này đã bị đánh bại một cách chắc chắn bởi các câu trả lời khác, nhưng tôi đang thử chơi golf trong Python thêm một chút. Lời khuyên được đánh giá cao!


1
Bạn có thể sử dụng một trong in để tránh việc chuyển nhượng, sau đó sử dụng một lambda vì nó bây giờ chỉ là một tuyên bố, sau đó rút ngắn inline ifbáo cáo đến một chỉ mục danh sách để thay thế và sau đó rút ngắn các điều kiện để sử dụng in, sau đó ném nó tất cả ra vì nó quá gần với một câu trả lời hiện có
Jo King

Một vài golf mà không thay đổi cách tiếp cận ban đầu của bạn để giảm xuống còn 87 Hãy thử trực tuyến!
ElPedro

Bạn có thể thay thế if x.count(",")bằng if~x.find(","), lưu một byte. str.findước tính -1nếu không tìm thấy chuỗi. Nếu bạn bổ sung điều này với toán tử đơn nguyên, kết quả là 0nếu và chỉ khi chuỗi con không xuất hiện. Ngoài ra, bạn có thể thay thế nó với if","in x ít hơn 4 byte.
Jitse







1

Python 2 , 66 63 62 byte

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

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

-3 sau khi phát hiện thông tin làm rõ được cập nhật "đầu vào sẽ chỉ có một? Và nó sẽ luôn là ký tự cuối cùng."

-1 cảm ơn @ChasBrown

Về cơ bản là một cổng của câu trả lời Lotus Notes của tôi . Thật kỳ lạ, sự làm rõ được ghi chú ở trên không giúp ghi chú trả lời vì @Endsrẻ hơn 4 byte so với @Contains. Bây giờ nếu chỉ có một @Inchức năng ...


2
Lưu 1 byte bằng cách sử dụng rfind.
Chas Brown


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.