Risponditore di richiesta


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

    Alain Colmerauer ha progettato il linguaggio di programmazione logica Prolog. Il suo obiettivo era quello di creare un linguaggio di programmazione intelligente come un bambino di due anni. Al fine di dimostrare di essere riuscito a raggiungere il suo obiettivo, ha presentato un programma Prolog che risponde "No" con risorse a tutte le domande.
    Chiedimi qualunque cosa!
    ? -

  • (Certo che no.) Il tuo compito è creare un programma più intelligente del programma di Alain Colmerauer. Questo non deve essere in Prolog.

specifiche

  • Se l'input termina con ?e ne ha almeno uno ,, restituisce il testo dall'ultimo ,fino a prima dell'ultimo ?.

  • Altrimenti, se l'input termina con il ?ritorno No.

  • Altrimenti, ritorna Yes.

Regole

  • Nessuna scappatoia standard.
  • L'input / output sarà preso tramite i nostri metodi standard input / output.
  • Il tuo programma deve richiedere almeno 1 richiesta.
  • È necessario inviare la richiesta elaborata.
  • Gli Yese Nosono sensibili al maiuscolo / minuscolo negli esempi.
  • Si garantisce che se l'input include a ?, l'input ne avrà solo uno ?e sarà sempre l'ultimo carattere.
  • L'input sarà sempre una frase / frase. Questa frase / frase non potrà mai contenere solo i caratteri ,e ?, per esempio ,, ?e ,?non sono gli ingressi validi. (Sebbene gli invii possano implementarlo comunque, poiché la frase / frase è una stringa vuota in questi casi.)
  • Inoltre, l'ingresso non finirà mai con ,?.
  • Se c'è uno spazio bianco immediatamente dopo l'ultimo ,o immediatamente prima del ?, dovrebbero essere inclusi nell'output.

Esempi

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"

punteggio

Questo è , quindi vince la risposta più breve in byte.


6
Siamo sicuri che se l'input include a ?, ce ne sarà solo uno e sarà sempre l'ultimo carattere?
Shaggy,

3
Aggiungi un caso di test contenente più virgole.
arte

8
Accettare una risposta in anticipo può scoraggiare altri utenti dal pubblicare nuove risposte, perché sembra che la sfida sia stata fatta.
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.Pertanto, questi casi di test sono inutili.

8
È ends with ,?un input valido?
Funzione gamma

Risposte:


6

05AB1E , 20 19 byte

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

-1 byte grazie a @Grimy .

Provalo online o verifica tutti i casi di test .

Spiegazione:

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

Vedi questo mio suggerimento 05AB1E (sezione Come usare il dizionario? ) Per capire perché ”€–”è "Not"ed ”…Üè "Yes".



@Grimy Oh, pensiero intelligente. Grazie! :)
Kevin Cruijssen,

8

Python 3 , 62 byte

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

Provalo online!

L'espressione ~(','in s)*('?'in s)valuta 0(ovvero 'Yes') se la stringa non contiene a '?', altrimenti -1(ovvero 'No') se la stringa non contiene a ',', e altrimenti -2(ovvero l'ultima sezione della stringa separata da virgola escluso l'ultimo carattere).


5

JavaScript (ES6),  53  52 byte

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

Provalo online!

Commentate

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, stava cercando una soluzione JS, alla fine ha ottenuto qualcosa di doppio di queste dimensioni.
Il ragazzo a caso il

4

Carbone , 23 22 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Modifica: salvato 1 byte grazie a @KevinCruijssen. Spiegazione:

¿№θ?

La stringa contiene qualche ?s?

¿№θ,

Contiene qualche ,s?

⊟⪪θ,

Dividi la stringa su ,s e prendi l'ultimo.

⁻...?

Elimina il ?e genera il risultato.

No

Se non ci sono messaggi ,, quindi emettere No.

Yes

Se non ci sono messaggi ?, quindi emettere Yes.


-1 passando Print(Join(Split(Pop(Split(q, ",")), "?"), w)aPrint(Minus(Pop(Split(q, ",")), "?");
Kevin Cruijssen,

@KevinCruijssen Grazie, mi ero dimenticato di averlo Minusfatto. Inoltre, mi sentivo soddisfatto di me stesso per aver salvato due separatori.
Neil,


3

Pyth , 25 byte

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

Provalo 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)



3

Retina , 32 28 byte

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

-4 byte con suggerimenti da @Neil .

Provalo online.

Spiegazione:

   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)

Sapevi che il Kpalcoscenico di Retina 1 ha un condizionale integrato? Non l'ho fatto Probabilmente potrebbe farti risparmiare qualche byte.
Neil,

@Neil Non sono sicuro di come incatenare Ke condizionale &per essere completamente onesto. So come usare Kun regex per abbinare in questo modo , ma come posso combinarlo con il condizionale per imitare un if-else ternario per Yes/ No?
Kevin Cruijssen,

Non hai bisogno &, il che è ciò che mi ha sorpreso, e puoi semplicemente abbinare una stringa, o meglio ancora, un personaggio, dal momento che sai che ?alla fine ci deve essere qualcuno .
Neil,

@Neil Quindi, in questo modo? Che a quanto pare anche 32 byte.
Kevin Cruijssen,

1
Non proprio; stai ancora abbinando una regex, ma ti è invece permesso una stringa o un carattere.
Neil,

2

Formula IBM / Lotus Notes, 79 byte

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

Nessun TIO per Formula quindi ...

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


2

Python 3 , 98 87 byte

-9 byte grazie a ElPedro

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

Provalo online!

Questo è stato ampiamente battuto da altre risposte, ma sto provando un po 'di più a giocare a golf in Python. Il consiglio è apprezzato!


1
È possibile utilizzare una stampa per evitare l'assegnazione, quindi utilizzare un lambda poiché ora è solo un'istruzione, quindi accorciare le ifistruzioni in linea in un indice di indicizzazione e quindi accorciare le condizioni da utilizzare in, quindi buttare via tutto perché è troppo vicino a un risposta esistente
Jo King,

Un paio di golf senza cambiare il tuo approccio originale per arrivare a 87 Provalo online!
ElPedro,

È possibile sostituire if x.count(",")con if~x.find(","), salvando un byte. str.findvaluta -1se la stringa non è stata trovata. Se si completa questo con l'operatore unario, si ottiene 0se e solo se la sottostringa non è presente. In alternativa, è possibile sostituirlo con if","in x meno 4 byte.
Jitse,







1

Python 2 , 66 63 62 byte

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

Provalo online!

-3 dopo aver individuato il chiarimento aggiornato "l'input avrà solo uno? E sarà sempre l'ultimo carattere".

-1 grazie a @ChasBrown

Fondamentalmente una porta della mia risposta di Lotus Notes . Curiosamente, il chiarimento sopra menzionato non aiuta la risposta di Notes perché @Endscosta 4 byte in meno di @Contains. Ora se solo ci fosse una @Infunzione ...


2
Salvare 1 byte utilizzando rfind.
Chas Brown,


1

C ++ (gcc) , 120 118 byte

Macro funzionale:

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

Provalo online!

-2 byte grazie a @ceilingcat

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.