¿Cómo pluralizar puntos suspensivos?


14

Obviamente son puntos suspensivos.

Inspirado en un mensaje de chat .

Tu reto

Dada una lista o espacio o cadena de palabras separadas por comas, los puntos suspensivos las califican.

Para elipsisessieses-ify una palabra:

  1. Comience con la palabra.
  2. Agregue la primera letra de la palabra original al final.
  3. Agregue 2 de la última letra de la palabra original al final.
  4. Agregue la penúltima letra de la palabra original al final.
  5. Agregue la primera letra de la palabra original al final.
  6. Agregue la última letra de la palabra original al final.
  7. Repita los pasos 5 y 6 una vez.
  8. Ya terminaste!

Puedes asumir:

  • Las palabras de entrada solo serán alfanuméricas.
  • La entrada y salida puede ser una cadena o lista separada por espacios
  • La entrada contendrá solo palabras
  • Las palabras tendrán al menos 2 letras.
  • La entrada coincidirá con la expresión regular /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • Puede tener un formato de entrada y salida diferente
  • Más por venir...

Casos de prueba:

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!


Bastante seguro de que la "e" en "puntos suspensivos" es de "puntos suspensivos" (excepto la primera "e")
Leaky Nun

15
Yo todavía no sé cómo pluralizar puntos suspensivos ... EDITAR : Al parecer, es elipses.
totalmente humano

1
Para el paso 2, creo que solo debería agregar una e, no agregar la primera letra
benceno

@benceno que podría tener más sentido, pero ya es demasiado tarde.
programador

2
Son elipses . Otros plurales que tienen la misma ortografía pero diferente pronunciación para una palabra que termina en -is y una palabra que termina en -e son ejes y bases .

Respuestas:


16

JavaScript (ES6), 58 57 bytes

NB: Resulta utilizar el mismo truco que Jonathan Allan en esta respuesta de Jelly (aunque lo noté después de publicar).

Guardado 1 byte gracias a Jonathan Allan

Funciona en matrices de cadenas.

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

Casos de prueba


Woah, esto es genial! ¡Buen trabajo!
programmer5000

Creo que puede guardar un byte reemplazando 21102121con 01120101y n-2con -n.
Jonathan Allan

@JonathanAllan Buena captura. ¡Gracias!
Arnauld

11

Jalea ,  13 12  11 bytes

⁽×ʠb3’ịṭµ€K

Un programa completo que toma una lista de listas de caracteres e imprime la salida separada por espacios.

Pruébalo en línea!

¿Cómo?

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

Alternativamente, una lista de palabras para la lista de palabras también es posible en 11 bytes :

⁽×ʠb3’ị;@µ€

⁽×ʠb3’también se puede reemplazar por 4,⁵Bj-el mismo número de bytes
( [4,10]en binario se [[1,0,0],[1,0,1,0]]une por -1is [1,0,0,-1,1,0,1,0]).


¿Necesitas unir los resultados con espacios? Se le permite generar una lista / una lista de listas.
programmer5000

@ programmer5000 Sí, unirse con espacios es opcional aquí
solo ASCII el

@ programmer5000 Hay un byte alternativo de 11 que devuelve una lista que he proporcionado debajo de la respuesta principal (tenga en cuenta que no hay forma de reducir el número principal a 10 eliminando el Kporque como enlace monádico la lista devuelta no sería una nivel profundo, que imagino está presionando la E / S laxa demasiado lejos, es decir, una entrada del ["this", "is", "it"]valor de retorno sería [['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]](donde "..." son listas de caracteres) y dejar que se imprima como un programa completo lo aplastaría todos juntos como thistssitstsisissiisisitittiitit)
Jonathan Allan

7

05AB1E , 12 bytes

εD•Lz•3вÍèJ«

Pruébalo en línea!

Explicación

ε              # 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
Jeje, grandes mentes ...
Jonathan Allan

@ JonathanAllan: Sí, teníamos exactamente la misma idea que parece. Jellys compresión más corta ganó el día esta vez :)
Emigna

6

Retina , 52 49 bytes

3 bytes gracias a Arnauld.

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

Pruébalo en línea!


55
Esa tercera línea de código me recuerda a un mutante de Total Recall.
Jonathan Allan

@JonathanAllan ¿Quién se inspiró en los excéntricos Gallumbits mencionados en la Guía de autostop de la galaxia?
Neil



4

Carbón de leña , 20 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Solo leí la respuesta de @ Arnauld después de codificar esto, pero esto es básicamente un puerto. Explicación:

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


@ Solo ASCII ¿No debería agregar bytes adicionales para la -rsbandera?
Neil

No estoy seguro, supongo que sí. -rs¿está ahí solo para deshabilitar la impresión de la solicitud de entrada?
ASCII solo el

¿Debo hacer que el -rsmodo sea el predeterminado?
Solo ASCII el


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)

Toma la entrada como una matriz y genera una matriz.

-9 bytes gracias a Programmer5000

Casos de prueba:


3

Mathematica, 89 bytes

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

1
No hay matemática Ellipsisessiesesincorporada? :(
programmer5000


3

Dyalog APL, 51 49 bytes

Requiere ⎕ML←3

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

-9 bytes gracias a @ Adám en el chat!

Pruébalo en línea!


3

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

µ96Qó3BÌDX=v+

Pruébalo en línea!

Toma una lista de palabras y da como resultado una lista de palabras en la pila.

Una pequeña variación en el truco de base 3. Tal vez es hora de trabajar en mi compresor base 250, lo que sea.

Explicación:

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

(Pregunta de conteo de bytes: ahora que realmente estoy demostrando esto en TIO, toma una lista de palabras en la pila y da como resultado una lista de palabras en la pila, pero realmente no puedes hacer mucho con esa lista de palabras a menos que cierre el bloque iniciado por µ. ¿Debo contar esa llave de cierre?)


1
¿Debo unir esa llave de cierre? Si, si lo necesitas.
Erik the Outgolfer

3

Wolfram Language / Mathematica, 66 bytes

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

Simplemente lo agilizó muy rápido, podría tener una mejora menor aquí o allá.


2

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

usó un truco de la publicación de @ Arrnauld para guardar un par de bytes

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

Pruébalo en línea!



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

Toma la entrada como una matriz de cadenas y modifica esta matriz original en lugar de devolver una nueva para guardar bytes.

Lo más probable es que se pueda jugar más al golf.

Explicación:

Pruébalo aquí.

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

Pruébalo en línea!

Función Lambda que toma la entrada como una matriz de cadenas y modifica la matriz original para la salida

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.