Перевертання слів


30

Сона перебуває в своєму будинку з 10-річною донькою. Їй потрібно піти до школи, щоб повернути ще одну дитину зі школи, оскільки школа закінчується о 14 годині вечора. На вулиці спекотно, тому вона хоче залишити молодшу дитину вдома.

Вона подарувала дитині купу струн, щоб тримати її зайнятою, поки її немає. Вона попросила перевернути слова в рядку. Струн дуже багато, тому потрібно допомогти доньці у вирішенні цього величезного завдання.

Отже, задавши рядок, що містить слова, розділені одним пробілом, переверніть слова в рядку. Можна припустити, що провідних чи кінцевих просторів там немає.

Рядок буде містити лише [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$), що означає, що вони взагалі не будуть відсортовані, а потім поверніть їх порядок ( ^).


Ніколи не використовували сітківку, але навіщо вам це потрібно 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(,'')))

читає рядок з stdin. За замовчуванням scanчитає лексеми, розділені пробілами / новинками, тому читає слова у вигляді вектора. revперевертає та catдрукує елементи з пробілами.

Спробуйте в Інтернеті!


6

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

ṇ₁↔~ṇ₁

Спробуйте в Інтернеті!

Пояснення

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

Зауважте, що і "розділити на пробіли", і "об'єднати проміжки з wth" використовують однакові вбудовані, тобто ṇ₁просто використовувані в різних "напрямках".




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

Моя перша спроба на Japt.

¸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 чи штучка Japt?
Кудлатий



2

05AB1E , 4 байти

#Rðý

Примітка. Працюватиме лише для двох і більше слів. +1 байт, якщо це не в порядку.

Спробуйте в Інтернеті!


Я бачу unicode, це приблизно 4 байти?
Вал каже: Відновити Моніку

Так, 05AB1E використовує користувацьку кодову сторінку
kalsowerus

#R¸»чергування 4-байтового розчину: P.
Magic Octopus Urn



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
    • Це простір або EOI S-?
    • Повторіть, якщо ні
  • Надрукувати цикл слів
    • Лічильник зменшення (
    • Вийдіть з циклу, якщо лічильник !Uдорівнює 0
    • sЛічильник обміну символом на стеці
    • Роздрукуйте oсимвол і викладіть його зі стека;
    • Повторіть петлю
  • Отримайте довжину стека #і декремент(
  • Перевірте, ?чи 0 та вийдіть, @якщо це 0
  • В іншому випадку роздрукуйте простір Soчистої вгору ;;і повернутися до першої петлі.

Я пропустив ряд зайвих кроків, але ви можете побачити це крок за кроком


2

Математика, 35 байт

StringRiffle@Reverse@StringSplit@#&

Спробуйте в Інтернеті!


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

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

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

2

Röda , 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 байт

API Lambda + Stream

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.