Flippign Lettesr Aroudn


33

Sohbetinde, sık sık fast-TYPERS ve gerçekten bakma sipariş ait harflerin bir mesaj göndermeden önce. Tembel olduğumuz için, kelimelerimizdeki son iki harfi otomatik olarak değiştiren bir programa ihtiyacımız var, ancak çok geç cevap vermek istemediğimizden, kodun kısa olması gerekiyor.

Göreviniz, kabul etmek isterseniz, her kelimenin son iki harfini belirli bir dizgede Thanskçeviren bir program yazmaktır (böylece kelime dönüşür Thanks). Bir kelime ile sınırlanmış İngiliz alfabesinde iki veya daha fazla harf dizisidir tek boşluk.

  • Girdi olarak aldığınız karakterlerin dize / listesinin yalnızca alfabetik karakterler ve boşluklar içerdiği garanti edilir (ASCII [97 - 122], [65 - 90] ve 32).

  • Bu boşlukların varsayılan olarak yasak olduğunu not ederken, herhangi bir programlama dilinde herhangi bir standart yöntemle girdi alabilir ve çıktı alabilirsiniz .

  • Çıktıda bir son nokta ve / veya son bir son satır olabilir.

  • Girdi her zaman yalnızca sözcükleri (ve karşılık gelen boşlukları) içerecek ve en az bir sözcükten oluşacaktır.

Bu kod golf, yani her dilde en kısa teslim (bayt cinsinden), kazanıyor!

Test durumları

Dizelerin okunabilirlik için tırnaklarla çevrildiğine dikkat edin.

Giriş -> Çıkış

"Thansk" -> "Teşekkürler"
"Youer welcoem" -> "Bir şey değil"
"Bu bir elma" -> "Thsi si na appel"
"Flippign Lettesr Aroudn" -> "Etrafında Çevirme Harfleri"
"ŞEKİLLENDİRİCİLERLE KENDİ KENDİNE ÖĞRENİN" -> "DEĞİŞTİRİLMİŞ HAREKETLER İLE"

Veya, test paketi rahatlığı için, girişler ve bunların ilgili çıkışları ayrı olarak verilmiştir:

thansk
Youer welcoem
Bu bir elma
Flippign Lettesr Aroudn
ÖRNEK ÇEŞİTLİ ŞEKİLLERLE
Teşekkürler
Rica ederim
Bu temyiz
Harfleri Çevrelemek
DEĞİŞTİRİLMİŞ TALEPLER

Başlık için DJMcMayhem'e teşekkürler . Bu başlangıçta bir CMC idi .


Bir dizi kelime çıktısı alabilir miyiz?
Shaggy,

@Shaggy Hayır, çıktı bir dize (veya varsayılan olarak bir karakter listesi) olmalıdır
Bay Xcoder

Her girişte takip eden bir boşluk talep edebilir miyiz?
FlipTack

@FlipTack İlk sürümde izin verildi , ancak bu kuralı, gönderilen cevaplardan herhangi birinden önce kaldırdım. (kısmen sohbetteki bazı kullanıcılar bunu başka türlü kolaylaştırdığımı söylediler ve onlarla aynı fikirdeyim). Hayır, izin yok.
Bay Xcoder

1
@Fabian Bir kelime iki veya daha fazla harften oluşan bir sekanstır
Bay Xcoder

Yanıtlar:


16

V , 4 5 bayt

òeXp

Çevrimiçi deneyin!

|| imleci gösterir

Tampon ile başlar |w|ord and more wordsve imleç ilk karakter üzerinde olur.

recursively ò

ekelimenin sonuna git

wor|d| and more words

Xİmlecin solundaki karakteri kaldır

wo|d| and more words

pBir sonraki karakter üzerine aste

wod|r| and more words

Örtük biten ò, aynı işlemi, başka bir deyişle, arabellek sonuna ulaşana kadar tekrarlayın.


2
Görev için doğru dil :)
DJMcMayhem

"Özyinelemeli" yerine "Sürekli" demek mi istiyorsun?
NieDzejkob


10

Jöle , 7 bayt

Ḳœ?@€2K

Karakter listelerini alıp geri veren monadik bir bağlantı

Çevrimiçi deneyin!

Nasıl?

Ḳœ?@€2K - Link: list of characters
Ḳ       - split at spaces
     2  - literal two
    €   - for €ach:
   @    -   with sw@pped arguments:
 œ?     -     nth permutation (the 2nd permutation has the rightmost elements swapped)
      K - join with spaces

Bu, permütasyonların hoş bir şekilde kötüye kullanılması. Alternatif
Bay Xcoder

@ Mr.Xcoder Ḳ2œ?ЀKayrıca tek bir hızlı çalışır ve kullanır.
Dennis,

7

Brain-Flak , 122 bayt

{(({})[((((()()){}){}){}){}])((){[()](<{}>)}{}){{}<>(({}({}))[({}[{}])])(<>)}{}({}<>)<>}<>(({}({}))[({}[{}])]){({}<>)<>}<>

Çevrimiçi deneyin!

İş için en kötü dil :)

Okunabilir Biraz daha okunabilir sürüm:

{
    (({})[((((()()){}){}){}){}])((){[()](<{}>)}{})

    {
        {}
        <>

        (({}({}))[({}[{}])])

        (<>)
    }
    {}

    ({}<>)<>

}<>

(({}({}))[({}[{}])])

{

    ({}<>)
    <>
}<>

Bunun Brainfuck versiyonundan daha uzun olduğuna inanamıyorum ...
Pureferret

@pureferret Brain-flak, beyin fırtınasından daha uzun olma eğilimindedir. Çoğunlukla, beyin-plakanın iki tane gerektirdiği ilkel komut başına iki bayt gerektirdiği için.
DJMcMayhem

7

Haskell , 40 bayt

(f=<<).words
f[a,b]=b:a:" "
f(x:r)=x:f r

Çevrimiçi deneyin! Kullanım örneği: (f=<<).words $ "abc xyz"verim "acb xzy ".


Yani bana en kısa yaklaşımın her iki yaklaşımın da birleştirildiğini mi söylüyorsunuz? > _ <
totallyhuman


6

Python 3 , 50 bayt

print(*(w[:-2]+w[:-3:-1]for w in input().split()))

Çevrimiçi deneyin!

Bu cevap Python 3'ün baskı davranışını kötüye kullanıyor: Birden fazla argüman aralarında tek bir boşluk bırakılarak yazdırılıyor. Tabii ki, sadece çoklu argüman veremiyoruz çünkü girdide kaç kelime olacağını bilmiyoruz. Bu yüzden uyarıcı operatörünü kullanıyoruz . temel olarak

print(*[a,b,c])

tam olarak aynı şey

print(a,b,c)

Bunu kötüye kullanmak, tam bir program yapar, kullanmamız gereken bir fonksiyondan / lambdadan ' '.joinveya benzer bir şeyden kısalır .


Görünüşe göre Python 2 yazarak 2 bayt kaydeder for w in input().split():print w[:-2]+w[:-3:-1],. Python 3'te, son iki karakterin çıkartılması, bir dizgede yeniden yazılması gerekenler print(*(''.join(a)+c+b for*a,b,c in input().split()))dışında iyi sonuç verecektir a.
xnor

5

Matlab (R2016b), 51 50 bayt

Kaydedilen 49 50 (!) @Giuseppe sayesinde bayt.

function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')

Ve önceki cevabım:

Matlab (R2016b), 100 bayt

(Sadece eğlenmek için: P)

function s(a),a=regexp(a,' ','split');for i=1:length(a),fprintf('%s ',a{i}([1:end-2 end end-1])),end

Açıklama:

function s(a) % Defining as a function...
a=regexp(a,' ','split'); % Splits the input string at the spaces
for i=1:length(a) % Loops through each word
    fprintf('%s ',a{i}([1:end-2 end end-1])) % And prints everything with the last two characters swapped.
end

1
bir karakter kelimesi gerçekleşemez, çünkü bir kelime en az iki karakter olarak tanımlanır.
Giuseppe,

olur regexprepburada çalışıyor? Gibi bir şey regexprep(a,'(\w*)(\w)(\w)','\1\3\2')?
Giuseppe

D = Bu. Oldu. Epik! Bence bu cevabı göndermelisin, çünkü benimkinden tamamen farklı. Matlab ile eşleşmeleri başvurduğu tek şey $1, değil \1olurdu böylece regexprep(a,'(\w*)(\w)(\w)','$1$3$2').
Thiago Oleinik

1
ayrı bir cevap olarak / bu cevapta göndermelisiniz; Bir regex'in bir ip mücadelesinde yardımcı olup olmayacağını görmek her zaman iyidir! Ayrıca, MATLAB'ın regex motorunu açıkça anlamıyorum, bu yüzden bunun için kredi almam adil olmaz.
Giuseppe

1
function s(a),regexprep(a,'(\w)(\w)( |$)','$2$1 ')hala başka bir byte daha kısa!
Giuseppe,


4

Prolog (SWI) , 60 bayt

[A,B]+[B,A].
[A,B,32|U]+[B,A,32|Y]:-U+Y,!.
[A|U]+[A|Y]:-U+Y.

Çevrimiçi deneyin!

açıklama

İlk önce temel durumu tanımlarız:

p([A,B],[B,A]).

Bu, son iki harfin her zaman değiştirileceği anlamına gelir.

Sonra bir boşluğun hemen yanında olursak ne olacağını tanımlarız:

p([A,B,32|U],[B,A,32|Y]):-p(U,Y),!.

İki dize, bir alanın hemen önünde yer alırsa, boşluktan önceki harfler değiştirilir ve kalanlar eşleşirse geri kalanı kullanılır. Sonra !kesmek için kullanırız .

Son olgumuz, ilk iki harfin eşleşmesi gereken bir boşluğun yanında olmazsak olur.

p([A|U],[A|Y]):-p(U,Y).

4

Wolfram Dili , 117 bayt

StringReplace[RegularExpression["\\b[[:alpha:]]{2,}\\b"]:>StringDrop[StringInsert["$0",StringTake["$0",{-1}],-3],-1]]

Çevrimiçi deneyin!

Test dizelerine uygulanır.

StringReplace[
  RegularExpression["\\b[[:alpha:]]{2,}\\b"] :> 
   StringDrop[StringInsert["$0", StringTake["$0", {-1}], -3], -1]] /@
 {"Thansk", "Youer welcoem", "This is an apple", 
  "Flippign Lettesr Aroudn", "tHe oDd chALlEneg wiht swappde lettesR"} // Column
Thanks
Youre welcome
Thsi si na appel
Flipping Letters Around
teH odD chALlEnge with swapped letteRs

4
PPCG'ye Hoşgeldiniz!
Steadybox

@Steadybox Teşekkürler.
Edmund,

4

R , 111 51 41 bayt

Giuseppe'nin izniyle, eski yöntemimi sudan çeken düzenli bir yaklaşım.

cat(gsub("(.)(.)\\b",'\\2\\1',scan(,"")))

1
Regex burada çok daha verimli: Çevrimiçi deneyin!
Giuseppe

(R'de saf string manipülasyon yaklaşımı yapmak için gereken cesareti takdir edemem)
Giuseppe


@Giuseppe Wow, iyi iş! Kendi cevabınızı vermeyi tercih ederseniz, lütfen devam edin!
rturnbull

1
nah, endişelenme. 10 bayt daha düşürdüm : başka bir regex yaklaşımı ve eski yaklaşımınızın 70 baytı
Giuseppe

4

APL (Dyalog Klasik) , 28 bayt

1↓∊((¯2↓⊢),2↑⌽)¨' '(,⊂⍨⊣=,)⍞

⎕MLve ⎕IOher ikisi de 1,

Çevrimiçi deneyin!

açıklama

  • ... (,⊂⍨⊣=,) ... Böl (sınırları korurken ve başlangıcına bir sınır eklerken) ...
  • ... ⍞ ... girdi ...
  • ... ' ' ... ... mekanlarda.
  • ... ( ... )¨ ... Sonra, bunun her bir öğesine:
    • ... , ... Birleştirmek ...
    • ... (¯2↓⊢) ... ... son ikisi hariç her şey ...
    • ... 2↑⌽ ... ... son iki elementin tersi ile.
  • 1↓∊ ... Son olarak, yassılaştırılmış sonucun ilk elemanı dışındakileri döndür.

hepsi hariç ilk
Adám



3

J , 20 19 11 bayt

@Bolce Bussiere Kredi

1&A.&.>&.;:

Çevrimiçi deneyin!

       &.;:      on words
    &.>          on each
  A.             apply the permutation
1&               number 1, swap the last two elements

1
13 Bayt ile(1&A.&.>)&.;:
Bolce Bussiere

@BolceBussiere perfect
FrownyFrog

Bir açıklama ekler misiniz? Çözümümün utanç verici bayt sayısını azaltmak için K ile bağlantı kurabileceğimi merak ediyorum!
Streetster

3

Alice , 24 bayt

/0RR'.%$1\' o
\ix*o ne@/

Çevrimiçi deneyin!

açıklama

/...\' o
\.../

Bu, döngü gövdesinin doğrusal bir Sıra pasajı olduğu bir döngü oluşturur ve ' oher iki döngü yinelemesi arasında Kardinal modda yürütürüz. İkincisi sadece bir boşluk yazdırır.

Ordinal kodun zikzak yapısını ortaya çıkaran doğrusal döngü gövdesi aslında şuna benzer:

iR*' %e10xRo.n$@

Bunu yıkmak:

i     Read all input. On subsequent iterations, this will push an empty string.
R     Reverse.
*     Join. On the first iteration, this joins the input to an implicit empty string,
      which does nothing. On subsequent iterations, it will join the empty string to
      the word on top of the string, thereby getting rid of the empty string.
' %   Split around spaces. On the first iteration, this will split the input
      into individual words. On subsequent iterations, this does nothing.
e10   Push "10".
x     Use this to permute the (reversed) word on top of the stack. In
      particular, the word is rearranged with the same permutation that is
      required to sort the string "10", which means the first two letters
      get swapped (which correspond to the last two letters of the actual
      word).
R     Reverse the swapped word.
o     Print it.
.n$@  If there are no words left on the stack, terminate the program.

Harf takas işleminin h~Zfour ( ) yerine üç byte ( ) yapılabildiğini fark ettim e10x, ancak genel olarak bir bayt'ı kaydetmek için mizanpajı ayarlamanın bir yolunu göremiyorum.
Martin Ender

2

brainfuck , 109 100 bayt

Düzenleme: bir harfli kelime kullanmak zorunda değilsiniz

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

Çevrimiçi deneyin!

Sonda bir boşluk yazdırır

Nasıl çalışır

,[>++++[-<-------->],] Puts input on the tape and subtracts 32 from each character
                       This separates each word

>+[- Start the loop
   <[>++++[<++++++++>-]<[->>+<<]<] Add 32 to each letter of the word
                                   Skip this on the first iteration for the last word

   <<[->>+<<]>[[-<+>]>] Swaps the last two letters of the word
   <<[>+>+>]- If there is another word to the left continue loop
              Also set up to add a space to the end of the word
 <] End loop
 >>>>>>>[.>] Print the modified string

Önceki sürüm, 109 bayt

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

Çevrimiçi deneyin!



1

PHP , 119 107 bayt

Düzenleme: totallyhuman sayesinde

<?php foreach(explode(" ",trim(fgets(STDIN)))as$w)echo substr($w,0,strlen($w)-2).strrev(substr($w,-2))," ";

Çevrimiçi deneyin!


1
$wordTek bir karakter değişkeni adı yapamaz mısın ?
Tamamen insan

@totallyhuman Yup! Tam sürümünü yazdım ve sonra sıkıştırdım, ama fark etmedim. Teşekkürler.
Zerquix18

PHP açık etiketleri 6 bayt tasarruf cevabında atlanabilir.
Daniel W.

Ne fgets(STDIN)de olsa atlanabilir mi yoksa değiştirebilir mi diye merak ediyorum $x, çünkü tüm cevaplar cevapları girdi olarak saymıyor
Daniel W.

trim()gereksiz olmalı.
Titus

1

Haskell , 41 bayt

foldr(%)" "
a%(b:' ':r)=b:a:' ':r
a%s=a:s

Çevrimiçi deneyin!

Sonda boşluklu çıktılar.

Tekrarlananlar ' ':rsavurgan görünüyor. Ancak a%(b:t@(' ':r))=b:a:taynı uzunluk ve a%(b:t)|' ':_<-t=b:a:tbir bayt daha uzun.


Haskell , 41 bayt

f(a:b:t)|t<"A"=b:a:f t|1>0=a:f(b:t)
f e=e

Çevrimiçi deneyin!


1

sed , 20 17 + 1 (-r) = 18 bayt

s/(.)(.)\b/\2\1/g

Çevrimiçi deneyin!


TIO bağlantısı yayınlanan kodunuzla eşleşmiyor. TIO bağlantısı birkaç bayt daha uzundur.
Xcali

Hata! Bağlantıyı düzeltti
Noskcaj 28:17

Kaldırabilirsiniz |$. Hiçbir şey yapmıyor. (İhtiyacınız olanı yapması için gerekenleri yapması için (.)(.)(\b|$), fakat bu gerekli değil çünkü \bzaten dizenin sonuna
Ürdün

Boğmaca, ondan kurtulmak istemişti. Teşekkürler
Noskcaj 28:17

1

PHP, 65 bayt

PHP 7.1 gerektirir (veya üstü)

for(;$s=$argv[++$i];$s[-1]=$s[-2],$s[-2]=$c,print"$s ")$c=$s[-1];

cümleyi ayrı komut satırı argümanları olarak alır. İle koş -nr.


77 + 1 baytlık tek bir dizgede çalışmak :

foreach(explode(" ",$argn)as$s){$c=$s[-1];$s[-1]=$s[-2];$s[-2]=$c;echo"$s ";}

İle boru olarak çalıştırın -nR.


... veya çevrimiçi olarak deneyin .



1

Google Sayfaları, 33 Bayt

Hücreden girdi alan A1ve çağrı yapan hücreye çıkış yapan isimsiz çalışma fonksiyonu

=RegExReplace(A1,"(.)(.)\b","$2$1

-2 bayt sayesinde @KevinCruijssen kullanımı için (.)over(\w)


(\w)Yanılmıyorsam ikisi de golf oynayabilir (.). \bZaten sadece kelimeler için bakmak için bir göstergesidir. (Tamamen emin olmasa da, Java'da çalışıyor.)
Kevin Cruijssen

@KevinCruijssen - Kesinlikle haklısın, olabilir. Teşekkür ederim!
Taylor Scott,

1

JavaScript (Node.js) , 38 36 32 bayt

s => s.replace (/ (.) (.) (| $) / g, "$ 2 $ 1") 
s=>s.replace(/(.)(.)\b/g,"$2$1")

Çevrimiçi deneyin!

RegExp, @Giuseppe'nin nezaketinde (bunu bağımsız olarak düşünmeme rağmen), yalnızca bir boşlukla ayrılmış kelimeleri varsayarak yaklaşıyor.

-2 sadece 1 boşluk düşününce ve sondaki boşluk ekleyin

-4 Teşekkürler @Shaggy


Daha fazla yer olması önemli değil, sanırım
l4m2

@ l4m2 Ama eğer daha fazla boşluk varsa o zaman 38 olacak s=>s.replace(/(.)(.)( +|$)/g,"$2$1$3").
Shieru Asakoto,

@ l4m2 BTW orjinal cevabıms=>s.replace(/(.)(.)(\s|$)/g,"$2$1$3")
Shieru Asakoto

ab abc abcd abcde abcdef yapar ab_,bc_ , cd_, de_, ___, ef_,___
l4m2

1
F=s=>s.replace(/(.)(.)(?!\w)/g,"$2$1")aynı uzunluk
l4m2

1

K (oK) , 23 22 bayt

" "/{x@prm[!#x]1}'" "\

Çevrimiçi deneyin!

Örnek:

" "/{x@prm[!#x]1}'" "\"Hello World"
"Helol Wordl"

Açıklama:

FrownyFrog'un Limanı 1 byte tasarruf sağlıyor .

Buna geri döneceğim.

" "/{prm[x]1}'" "\ / the solution
              " "\ / split input on " "
    {       }'     / apply lambda to each
     prm[x]        / permute input x
           1       / and take the 2nd result
" "/               / join with " "

Önceki çözüm:

  • " "/-2{(x_y),|x#y}'" "\ 23 bayt

1

05AB1E , 7 bayt

#vy`sðJ

Çevrimiçi deneyin!

-1 sayesinde Magic Octopus Urn .

Bir sondaki alanı yazdırır.


Bu 11 bayttır
Daniel W.

2
@DanFromGermany Hayır, 05AB1E, bunun 8 bayt olarak gösterilebileceği bir kod sayfasına sahiptir .
Outgolfer Erik

8 bayt ile gösterilen programı çalıştırabilir misiniz?
Daniel W.

@DanFromGermany Evet, 05AB1E yorumlayıcısı bu programı 05AB1E kodlamasındaki bir dosyadan çalıştırabilir.
Outgolfer Erik,

1
@ MagicOctopusUrn Bu bir liste değil, peşinde `.
Outgolfer Erik


0

SNOBOL4 (CSNOBOL4) , 136 119 bayt

	I =INPUT
B	I SPAN(&LCASE &UCASE) . Y ARBNO(' ') =:F(O)
	Y RPOS(2) REM . Z =REVERSE(Z)
	O =O Y ' '	:(B)
O	OUTPUT =O
END

Çevrimiçi deneyin!

Sonda boşlukla yazdırır. Bir dil StriNg Oriented ve symBOlic Dil için bir backronym olduğunda ve kodunuz Brain- Flak'tan daha uzun olduğunda yanlış bir şey yaptığınızı biliyorsunuz :( biliyorsunuzdur şimdi biraz daha iyidir.

Satır Balır Ive değiştirir(alphabetic characters saved as Y)(some number of spaces) boş dize ile .

Aşağıdaki satır, Yas karakterinin son 2 karakterini ayıklar Zve bunları Zters çevrilmiş olarak değiştirir, ardından bir sonraki satır birleştirir O,Y ve tek bir boşluk karakteri.

Sonunda, Iistenen çizgiye göre artık eşleşmediğinde yazdırır B.


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.