Wie werden Ellipsen pluralisiert?

14

Es ist offensichtlich ellipsisessieses.

Inspiriert von einer Chat-Nachricht .

Deine Herausforderung

Wenn Sie eine Liste, ein Leerzeichen oder eine durch Kommas getrennte Wortfolge angegeben haben, können Sie diese durch Auslassungspunkte kennzeichnen.

Um ellipsisessieses-ify ein Wort:

  1. Beginnen Sie mit dem Wort.
  2. Fügen Sie den ersten Buchstaben des ursprünglichen Wortes am Ende hinzu.
  3. Fügen Sie am Ende 2 des letzten Buchstabens des ursprünglichen Wortes hinzu.
  4. Fügen Sie den vorletzten Buchstaben des ursprünglichen Wortes am Ende hinzu.
  5. Fügen Sie den ersten Buchstaben des ursprünglichen Wortes am Ende hinzu.
  6. Fügen Sie den letzten Buchstaben des ursprünglichen Wortes am Ende hinzu.
  7. Wiederholen Sie die Schritte 5 und 6 einmal.
  8. Sie sind fertig!

Sie können annehmen:

  • Die eingegebenen Wörter sind nur alphanumerisch
  • Eingabe und Ausgabe können durch Leerzeichen getrennte Zeichenfolgen oder Listen sein
  • Die Eingabe enthält nur Wörter
  • Die Wörter werden mindestens 2 Buchstaben lang sein
  • Die Eingabe entspricht dem regulären Ausdruck /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • Sie können ein anderes Eingabe- und Ausgabeformat haben
  • Da kommt noch mehr...

Testfälle:

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
quelle
Ziemlich sicher, dass das "e" in "ellipsisessieses" von "ellipses" ist (mit Ausnahme des ersten "e")
Leaky Nun
15
Ich weiß immer noch nicht, wie ich Ellipsen pluralisieren soll ... EDIT : Anscheinend sind es Ellipsen.
Totalhuman
1
Für Schritt 2 sollte ich einfach ein e und nicht den ersten Buchstaben hinzufügen
Benzol
@ Benzol das macht vielleicht mehr Sinn, aber es ist jetzt zu spät.
programmer5000
2
Es sind Ellipsen . Andere Pluralformen mit der gleichen Schreibweise, aber unterschiedlicher Aussprache für ein Wort mit der Endung -is und ein Wort mit der Endung -e sind Achsen und Basen .

Antworten:

16

JavaScript (ES6), 58 57 Bytes

NB: Es stellt sich heraus, dass in dieser Gelee-Antwort derselbe Trick wie bei Jonathan Allan verwendet wird (obwohl ich das nach dem Posten bemerkt habe).

Dank Jonathan Allan 1 Byte gespeichert

Funktioniert mit Arrays von Strings.

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

Testfälle

Arnauld
quelle
Woah, das ist cool! Gut gemacht!
Programmierer5000
Ich glaube, Sie können ein Byte sparen, indem Sie 21102121mit 01120101und n-2mit ersetzen -n.
Jonathan Allan
@ JonathanAllan Guter Fang. Vielen Dank!
Arnauld
11

Jelly ,  13 12  11 Bytes

⁽×ʠb3’ịṭµ€K

Ein vollständiges Programm, das eine Liste von Zeichenlisten aufnimmt und die durch Leerzeichen getrennte Ausgabe druckt.

Probieren Sie es online!

Wie?

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

Alternativ ist auch eine Wortliste zur Wortliste in 11 Bytes möglich :

⁽×ʠb3’ị;@µ€

⁽×ʠb3’kann auch durch 4,⁵Bj-für die gleiche Byteanzahl ersetzt werden
( [4,10]in der Binärdatei wird [[1,0,0],[1,0,1,0]]durch -1is verbunden [1,0,0,-1,1,0,1,0]).

Jonathan Allan
quelle
Müssen Sie die Ergebnisse mit Leerzeichen verbinden? Sie dürfen eine Liste / eine Liste von Listen ausgeben.
programmer5000
@ programmer5000 Ja, das Hinzufügen von Leerzeichen ist hier optional
ASCII
@ programmer5000 Es gibt einen alternativen 11-Byte-Code, der eine Liste zurückgibt, die ich unter der Hauptantwort angegeben habe (beachte, dass es keine Möglichkeit gibt, die Hauptantwort auf 10 herabzusetzen, indem der entfernt wird, Kda die zurückgegebene Liste als monadischer Link keine wäre level deep, was ich mir vorstelle, drückt lax I / O zu weit - das heißt, für eine Eingabe ["this", "is", "it"]wäre der Rückgabewert [['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]](wobei "..." Listen von Zeichen sind) und ein Ausdruck als vollständiges Programm würde es zerschlagen alle zusammen als thistssitstsisissiisisitittiitit)
Jonathan Allan
7

05AB1E , 12 Bytes

εD•Lz•3вÍèJ«

Probieren Sie es online!

Erläuterung

ε              # 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
quelle
1
Hehe, tolle Köpfe ...
Jonathan Allan
@ JonathanAllan: Ja, wir hatten genau die gleiche Idee, wie es scheint. Jellys kürzere Kompression gewann den Tag dieses Mal :)
Emigna
6

Retina , 52 49 Bytes

3 Bytes danke an Arnauld.

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

Probieren Sie es online!

Undichte Nonne
quelle
5
Diese dritte Codezeile erinnert mich an einen Mutanten aus Total Recall.
Jonathan Allan
@ JonathanAllan Der sich von Eccentrica Gallumbits inspirieren ließ, die im Per Anhalter durch die Galaxis erwähnt wurden.
Neil
5

Python 2 , 56 Bytes

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

Probieren Sie es online!

Ich denke, das ist meine schnellste FGITW und es ist nicht einmal so beeindruckend. : P

total menschlich
quelle
4

Holzkohle , 20 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Nur zufällig @ Arnauld's Antwort gelesen, nachdem dies codiert wurde, aber dies ist im Grunde eine Portierung davon. Erläuterung:

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
quelle
@ Nur ASCII Müssten Sie für das -rsFlag keine zusätzlichen Bytes hinzufügen ?
Neil
Nicht sicher, denke ich schon? -rsGibt es nur, um das Drucken der Eingabeaufforderung zu deaktivieren
ASCII
Soll ich -rsstattdessen einfach den Modus als Standard festlegen?
Nur ASCII
4

sed, 46 bytes

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

Probieren Sie es online!

Leo Tenenbaum
quelle
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)

Nimmt Eingaben als Array und gibt ein Array aus.

-9 Bytes dank Programmer5000

Testfälle:

Rick Hitchcock
quelle
3

Mathematica, 89 Bytes

((f[a_]:=#~StringTake~a;k=#<>(q=f@1)<>(w=f[-1])<>w<>f@{-2}<>q<>w<>q<>w)&/@StringSplit@#)&
J42161217
quelle
1
Es ist kein Mathematica Ellipsisessieseseingebaut? :(
programmer5000
3

Dyalog APL, 51 49 Bytes

Benötigt ⎕ML←3

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

-9 Bytes dank @ Adám im Chat!

Probieren Sie es online!

Zacharý
quelle
3

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

µ96Qó3BÌDX=v+

Probieren Sie es online!

Nimmt eine Liste von Wörtern und führt zu einer Liste von Wörtern auf dem Stapel.

Eine kleine Variation des Base-3-Tricks. Vielleicht ist es Zeit, an meinem 250er-Kompressor zu arbeiten.

Erläuterung:

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

(Frage zur Byte-Zählung: Da ich dies jetzt in TIO demonstriere, werden eine Liste von Wörtern auf dem Stapel und eine Liste von Wörtern auf dem Stapel erstellt, aber mit dieser Liste von Wörtern kann man nicht wirklich viel anfangen es sei denn, Sie schließen den von µ gestarteten Block. Soll ich diese schließende Klammer zählen?)

betaveros
quelle
1
Sollte ich diese schließende Klammer cound? Ja, wenn du es brauchst.
Erik der Outgolfer
3

Wolfram Language / Mathematica, 66 Bytes

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

Einfach ganz schnell aufpeppen, könnte hier oder da eine kleine Verbesserung haben.

user6014
quelle
2

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

hat einen Trick von @ Arrnauld's Post benutzt, um ein paar Bytes zu retten

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

Probieren Sie es online!

Xcali
quelle
2

Kohle , 38 30 Bytes

-8 Bytes nur dank ASCII.

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

Probieren Sie es online! Link ist zur ausführlichen Version.

Beachten Sie das nachfolgende Leerzeichen.

total menschlich
quelle
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;}}

Nimmt die Eingabe als String-Array und modifiziert dieses ursprüngliche Array, anstatt ein neues zurückzugeben, um Bytes zu sparen.

Kann höchstwahrscheinlich noch mehr golfen werden ..

Erläuterung:

Probieren Sie es hier aus.

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

Probieren Sie es online!

Lambda-Funktion, die Eingaben als Array von Zeichenfolgen verwendet und das ursprüngliche Array für die Ausgabe ändert

jkelm
quelle