Respondente do inquérito

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

    Alain Colmerauer projetou a linguagem de programação lógica Prolog. Seu objetivo era criar uma linguagem de programação tão inteligente quanto uma criança de dois anos de idade. Para provar que ele havia atingido seu objetivo, ele apresentou um programa Prolog que responde "Não" com recursos para todas as perguntas.
    Me pergunte qualquer coisa!
    ? -

  • (Claro que não.) Sua tarefa é criar um programa mais inteligente que o programa de Alain Colmerauer. Isso não precisa estar no Prolog.

Específicos

  • Se a entrada terminar com ?e tiver pelo menos um ,, retorne o texto do último ,até o anterior ?.

  • Senão, se a entrada terminar com ?retorno No.

  • Senão, volte Yes.

Regras

  • Sem brechas padrão.
  • A entrada / saída será realizada através de nossos métodos padrão de entrada / saída.
  • Seu programa precisa fazer pelo menos 1 consulta.
  • Você deve enviar a consulta processada.
  • Os Yese Nodiferenciam maiúsculas de minúsculas nos exemplos.
  • Você está garantido que, se a entrada incluir a ?, a entrada terá apenas um ?e sempre será o último caractere.
  • A entrada sempre será uma frase / frase. Esta frase / sentença nunca contêm apenas os personagens ,e ?, por exemplo ,, ?e ,?não são entradas válidas. (Embora os envios possam implementá-lo de qualquer maneira, uma vez que a frase / frase é uma sequência vazia nesses casos.)
  • Além disso, a entrada nunca terminará com ,?.
  • Se houver espaço em branco imediatamente após o último ,ou imediatamente antes do ?, eles deverão ser incluídos na saída.

Exemplos

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"

Pontuação

Isso é , então a resposta mais curta em bytes vence.


fonte
6
Temos a garantia de que, se a entrada incluir a ?, haverá apenas uma e sempre será o último caractere?
Shaggy
3
Adicione um caso de teste contendo várias vírgulas.
manatwork
8
Aceitar uma resposta com antecedência pode desencorajar outros usuários a postar novas respostas, porque parece que o desafio está feito.
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.Portanto, esses casos de teste não são necessários.
8
É ends with ,?uma entrada válida?
GammaFunction 16/09/19

Respostas:

6

05AB1E , 20 19 bytes

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

-1 byte graças a @Grimy .

Experimente online ou verifique todos os casos de teste .

Explicação:

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

Veja esta dica 05AB1E (seção Como usar o dicionário? ) Para entender por que ”€–”é "Not"e ”…Üé "Yes".

Kevin Cruijssen
fonte
1
20
Grimmy
@ Grimy Oh, pensamento inteligente. Obrigado! :)
Kevin Cruijssen
8

Python 3 , 62 bytes

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

Experimente online!

A expressão é ~(','in s)*('?'in s)avaliada como 0(ie 'Yes') se a sequência não contém a '?', else -1(ie 'No') se a sequência não contiver a ',', e caso contrário -2(ou seja, a última seção separada por vírgula da sequência, excluindo o último caractere).

Jitse
fonte
5

JavaScript (ES6),  53  52 bytes

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

Experimente online!

Comentado

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
fonte
Welp, estava procurando uma solução JS, acabou com algo o dobro desse tamanho.
O cara aleatório
4

Carvão , 23 22 bytes

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

Experimente online! Link é a versão detalhada do código. Edit: Salvo 1 byte graças a @KevinCruijssen. Explicação:

¿№θ?

A string contém algum ?s?

¿№θ,

Ele contém algum ,s?

⊟⪪θ,

Divida a corda em se ,pegue a última.

⁻...?

Exclua o ?e produza o resultado.

No

Se não houver ,s, então a saída No.

Yes

Se não houver ?s, então a saída Yes.

Neil
fonte
-1 mudando Print(Join(Split(Pop(Split(q, ",")), "?"), w)paraPrint(Minus(Pop(Split(q, ",")), "?");
Kevin Cruijssen
@KevinCruijssen Obrigado, eu tinha esquecido que Minusfiz isso. Além disso, estava me sentindo satisfeito por salvar dois separadores.
Neil
3

Pitão , 25 bytes

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

Experimente 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
fonte
3

Zsh , 51 bytes

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

Experimente online!

Um byte pode ser salvo se ends with,?e similares forem inválidos.

GammaFunction
fonte
3

Retina , 32 28 bytes

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

-4 bytes com dicas de @Neil .

Experimente online.

Explicação:

   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
fonte
Você sabia que o Kpalco da Retina 1 tem um condicional embutido? Eu não fiz. Provavelmente, você poderá economizar alguns bytes.
Neil
@ Neil Eu não tenho certeza de como encadear o Ke condicional &para ser completamente honesto. Eu sei como usar Kcom um regex para corresponder assim , mas como combiná-lo com o condicional para imitar um if-else ternário para o Yes/ No?
Kevin Cruijssen
Você não precisa &, e foi isso que me surpreendeu, e você pode apenas combinar com uma string, ou melhor ainda, com um personagem, já que sabe que algum ?deve estar no final.
Neil
@ Neil Então, assim? Que também é de 32 bytes, aparentemente.
Kevin Cruijssen 16/09/19
1
Não é bem assim; você ainda está correspondendo a uma regex, mas tem permissão para uma sequência ou caractere.
Neil
2

Fórmula IBM / Lotus Notes, 79 bytes

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

Nenhum TIO para a Fórmula, então ...

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

ElPedro
fonte
2

Python 3 , 98 87 bytes

-9 bytes graças a ElPedro

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

Experimente online!

Isso foi solidamente vencido por outras respostas, mas estou tentando jogar golfe em Python um pouco mais. Conselho é apreciado!

conecte seu carregador
fonte
1
Você pode usar uma impressão para evitar a atribuição e, em seguida, usar um lambda, já que agora é apenas uma instrução, depois encurtar as ifinstruções embutidas para uma indexação de lista e, em seguida, reduzir as condições de uso in, depois jogar tudo fora porque está muito próximo de um resposta existente
Jo King
Alguns campos de golfe sem alterar sua abordagem original para chegar ao número 87 Experimente online!
ElPedro 17/09/19
Você pode substituir if x.count(",")por if~x.find(","), economizando um byte. str.findavalia -1se a sequência não foi encontrada. Se você complementar isso com o operador unário, isso resultará em 0se e somente se a substring não estiver presente. Como alternativa, você pode substituí-lo if","in x por 4 bytes a menos.
Jitse 18/09/19
1

PHP , 58 bytes

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

Experimente online!

Night2
fonte
1

Perl 6 , 40 bytes

{m/[\,(.*?)]*\?$/??$0.tail||"No"!!"Yes"}

Experimente online!

Brincadeira
fonte
1

Japonês , 23 bytes

ø'? ?Uq, hoinu¹Ìk'?:`Y

Tente

Shaggy
fonte
1

C # (compilador interativo do Visual C #) , 72 bytes

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

Guardado 2 bytes graças a @someone

Experimente online!

Modalidade de ignorância
fonte
SkipLast(1) -> Trim('?')para -??? bytes, tanto quanto eu vejo (todas as minhas tentativas de calcular o resultado da diferença em números diferentes)
meu pronome é monicareinstate
1

Python 2 , 66 63 62 bytes

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

Experimente online!

-3 depois de localizar o esclarecimento atualizado "a entrada terá apenas um? E sempre será o último caractere".

-1 com agradecimentos a @ChasBrown

Basicamente, uma porta da minha resposta do Lotus Notes . Curiosamente, o esclarecimento mencionado acima não ajuda o Notes a responder, porque @Endsé 4 bytes mais barato que @Contains. Agora, se ao menos houvesse uma @Infunção ...

ElPedro
fonte
2
Salve 1 byte usando rfind.
Chas Brown,
1

C ++ (gcc) , 120 118 bytes

Macro de função:

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

Experimente online!

-2 bytes graças a @ceilingcat

Nishioka
fonte