Соревнование
Ну, я думаю, это совершенно ясно, не так ли? Вы должны создать функцию или программу, которая принимает строку в качестве аргумента и выводит соответствующий Yoda-говорящий.
Это код-гольф , поэтому выигрывает наименьшее количество байтов.
Вход
Ввод может быть любой строкой без перевода строки. Вы можете перевести строку, если она составлена так:
Тема + Глагол + Что-то еще.
Где Субъект - это личное местоимение (я, ты, он, она, оно, мы, они). Вам не нужно признавать, что второе слово - это глагол.
Если первое слово не местоимение, ввод действителен, но вывод будет Too difficult, this sentence is.
You have to win this code challenge -> Translatable
Luke has to win this code challenge -> Untranslatable
Ввод может заканчиваться буквой, а. или, а не с?
Кроме того, строки могут содержать не-Ascii, скобки, запятые, двоеточия ...
Выход
В случае переводимого предложения выводится то же самое предложение с темой и глаголом в конце предложения.
You have to win this code challenge -> To win this code challenge, you have.
Запятая, точка и строчные на местоимении являются обязательными. (За исключением, конечно, если местоимение это я).
Как указано выше, если это непереводимо, вы должны вывести строку Too difficult, this sentence is.
Примеры
You have to win this code challenge -> To win this code challenge, you have.
He won this code challenge -> This code challenge, he won. (I know this is not yoda-speaking, but I don’t want to overcomplicate this challenge)
I ate an ice cream earlier! -> An ice cream earlier, I ate.
I liked the Star Wars original trilogy more than the prequel’s one. -> The Star Wars original trilogy more than the prequel’s one, I liked.
I find your lack of faith disturbing -> Your lack of faith disturbing, I find.
I think we are done with the examples -> We are done with examples, I think.
He is your son, Vader -> Your son, Vader, he is.
I think they’ll add new features -> They’ll add new features, I think.
I made a fantastic code challenge (I hope) -> A fantastic code challenge (I hope), I made.
I love constants like π -> Constants like π, I love.
I’ll be the next President, I swear! -> Too difficult, this sentence is.
This challenge is great! -> Too difficult, this sentence is.
Is this challenge great? -> Too difficult, this sentence is.
Luke is not ready for this task -> Too difficult, this sentence is.
Somebody loves constants like π -> Too difficult, this sentence is.
[Empty string] -> Too difficult, this sentence is.
источник
You have to win this code challenge
должно бытьThis code challenge, you have to win
.!
? Это гарантированно не произойдет, или мы должны справиться с этим и напечатать то же самое, что и когда нет ведущего местоимения. Может ли ввод содержать перевод строки? Апострофы? Колоны / круглые скобки / обратные кавычки? Не-ASCII символы? Вы говорите, что «входом может быть любая строка», но ваши тестовые случаи охватывают только очень специфические типы строк.Ответы:
Сетчатки,
162137145134131129Многократная пунктуация теперь обрабатывается правильно. Прецедент:
You will not win this challenge...! -> Not win this challenge..., you will.
Попробуйте онлайн!
Описание:
Если в конце есть пунктуация, удалите ее.
Преобразуйте местоимение в нижний регистр, за исключением того, что это я.
Отфильтруйте любую строку, которая не соответствует
<Pronoun><space><word><space><word>...
Разбить
pronoun + verb
,remainder
. Тогда переставь.Преобразуйте первый символ в верхний регистр.
Если результат пустой, он не прошел фильтр выше. Распечатать сообщение об ошибке.
источник
[^ ]
возможно , может быть заменен\S
везде, и в первом регулярное выражение[^ ]+
может быть заменено на.+
. В классах персонажей вам не нужно убегать,.
поэтому[.!]
отлично работает. Кроме того, поскольку вы не меняете порядок$1
и$2
на третьем этапе, вы можете объединить их в одну группу и сохранить 5 байтов.([^I]|It)
можно сократить до^\w\w
I|It
может статьI?
, если Retina поддерживает этоES6, 212
Это может, вероятно, немного дальше играть в гольф:
JSFiddle (требуется современный браузер, такой как Chrome) или запустите его через node.js
Ungolfed:
источник
I think they’ll add new features
-> возвращаетThey, I think.
в Google Chrome 47.0.2526.106 m. Кроме того, это не нравитсяI love constants like π
. Чтобы добавить к этому,I made a fantastic code challenge (I hope)
возвращаетсяA fantastic code challenge , I made.
вместоA fantastic code challenge (I hope), I made.
^
в начало вашего регулярного выражения, в противном случае предложение с любым текстом до того, как местоимение все равно будет проанализировано как действительное.JavaScript (ES6), 164 байта
объяснение
Почти больно, сколько байтов с заглавной буквы первой буквы строки занимает в JavaScript ...
Тест
Test не использует назначение деструктуризации, чтобы сделать его более совместимым с браузерами.
Показать фрагмент кода
источник
^(((It?)|You|[HW]e|[ST]hey) \\S+) (.*?)[.!]?$
)? P [4] [0] .toUpperCase () + p [4] .slice (1) +, ${p[3]?p[1]:p[1].toLowerCase()}.
: «Слишком сложно, это предложение.»It
остаться заглавными и совпадатьShey
вместоShe
.Python, 261 байт
Оказывается, Python не возражает против таких вещей, как
b[-1]in".!"
Next. Я буду больше играть с объектом match, если никто не побьет меня этим :)источник
b=b[:-1]
части.b=b[:-1]
в конце строки сif
. Вы можете удалить пробел после возврата на последней строке. это нарушит совместимость с python3, заменив 2 пробела табуляцией и 3 пробела табуляцией и пробеломPython,
218217204 байтаНе уверен, что это может быть дальше в гольфе.
Ungolfed:
источник
s.split(' ')
наs.split()
и'I|We|You|He|She|It|They'.split('|')
на'I We You He She It They'.split()
, заменить наif...else
тот же логический список, который использовался в другом месте, изменитьt[0]in
наt[0]in
, удалить spawce вокруг возвратаGNU sed, 129 байт
Я включаю +1 байт для
-r
флага.объяснение
Если мы сопоставляем ведущий,
I
мы переходим к метке:Если мы сопоставим одно из других местоимений, мы уберем его, затем перейдем к метке:
В противном случае мы печатаем сообщение об ошибке и переходим к следующей строке ввода:
Если мы перешли на метку, мы удалим все последние знаки препинания:
и поменяйте местами первые два слова с остальной частью предложения, используя заглавные буквы нового первого слова и добавив необходимые знаки препинания, как мы это делаем:
источник
You are
первая и вторая строки, но не совпадают с последней, поэтомуyou are
вместо сообщения об ошибке выводится сообщение. Добавьте чек, как...|They) \S+ \S/\L&/
в первых двух строках.