Üç nokta nasıl çoğaltılır?


14

Açıkçası elipsisezler.

Bir sohbet mesajından ilham alındı .

Sizin meydan okuma

Bir liste veya boşluk veya virgülle ayrılmış bir kelime dizisi verildiğinde, elipsleri tanımlayın.

Bir kelimeyi üç noktaya çıkarmak için:

  1. Kelimeyle başlayın.
  2. Orijinal kelimenin ilk harfini sonuna ekleyin.
  3. Orijinal kelimenin son harfinin 2'sini sonuna ekleyin.
  4. Orijinal sözcüğün sondan ikinci harfini sonuna ekleyin.
  5. Orijinal kelimenin ilk harfini sonuna ekleyin.
  6. Orijinal kelimenin son harfini sonuna ekleyin.
  7. 5. ve 6. adımları bir kez tekrarlayın.
  8. Sen bittin!

Varsayabilirsiniz:

  • Girilen kelimeler yalnızca alfasayısal olacak
  • Girdi ve çıktı boşlukla ayrılmış bir dize veya liste olabilir
  • Girdi yalnızca kelimeler içerecek
  • Kelimeler en az 2 harf uzunluğunda olacak
  • Giriş normal ifadeyle eşleşecek /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • Farklı bir giriş ve çıkış formatınız olabilir
  • Gelmek için daha fazla...

Test senaryoları:

ellipsis -> ellipsisessieses
goat -> goatgttagtgt
covfefe -> covfefeceefcece
programmer5000 -> programmer5000p000p0p0
up vote down goat -> upuppuupup voteveetveve downdnnwdndn goatgttagtgt
it is golf yo -> itittiitit isissiisis golfgfflgfgf yoyooyyoyo
crossed out 44 is still 44 -> crossedcddecdcd outottuotot 4444444444 isissiisis stillslllslsl 4444444444

En kısa sürede yanıt veren ininniinin bytesbssebsbs winswssnwsws!


Kesinlikle eminim "ellipsisessieses" de "elipsler" (ilk "e" hariç)
Leaky Nun

15
Ben hala üç nokta ... çoğul bilmiyorum EDIT : görünüşe göre, 's üç nokta.
totallyhuman

1
Adım 2 için, sadece bir e eklemeniz gerektiğini düşünüyorum, ilk harfi eklemeyin
benzen

@benzene daha mantıklı olabilir, ama şimdi çok geç.
programmer5000

2
Bu var üç nokta . -İs ile biten bir sözcük ve -e ile biten bir sözcük için aynı yazım ancak farklı telaffuzlara sahip diğer çoğullar, eksenler ve tabanlardır .

Yanıtlar:


16

JavaScript (ES6), 58 57 bayt

Not: Bu, bu Jelly cevabında Jonathan Allan ile aynı hileyi kullanıyor (ancak gönderdikten sonra fark ettim).

Jonathan Allan sayesinde 1 bayt kurtarıldı

Dize dizileri üzerinde çalışır.

s=>s.map(s=>s+'01120101'.replace(/./g,n=>s.substr(-n,1)))

Test senaryoları


Vay, bu harika! İyi iş!
programmer5000

Sana değiştirerek byte kaydedebilirsiniz inanıyoruz 21102121ile 01120101ve n-2ile -n.
Jonathan Allan

@JonathanAllan İyi yakaladın. Teşekkürler!
Arnauld

11

Jöle ,  13 12  11 bayt

⁽×ʠb3’ịṭµ€K

Karakter listelerinin listesini alan ve boşlukla ayrılmış çıktıyı basan tam bir program.

Çevrimiçi deneyin!

Nasıl?

⁽×ʠb3’ịṭµ€K - Main link: list of lists of characters e.g. ["this","is","it"]
        µ€  - for each word in the input:            e.g. "this"
⁽×ʠ         -   base 250 literal 5416                     5416
   b3       -   converted to base 3                       [2,1,1,0,2,1,2,1]
     ’      -   decrement                                 [1,0,0,-1,1,0,1,0]
      ị     -   index into the word                       "tssitsts"
       ṭ    -   tack to the word                          ["this",["tssitsts"]]
          K - join the results with spaces                ["this",["tssitsts"]," is",["issiisis"]," it",["ittiitit"]]
            - implicit print                              thistssitsts isissiisis itittiitit

Alternatif olarak, 11 baytlık bir kelime listesi de mümkündür :

⁽×ʠb3’ị;@µ€

⁽×ʠb3’tarafından da ikame edilebilir 4,⁵Bj-, aynı bayt sayısı için
( [4,10]ikili olarak bir [[1,0,0],[1,0,1,0]]ile birleştirilmiş -1olan [1,0,0,-1,1,0,1,0]).


Sonuçlara boşluklarla katılmanız mı gerekiyor? Bir liste / liste listesi çıkarmanıza izin verilir.
programmer5000

@ programmer5000 Evet, boşluklarla katılmak burada isteğe bağlıdır
yalnızca ASCII-sadece

@ programmer5000 Ana cevabın altında verdiğim bir listeyi döndüren alternatif bir 11 byter var ( Kbir monadik bağlantı olarak döndürülen listenin bir tane olmayacağı için ana listeyi 10'a indirmenin bir yolu olmadığını unutmayın. Seviyem derin, gevşek I / O'yu çok ileri itiyor - yani ["this", "is", "it"]dönüş değerinin bir girişi [['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]]("..." karakter listeleridir) ve tam bir program olarak yazdırmak için bırakmak onu parçalayacaktı hep birlikte as thistssitstsisissiisisitittiitit)
Jonathan Allan

7

05AB1E , 12 bayt

εD•Lz•3вÍèJ«

Çevrimiçi deneyin!

açıklama

ε              # apply on each word in input
 D             # duplicate the word
  •Lz•         # push the base-255 compressed number 5416
      3в       # convert to a list of base-3 digits (yields [2, 1, 1, 0, 2, 1, 2, 1])
        Í      # subtract 2 from each (yields [0, -1, -1, -2, 0, -1, 0, -1])
         è     # index into the word with these numbers
          J    # join to string
           «   # append to the original word

1
Hehe, harika beyinler ...
Jonathan Allan

@JonathanAllan: Evet, göründüğü gibi aynı fikre sahiptik. Jellys bu kez daha kısa sıkıştırma kazandı :)
Emigna




4

Kömür , 20 bayt

F⪪S «ι↑E”o∨↙8”§ι±Iκ→

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. @ Arnauld'un cevabını ancak bunu kodladıktan sonra okudu ama bu aslında bir limanı. Açıklama:

F   «                   Loop over
  S                     Input string
 ⪪                       Split at spaces
     ι                  Print the word
        ”o∨↙8”          Compressed string 01120101
       E                Map over each character
                 Iκ     Cast character to integer
                ±       Negate
              §ι        Circularly index into word
      ↑                 Print array upwards, prints each element rightwards
                    →    Move right


@ ASCII-only -rsBayrak için fazladan bayt eklemeniz gerekmez mi ?
Neil

Emin değilim, sanırım? -rsSadece devre dışı baskı var olsa istemi giriş
ASCII sadece

Bunun -rsyerine modu varsayılan yapmalı mıyım?
Yalnızca ASCII


3

JavaScript (ES6), 74 60 bayt

s=>s.map(s=>s+(a=s[l=s.length-1],b=s[0])+a+a+s[l-1]+b+a+b+a)

Bir dizi olarak girdi alır ve bir dizi çıkarır.

Programmer5000 sayesinde -9 bayt

Test senaryoları:


3

Mathematica, 89 bayt

((f[a_]:=#~StringTake~a;k=#<>(q=f@1)<>(w=f[-1])<>w<>f@{-2}<>q<>w<>q<>w)&/@StringSplit@#)&

1
EllipsisessiesesYerleşik bir mathematica yok mu? :(
programmer5000


3

Dyalog APL, 51 49 bayt

gerektirir ⎕ML←3

∊{⍺,' ',⍵}/{S←1,L←≢⍵⋄⍵,⍵[∊S(L-0 1)S S]}¨' '(≠⊂⊢)⍞

@ Adám sohbet sayesinde -9 bayt!

Çevrimiçi deneyin!


3

Paradoc (v0.2.10), 13? bayt (CP-1252)

µ96Qó3BÌDX=v+

Çevrimiçi deneyin!

Kelimelerin bir listesini alır ve yığında sözcüklerin bir listesini verir.

Taban-3 numarasında küçük bir varyasyon. Belki de benim kompresörümde 250 üssünde çalışma zamanı.

Açıklama:

μ             .. Map the following block over each word (the block is
              .. terminated by }, but that doesn't exist, so until EOF)
              .. (The word is on the stack now.)
 96Qó         .. 96 * 26 (Q in base 26) = 2496, a hack to prevent us from
              .. needing a space to separate this from the following number.
     3B       .. Convert 2496 to base 3 to get [1,0,1,0,2,1,1,0]
       ÌD     .. Negate and reverse to get [0,-1,-1,-2,0,-1,0,-1]
         X    .. Push the loop variable: the word being mapped over
          =v  .. Index, vectorize; map over the indices by indexing them
              .. into the word
            + .. Concatenate with the original word

(Bayt sayma sorusu: Şimdi bunu aslında TIO'da gösterdiğime göre, yığındaki kelimelerin bir listesini alıyor ve yığındaki kelimelerin bir listesiyle sonuçlanıyor, ancak bu kelimeler listesiyle gerçekten fazla bir şey yapamazsınız. µ ile başlayan bloğu kapatmazsanız. Bu kapanış ayracı saymalı mıyım?)


1
Kapanış ayracı mı takmalıyım? Evet, ihtiyacınız varsa.
Outgolfer Erik

3

Wolfram Dili / Mathematica, 66 bayt

StringJoin[StringSplit[#,""]/.{a_,___,b_,c_}:>{#,a,c,c,b,a,c,a,c}]&

Sadece gerçek hızlı çırpılmış, burada veya orada küçük bir gelişme olabilir.


2

Perl 5 , 55 49 + 1 (-a) = 56 50 bayt

@ Arrnauld'un gönderisinden birkaç bayt kaydetmek için bir numara kullandı

say map$_.'01120101 '=~s/\d/substr$_,-$&,1/egr,@F

Çevrimiçi deneyin!



2

Java 8, 117 bayt

a->{int i=0,l;for(String s:a){char c=s.charAt(0),d=s.charAt(l=s.length()-1);a[i++]+=""+c+d+d+s.charAt(l-1)+c+d+c+d;}}

Girdiyi bir String dizisi olarak alır ve baytları kaydetmek için yenisini döndürmek yerine bu orijinal diziyi değiştirir.

Büyük olasılıkla biraz daha golf yapılabilir ..

Açıklama:

Burada deneyin.

a->{                          // Method with String-array as parameter and no return-type
  int i=0,                    //  Index-integer (starting at 0)
      l;                      //  Length-integer which we use multiple times
  for(String s:a){            //  Loop over the input array
    char c=s.charAt(0),       //   The first character of the word
         d=s.charAt(          //   The last character of the word
            l=s.length()-1);  //    and set `l` at the same time to `length()-1`
    a[i++]+=                  //   Append to the current value in the array:
      ""                      //    String so the characters aren't appended as integers
      +c                      //    + the first character
      +d+d                    //    + two times the last character
      +s.charAt(l-1)          //    + the single-last character
      +c+d+c+d;               //    + the first + last character two times
  }                           //  End of loop
}                             // End of method

2

C # (.NET Core) , 106 bayt

n=>{for(int i=0,x;i<n.Length;){var h=n[i];x=h.Length-1;char y=h[0],j=h[x];n[i++]=h+y+j+j+h[x-1]+y+j+y+j;}}

Çevrimiçi deneyin!

Girdiyi dizeler dizisi olarak alan ve çıkış için orijinal diziyi değiştiren Lambda işlevi

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.