Anfragebeantworter

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

    Alain Colmerauer entwarf die logische Programmiersprache Prolog. Sein Ziel war es, eine Programmiersprache zu schaffen, die so intelligent ist wie ein zweijähriges Kind. Um zu beweisen, dass er sein Ziel erreicht hatte, präsentierte er ein Prolog-Programm, das alle Anfragen mit "Nein" beantwortet.
    Frag mich was!
    ? -

  • (Natürlich hat er das nicht getan.) Ihre Aufgabe ist es, ein Programm zu erstellen, das intelligenter ist als das Programm von Alain Colmerauer. Dies muss nicht in Prolog sein.

Besonderheiten

  • Wenn die Eingabe mit ?mindestens einem endet und diesen enthält ,, geben Sie den Text vom letzten ,bis zum letzten zurück ?.

  • Andernfalls, wenn die Eingabe mit ?return endet No.

  • Sonst kehre zurück Yes.

Regeln

  • Keine Standardlücken.
  • Die Eingabe / Ausgabe erfolgt über unsere Standardeingabe- / Ausgabemethoden.
  • Ihr Programm muss mindestens 1 Anfrage annehmen.
  • Sie sollten die bearbeitete Anfrage ausgeben.
  • Die Yesund No‚s case-sensitiv sind in den Beispielen.
  • Wenn die Eingabe a enthält ?, wird garantiert, dass die Eingabe nur eine enthält ?und immer das letzte Zeichen ist.
  • Die Eingabe wird immer eine Phrase / ein Satz sein. Dieser Satz / Satz enthält nie nur die Zeichen ,und ?, zum Beispiel ,, ?und ,?sind nicht gültig Eingänge. (Obwohl Submissions es trotzdem implementieren könnten, da die Phrase / der Satz in diesen Fällen eine leere Zeichenfolge ist.)
  • Außerdem wird die Eingabe niemals mit enden ,?.
  • Wenn unmittelbar nach dem letzten ,oder unmittelbar vor dem Leerzeichen Leerzeichen stehen ?, sollten diese in die Ausgabe aufgenommen werden.

Beispiele

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"

Wertung

Dies ist , also gewinnt die kürzeste Antwort in Bytes.


quelle
6
Ist uns garantiert, dass wenn die Eingabe ein enthält ?, es nur eines gibt und es immer das letzte Zeichen ist?
Shaggy
3
Bitte fügen Sie einen Testfall mit mehreren Kommas hinzu.
Manatwork
8
Das frühzeitige Akzeptieren einer Antwort kann andere Benutzer davon abhalten, neue Antworten zu veröffentlichen, da es so aussieht, als wäre die Herausforderung erledigt.
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.Daher sind diese Testfälle nicht erforderlich.
8
Ist ends with ,?eine gültige Eingabe?
GammaFunction

Antworten:

6

05AB1E , 20 19 Bytes

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

-1 Byte dank @Grimy .

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

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

Sehen Sie diese 05AB1E Spitze von mir (Abschnitt Wie das Wörterbuch benutzen? ) Zu verstehen , warum ”€–”ist "Not"und ”…Üist "Yes".

Kevin Cruijssen
quelle
1
20
Grimmy
@Grimy Oh, kluges Denken. Vielen Dank! :)
Kevin Cruijssen
8

Python 3 , 62 Bytes

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

Probieren Sie es online aus!

Der Ausdruck ~(','in s)*('?'in s)ausgewertet 0(dh 'Yes') , wenn die Zeichenfolge enthält keine '?', sonst -1(dh 'No') , wenn die Zeichenfolge eine nicht enthält ',', und ansonsten -2(dh der letzte kommagetrennten Abschnitt der Zeichenfolge das letzte Zeichen ausschließlich).

Jitse
quelle
5

JavaScript (ES6),  53  52 Byte

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

Probieren Sie es online aus!

Kommentiert

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
quelle
Welp, der nach einer JS-Lösung suchte, hatte etwas doppelt so großes.
Der zufällige Typ
4

Holzkohle , 23 22 Bytes

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

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Bearbeiten: 1 Byte dank @KevinCruijssen gespeichert. Erläuterung:

¿№θ?

Enthält die Zeichenfolge ?s?

¿№θ,

Enthält es irgendwelche ,s?

⊟⪪θ,

Teilen Sie die Zeichenfolge auf ,s und nehmen Sie die letzte.

⁻...?

Löschen Sie das ?und geben Sie das Ergebnis aus.

No

Wenn keine ,s vorhanden sind, wird ausgegeben No.

Yes

Wenn keine ?s vorhanden sind, wird ausgegeben Yes.

Neil
quelle
-1 wechselt Print(Join(Split(Pop(Split(q, ",")), "?"), w)zuPrint(Minus(Pop(Split(q, ",")), "?");
Kevin Cruijssen
@ KevinCruijssen Danke, ich hatte vergessen, dass das Minusgetan hat. Außerdem war ich mit mir zufrieden, zwei Separatoren gerettet zu haben.
Neil
3

Pyth , 25 Bytes

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

Probieren Sie es online aus!

?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
quelle
3

Zsh , 51 Bytes

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

Probieren Sie es online aus!

Ein Byte kann gespeichert werden, wenn ends with,?und ähnliche ungültig sind.

GammaFunktion
quelle
3

Netzhaut , 32 28 Bytes

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

-4 Bytes mit Tipps von @Neil .

Probieren Sie es online aus.

Erläuterung:

   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
quelle
Wussten Sie, dass die KBühne von Retina 1 eine eingebaute Bedingung hat? Ich habe nicht. Es könnte Ihnen wahrscheinlich ein paar Bytes ersparen.
Neil
@Neil Ich bin nicht sicher, wie man das kettet Kund bedingt &, um ganz ehrlich zu sein. Ich weiß, wie man Keinen Regex verwendet, um so übereinzustimmen , aber wie kombiniere ich ihn mit der Bedingung, um ein ternäres if-else für das Yes/ nachzuahmen No?
Kevin Cruijssen
Du brauchst nicht &, was mich überrascht hat, und du kannst einfach an einer Schnur oder besser noch an einem Charakter übereinstimmen, da du weißt, dass jeder ?am Ende sein muss.
Neil
@Neil Also, so? Welches ist auch 32 Bytes anscheinend.
Kevin Cruijssen
1
Nicht ganz; Sie stimmen immer noch mit einem regulären Ausdruck überein, aber Sie dürfen stattdessen eine Zeichenfolge oder ein Zeichen verwenden.
Neil
2

IBM / Lotus Notes-Formel, 79 Byte

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

Kein TIO für die Formel, also ...

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

ElPedro
quelle
2

Python 3 , 98 87 Bytes

-9 Bytes dank ElPedro

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

Probieren Sie es online aus!

Dies wurde von anderen Antworten deutlich übertroffen, aber ich versuche ein bisschen mehr, in Python Golf zu spielen. Beratung wird geschätzt!

schließen Sie ihr Ladegerät an
quelle
1
Sie können einen Ausdruck verwenden, um die Zuweisung zu vermeiden, und dann ein Lambda verwenden, da es jetzt nur noch eine Anweisung ist. Dann können Sie die Inline- ifAnweisungen stattdessen auf eine Listenindizierung verkürzen und dann die zu verwendenden Bedingungen verkürzen und dann inalles wegwerfen, weil es zu nahe an einem liegt bestehende Antwort
Jo King
Ein paar Golfplätze, ohne Ihren ursprünglichen Ansatz zu ändern, um ihn auf 87 zu bringen. Probieren Sie es online aus!
ElPedro
Sie können ersetzen if x.count(",")mit if~x.find(","), speichern ein Byte. str.findwird ausgewertet, -1wenn die Zeichenfolge nicht gefunden wird. Wenn Sie dies mit dem unären Operator ergänzen, ergibt sich 0genau dann, wenn der Teilstring nicht vorhanden ist. Alternativ können Sie es if","in x durch 4 Bytes weniger ersetzen .
Jitse
1

C # (Visual C # Interactive Compiler) , 72 Byte

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

2 Bytes dank @someone gespeichert

Probieren Sie es online aus!

Verkörperung der Unwissenheit
quelle
SkipLast(1) -> Trim('?')zum -??? Bytes soweit ich sehe (alle meine Versuche, die Differenz zu berechnen, führen zu unterschiedlichen Zahlen)
mein Pronomen ist monicareinstate
1

Python 2 , 66 63 62 Bytes

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

Probieren Sie es online aus!

-3 nach dem Erkennen der aktualisierten Klarstellung "Die Eingabe hat nur eine? Und es wird immer das letzte Zeichen sein."

-1 mit Dank an @ChasBrown

Grundsätzlich eine Portierung meiner Lotus Notes Antwort . Seltsamerweise hilft die oben erwähnte Klarstellung den Notes nicht bei der Beantwortung, da sie @Ends4 Bytes billiger ist als @Contains. Wenn es nur eine @InFunktion gäbe ...

ElPedro
quelle
2
Speichern Sie 1 Byte mit rfind.
Chas Brown
1

C ++ (gcc) , 120 bis 118 Byte

Funktionsähnliches 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";})

Probieren Sie es online aus!

-2 Bytes dank @ceilingcat

Nishioka
quelle