Penjawab pertanyaan

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

    Alain Colmerauer merancang bahasa pemrograman logika Prolog. Tujuannya adalah menciptakan bahasa pemrograman yang sama cerdasnya dengan anak berusia dua tahun. Untuk membuktikan bahwa ia telah berhasil dalam tujuannya, ia mempresentasikan program Prolog yang menjawab "Tidak" secara akal untuk semua pertanyaan.
    Tanyakan apapun padaku!
    ? -

  • (Tentu saja tidak.) Tugas Anda adalah membuat program yang lebih cerdas daripada program Alain Colmerauer. Ini tidak harus dalam Prolog.

Spesifik

  • Jika input diakhiri dengan ?dan memiliki paling tidak satu ,, kembalikan teks dari yang terakhir ,hingga yang terakhir ?.

  • Lain, jika input berakhir dengan ?kembali No.

  • Lain, kembali Yes.

Aturan

  • Tidak ada celah standar.
  • Input / output akan diambil melalui metode input / output standar kami.
  • Program Anda harus mengambil setidaknya 1 pertanyaan.
  • Anda harus menampilkan pertanyaan yang diproses.
  • The Yesdan No's case-sensitive dalam contoh.
  • Anda dijamin bahwa jika input menyertakan a ?, input hanya akan memiliki satu ?dan itu akan selalu menjadi karakter terakhir.
  • Masukan akan selalu berupa frase / kalimat. Ini frase / kalimat tidak hanya akan berisi karakter ,dan ?, misalnya ,, ?dan ,?tidak input yang valid. (Meskipun pengiriman tetap dapat menerapkannya, karena frasa / kalimat adalah string kosong dalam kasus ini.)
  • Selain itu, input tidak akan pernah berakhir ,?.
  • Jika ada spasi putih segera setelah yang terakhir ,atau segera sebelum ?, mereka harus dimasukkan dalam output.

Contohnya

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"

Mencetak gol

Ini adalah , jadi jawaban tersingkat dalam byte menang.


sumber
6
Apakah kami dijamin bahwa jika input menyertakan a ?, hanya akan ada satu dan akan selalu menjadi karakter terakhir?
Shaggy
3
Harap tambahkan kotak uji yang mengandung beberapa koma.
manatwork
8
Menerima jawaban lebih awal dapat membuat pengguna lain tidak memposting jawaban baru, karena sepertinya tantangan sudah selesai.
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.Oleh karena itu, uji kasus ini tidak perlu dilakukan.
8
Apakah ends with ,?input yang valid?
GammaFunction

Jawaban:

6

05AB1E , 20 19 byte

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

-1 byte terima kasih kepada @Grimy .

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

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

Lihat tip tambang 05AB1E ini (bagian Cara menggunakan kamus? ) Untuk memahami mengapa ”€–”ini "Not"dan ”…Üitu "Yes".

Kevin Cruijssen
sumber
1
20
Grimmy
@ Grimy Oh, pemikiran cerdas. Terima kasih! :)
Kevin Cruijssen
8

Python 3 , 62 byte

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

Cobalah online!

Ekspresi ~(','in s)*('?'in s)mengevaluasi ke 0(yaitu 'Yes') jika string tidak mengandung a '?', lain -1(yaitu 'No') jika string tidak mengandung a ',', dan sebaliknya -2(yaitu bagian yang dipisahkan koma dari string tidak termasuk karakter terakhir).

Jitse
sumber
5

JavaScript (ES6),  53  52 byte

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

Cobalah online!

Berkomentar

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
sumber
Welp, sedang mencari solusi JS, berakhir dengan sesuatu yang dua kali lipat dari ukuran ini.
Pria acak
4

Arang , 23 22 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 1 byte berkat @KevinCruijssen. Penjelasan:

¿№θ?

Apakah string berisi ?s?

¿№θ,

Apakah ini mengandung ,s?

⊟⪪θ,

Pisahkan string pada ,s dan ambil yang terakhir.

⁻...?

Hapus ?dan output hasilnya.

No

Jika tidak ada ,maka output No.

Yes

Jika tidak ada ?maka output Yes.

Neil
sumber
-1 berubah Print(Join(Split(Pop(Split(q, ",")), "?"), w)menjadiPrint(Minus(Pop(Split(q, ",")), "?");
Kevin Cruijssen
@KevinCruijssen Terima kasih, saya lupa Minusmelakukannya. Selain itu, saya merasa senang dengan diri saya karena menyelamatkan dua pemisah.
Neil
3

Pyth , 25 byte

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

Cobalah 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
sumber
3

Zsh , 51 byte

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

Cobalah online!

Satu byte dapat disimpan jika ends with,?dan yang serupa tidak valid.

Fungsi Gamma
sumber
3

Retina , 32 28 byte

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

-4 byte dengan tips dari @Neil .

Cobalah online.

Penjelasan:

   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
sumber
Tahukah Anda bahwa Ktahap Retina 1 memiliki kondisi bawaan? Saya tidak melakukannya. Mungkin bisa menghemat beberapa byte.
Neil
@ Neil Saya tidak yakin bagaimana untuk rantai Kdan bersyarat &untuk sepenuhnya jujur. Saya tahu cara menggunakan Kdengan regex untuk mencocokkan seperti ini , tetapi bagaimana cara menggabungkannya dengan persyaratan untuk meniru ternary jika-selain untuk Yes/ No?
Kevin Cruijssen
Anda tidak perlu &, itu yang mengejutkan saya, dan Anda bisa mencocokkannya dengan string, atau lebih baik lagi, karakter, karena Anda tahu bahwa ?pasti ada di akhir.
Neil
@Neil Jadi, seperti ini? Yang juga 32 byte rupanya.
Kevin Cruijssen
1
Tidak terlalu; Anda masih cocok di regex, tetapi Anda diizinkan menggunakan string atau karakter.
Neil
2

Formula IBM / Lotus Notes, 79 byte

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

Tidak ada TIO untuk Formula jadi ...

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

ElPedro
sumber
2

Python 3 , 98 87 byte

-9 byte terima kasih kepada ElPedro

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

Cobalah online!

Ini telah dipukuli oleh jawaban lain, tetapi saya mencoba sedikit bermain golf dengan Python. Nasihat dihargai!

hubungkan charger Anda
sumber
1
Anda dapat menggunakan salah satu print untuk menghindari tugas, kemudian menggunakan lambda karena itu sekarang hanya satu pernyataan, maka mempersingkat inline ifpernyataan untuk daftar pengindeksan bukan dan kemudian mempersingkat kondisi penggunaan in, kemudian melemparkan semuanya karena terlalu dekat dengan sebuah jawaban yang ada
Jo King
Beberapa golf tanpa mengubah pendekatan awal Anda untuk mendapatkannya menjadi 87 Cobalah online!
ElPedro
Anda dapat mengganti if x.count(",")dengan if~x.find(","), menghemat satu byte. str.findmengevaluasi -1apakah string tidak ditemukan. Jika Anda melengkapi ini dengan operator unary, itu menghasilkan 0jika dan hanya jika substring tidak ada. Atau, Anda dapat menggantinya dengan kurang if","in x dari 4 byte.
Jitse
1

PHP , 58 byte

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

Cobalah online!

Night2
sumber
1

Merah , 78 byte

func[s][r:"Yes"parse s[to","copy t to"?"(r: last split t",")| to"?"(r:"No")]r]

Cobalah online!

Galen Ivanov
sumber
1

Perl 6 , 40 byte

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

Cobalah online!

Jo King
sumber
1

Japt , 23 byte

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

Cobalah

Shaggy
sumber
1

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

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

Disimpan 2 byte berkat @someone

Cobalah online!

Perwujudan Ketidaktahuan
sumber
SkipLast(1) -> Trim('?')untuk - ??? byte sejauh yang saya lihat (semua upaya saya untuk menghitung hasil perbedaan dalam angka yang berbeda)
kata ganti saya adalah monicareinstate
1

Python 2 , 66 63 62 byte

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

Cobalah online!

-3 setelah melihat klarifikasi yang diperbarui "input hanya akan memiliki satu? Dan itu akan selalu menjadi karakter terakhir."

-1 dengan terima kasih kepada @ChasBrown

Pada dasarnya port jawaban Lotus Notes saya . Anehnya, klarifikasi yang disebutkan di atas tidak membantu jawaban Notes karena @Endslebih murah 4 byte daripada @Contains. Sekarang kalau saja ada @Infungsi ...

ElPedro
sumber
2
Hemat 1 byte dengan menggunakan rfind.
Chas Brown
1

C ++ (gcc) , 120 118 byte

Makro seperti fungsi:

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

Cobalah online!

-2 byte terima kasih kepada @ceilingcat

Nishioka
sumber