Bagaimana cara meluruskan ellipsis?

14

Ini jelas ellipsisessieses.

Terinspirasi oleh pesan obrolan .

Tantangan anda

Diberikan daftar atau spasi atau string kata yang dipisahkan koma, ellipsisessies menjelaskannya.

Untuk ellipsisessieses-ify sebuah kata:

  1. Mulailah dengan kata.
  2. Tambahkan huruf pertama dari kata aslinya hingga akhir.
  3. Tambahkan 2 huruf terakhir dari kata aslinya ke akhir.
  4. Tambahkan huruf kedua hingga terakhir dari kata aslinya hingga akhir.
  5. Tambahkan huruf pertama dari kata aslinya hingga akhir.
  6. Tambahkan huruf terakhir dari kata aslinya hingga akhir.
  7. Ulangi langkah 5 & 6 sekali.
  8. Kamu sudah selesai!

Anda dapat mengasumsikan:

  • Kata-kata input hanya akan alfanumerik
  • Input & output dapat berupa string atau daftar yang dipisahkan oleh spasi
  • Input hanya akan berisi kata-kata
  • Panjang kata-katanya minimal 2 huruf
  • Input akan cocok dengan regex /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • Anda dapat memiliki format input dan output yang berbeda
  • Akan datang lebih banyak lagi...

Kasus uji:

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

Answerestrearar ininniinin bytesbssebsbs terpendek menangwssnwsws!

programmer5000
sumber
Cukup yakin "e" dalam "ellipsisessieses" berasal dari "elips" (kecuali "e" pertama)
Leaky Nun
15
Saya masih tidak tahu bagaimana cara meluruskan ellipsis ... EDIT : rupanya, ini elips.
totallyhuman
1
Untuk langkah 2, saya pikir itu seharusnya hanya menambahkan e, bukan menambahkan huruf pertama
benzene
@ Benzene itu mungkin lebih masuk akal, tapi sekarang sudah terlambat.
programmer5000
2
Ini elips . Bentuk jamak lainnya yang memiliki ejaan yang sama tetapi pengucapan yang berbeda untuk kata yang diakhiri dengan -is dan kata yang diakhiri dengan -e adalah sumbu dan basis .

Jawaban:

16

JavaScript (ES6), 58 57 byte

NB: Ini ternyata menggunakan trik yang sama dengan Jonathan Allan dalam jawaban Jelly ini (meskipun saya perhatikan setelah memposting).

Disimpan 1 byte berkat Jonathan Allan

Bekerja pada array string.

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

Uji kasus

Arnauld
sumber
Woah, ini keren! Pekerjaan yang baik!
programmer5000
Saya percaya Anda dapat menyimpan byte dengan mengganti 21102121dengan 01120101dan n-2dengan -n.
Jonathan Allan
@ Jonathan Allan Tangkapan yang bagus. Terima kasih!
Arnauld
11

Jelly ,  13 12  11 byte

⁽×ʠb3’ịṭµ€K

Program lengkap yang mengambil daftar daftar karakter dan mencetak output yang dipisahkan ruang.

Cobalah online!

Bagaimana?

⁽×ʠ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

Atau daftar kata-kata ke daftar kata-kata juga dimungkinkan dalam 11 byte :

⁽×ʠb3’ị;@µ€

⁽×ʠb3’juga dapat diganti dengan 4,⁵Bj-untuk jumlah byte yang sama
( [4,10]dalam biner [[1,0,0],[1,0,1,0]]bergabung dengan -1is [1,0,0,-1,1,0,1,0]).

Jonathan Allan
sumber
Apakah Anda perlu menggabungkan hasilnya dengan spasi? Anda diperbolehkan membuat daftar / daftar daftar.
programmer5000
@ programmer5000 Ya, bergabung dengan spasi adalah opsional di sini
ASCII-hanya
@ programmer5000 Ada 11 byter alternatif yang mengembalikan daftar yang telah saya berikan di bawah jawaban utama (perhatikan bahwa tidak ada cara untuk mendapatkan yang utama ke 10 dengan menghapus Kkarena sebagai tautan monadik daftar yang dikembalikan tidak akan menjadi satu level dalam, yang saya bayangkan mendorong lemah I / O terlalu jauh - yaitu untuk input ["this", "is", "it"]nilai pengembalian akan berada di [['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]]mana "..." adalah daftar karakter) dan membiarkannya untuk mencetak sebagai program penuh akan menghancurkannya all together as thistssitstsisissiisisitittiitit)
Jonathan Allan
7

05AB1E , 12 byte

εD•Lz•3вÍèJ«

Cobalah online!

Penjelasan

ε              # 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
Emigna
sumber
1
Hehe, orang-orang hebat ...
Jonathan Allan
@ JonathanAllan: Ya, kami memiliki ide yang persis sama. Kompresi pendek Jelly memenangkan hari ini :)
Emigna
6

Retina , 52 49 byte

3 byte, terima kasih kepada Arnauld.

(\w)(\w+)
$1$2$1
(.)(.)(.)\b
$1$2$3$2$2$1$3$2$3$2

Cobalah online!

Biarawati Bocor
sumber
5
Baris kode ketiga itu mengingatkan saya pada mutan dari Total Recall.
Jonathan Allan
@JonathanAllan Siapa yang terinspirasi oleh Eccentrica Gallumbits yang disebutkan dalam Panduan Hitch-Hiker untuk Galaxy.
Neil
5

Python 2 , 56 byte

lambda s:[i+i[0]+i[-1]*2+i[-2]+(i[0]+i[-1])*2for i in s]

Cobalah online!

Saya pikir ini adalah FGITW tercepat saya dan bahkan tidak mengesankan. : P

benar-benar manusiawi
sumber
4

Python 3 , 60 byte

lambda k:[x+''.join(x[-int(i)]for i in"01120101")for x in k]

Cobalah online!

Tuan Xcoder
sumber
4

Arang , 20 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Kebetulan hanya membaca jawaban @ Arnauld setelah mengkode ini tetapi ini pada dasarnya adalah sebuah port. Penjelasan:

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
Neil
sumber
@ Khusus ASCII Tidakkah Anda harus menambahkan byte tambahan untuk -rsbendera?
Neil
Tidak yakin, saya kira begitu? -rsapakah ada hanya untuk menonaktifkan pencetakan prompt input
ASCII-hanya
Haruskah saya hanya menjadikan -rsmode sebagai default?
ASCII
4

sed, 46 byte

s/^\(\(.\).*\(.\)\(.\)\)$/\1\2\4\4\3\2\4\2\4/g

Cobalah online!

Leo Tenenbaum
sumber
3

JavaScript (ES6), 74 60 byte

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

Mengambil input sebagai array, dan output array.

-9 byte berkat Programmer5000

Kasus uji:

Rick Hitchcock
sumber
3

Mathematica, 89 byte

((f[a_]:=#~StringTake~a;k=#<>(q=f@1)<>(w=f[-1])<>w<>f@{-2}<>q<>w<>q<>w)&/@StringSplit@#)&
J42161217
sumber
1
Tidak ada matematika yang Ellipsisessiesesdibangun? :(
programmer5000
3

Dyalog APL, 51 49 byte

Membutuhkan ⎕ML←3

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

-9 byte terima kasih kepada @ Adám dalam obrolan!

Cobalah online!

Zacharý
sumber
3

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

µ96Qó3BÌDX=v+

Cobalah online!

Mengambil daftar kata-kata, dan menghasilkan daftar kata-kata di tumpukan.

Variasi kecil pada trik base-3. Mungkin sudah waktunya untuk bekerja di pangkalan saya 250-kompresor apa pun.

Penjelasan:

μ             .. 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

(Pertanyaan penghitungan Byte: Sekarang saya benar-benar menunjukkan ini di TIO, ia mengambil daftar kata-kata di tumpukan dan menghasilkan daftar kata-kata di tumpukan, tetapi Anda tidak bisa berbuat banyak dengan daftar kata-kata itu) kecuali Anda menutup blok yang dimulai dengan μ. Haruskah saya menghitung penjepit penutup itu?)

betaveros
sumber
1
Haruskah saya menemukan kurung kurawal itu? Ya, jika Anda membutuhkannya.
Erik the Outgolfer
3

Bahasa Wolfram / Mathematica, 66 byte

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

Mengocoknya dengan sangat cepat, mungkin ada sedikit peningkatan di sini atau di sana.

user6014
sumber
2

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

menggunakan trik dari pos @ Arrnauld untuk menyimpan beberapa byte

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

Cobalah online!

Xcali
sumber
2

Arang , 38 30 byte

-8 byte berkat ASCII saja.

F⪪S «ι§ι⁰ײ§ι±¹§ι±²×²⁺§ι⁰§ι±¹ 

Cobalah online!Tautan adalah untuk versi verbose.

Perhatikan ruang trailing.

benar-benar manusiawi
sumber
2

Java 8, 117 byte

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;}}

Mengambil input sebagai String-array, dan memodifikasi array asli ini alih-alih mengembalikan yang baru untuk menghemat byte.

Kemungkinan besar bisa bermain golf lagi ..

Penjelasan:

Coba di sini.

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
Kevin Cruijssen
sumber
2

C # (.NET Core) , 106 byte

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;}}

Cobalah online!

Fungsi Lambda yang mengambil input sebagai array string, dan memodifikasi array asli untuk output

jkelm
sumber