Jak pluralizować elipsę?

14

To oczywiście elipsieseje.

Zainspirowany wiadomością na czacie .

Twoje wyzwanie

Biorąc pod uwagę listę lub spację lub ciąg słów oddzielony przecinkami, ellipsisessiesesifyses.

Aby ellipsisessieses-ify słowo:

  1. Zacznij od słowa.
  2. Dodaj pierwszą literę oryginalnego słowa na końcu.
  3. Dodaj 2 ostatnią literę oryginalnego słowa na końcu.
  4. Dodaj na końcu ostatnią literę oryginalnego słowa.
  5. Dodaj pierwszą literę oryginalnego słowa na końcu.
  6. Dodaj ostatnią literę oryginalnego słowa na końcu.
  7. Powtórz kroki 5 i 6 raz.
  8. Jesteś skończony!

Możesz założyć:

  • Słowa wejściowe będą tylko alfanumeryczne
  • Dane wejściowe i wyjściowe mogą być ciągiem lub listą rozdzieloną spacjami
  • Dane wejściowe będą zawierać tylko słowa
  • Słowa będą miały co najmniej 2 litery
  • Dane wejściowe będą pasować do wyrażenia regularnego /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • Możesz mieć inny format wejściowy i wyjściowy
  • Więcej w przyszłości...

Przypadki testowe:

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

Shorteststtsstst answerarrearar ininniinin bytesbssebsbs winswssnwsws!

programmer5000
źródło
Całkiem pewne, że „e” w „ellipsisessieses” pochodzi od „elips” (z wyjątkiem pierwszego „e”)
Leaky Nun
15
I nadal nie wiem jak pluralize wielokropka ... EDIT : Najwyraźniej, to elipsy.
całkowicie ludzki,
1
W kroku 2 myślę, że należy po prostu dodać e, a nie pierwszą literę
benzen,
@benzene może to mieć więcej sensu, ale teraz jest już za późno.
programista
2
To elipsy . Inne liczby mnogie, które mają tę samą pisownię, ale różną wymowę słowa kończącego się na -is i słowa kończącego się na -e to osie i zasady .

Odpowiedzi:

16

JavaScript (ES6), 58 57 bajtów

NB: Okazuje się, że używa tej samej sztuczki, co Jonathan Allan w tej odpowiedzi Jelly (choć zauważyłem po opublikowaniu).

Oszczędność 1 bajtu dzięki Jonathanowi Allanowi

Działa na tablicach ciągów.

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

Przypadki testowe

Arnauld
źródło
Woah, to jest fajne! Dobra robota!
programator5000,
Wierzę, że można zapisać bajt zastępując 21102121z 01120101i n-2z -n.
Jonathan Allan
@JathanathanAllan Dobry połów. Dzięki!
Arnauld
11

Galaretka ,  13 12  11 bajtów

⁽×ʠb3’ịṭµ€K

Pełny program, który pobiera listę list znaków i drukuje dane wyjściowe rozdzielone spacjami.

Wypróbuj online!

W jaki sposób?

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

Alternatywnie lista słów do listy słów jest również możliwa w 11 bajtach :

⁽×ʠb3’ị;@µ€

⁽×ʠb3’może być również zastąpiony przez 4,⁵Bj-dla tej samej liczby bajtów
( [4,10]w systemie binarnym [[1,0,0],[1,0,1,0]]łączy się z -1is [1,0,0,-1,1,0,1,0]).

Jonathan Allan
źródło
Czy chcesz połączyć wyniki ze spacjami? Możesz wygenerować listę / listę list.
programista
@ programmer5000 Tak, łączenie ze spacjami jest tutaj opcjonalne
tylko ASCII
@ programmer5000 Istnieje alternatywny bajt 11, który zwraca listę, którą podałem poniżej głównej odpowiedzi (zwróć uwagę, że nie ma sposobu na obniżenie głównej do 10 poprzez usunięcie, Kponieważ jako monadyczny link zwrócona lista nie byłaby jedną poziom głęboki, który, jak sądzę, przesuwa zbyt luźne operacje we / wy - to znaczy, że wejściem ["this", "is", "it"]wartości zwracanej byłoby [['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]](gdzie „...” to listy znaków) i pozostawienie jej do wydrukowania jako pełnego programu zniszczyłoby ją wszystko razem jak thistssitstsisissiisisitittiitit)
Jonathan Allan
7

05AB1E , 12 bajtów

εD•Lz•3вÍèJ«

Wypróbuj online!

Wyjaśnienie

ε              # 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
źródło
1
Hehe, wielkie umysły ...
Jonathan Allan
@JonathanAllan: Tak, mieliśmy dokładnie taki sam pomysł. Tym razem krótsza kompresja Jelly wygrała ten dzień :)
Emigna
6

Siatkówka , 52 49 bajtów

3 bajty dzięki Arnauldowi.

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

Wypróbuj online!

Leaky Nun
źródło
5
Trzeci wiersz kodu przypomina mi mutanta z Total Recall.
Jonathan Allan
@JonathanAllan Who został zainspirowany przez Eccentrica Gallumbits wspomnianą w Hitch-Hiker's Guide to the Galaxy.
Neil,
5

Python 2 , 56 bajtów

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

Wypróbuj online!

Myślę, że to mój najszybszy FGITW i nie robi to aż tak imponującego. : P

całkowicie ludzki
źródło
4

Python 3 , 60 bajtów

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

Wypróbuj online!

Pan Xcoder
źródło
4

Węgiel drzewny , 20 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Zdarzyło się, że przeczytałem odpowiedź @ Arnaulda po zakodowaniu tego, ale jest to po prostu część tego. Wyjaśnienie:

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
źródło
Może 18 bajtów?
Tylko ASCII,
@ Tylko ASCII Czy nie musiałbyś dodawać dodatkowych bajtów dla -rsflagi?
Neil,
Nie jestem pewien, tak sądzę? -rsjest tam tylko po to, aby wyłączyć drukowanie monitu o wprowadzenie
tylko ASCII,
Czy -rszamiast tego powinienem ustawić tryb domyślny?
Tylko ASCII,
4

sed, 46 bajtów

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

Wypróbuj online!

Leo Tenenbaum
źródło
3

JavaScript (ES6), 74 60 bytes

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

Takes input as an array, and outputs an array.

-9 bytes thanks to Programmer5000

Test cases:

Rick Hitchcock
źródło
3

Mathematica, 89 bytes

((f[a_]:=#~StringTake~a;k=#<>(q=f@1)<>(w=f[-1])<>w<>f@{-2}<>q<>w<>q<>w)&/@StringSplit@#)&
J42161217
źródło
1
There's no mathematica Ellipsisessieses builtin? :(
programmer5000
3

Dyalog APL, 51 49 bytes

Requires ⎕ML←3

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

-9 bytes thanks to @Adám in chat!

Try it online!

Zacharý
źródło
3

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

µ96Qó3BÌDX=v+

Try it online!

Takes a list of words, and results in a list of words on the stack.

A small variation on the base-3 trick. Maybe it's time to work on my base 250-whatever compressor.

Explanation:

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

(Byte-counting question: Now that I'm actually demonstrating this in TIO, it take a list of words on the stack and results in a list of words on the stack, but you can't really do much with that list of words unless you close the block started by µ. Should I count that closing brace?)

betaveros
źródło
1
Should I cound that closing brace? Yes, if you need it.
Erik the Outgolfer
3

Wolfram Language/Mathematica, 66 bytes

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

Just whipped it up real quick, might have a minor improvement here or there.

user6014
źródło
2

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

used a trick from @Arrnauld's post to save a couple bytes

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

Try it online!

Xcali
źródło
2

Charcoal, 38 30 bytes

-8 bytes thanks to ASCII-only.

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

Try it online! Link is to verbose version.

Note the trailing space.

totallyhuman
źródło
2

Java 8, 117 bytes

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

Takes the input as a String-array, and modified this original array instead of returning a new one to save bytes.

Can most likely be golfed some more..

Explanation:

Try it here.

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
źródło
2

C# (.NET Core), 106 bytes

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

Try it online!

Lambda function that takes input as array of strings, and modifies original array for output

jkelm
źródło