Породжуйте людей культури


24

Цей виклик натхненний мемом « Men of Culture» .

Мем включає вимивання частин оригінального заголовка,

Ах, я бачу, що ти і культурна людина.

щоб воно виглядало так, ніби персонаж говорить щось інше.

Ваше завдання полягає в тому, щоб написати програму, яка за допомогою введення показує, як можна вирівняти вихідне речення для досягнення вхідного рядка.

Правила:

  • Використовуйте -символ, щоб зобразити вимкнений символ.
  • Ви не повинні додавати додаткові літери для досягнення рядка введення
  • Ви можете вважати порівняння рядків як невідчутними до регістру
  • Ви можете ігнорувати пробіли у порівнянні з рядками
  • Якщо заміна неможлива, виведіть помилкове значення.
  • Ви також можете замінити зайвий пробіл на одиницю -, хоча це не потрібно.
  • Там, де можливі кілька рішень, ви можете вивести будь-яке з них.

Тестові приклади:

Основні:

Приклад Meme 1

Ah, I see you're a well.
> Ah, I see you're a --- -- ------- -- well.

Приклад Meme 2

Ah, I see well.
> Ah, I see ------ - --- -- ------- -- well.

Корпус краю 1:

What did you just say about me, you little
> false

Корпус краю 2 (відредаговано):

*no input*
> --- - --- ------ - --- -- ------- -- -----

Проміжні:

Приклад Meme 3

Ah, I see you're Orwell.
> Ah, I see you're - --- o- -----r- -- well.

Приклад Meme 4

Ah, ymca.
> Ah, - --- y----- - m-- -- c------ a- ----.

Приклад Meme 5

Ah, a manual.
> Ah, - --- ------ a man -- -u----- a- --l-.
OR: > Ah, - --- ------ a man -- -u----- a- ---l.

Важче:

Приклад Meme 6

tea.
> --- - --- ------ - --- -- ---t--e a- ----.

Приклад Meme 7

eeeee
> --- - -ee -----e - --- -- ------e -- -e---

TL; DR: Давши рядок введення, виведіть рядок, який представляє, як початковий рядок повинен бути модифікований, щоб відповідати вхідній рядку, використовуючи "-", щоб представити вимкнений символ. Якщо заміна неможлива, виведіть помилкове значення.

Код гольфу, тому виграє найкоротший код у байтах.

Редагувати: Роз'яснення

  • Ігнорувати пробіли у порівнянні рядків означає, що ви можете позбавити пробілів, перш ніж порівнювати рядки. Так , наприклад, входи Ah, a manualі Ah , a manualрозглядаються як рівні. Інші розділові знаки , ' .повинні бути збережені. Аналогічно для виходу продукції Ah, a manualдорівнює Ah, amanual.

  • Замісний надлишковий пробіл відноситься до пробілів, присутнім у вихідному заголовку. Вам не потрібно замінювати їх на "-", але якщо замінити сітки, ви отримаєте більше очок, тоді продовжуйте.


Ваш висновок "Оруелла" здається невірним: ви змінили 'f' на 'r' у першому.
Драконіс

2
Який вихід повинен "Ah,<5 SPACES HERE>a manual."дати вихід?
Лінн

3
Якщо заміна неможлива, виведіть помилкове значення. Ну і вимагати перевірки введення вкрай не рекомендується.
Erik the Outgolfer

2
Ви можете трактувати порівняння рядків як нечутливі до регістру, чи це означає, що ми маємо ставитися до вхідних даних як нечутливих до регістру чи що ми можемо брати вклад у будь-якому випадку, коли ми хочемо? Крім того, ви можете ігнорувати пробіли у рядкових порівняннях , ви маєте на увазі, що ми повинні ігнорувати пробіли? А що таке "зайвий пробіл"?
Ерік Аутгольфер

1
Я думаю, що "валідація вводу", якщо ви можете це назвати, має сенс тут @EriktheOutgolfer
Conor O'Brien

Відповіді:


6

> <> , 94 байти

"vAh, I see you're a Man of Culture as well.
0/i~ <r
!\:?!^:}=0={:@*:@"-"$?$~}$:@?
<>~i+0)?;>o

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

Залежно від регістру, не ігнорується пробіл або розділові знаки і виводиться порожній рядок, якщо введення недійсне. Якщо ви хочете спробувати інші рядки, ви можете просто змінити перший рядок після "v, доки він не містить "ані нульовий байт.


5

Сітківка 0,8,2 , 117 байт

^.
¶Ah, I see you're a Man of Culture as well.¶$&
{+i`¶(\W|(\w))(.*¶)(?(2)\W*\2)
$1¶$3
}1`¶\w
-¶
.*¶.*¶.*\w.*|¶.*¶.*

Спробуйте в Інтернеті! Не вдалося зберегти 1 байт, вимагаючи чутливості до регістру. Не вдалося зберегти 3 байти, повернувшись --, - --- ---'-- - --- -- ------- -- ----.на порожній вхід. Пояснення:

^.
¶Ah, I see you're a Man of Culture as well.¶$&

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

{+i`¶(\W|(\w))(.*¶)(?(2)\W*\2)
$1¶$3

Перемістіть якомога більше символів від потрібного тексту до результату. Якщо символом є буква, то вона також повинна відповідати наступній букві на вході, яка потім видаляється.

}1`¶\w
-¶

Якщо у введенні відсутня відповідна літера, змініть її на a -і спробуйте ще раз.

.*¶.*¶.*\w.*|¶.*¶.*

Якщо у вводі залишилися літери, видаліть усе, інакше видаліть залишок вводу.


5

Желе , 58 55 48 45 байт

“¬²Ẉ,ȷCIbƝɼeỴƤ/ɓIŒ;ṫṚS⁶_ŀỤ ṂB⁾÷ƈ»Ḣ”-1ị⁼ɗ?@€xṆ

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


Більш прочитана версія:

“Ah, I see you're a man of culture as well.”Ḣ”-1ị⁼ɗ?@€xṆ

Розбиття на стиск рядків:

Ah, I{short: see}{short: you}'re a{short: man} of{long: culture} as{short: we}ll.

3

Python 2 , 126 114 байт

i=input()
r=''
for c in"Ah, I see you're a man of culture as well.":x=c==i[:1];r+=c*x or'-';i=i[x:]
print(i=='')*r

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


Python 2 , 108 106 байт

Введення - це список знаків.

lambda i:''.join(c==`i`[2:3]and i.pop(0)or'-'for c in"Ah, I see you're a man of culture as well.")*(i==[])

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


Не могло (i=='')бути (i<' ')(використовуючи вкладку, найменший символ для друку)?
Джонатан Фрех

@JonathanFrech це можливо, але це обоє 7 байт
ов

Ну, у вас там є крапка ...
Джонатан Фрех

2

JavaScript (Node.js) , 122 120 байт

x=>"Ah, I see you're a Man of Culture as well.".replace(/./g,c=>c>' '?/^(.)\1/i.test(c+x)?(x=x.slice(1).trim``,c):'-':c)

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

Пояснення:

x =>                 // It takes in 'x' as parameter for function a string
    "Ah, I see you're a Man of Culture as well.". // What the actual is 
            .replace(                             // Now we are gonna replace 
                    /./g,     // selects everything 
                    c =>      // lambda function with param c
                        c > ' ' ?                 
                        /^(.)\1/i.test(           // does it all
                            c + x ) ?            // checks if there is a match
                            (x=x.slice(1). // returns everything from 1 to end in an array
                                trim`` ,   // removes whitespaces
                            c : '-' : c)   // and done

Можна зменшити ще, але замінює пробіли на "-". Якщо це прийнятно, тоді

JavaScript (Node.js) , 112 байт

x=>"Ah, I see you're a Man of Culture as well.".replace(/./g,c=>/^(.)\1/i.test(c+x)?(x=x.slice(1).trim``,c):'-')

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

Зниження ще більше, лише замінює пробіли, що знаходяться після заданого рядка, на "-".

JavaScript (Node.js) , 105 байт

x=>"Ah, I see you're a Man of Culture as well.".replace(/./g,c=>/^(.)\1/i.test(c+x)?(x=x.slice(1),c):'-')

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


1
Не проходьтеWhat did you just say about me, you little
l4m2

Я не отримую правильний висновок для вашого коду для What did you just say about me, you littleтестового випадку. Ваша програма виробляє --- - --- ------ - --- -- ------- -- w----як вихід, а не те, що вимагає специфікація виклику.
0

2

JavaScript (Node.js) , 135 байт

x=>!!x&&(t="Ah, I see you're a Man of Culture as well.".replace(/./g,c=>c>' '?/^(.)\1/i.test(c+x)?(x=x.slice(1).trim(),c):'-':c),!x&&t)

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

Якщо "може" означає, що робити чи не робити це добре, тоді

JavaScript (Node.js) , 106 байт

x=>x&&(t="Ah, I see you're a Man of Culture as well.".replace(/./g,c=>c==x[0]?(x=x.slice(1),c):'-'),!x&&t)

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


2

Brain-Flak , 764 600 байт

(((<>)))([]((((((([][][]()){}[]){})[][]){}))[[]()])[][]())([[]](([][](([][]){})[]){}())[[]])(([()()][]([[]]([()]([[]](((([()][][][])[]){}[]())[])[]))()()()))[[]])((([[][][]]((([](([()()()][]){})){})(()()()()){}())[[]])[]){})((((()((([][]){}())((()()()){}){})[[][][]]))){}{}())((()(((([]()()()())())){}{}()())[[][]]){}[])(([(()()()){}](((((()()()()){}[]))){}{}))((()()){}()){})(([()][][]([()()()][])))(((([][][]())[([]()()){}()])[]())[[]])([[]]((([]()())(()()()()){}){})()()()){([{}]<>({})){(<{}(((((()()()()())){}{})){}{})>)}{}(<({}<(<()>)<>{({}<>)<>}>{})>)<>{({}<>)<>}{}<>}{}<>{{{}}<>}<>{({}<>)<>}<>

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

Великі вдосконалення завдяки Джо Кінгу , особливо у струнній конструкції, а також у кількох логічних перетвореннях в основному корпусі. Пояснення від нього

Це чутливе до регістру (тому "А, я бачу, ти Орвелл". Не відповідає, але "А, я бачу, ти перебуваєш".), Пробіл у введенні не ігнорується, а незабезпечене пробіл у вихідному рядку - перетворений на -. На моє розуміння, всі ці дійсні варіанти.

Пояснення:

(476 bytes of much improved stack manipulation) #Push string

{ #While string
  ([{}]<>({})) #Check whether the top characters are equal
  {(<{}(((((()()()()())){}{})){}{})>)}{}  #If characters are not equal, push - on top of input
  (<({}<(<()>)<>{({}<>)<>}>{})>)<>{({}<>)<>}{}<>  #Take top of input (either - or matched char) and add to output
}{}
<>{{{}}<>} #Pop both stacks if input is left over
<>{({}<>)<>}<> #Reverse output

Ви знаєте, раніше було питання, яке допоможе автоматизувати довільний тест для Brain-Flak. Моє власне подання може (за допомогою декількох модифікацій) звести текст до 506 байт
Джо Кінг,

За допомогою декількох інших вдосконалень я отримав загальну суму до 604 байт
Jo King,



@JoKing ти дуже добре вдосконалюєш мій Brain-Flak, здається
Каміль Дракарі

2

Haskell , 182 174 172 171 170 169 байт

import Data.Char
t=toLower
a!b=(b:)<$>a
""%l=Just$'-'<$l
l@(a:b)%(c:d)|t a==t c=b%d!c|1>0=l%d!'-'
_%_=mempty
(%"Ah, I see you're a man of culture as well.").concat.words

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

Безголівки:

import Data.Char

template = "Ah, I see you're a man of culture as well."

-- strip spaces
preprocess :: String -> String
preprocess = filter (/=' ')

-- case-insensitive character comparison
a#b = (toLower a) == (toLower b)

strike' :: String -> String -> Maybe String
strike' "" "" = Just ""  -- base case
strike' _ "" = Nothing   -- chars are exhausted, impossible to convert
strike' "" rem = Just $ '-' <$ rem  -- full match, strike rest of chars
strike' cur@(x:xs) (r:rs)
    | x # r     =   (r:) <$> strike' xs rs  -- character matches; pop a char
    | otherwise = ('-':) <$> strike' cur rs -- no match; strike char, don't pop

strike :: String -> Maybe String
strike xs = strike' (preprocess xs) template

1

Пролог (SWI) , 109 байт

[]+[]+[].
I+[B|X]+[C|O]:-(I=[B|J],B=C;I=J,C=45),J+X+O.
I-O:-I+`Ah, I see you're a man of culture as well.`+O.

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

Залежно від регістру та пробілів. -/2Предикат є основним предикат з його першим аргументом є рядок введення , а другий аргумент є вихідний рядки.



0

Pyth , 78 байт SBCS

V." y°äz µÿéiSs¾ýØC[ócõ!ó5§n"=b.x@zZkIqbN=+kN=hZ.?=+k\-))I<Zlz!z.?k

Тестовий набір У
коді недруковані символи, див. Посилання на правильну версію.
Залежно від регістру, не ігнорує пробіли.


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