Запит відповіді


12
  • Оригінал: https://james-iry.blogspot.co.at/2009/05/brief-incomplete-and-mostly-wrong.html

    Ален Колмерауер розробив мову логічного програмування Prolog. Його метою було створити мову програмування, така ж розумна, як і дворічна дитина. Щоб довести, що він досяг успіху в своїй меті, він представив програму Prolog, яка відповідально відповідає "Ні" на всі запити.
    Запитай мене щось!
    ? -

  • (Звичайно, він цього не зробив.) Ваше завдання - створити більш розумну програму, ніж програма Алена Колмерауера. Цього не повинно бути в Prolog.

Особливості

  • Якщо вхід закінчується ?і має щонайменше один ,, повертайте текст від останнього ,до до останнього ?.

  • Ще, якщо введення закінчується ?поверненням No.

  • Ще, повернись Yes.

Правила

  • Немає стандартних лазівки
  • Введення / вихід буде здійснено за допомогою наших стандартних методів введення / виводу.
  • Ваша програма повинна взяти щонайменше 1 запит.
  • Вам слід вивести оброблений запит.
  • В Yesі No«и чутливі до регістру в прикладах.
  • Вам гарантовано, що якщо вхід включає в себе a ?, вхід матиме лише один, ?і він завжди буде останнім символом.
  • Вхідним буде завжди фраза / речення. Ця фраза / Пропозиція ніколи не буде містити тільки символи ,і ?, наприклад ,, ?і ,?не є допустимими входами. (Хоча подання може це реалізувати в будь-якому випадку, оскільки фраза / речення є порожнім рядком у цих випадках.)
  • Крім того, введення ніколи не закінчиться ,?.
  • Якщо пробіли є безпосередньо після останнього ,або безпосередньо перед ?, вони повинні бути включені у висновок.

Приклади

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"

Оцінка балів

Це , тому найкоротша відповідь у байтах виграє.


6
Ми гарантуємо, що якщо вхід містить a ?, буде лише один, і він завжди буде останнім символом?
Кошлатий

3
Будь ласка, додайте тестовий випадок, що містить кілька коми.
манатура

8
Прийняття відповіді на ранніх стадіях може відштовхнути інших користувачів від публікації нових відповідей, оскільки це виглядає так, як проблема виконана.
Арнольд

3
You are guaranteed that if the input includes a ?, the input will only have one ? and it will always be the last character.Тому ці тестові випадки є непристойними.

8
Чи ends with ,?дійсний вхід?
GammaFunction

Відповіді:


6

05AB1E , 20 19 байт

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

-1 байт завдяки @Grimy .

Спробуйте в Інтернеті або перевірте всі тестові випадки .

Пояснення:

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

Ознайомтеся з цією підказкою 05AB1E (розділ Як користуватися словником? ), Щоб зрозуміти, чому ”€–”це так "Not"і ”…Üє "Yes".



@Grimy О, розумне мислення. Дякую! :)
Кевін Круїссен

8

Python 3 , 62 байти

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

Спробуйте в Інтернеті!

Вираз ~(','in s)*('?'in s)оцінюється на 0(тобто 'Yes'), якщо рядок не містить a '?', else -1(тобто 'No'), якщо рядок не містить a ',', інакше -2(тобто останній розділений комою рядок рядка, виключаючи останній символ).


5

JavaScript (ES6),  53  52 байти

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

Спробуйте в Інтернеті!

Прокоментував

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, шукаючи рішення JS, отримав щось вдвічі більше за цей розмір.
Випадковий хлопець

4

Вугілля деревне , 23 22 байт

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Редагувати: Збережено 1 байт завдяки @KevinCruijssen. Пояснення:

¿№θ?

Чи містить рядок який-небудь ?s?

¿№θ,

Чи містить він який-небудь ,s?

⊟⪪θ,

Розділіть рядок на ,s і візьміть останню.

⁻...?

Видаліть ?і виведіть результат.

No

Якщо немає ,s, тоді виведіть No.

Yes

Якщо немає ?s, тоді виведіть Yes.


-1 зміна Print(Join(Split(Pop(Split(q, ",")), "?"), w)наPrint(Minus(Pop(Split(q, ",")), "?");
Кевін Круїйсен

@KevinCruijssen Спасибі, я забув, що Minusце робив. Крім того, я відчував задоволення від себе, врятувавши два роздільники.
Ніл





3

Сітківка , 32 28 байт

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

-4 байти з порадами від @Neil .

Спробуйте в Інтернеті.

Пояснення:

   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)

Чи знали ви, що на Kсцені Retina 1 є вбудований умовний? Я цього не зробив. Можливо, це може заощадити кілька байт.
Ніл

@Neil Я не впевнений, як ланцюжок Kі умовно &бути повністю чесним. Я знаю, як використовувати Kз регулярним виразом так, щоб відповідати цьому , але як я поєдную його з умовним для імітації потрійного if-else для Yes/ No?
Кевін Кройсейсен

Вам не потрібно &, що мене здивувало, і ви можете просто відповідати на рядку або, ще краще, персонажу, оскільки ви знаєте, що будь-який ?повинен бути в кінці.
Ніл

@Neil Отже, як це? Який також 32 байти, мабуть.
Kevin Cruijssen

1
Не зовсім; ви все ще збігаєтеся з регулярним виразом, але вам натомість дозволено рядок або символ.
Ніл

2

Формула IBM / Lotus Notes, 79 байт

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

Немає TIO для Формули, так що ...

введіть тут опис зображення

введіть тут опис зображення

введіть тут опис зображення


2

Python 3 , 98 87 байт

-9 байт завдяки ElPedro

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

Спробуйте в Інтернеті!

Це твердо побили інші відповіді, але я намагаюся трохи більше спробувати гольф на Python. Поради високо оцінені!


1
Ви можете використовувати один шрифт , щоб уникнути призначення, а потім використовувати лямбда , так що тепер тільки один оператор, а потім скоротити інлайн ifзаяви в індексації списку замість , а потім скоротити умови для використання in, а потім викинути все це , тому що це занадто близько до існуюча відповідь
Jo King

Кілька гольфів, не змінюючи оригінальний підхід, щоб звести його до 87 Спробуйте в Інтернеті!
ElPedro

Ви можете замінити if x.count(",")з if~x.find(","), зберігши один байт. str.findоцінює, -1якщо рядок не знайдено. Якщо ви доповнюєте це оператором унарного оператора, це призводить до того, 0якщо і лише якщо підрядка відсутня. Крім того, ви можете замінити його if","in x на 4 байти менше.
Jitse






1

C # (Visual C # Interactive Compiler) , 72 байти

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

Збережено 2 байти завдяки @someone

Спробуйте в Інтернеті!


SkipLast(1) -> Trim('?')за - ??? байтів, наскільки я бачу (усі мої спроби обчислити різницю в різній кількості)
моє займенник monicareinstate

1

Python 2 , 66 63 62 байт

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

Спробуйте в Інтернеті!

-3 після виявлення оновленого уточнення "вхід матиме лише один? І він завжди буде останнім символом".

-1 завдяки @ChasBrown

В основному порт моєї відповіді Lotus Notes . Цікаво, що пояснення, зазначене вище, не допомагає відповісти Notes, оскільки @Endsна 4 байти дешевше @Contains. Тепер якби тільки була @Inфункція ...


2
Збережіть 1 байт за допомогою rfind.
Час Браун


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.