Odpowiadający na zapytanie

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

    Alain Colmerauer zaprojektował logiczny język programowania Prolog. Jego celem było stworzenie języka programowania, który byłby tak inteligentny jak dwuletnie dziecko. Aby udowodnić, że osiągnął swój cel, przedstawił program Prolog, który odpowiada „Nie” w sposób zaradny na wszystkie zapytania.
    Zapytaj mnie o cokolwiek!
    ? -

  • (Oczywiście, że nie.) Twoim zadaniem jest stworzenie programu, który będzie bardziej inteligentny niż program Alaina Colmerauera. To nie musi być w Prologu.

Specyfika

  • Jeśli wprowadzanie kończy się na ?i ma co najmniej jeden ,, zwracaj tekst od ostatniego ,do ostatniego ?.

  • W przeciwnym razie, jeśli dane wejściowe zakończą się ?zwrotem No.

  • W przeciwnym razie wróć Yes.

Zasady

  • Brak standardowych luk.
  • Wejścia / wyjścia będą pobierane za pomocą naszych standardowych metod wejścia / wyjścia.
  • Twój program musi przyjąć co najmniej 1 zapytanie.
  • Powinieneś wysłać przetworzone zapytanie.
  • W Yesi No„s jest rozróżniana w przykładach.
  • Masz gwarancję, że jeśli wejście zawiera a ?, wejście będzie miało tylko jeden ?i zawsze będzie ostatnim znakiem.
  • Wpis zawsze będzie frazą / zdaniem. To wyrażenie / zdanie nigdy nie będzie zawierać tylko znaki ,i ?, na przykład ,, ?i ,?nie są ważne wejścia. (Mimo że zgłoszenia i tak mogą to zaimplementować, ponieważ wyrażenie / zdanie jest w tych przypadkach pustym ciągiem).
  • Ponadto dane wejściowe nigdy się nie kończą ,?.
  • Jeśli spacja występuje bezpośrednio po ostatniej ,lub bezpośrednio przed nią ?, należy je uwzględnić w danych wyjściowych.

Przykłady

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"

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź w bajtach.


źródło
6
Czy mamy gwarancję, że jeśli wejście zawiera a ?, to będzie tylko jeden i zawsze będzie to ostatni znak?
Shaggy
3
Dodaj przypadek testowy zawierający wiele przecinków.
manatwork
8
Wcześniejsze przyjęcie odpowiedzi może zniechęcić innych użytkowników do publikowania nowych odpowiedzi, ponieważ wygląda na to, że wyzwanie zostało wykonane.
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.Dlatego te przypadki testowe są niepotrzebne.
8
Czy ends with ,?jest poprawny wpis?
GammaFunction

Odpowiedzi:

6

05AB1E , 20 19 bajtów

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

-1 bajt dzięki @Grimy .

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

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

Zobacz moją wskazówkę 05AB1E (sekcja Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego ”€–”jest "Not"i ”…Üjest "Yes".

Kevin Cruijssen
źródło
1
20
Grimmy,
@Grimy Oh, mądre myślenie. Dzięki! :)
Kevin Cruijssen
8

Python 3 , 62 bajty

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

Wypróbuj online!

Wyrażenie ~(','in s)*('?'in s)ocenia na 0(tj. 'Yes'), Jeśli łańcuch nie zawiera a '?', w przeciwnym razie -1(tj 'No') jeśli łańcuch nie zawiera a ',', i w przeciwnym razie -2(tj. Ostatnia sekcja łańcucha oddzielona przecinkami z wyłączeniem ostatniego znaku).

Jitse
źródło
5

JavaScript (ES6),  53  52 bajty

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

Wypróbuj online!

Skomentował

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'
Arnauld
źródło
Welp, szukając rozwiązania JS, uzyskał coś podwójnego tego rozmiaru.
Przypadkowy facet
4

Węgiel , 23 22 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 1 bajt dzięki @KevinCruijssen. Wyjaśnienie:

¿№θ?

Czy ciąg zawiera jakieś ?s?

¿№θ,

Czy zawiera jakieś ,s?

⊟⪪θ,

Podziel ciąg na ,s i weź ostatni.

⁻...?

Usuń ?i wyślij wynik.

No

Jeśli nie ma ,s, to wypisuje No.

Yes

Jeśli nie ma ?s, to wypisuje Yes.

Neil
źródło
-1 zmienia się Print(Join(Split(Pop(Split(q, ",")), "?"), w)naPrint(Minus(Pop(Split(q, ",")), "?");
Kevin Cruijssen
@KevinCruijssen Dzięki, zapomniałem o Minustym. Poza tym czułem się zadowolony z uratowania dwóch separatorów.
Neil
3

Pyth , 25 bajtów

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

Wypróbuj online!

?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)
ar4093
źródło
3

Zsh , 51 bajtów

<<<${${${1#*\?}:+Yes}:-${${${${1##*,}%$1}:-No}%\?}}

Wypróbuj online!

Bajt można zapisać, jeśli ends with,?i podobne są nieprawidłowe.

Funkcja Gamma
źródło
3

Retina , 32 28 bajtów

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

-4 bajty z poradami od @Neil .

Wypróbuj online.

Wyjaśnienie:

   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)
Kevin Cruijssen
źródło
Czy wiesz, że Kscena Retina 1 ma wbudowany warunek? Ja nie. Prawdopodobnie może zaoszczędzić kilka bajtów.
Neil
@ Neil Nie jestem pewien, jak połączyć Ki warunkowo, &aby być całkowicie szczerym. Wiem, jak używać Kz wyrażeniem regularnym, aby dopasować w ten sposób , ale jak połączyć to z warunkowym naśladowaniem trójki, jeśli-jeszcze dla Yes/ No?
Kevin Cruijssen
Nie potrzebujesz &, co mnie zaskoczyło, i możesz po prostu dopasować ciąg, a najlepiej postać, ponieważ wiesz, że każdy ?musi być na końcu.
Neil
@Neil A więc jak to? Co również najwyraźniej ma 32 bajty.
Kevin Cruijssen
1
Nie do końca; nadal dopasowujesz wyrażenie regularne, ale zamiast tego możesz użyć łańcucha lub znaku.
Neil
2

Formuła IBM / Lotus Notes, 79 bajtów

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

Brak TIO dla Formula, więc ...

enter image description here

enter image description here

enter image description here

ElPedro
źródło
2

Python 3 , 98 87 bajtów

-9 bajtów dzięki ElPedro

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

Wypróbuj online!

Zostało to mocno pokonane przez inne odpowiedzi, ale próbuję gry w golfa w Pythonie jeszcze trochę. Rada jest mile widziana!

podłącz ładowarkę
źródło
1
Można użyć jednego drukiem, aby uniknąć przypisania, a następnie użyć lambda ponieważ jest to teraz tylko jeden rachunek, a następnie skrócić inline ifsprawozdań do listy indeksowania zamiast a następnie skrócić warunki do wykorzystania in, a następnie wyrzucić to wszystko dlatego, że jest zbyt blisko istniejąca odpowiedź
Jo King
Kilka golfów bez zmiany oryginalnego podejścia, aby obniżyć do 87 Wypróbuj online!
ElPedro
Można wymienić if x.count(",")z if~x.find(","), oszczędzając jeden bajt. str.findsprawdza, -1czy ciąg nie zostanie znaleziony. Jeśli uzupełnisz to jednoargumentowym operatorem, spowoduje 0to tylko wtedy, gdy podciąg nie będzie obecny. Alternatywnie możesz zastąpić go o if","in x 4 bajty mniej.
Jitse,
1

PHP , 58 bajtów

<?=$argn[-1]=='?'?substr(strrchr($argn,','),1,-1)?:No:Yes;

Wypróbuj online!

Noc 2
źródło
1

C # (interaktywny kompilator Visual C #) , 72 bajty

x=>x.Last()!=63?"Yes":x.Contains(',')?x.Split(',').Last().Trim('?'):"No"

Zaoszczędzono 2 bajty dzięki @someone

Wypróbuj online!

Wcielenie ignorancji
źródło
SkipLast(1) -> Trim('?')dla -??? bajty, o ile widzę (wszystkie moje próby obliczenia różnicy skutkują różnymi liczbami)
mój zaimek to monicareinstate
1

Python 2 , 66 63 62 bajty

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

Wypróbuj online!

-3 po zauważeniu zaktualizowanego wyjaśnienia „wejście będzie miało tylko jedno? I zawsze będzie ostatnim znakiem”.

-1 dzięki dzięki @ChasBrown

Zasadniczo port mojej odpowiedzi Lotus Notes . Co ciekawe, powyższe wyjaśnienie nie pomaga w odpowiedzi na uwagi, ponieważ @Endsjest o 4 bajty tańsze niż @Contains. Gdyby tylko istniała @Infunkcja ...

ElPedro
źródło
2
Zaoszczędzić 1 bajt za pomocą rfind.
Chas Brown,
1

C ++ (gcc) , 120 118 bajtów

Makro funkcyjne:

#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";})

Wypróbuj online!

-2 bajty dzięki @ceilingcat

Nishioka
źródło