задача
- Пользователь вводит предложение - только слова. Любой ввод, кроме букв или пробелов, включая целые числа и знаки препинания, должен вызывать исключение: «Приговор должен использовать только буквы».
- Вывод имеет шаблон, где некоторые слова поменялись местами, а другие слова являются нормальными.
- Шаблон начинается как обычное слово, следующие два слова меняются местами, затем следующие два слова являются нормальными, и шаблон продолжается.
- Ниже приведен пример того, где слова должны быть нормальными, а где слова обратными:
Нормальный - Перевернутый - Обратный - Нормальный - Нормальный - Обратный - Обратный - Нормальный ...
Пример ввода
Она продает морские раковины на берегу моря
Пример вывода
Она бросает снаряды на берег
Дополнительные правила
- Если используются заглавные буквы, они должны оставаться на том же письме, на котором они были первоначально размещены.
- Любые несколько пробелов, первоначально размещенных на входе, должны быть уменьшены до одного пробела. Например
Programming Puzzles and Code Golf
становитсяProgramming selzzuP dna Code Golf
Самый короткий код выигрывает!
Удачного кодирования ...
code-golf
string
word
permutations
Belfield
источник
источник
Any input other than letters or spaces, including integers and punctuation, should throw an exception: "Sentence must only use letters".
Это означает выполнение вторичной задачи, совершенно не связанной с задачей обращения слов, вырезает языки, которые не имеют исключений, и требует жесткого кодирования или сжатия длинной строки, которая занимает много времени. количество байтовОтветы:
TeaScript , 55 байтов
58 60 69 76 78 80 87 89Это очень коротко, я очень доволен этим.
Последние ~ 20 символов могут показаться бессмысленными, но в коде «Предложение должно использоваться только буквы». Все символы имеют коды символов ниже 256, поэтому каждый из них равен одному байту.
объяснение
источник
Haskell, 141 байт
Почти 2/3 кода предназначены для проверки ошибок. Кажется, это первый вызов в реальном мире.
Выполняется работа,
unwords$zipWith($)(cycle[id,reverse,reverse,id])$words x
которая разбивает входные данные на список слов, упаковывает их в циклический список функций[id,reverse,reverse,id,id,reverse...]
и объединяет результат с пробелами в одну строку.Спасибо @Christian Irwan за 2 байта.
источник
r=reverse
?reverse
иr=reverse
имела одинаковую длину из-за отсутствияf=
. Больше не проверялось при переходе на non pointfree).JavaScript (ES6) 122
источник
Сетчатка , 103 байта
Во второй строке должен быть один пробел, который SE, похоже, глотает. Запустите код из одного файла с
-s
флагом.Retina не имеет понятия исключений, поэтому вывод просто заменяется,
Sentence must only use letters
если на входе есть непробельные непробельные символы.источник
Pyth, 61 байт
Попробуйте онлайн.
источник
Питон,
163160157145Удалено 15 символов, спасибо Мего !!
источник
Bash + coreutils, 108
Последний символ этой программы - пробел.
Ввод берется из командной строки:
источник
Пиф, 72
Не бьет другой ответ Пайта, но я уже потратил время на его написание. Это в основном перевод моего Python-ответа .
Попробуйте онлайн
источник
Юлия, 109 байт
i=0
и(i+=1)%4>1
используются, чтобы решить, получает ли каждое словоreverse
d или нет.isalpha
применяется к словам после разделения, используя,split(s)
чтобы определить, есть ли символы, которые не являются буквами (пробелы уже были удалены к этому моменту).join
восстанавливает строку после манипуляции, еслиerror
не брошено.источник
Юлия,
150134 байтаUngolfed:
Сохранено 16 байт благодаря Glen O!
источник
r
его результат? То естьr=ismatch(...)||error(...)
- сбрит несколько символов и обратит условное выражение, которое используетr
. Еще раз прокомментирую, я подозреваю, еще немного сбережений||
иметь дело с отрицанием, потом понял, что отрицание не нужно. Обратный обратно&&
. И даже лучше, используйте?:
вместо этого, чтобы сделать это еще лучше.s->(r=ismatch(r"[^a-z ]"i,s))?error("Sentence must only use letters"):join([(iseven(i)&&(r=!r);r?reverse(w):w)for(i,w)=enumerate(split(s))]," ")
для 144 байтов. И я думаю, что я могу сделать лучше внутриjoin
...s->ismatch(r"[^a-z ]"i,s)?error("Sentence must only use letters"):(i=3;join([(i+=1;isodd((i+1)i÷2)?reverse(w):w)for w=split(s)]," "))
Pyth, 55 байтов
Заимствовал
%%k4 3
бит от Pietu1998. Сохранен еще один байт.Попробуйте онлайн: демонстрация или тестовый набор
объяснение
источник
Perl 5
-ap
, 80 байтПопробуйте онлайн!
источник
Java, 215 байт
Regex это весело
Попробуйте онлайн!
источник
She slles aeS shells no the aeS shore
, но это должно бытьShe slles aeS shells on eht aeS shore
вместо этого (сначала нормальное, затем чередование в парах по 2 в обратном порядке или нет). Это связано с двумя проблемами. Теперь вы увеличиваете,i
даже если предмет пуст, иi++%2<1
должен бытьi++%4>1
вместо этого. Здесь исправлена 211-байтовая версия.Желе , 39 байт
Попробуйте онлайн!
Благодаря Эрику Outgolfer. Он спас меня от нескольких лишних байтов и многих часов разочарования.
Вот 46-байтовое решение
Фактически выдает синтаксическую ошибку Python, когда ввод содержит недопустимые символы.
Попробуйте онлайн!
источник
Japt v2.0a0
-S
, 41 байтПопытайся
источник
05AB1E , 36 байт
Попробуйте онлайн.
Выдает следующую ошибку, когда входные данные не только содержат
[A-Za-z ]
:Объяснение:
Смотрите этот 05AB1E наконечник шахты (раздел Как использовать словарь? ) , Чтобы понять , почему
“¸–ƒ—€É€Å™ê“
это"sentence must only use letters"
.источник
PHP , 147 байт
Попробуйте онлайн!
Или, если
die()
это приемлемо как «Исключение»:PHP , 131 байт
Попробуйте онлайн!
источник