Изменение слов


30

Сона в своем доме со своей 10-летней дочерью. Ей нужно пойти в школу, чтобы забрать еще одного ребенка из школы, так как школа заканчивается в 2 часа дня. На улице жарко, поэтому она хочет оставить своего младшего ребенка дома.

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

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

Строка будет содержать только [a-zA-z ], поэтому вам не нужно обрабатывать знаки препинания.

Вам дадут строку в качестве ввода, и вы должны вывести строку.

Примеры тестовых случаев:

Input:
Man bites dog 

Output: 
dog bites Man


Input:
The quick brown fox jumps over the lazy dog

Output:
dog lazy the over jumps fox brown quick The


Input:
Hello world

Output:
world Hello

счет

Это . Кратчайший ответ в байтах побеждает.



1
Можем ли мы принять входные данные в виде списка слов? (т.е. ['man', 'bites', 'dog'])
Rɪᴋᴇʀ

3
Может ли вывод иметь пробел?
Цифровая травма

Ответы:


11

Сетчатка , 7 байт

O$^`\w+

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

Сопоставьте все слова ( \w+), отсортируйте их с помощью пустой строки ( O$) ключа сортировки, что означает, что они не будут сортироваться вообще, а затем измените их порядок ( ^).


Никогда не пользовался Retina, но зачем тебе 0$? Вы не можете просто изменить это?
caird coinheringaahing

Режим сортировки @RandomUser ( O) в настоящее время является единственным режимом, в котором есть эта обратная опция.
Мартин Эндер



7

JavaScript (ES6), 31 байт

s=>s.split` `.reverse().join` `

Попытайся

f=
s=>s.split` `.reverse().join` `
o.innerText=f(i.value="Man bites dog")
oninput=_=>o.innerText=f(i.value)
<input id=i><pre id=o>


1
Это такие ответы, которые по сути совпадают с моими ответами на C #, которые заставляют меня ненавидеть C # за игру в гольф. Весь лишний пух в моем ответе почти удваивает число байтов ... +1
TheLethalCoder

Примечание: если в C # вы ничего не передаете, Splitон по умолчанию разделяется на пробелы, можете ли вы сделать то же самое здесь?
TheLethalCoder

1
К сожалению, нет, @TheLethalCoder, если вы не предоставите строку / регулярное выражение splitв JS, она будет разделена на каждый отдельный символ или создаст массив с одним элементом, содержащим исходную строку, в зависимости от используемого синтаксиса.
Лохматый


6

R, 19 байт

cat(rev(scan(,'')))

читает строку из стандартного ввода. По умолчанию scanчитает токены, разделенные пробелами / символами новой строки, поэтому он читает слова в виде вектора. revпереворачивает и catпечатает элементы с пробелами.

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


6

Брахилог , 6 байт

ṇ₁↔~ṇ₁

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

объяснение

ṇ₁        Split on spaces
  ↔       Reverse
   ~ṇ₁    Join with spaces

Обратите внимание, что и «разделение на пробелы», и «соединение с пробелами» используют одну и ту же встроенную функцию, то есть ṇ₁просто используются в разных «направлениях».




3

брейкфук , 74 байта

,[>++++[<-------->-],]<[>++++[->--------<]+>[[<]>[+>]<]<-[<]>[.>]<[[-]<]<]

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

Этот код создает число -32 в двух разных местах, но это, кажется, меньше байтов, чем попытка поддерживать один -32.

объяснение

,[                        input first character
  >++++[<-------->-]      subtract 32 from current character (so space becomes zero)
,]                        repeat for all characters in input
<                         go to last character of last word
[                         while there are more words to display:
 >++++[->--------<]       create -32 two cells right of last letter
 +>                       increment trailing space cell (1 right of last letter) so the next loop works
 [[<]>[+>]<]              add 32 to all cells in word and trailing space cell
 <-                       subtract the previously added 1 from the trailing space
 [<]>                     move pointer to beginning of word
 [.>]<                    output word (with trailing space)
 [[-]<]                   erase word
 <                        move to last character of previous word
]

3

C 54 48 байтов

Используя аргументы в качестве входных данных, 48 байтов

main(c,v)char**v;{while(--c)printf("%s ",v[c]);}

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

> ./a.out man bites dog

Использование указателей, 84 байта

f(char*s){char*t=s;while(*t)t++;while(t-s){while(*t>32)t--;*t=0;printf("%s ",t+1);}}

использование

main(){ f("man bites dog"); }

3

Japt , 11 10 7 4 байта

Моя первая попытка на Япте.

¸w ¸

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


объяснение

    :Implicit input of string U
¸   :Split on <space>
w   :Reverse
¸   :Join with <space>

Пожалуйста, поделитесь своими советами по Japt здесь .


2
Спасибо за использование Japt :-) Вы можете использовать ¸вместо него qS , что должно сэкономить три байта здесь. (См. Раздел «Ярлыки Unicode» документации переводчика)
ETHproductions

Ницца! Вы можете сохранить байт, если используете -Sфлаг .
Оливер

Я считаю 2 байта, @obarakon. Если флаг не включен в число байтов, то в этом случае это будет 4 байта, нет?
Лохматый

@Shaggy Каждый флаг считается одним байтом. Так -Sбудет +1 к вашему общему количеству байтов.
Оливер

Ах я вижу. Это вещь PPCG или вещь Джапта?
Лохматый



2

05AB1E , 4 байта

#Rðý

Примечание: будет работать только для 2 или более слов. +1 байт, если это не нормально.

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


Я вижу Unicode, это действительно 4 байта?
говорит

Да, 05AB1E использует пользовательскую кодовую страницу
kalsowerus

#R¸»альтернативное 4-байтовое решение: P.
Волшебная Урна Осьминога



2

Cubix , 48 байтов

Почти сдался на этом, но, наконец, туда.

oU_;SW;@?ABu>):tS-?;\0$q^s.$;;<$|1osU!(;;...<#(1

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

Это отображается на куб с длиной стороны три следующим образом

      o U _
      ; S W
      ; @ ?
A B u > ) : t S - ? ; \
0 $ q ^ s . $ ; ; < $ |
1 o s U ! ( ; ; . . . <
      # ( 1
      . . .
      . . .

Основные шаги:

  • Получить все входные данные Aи обратныйB стек
  • Переместите негатив qвниз, добавьте счетчик 0в стек. немного прыгать здесь
  • Найти пробел / конец цикла, также помещает стек в правильном порядке печати.
    • Счетчик приращений ) и получаем элемент счетчика из стекаt
    • Это пространство или ВЗ S-?
    • Повторите, если нет
  • Цикл печати слова
    • Счетчик декрементов (
    • Выход из цикла, если счетчик !U равен 0
    • Поменять местами s счетчика с персонажем в стеке
    • Распечатать o персонажа и вытолкнуть его из стека;
    • Повторить цикл
  • Получить длину стека # и уменьшить(
  • Проверьте ?0 и выйдите@ если 0
  • В противном случае распечатайте пространство Soчистой вверх ;;и вернуться к первой петле.

Я пропустил несколько лишних шагов, но вы можете увидеть это шаг за шагом


2

Mathematica, 35 байт

StringRiffle@Reverse@StringSplit@#&

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


StringSplit[#]автоматически разделяется на пробелы, поэтому вам не нужно указывать " ".
Не дерево

2
правильный! -5 байт!
J42161217

Ох, и я думаю, что вы можете сохранить еще один байт, используя состав функции: StringRiffle@*Reverse@*StringSplit(назовите это как StringRiffle@*Reverse@*StringSplit@"hello world")
Не дерево

2

Рёда , 27 25 байт

2 байта сохранены благодаря @fergusq

{[[split()|reverse]&" "]}

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

Эта функция принимает данные из входного потока.

Объяснение (устарело)

{[[(_/" ")()|reverse]&" "]}           /* Anonymous function */
   (_/" ")                            /* Pull a value from the stream and split it on spaces */
          ()                          /* Push all the values in the resulting array to the stream */
            |reverse                  /* And reverse it */
  [                 ]                 /* Wrap the result into an array*/
                     &" "             /* Concatenate each of the strings in the array with a space */
 [                       ]            /* And push this result to the output stream */

splitиспользует пробел в качестве разделителя по умолчанию, поэтому split()он короче, чем (_/" ")().
fergusq





1

Гема, 29 знаков

<W><s>=@set{o;$1 ${o;}}
\Z=$o

Образец прогона:

bash-4.4$ gema '<W><s>=@set{o;$1 ${o;}};\Z=$o' <<< 'Man bites dog'
dog bites Man 



1

Java 8, 53 57 байт

Lambda + Stream API

s->Stream.of(s.split(" ")).reduce("",(a,b)->b+" "+a)

Следуя предложению Селима, мы просто сбросили 4 байта


1
Сохраните 4 байта, используя Stream.ofвместо Arrays.stream: -)
Селим


1

Pyth, 3 байта

_cw

Мой первый ответ Pyth, на один байт короче, чем ответ @ notjagan!

Разъяснение:

 cw # Split the input by space (same as Python's string.split())
_   # Reverses the array
    # Pyth prints implicitly.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.