В чате, мы часто быстро-TYPERS и на самом деле не смотреть на того , из писем , прежде чем отправлять сообщение. Поскольку мы ленивы, нам нужна программа, которая автоматически меняет последние две буквы в наших словах, но поскольку мы не хотим отвечать слишком поздно, код должен быть коротким.
Ваша задача, если вы хотите принять это, - написать программу, которая переворачивает последние две буквы каждого слова в заданной строке (таким образом, слово Thansk
превращается в Thanks
). Слово представляет собой последовательность из двух или более букв в английском алфавите , ограниченной одной пространства.
Строка / список символов, которые вы получаете в качестве входных данных, гарантированно содержат только буквенные символы и пробелы (ASCII [97 - 122], [65 - 90] и 32).
Вы можете принимать и выводить данные любым стандартным методом , на любом языке программирования , при этом отмечая, что эти лазейки по умолчанию запрещены.
Вывод может иметь один завершающий пробел и / или один завершающий символ новой строки.
Ввод всегда будет содержать только слова (и соответствующий пробел) и будет состоять как минимум из одного слова.
Это код-гольф, поэтому выигрывает самая короткая подача (в байтах) на каждом языке!
Контрольные примеры
Обратите внимание, что строки заключены в кавычки для удобства чтения.
Вход -> Выход "Thansk" -> "Спасибо" "Youer Welcoem" -> "Добро пожаловать" "Это яблоко" -> "Thsi si na appel" "Flippign Lettesr Aroudn" -> "Листать буквы вокруг" "ЗАДАЧА ВЫЗОВА С ОБМЕННЫМИ БУКВАМИ" -> "ЗАДАЧА С ЗАМЕНАМИ БУКВ"
Или, для удобства набора тестов, здесь отдельно представлены входы и соответствующие им выходы:
Thansk Youer Welcoem Это яблоко Flippign Lettesr Aroudn ШАЛЕНЕГ С ОБМЕНАМИ
Благодарность Пожалуйста Это на апелляция Листать буквы С ОДНОВРЕМЕННОЙ ЗАДАЧЕЙ
Спасибо DJMcMayhem за титул. Первоначально это была CMC .
Ответы:
V , 4
5байтПопробуйте онлайн!
||
обозначает курсорБуфер начинается с
|w|ord and more words
и курсор находится на первом символе.Рекурсивный
ò
перейти к
e
концу словаwor|d| and more words
удалить
X
символ слева от курсораwo|d| and more words
p
оцените следующий символwod|r| and more words
Неявное окончание
ò
, повторите тот же процесс для других слов, пока не будет достигнут конец буфераисточник
ò
команды github.com/DJMcMayhem/V/wiki/Normal-Mode-CommandsЖеле , 7 байт
Монадическая ссылка, берущая и возвращающая списки символов
Попробуйте онлайн!
Как?
источник
Ḳ2œ?ЀK
также работает и использует один быстрый.Brain-Flak , 122 байта
Попробуйте онлайн!
Худший язык для работы :)
ЧитаемаяЧуть более читаемая версия:источник
Haskell , 40 байт
Попробуйте онлайн! Пример использования:
(f=<<).words $ "abc xyz"
доходность"acb xzy "
.источник
Сетчатка , 13 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи.
источник
Python 3 , 50 байт
Попробуйте онлайн!
Этот ответ нарушает поведение печати в Python 3: несколько аргументов печатаются с одним пробелом между ними. Конечно, мы не можем просто дать ему несколько аргументов, потому что мы не знаем, сколько слов будет на входе. Поэтому мы используем оператор splat . В основном
точно так же, как
Злоупотребление приводит к тому, что полная программа оказывается короче, чем функция / лямбда, где мы должны были бы использовать
' '.join
или что-то подобное.источник
for w in input().split():print w[:-2]+w[:-3:-1],
. В Python 3 извлечение последних двух символов будет хорошо работать,print(*(''.join(a)+c+b for*a,b,c in input().split()))
за исключением того, что егоa
необходимо преобразовать в строку.Matlab (R2016b),
5150 байтСохранено
4950 (!) Байт благодаря @Giuseppe.И мой предыдущий ответ:
Matlab (R2016b), 100 байт
(Просто для удовольствия: P)
Объяснение:
источник
regexprep
работать здесь? Что то типаregexprep(a,'(\w*)(\w)(\w)','\1\3\2')
?$1
, а не\1
так, так было быregexprep(a,'(\w*)(\w)(\w)','$1$3$2')
.function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')
еще один байт короче!C
625854 байтаСпасибо @Dennis за сохранение
четырехвосьми байтов!Попробуйте онлайн!
источник
Пролог (SWI) , 60 байт
Попробуйте онлайн!
объяснение
Сначала мы определим базовый случай:
Это означает, что последние две буквы всегда будут поменяны местами.
Затем мы определяем, что произойдет, если мы будем рядом с пробелом:
Две строки совпадают, если перед пробелом буквы перед пробелами поменялись местами, а остальные - если строки совпадают. Затем мы используем
!
для резки.Наш последний случай - если мы не рядом с пробелом, первые две буквы должны совпадать.
источник
Wolfram Language , 117 байт
Попробуйте онлайн!
Применяется к тестовым строкам.
источник
R ,
1115141 байтПредоставлено @Giuseppe, подходом регулярных выражений, который выбрасывает мой старый метод из воды.
источник
APL (Dyalog Classic) , 28 байтов
⎕ML
и⎕IO
оба1
,Попробуйте онлайн!
объяснение
... (,⊂⍨⊣=,) ...
Разделить (сохраняя границы и добавляя границу к началу) ...... ⍞
... вход ...... ' ' ...
... в местах... ( ... )¨ ...
Затем для каждого элемента этого:... , ...
Объединить ...... (¯2↓⊢) ...
... каждый предмет, кроме двух последних ...... 2↑⌽ ...
... с обратной стороны двух последних элементов.1↓∊ ...
Наконец, верните все, кроме первого элемента сглаженного результата.источник
Фанки , 34 байта
Попробуйте онлайн!
источник
Haskell , 45 байт
-2 байта благодаря H.PWiz.
Попробуйте онлайн!
источник
J ,
20 1911 байтКредит @Bolce Bussiere
Попробуйте онлайн!
источник
(1&A.&.>)&.;:
Алиса , 24 байта
Попробуйте онлайн!
объяснение
Это формирует цикл, в котором тело цикла представляет собой линейный ординальный фрагмент, и мы выполняем
' o
в кардинальном режиме между каждыми двумя итерациями цикла. Последний просто печатает пробел.Развернув зигзагообразную структуру ординального кода, тело линейного цикла выглядит следующим образом:
Разбивая это:
источник
h~Z
) вместо четырех (e10x
), но я не вижу способа изменить макет, чтобы фактически сохранить байт в целом.бред ,
109100 байтИзменить: не нужно обрабатывать слова одной буквы
Попробуйте онлайн!
Печать пробела
Как это работает
Предыдущая версия, 109 байт
Попробуйте онлайн!
источник
QuadR , 8 байт
Попробуйте онлайн!
источник
PHP ,
119107 байтРедактировать: благодаря полностью человеку
Попробуйте онлайн!
источник
$word
однозначное имя переменной?fgets(STDIN)
можно ли его опустить или заменить$x
, например, не все ответы учитывают входные данные для их ответовtrim()
должно быть ненужным.Haskell , 41 байт
Попробуйте онлайн!
Выходы с завершающим пробелом.
Повторное
' ':r
выглядит расточительным. Ноa%(b:t@(' ':r))=b:a:t
такой же длины иa%(b:t)|' ':_<-t=b:a:t
на один байт длиннее.Haskell , 41 байт
Попробуйте онлайн!
источник
sed ,
2017 + 1 (-r) = 18 байтПопробуйте онлайн!
источник
|$
. Он ничего не делает. (Чтобы сделать то, что вы ожидаете, вам нужно(.)(.)(\b|$)
, но это не обязательно, потому что\b
уже совпадает с концом строки.)PHP, 65 байт
требует PHP 7.1 (или позже)
принимает предложение в качестве отдельных аргументов командной строки. Беги с
-nr
.работая над одной строкой, 77 + 1 байт :
Беги как труба с
-nR
.... или попробуйте их онлайн .
источник
Java 8, 35 байт
Порт из @TaylorScott Google Sheets отвечает , после того, как я забил два байта. РЕДАКТИРОВАТЬ: я вижу, что теперь это порт ответа Neil Retina после моих двух байтов в гольф.
Объяснение:
Попробуйте онлайн.
источник
Google Sheets, 33 байта
Функция анонимного рабочего листа, которая принимает входные данные из ячейки
A1
и выводит их в вызывающую ячейку-2 байта Спасибо @KevinCruijssen за использование
(.)
более(\w)
источник
(\w)
могут быть в гольф,(.)
если я не ошибаюсь.\b
Уже признак , чтобы искать только слова. (Не совсем уверен, хотя, но это работает на Java.)JavaScript (Node.js) ,
383632 байтаПопробуйте онлайн!
RegExp подход любезно @Giuseppe (хотя я думал об этом независимо), предполагая, что слова разделены только одним пробелом
-2 только за 1 пробел и добавление пробела
-4 Спасибо @Shaggy
источник
s=>s.replace(/(.)(.)( +|$)/g,"$2$1$3")
.s=>s.replace(/(.)(.)(\s|$)/g,"$2$1$3")
ab abc abcd abcde abcdef
Имеет лиab_
,bc_
,cd_
,de_
,___
,ef_
,___
F=s=>s.replace(/(.)(.)(?!\w)/g,"$2$1")
той же длиныK (ок) ,
2322 байтаПопробуйте онлайн!
Пример:
Объяснение:
Порт решения FrownyFrog для сохранения 1 байта .
Я вернусь к этому.
Предыдущее решение:
" "/-2{(x_y),|x#y}'" "\
23 байтаисточник
05AB1E , 7 байтов
Попробуйте онлайн!
-1 благодаря волшебной урне осьминога .
Печать одного пробела
источник
`
.Желе , 10 байт
Попробуйте онлайн!
источник
СНОБОЛ4 (CSNOBOL4) ,
136119 байтПопробуйте онлайн!
Печатает с пробелом.
Вы знаете, что сделали что-то не так, когда язык является обратным для StriNg Oriented и symBOlic Language, а ваш код длиннее, чем Brain-Flak :(теперь он немного лучше.Строка
B
беретсяI
и заменяется(alphabetic characters saved as Y)(some number of spaces)
пустой строкой.Следующая строка извлекает последние 2 символов ,
Y
какZ
и заменяет их вZ
обратном, а в следующей строке СцепляетO
,Y
и один символ пробела.Наконец, он печатает, когда
I
больше не соответствует требуемому шаблону в строкеB
.источник
Perl 5 , 19 + 1 (
-p
) = 20 байтПопробуйте онлайн!
источник