Kelimelerin tersine çevrilmesi


30

Sona, 10 yaşındaki kızıyla birlikte evinde. Okul öğleden sonra 2'de sona erdiği için başka bir çocuğu okuldan geri almak için okula gitmesi gerekiyor. Dışarısı sıcak, o yüzden küçük çocuğunu evde bırakmak istiyor.

O gittiğinde onu meşgul tutmak için çocuğuna bir sürü tel verdi. Dizideki kelimeleri tersine çevirmesini istedi. Çok fazla ip var, bu yüzden bu devasa işi çözmede kızına yardım etmelisin.

Böylece, tek boşlukla ayrılmış kelimeleri içeren bir dize verildiğinde, dizedeki kelimeleri tersten izleyin. Önde gelen veya arkada kalan boşluk olmadığını varsayabilirsiniz.

Dize yalnızca içerecek [a-zA-z ], böylece noktalama işaretlerini kullanmanıza gerek kalmayacaktır.

Giriş olarak bir dize verilecek ve bir dize vermelisiniz.

Örnek Test Durumları:

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

puanlama

Bu . Bayt cinsinden en kısa cevap kazanır.



1
Girişi bir sözcük listesi olarak alabilir miyiz? (yani ['man', 'bites', 'dog'])
Rɪᴋᴇʀ

3
Çıktının sonunda boşluk var mı?
Dijital Travma

Yanıtlar:


11

Retina , 7 bayt

O$^`\w+

Çevrimiçi deneyin!

Tüm kelimeleri eşleştirin ( \w+) onları sıralama tuşu boş string ( O$) ile sıralayın, bu da onların sıralanmayacakları anlamına gelir ve sonra sıralarını tersine çevirir ( ^).


Retina'yı hiç kullanmadın ama neden ihtiyacın var 0$? Tersine çeviremez misin?
Caird coinheringaahing

@RandomUser sort mode ( O) şu anda bu ters seçeneğine sahip tek moddur.
Martin Ender



7

JavaScript (ES6), 31 bayt

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

Dene

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
Bu gibi cevaplar, aslında golf oynamak için beni C # 'dan nefret ettiren cevabımla aynı.
Cevabımdaki

Yan not: C # 'da hiçbir şey Splitiletmezseniz, varsayılan olarak boşlukta böler, burada da aynı şeyi yapabilir misiniz?
TheLethalCoder

1
Maalesef, @ TheLethalCoder, JS'ye bir dize / regex sağlamazsanız, kullanılan splither bir karakterde bölünür veya kullanılan sözdizimine bağlı olarak orijinal dizeyi içeren tek bir öğeye sahip bir dizi oluşturur.
Shaggy

7

Bash + ortak Linux yardımcı programları, 21

printf "$1 "|tac -s\ 

Çıkış dizgisinde boşluk bırakıyor - bunun uygun olup olmadığından emin değil.


2
50k için tebrikler !! Bugünkü sıranız :-)
Luis Mendo

@LuisMendo Teşekkürler!
Dijital Travma

6

R, 19 bayt

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

dizeyi stdin'den okur. Varsayılan olarak, scanboşluk / yeni satırlarla ayrılmış belirteçleri okur; böylece sözcükleri bir vektör olarak okur. revters çevirir ve catöğeleri boşluklarla yazdırır.

Çevrimiçi deneyin!


6

Brachylog , 6 bayt

ṇ₁↔~ṇ₁

Çevrimiçi deneyin!

açıklama

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

Hem "boşluklarda bölünme" hem de "wth boşluklara katıl" öğelerinin aynı yerleşikleri kullandığını, yani ṇ₁yalnızca "farklı yönlerde" kullanıldığını unutmayın.




3

brainfuck , 74 bayt

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

Çevrimiçi deneyin!

Bu kod, -32 sayısını iki farklı yerde oluşturur, ancak bu, tek bir -32'yi korumaya çalışmaktan daha az bayt gibi görünüyor.

açıklama

,[                        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 bayt

Girişleri bağımsız değişken olarak kullanma, 48 bayt

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

Çevrimiçi dene

> ./a.out man bites dog

İşaretçileri kullanma, 84 bayt

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

kullanım

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

3

Japt , 11 10 7 4 bayt

Japt’e ilk girişimi.

¸w ¸

Çevrimiçi deneyin


açıklama

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

Lütfen Japt ipuçlarını burada paylaş .


2
Japt'i kullandığınız için teşekkürler :-) Yerine kullanabilirsiniz ¸, qS buradaki üç bayttan tasarruf etmenizi sağlar. (Tercüman belgelerinin "Unicode kısayolları" bölümüne bakın)
ETHproductions

Güzel! -SBayrağı kullanırsanız bir bayt kaydedebilirsiniz .
Oliver

2 bayt, @obarakon sayıyorum. Bayrak bayt sayısına dahil edilmezse, bu durumda 4 bayt olur, hayır mı?
Shaggy

@Shaggy Her bayrak bir bayt olarak sayılır. Yani -Stoplam bayt sayısı üzerine +1 olurdu.
Oliver

Ah, anlıyorum. Bu bir PPCG olayı mı yoksa Japt olayı mı?
Shaggy






2

Cubix , 48 bayt

Neredeyse bundan vazgeçti ama sonunda oraya geldi.

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

Çevrimiçi deneyin!

Bu, aşağıdaki gibi üç yan uzunluğa sahip bir küp üzerinde haritalanır

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

Genel adımlar:

  • Tüm giriş Ave ters Byığını al
  • Negatifini qalta taşıyın, 0yığına bir sayaç ekleyin . Buralarda zıplama biraz.
  • Boşluk / son döngüsünü bul, yığını doğru sıraya koy.
    • Artış sayacı ) ve sayaç öğesini yığından alt
    • Bir boşluk mu yoksa EOI mi? S-?
    • Değilse tekrarla
  • Sözcük döngüsünü yazdır
    • Azaltma sayacı (
    • Sayaç varsa döngüden çık !U 0
    • takas sSayaç yığında karakter ile
    • oKarakteri yazdır ve yığından çıkar;
    • Tekrarla döngü
  • Yığın #ve alçalma uzunluğunu alın(
  • ?0 olup olmadığını kontrol et ve çık@ 0 ise
  • Aksi takdirde, bir boşluk Sotemizleyin ;;ve ilk döngüye geri dönün.

Birkaç gereksiz adımı atladım, ancak Adım Adım görebilirsiniz.


2

Mathematica, 35 bayt

StringRiffle@Reverse@StringSplit@#&

Çevrimiçi deneyin!


StringSplit[#]boşlukları otomatik olarak böler, böylece belirtmenize gerek kalmaz " ".
Ağaç değil

2
doğru! -5 bayt!
J42161217

Ooh ve bence işlev kompozisyonunu kullanarak başka bir bayttan tasarruf edebileceğinizi düşünüyorum: StringRiffle@*Reverse@*StringSplit(şöyle diyorlar StringRiffle@*Reverse@*StringSplit@"hello world")
Ağaç değil

2

Röda , 27 25 bayt

@Fergusq sayesinde 2 bayt kurtarıldı

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

Çevrimiçi deneyin!

Bu fonksiyon giriş akışından giriş alır.

Açıklama (eski)

{[[(_/" ")()|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 */

splitvarsayılan ayırıcı olarak boşluk kullanır, bundan split()daha kısadır (_/" ")().
fergusq




1

J , 6 bayt

|.&.;:

Çevrimiçi deneyin! Bu, |.( &.) kelimelerinin ( ;:) altındaki reverse ( ) ifadesidir . Başka bir deyişle, cümleyi kelimelere ayırın, ters çevirin ve cümleyi tekrar birleştirin.


1

Gema, 29 karakter

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

Örnek çalışma:

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



1

Java 8, 53 57 bayt

Lambda + Stream API

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

Selim'in önerisinin ardından 4 bayt daha düştük.


1
Stream.ofBunun yerine 4 bayttan Arrays.stream
Selim


1

Pyth, 3 bayt

_cw

İlk Pyth cevabım, @ notjagan'ın cevabından bir bayt daha kısa!

Açıklaması:

 cw # Split the input by space (same as Python's string.split())
_   # Reverses the array
    # Pyth prints implicitly.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.