Генерировать людей культуры


24

Этот вызов вдохновлен мемом людей культуры .

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

Ах, я вижу, что вы тоже человек культуры.

чтобы это выглядело так, как будто персонаж говорит что-то еще.

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

Правила:

  • Используйте -символ для обозначения скрытого символа.
  • Вы не должны добавлять дополнительные буквы для ввода строки ввода
  • Вы можете рассматривать сравнения строк как регистрозависимые
  • Вы можете игнорировать пробелы в сравнениях строк
  • Если замена невозможна, выведите ложное значение.
  • Вы также можете заменить лишние пробелы символом -, хотя и не обязательным.
  • Если возможно несколько решений, вы можете вывести любое из них.

Тестовые случаи:

Основные:

Пример Мем 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*
> --- - --- ------ - --- -- ------- -- -----

Промежуточное:

Пример Мем 3

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

Пример Мем 4

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

Пример Мем 5

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

Сильнее:

Пример Мем 6

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

Пример Мем 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
Если замена невозможна, выведите ложное значение. Что ж, требовать проверки входных данных крайне не рекомендуется.
Эрик Outgolfer

2
Вы можете рассматривать сравнение строк как нечувствительное к регистру , означает ли это, что мы должны обрабатывать ввод как нечувствительный к регистру или что мы можем принимать ввод в любом случае, если захотим? Кроме того, Вы можете игнорировать пробелы в сравнениях строк , вы имеете в виду, что мы должны игнорировать пробелы? А что такое «лишние пробелы»?
Эрик Outgolfer

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 байта
ovs

Ну, у тебя есть точка зрения ...
Джонатан Фрех,

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 байтов
Джо Кинг



@ Шучу, ты, кажется, очень хорош в улучшении моего
Брейк

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

Попробуйте онлайн!

Ungolfed:

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.