Sorgu cevaplayıcı


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

    Alain Colmerauer, mantık programlama dili Prolog'u tasarladı. Amacı, iki yaşında bir çocuk kadar zeki bir programlama dili yaratmaktı. Amacına ulaştığını ispatlamak için, tüm soruşturmalarda kaynak olarak "Hayır" cevabını veren bir Prolog programı sundu.
    Bana istediğini sor!
    ? -

  • (Tabii ki yapmadı.) Göreviniz Alain Colmerauer'ın programından daha akıllı bir program yaratmak. Bunun Prolog'da olması gerekmez.

Ayrıntılı Bilgiler

  • Girdi ile bitiyorsa ?ve en az bir tane varsa ,, metni sondan sonuncuya ,kadar döndürün ?.

  • Elde, eğer giriş ?dönüşle bitiyorsa No.

  • Yoksa geri dön Yes.

kurallar

  • Standart boşluklar yok.
  • Giriş / çıkış standart giriş / çıkış yöntemlerimizle alınacaktır.
  • Programınız en az 1 soruşturma almalıdır.
  • İşlenen sorguyu çıktılamalısınız.
  • YesVe Nositesindeki harf duyarlı örneklerde bulunmaktadır.
  • Girişte a varsa, girişte ?yalnızca bir tane ?olacağı ve her zaman son karakter olacağı garanti edilir .
  • Giriş her zaman bir cümle / cümle olacaktır. Bu tabir / cümle yalnızca karakter asla ,ve ?, örneğin ,, ?ve ,?geçerli girişler değildir. (Her ne kadar gönderiler yine de uygulasa da, bu durumda ifade / cümle boş bir dize olduğundan.)
  • Ayrıca, giriş hiçbir zaman bitmeyecektir ,?.
  • Sondan hemen sonra ,veya hemen öncesinde boşluk varsa ?, bunlar çıktıya dahil edilmelidir.

Örnekler

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"

puanlama

Bu , bayt en kısa cevap kazanır.


6
Girdi a'yı içeriyorsa ?, yalnızca bir tane olacağı ve her zaman son karakter olacağı garanti ediliyor mu?
Shaggy

3
Lütfen birden fazla virgül içeren bir test senaryosu ekleyin.
manatwork

8
Bir cevabı erken kabul etmek, diğer kullanıcıların yeni cevaplar göndermelerini engelleyebilir, çünkü bu meydan okuma yapılmış gibi görünüyor.
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.Bu nedenle bu test vakaları gereksizdir.

8
ends with ,?geçerli bir girdi?
GammaFunction

Yanıtlar:


6

05AB1E , 20 19 bayt

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

@Grimy sayesinde -1 bayt .

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın .

Açıklama:

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

Neden ”€–”olduğunu "Not"ve ”…Üolduğunu anlamak için bu 05AB1E ipucuma bakın ( sözlük nasıl kullanılır? )"Yes" .



@Grimy Oh, akıllı düşünme. Teşekkürler! :)
Kevin Cruijssen

8

Python 3 , 62 bayt

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

Çevrimiçi deneyin!

Sentezleme ~(','in s)*('?'in s)için değerlendirir 0(yani 'Yes'dize içermiyorsa) '?', başka bir -1(yani 'No'dize içermiyorsa) ',', ve aksi takdirde -2(yani, son karakteri hariç son dizge virgülle ayrılmış bölümü).


5

JavaScript (ES6),  53  52 bayt

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

Çevrimiçi deneyin!

Yorumlananlar

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, bir JS çözümü arıyordu, bu boyutta iki katına çıktı.
Rastgele adam

4

Kömür , 23 22 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Düzenleme: @KevinCruijssen sayesinde 1 bayt kaydedildi. Açıklama:

¿№θ?

Dize ?s içeriyor mu?

¿№θ,

Herhangi bir ,s içerir mi?

⊟⪪θ,

Dizeyi ,s üzerinde ayırın ve sonuncuyu alın.

⁻...?

Sonucu silin ?ve çıktıyı alın.

No

Eğer ,s yoksa çıktı alın No.

Yes

Eğer ?s yoksa çıktı alın Yes.


-1 değiştirme Print(Join(Split(Pop(Split(q, ",")), "?"), w)içinPrint(Minus(Pop(Split(q, ",")), "?");
Kevin Cruijssen

@KevinCruijssen Teşekkürler, bunu yapmayı unuttum Minus. Ayrıca, iki ayırıcıyı kurtardığım için kendimi memnun ediyordum.
Neil


3

Pyth , 25 bayt

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

Çevrimiçi deneyin!

?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

Retina , 32 28 bayt

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

@Neil ipuçları ile -4 bayt .

Çevrimiçi deneyin.

Açıklama:

   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'in Ksahnesinde yerleşik bir koşulun olduğunu biliyor muydunuz ? Ben yapmadım. Muhtemelen birkaç bayt kurtarabilir.
Neil

@Neil Kve &tamamen dürüst olmak için şartlı zincirleme emin değilim . BöyleK maç için bir regex ile nasıl kullanılacağını biliyorum , ama / için başka bir üçlü if-taklit koşullu ile nasıl birleştiririm ? YesNo
Kevin Cruijssen

İhtiyacınız yok &, bu beni şaşırtan şeydir ve sadece bir ipte veya daha iyisi bir karakterle eşleşebilirsiniz, çünkü herhangi ?birinin sonunda olması gerektiğini biliyorsunuz .
Neil

@Neil Peki, böyle mi? Görünüşe göre 32 bayt.
Kevin Cruijssen

1
Pek değil; hala normal ifadeyle eşleşiyorsunuz, ancak bunun yerine bir dizeye veya karaktere izin veriliyor.
Neil

2

IBM / Lotus Notes Formula, 79 bayt

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

Formula için TIO yok yani ...

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin


2

Python 3 , 98 87 bayt

ElPedro sayesinde -9 bayt

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

Çevrimiçi deneyin!

Bu diğer cevaplar tarafından sert bir şekilde dövüldü, ama Python'da golf oynamaya çalışıyorum. Tavsiye takdir!


1
Sen şimdi sadece bir ifadedir çünkü o zaman, ardından yerinde kısaltmak bir lambda kullanmak atamayı engellemek için bir baskı kullanabilirsiniz ifyerine liste indeksleme tablolarını ve sonra kullanım için koşulları kısaltmak in, o zaman çok yakın olduğu için hepsini dışarı atmak bir mevcut cevap
Jo King

Orijinal yaklaşımınızı değiştirmeden birkaç golf 87'ye düşürün .
ElPedro

Sen yerini alabilir if x.count(",")ile if~x.find(",")bir bayt tasarruf. str.findolarak değerlendirilen -1dize bulunmazsa. Bunu tekli işleçle tamamlarsanız, 0yalnızca alt dize yoksa ve bununla sonuçlanır . Alternatif olarak, if","in x 4 bayt için daha azıyla değiştirebilirsiniz .
Jitse







1

Python 2 , 66 63 62 bayt

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

Çevrimiçi deneyin!

-3 güncellenen açıklama tespit ettikten sonra "giriş sadece bir tane olacak? Ve her zaman son karakter olacak."

@ChasBrown sayesinde -1

Temelde Lotus Notes yanıtımın bir bağlantı noktası . İlginçtir, yukarıda belirtilen açıklama, Notes'un yanıtlamasına yardımcı olmaz çünkü @Ends4 bayt daha ucuzdur @Contains. Şimdi sadece bir @Infonksiyon olsaydı ...




1

C ++ (gcc) , 120 118 bayt

İşlev benzeri makro:

#include<string>
#define f(s)({int i{},j{};for(;s[i];)j=s[++i]-44?j:i;s[--i]-63?"Yes":j?std::string(s-~j,i+~j):"No";})

Çevrimiçi deneyin!

@Ceilingcat sayesinde -2 bayt

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.