Comment pluraliser les points de suspension?


14

Ce sont évidemment des ellipsisessieses.

Inspiré d' un message de chat .

Votre défi

Étant donné une liste ou un espace ou une chaîne de mots séparés par des virgules, les points de suspension les identifient.

Pour ellipsisessieses-ify un mot:

  1. Commencez par le mot.
  2. Ajoutez la première lettre du mot d'origine à la fin.
  3. Ajoutez à la fin 2 de la dernière lettre du mot d'origine.
  4. Ajoutez l'avant-dernière lettre du mot d'origine à la fin.
  5. Ajoutez la première lettre du mot d'origine à la fin.
  6. Ajoutez la dernière lettre du mot d'origine à la fin.
  7. Répétez les étapes 5 et 6 une fois.
  8. Vous avez terminé!

Vous pouvez supposer:

  • Les mots saisis seront uniquement alphanumériques
  • L'entrée et la sortie peuvent être une chaîne ou une liste séparée par des espaces
  • L'entrée ne contiendra que des mots
  • Les mots compteront au moins 2 lettres
  • L'entrée correspondra à l'expression régulière /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • Vous pouvez avoir un format d'entrée et de sortie différent
  • Plus à venir...

Cas de test:

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!


Je suis sûr que les "e" dans "ellipsisessieses" viennent de "ellipses" (sauf le premier "e")
Leaky Nun

15
Je ne sais toujours pas comment pluraliser les ellipses ... EDIT : apparemment, ce sont des ellipses.
2017 totalement humain

1
Pour l'étape 2, je pense qu'il faudrait simplement ajouter un e, pas ajouter la première lettre
benzène

@benzene qui pourrait avoir plus de sens, mais il est trop tard maintenant.
programmer5000

2
Ce sont des ellipses . D'autres pluriels qui ont la même orthographe mais une prononciation différente pour un mot se terminant par -is et un mot se terminant par -e sont des axes et des bases .

Réponses:


16

JavaScript (ES6), 58 57 octets

NB: Cela s'avère utiliser la même astuce que Jonathan Allan dans cette réponse Jelly (bien que je l'ai remarqué après avoir posté).

1 octet enregistré grâce à Jonathan Allan

Fonctionne sur des tableaux de chaînes.

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

Cas de test


Woah, c'est cool! Bon travail!
programmer5000

Je pense que vous pouvez enregistrer un octet en remplaçant 21102121par 01120101et n-2par -n.
Jonathan Allan

@JonathanAllan Bonne prise. Merci!
Arnauld

11

Gelée ,  13 12  11 octets

⁽×ʠb3’ịṭµ€K

Un programme complet qui prend une liste de listes de caractères et imprime la sortie séparée par des espaces.

Essayez-le en ligne!

Comment?

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

Alternativement, une liste de mots en liste de mots est également possible en 11 octets :

⁽×ʠb3’ị;@µ€

⁽×ʠb3’peut également être remplacé par 4,⁵Bj-pour le même nombre d'octets
( [4,10]en binaire est [[1,0,0],[1,0,1,0]]joint par -1est [1,0,0,-1,1,0,1,0]).


Avez-vous besoin de joindre les résultats avec des espaces? Vous êtes autorisé à sortir une liste / une liste de listes.
programmer5000

@ programmer5000 Oui, la jonction avec des espaces est facultative ici
ASCII uniquement

@ programmer5000 Il existe une alternative de 11 octets qui renvoie une liste que j'ai donnée sous la réponse principale (notez qu'il n'y a aucun moyen de ramener la principale à 10 en supprimant le Kcar en tant que lien monadique, la liste renvoyée n'en serait pas une niveau profond, ce qui, j'imagine, pousse les E / S laxistes trop loin - c'est-à-dire qu'une entrée de ["this", "is", "it"]la valeur de retour serait [['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]](où "..." sont des listes de caractères) et le laisser à imprimer comme un programme complet le briserait tous ensemble comme thistssitstsisissiisisitittiitit)
Jonathan Allan

7

05AB1E , 12 octets

εD•Lz•3вÍèJ«

Essayez-le en ligne!

Explication

ε              # 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, grands esprits ...
Jonathan Allan

@JonathanAllan: Oui, nous avions exactement la même idée, semble-t-il. La compression plus courte de Jellys a remporté la journée cette fois :)
Emigna

6

Rétine , 52 49 octets

3 octets grâce à Arnauld.

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

Essayez-le en ligne!


5
Cette troisième ligne de code me rappelle un mutant de Total Recall.
Jonathan Allan

@JonathanAllan Qui a été inspiré par Eccentrica Gallumbits mentionné dans le Guide de l'auto-stoppeur de la galaxie.
Neil



4

Fusain , 20 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Il ne m'est arrivé de lire la réponse de @ Arnauld qu'après avoir codé cela, mais c'est essentiellement un portage. Explication:

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 uniquement Ne seriez-vous pas obligé d'ajouter des octets supplémentaires pour l' -rsindicateur?
Neil

Pas sûr, je suppose que oui? -rsest là juste pour désactiver l'impression de l'invite de saisie
ASCII uniquement

Dois-je simplement choisir le -rsmode par défaut?
uniquement en ASCII


3

JavaScript (ES6), 74 60 octets

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

Prend l'entrée en tant que tableau et génère un tableau.

-9 octets grâce à Programmer5000

Cas de test:


3

Mathematica, 89 octets

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

1
Il n'y a pas de mathématique Ellipsisessiesesintégrée? :(
programmer5000


3

Dyalog APL, 51 49 octets

A besoin ⎕ML←3

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

-9 octets grâce à @ Adám dans le chat!

Essayez-le en ligne!


3

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

µ96Qó3BÌDX=v+

Essayez-le en ligne!

Prend une liste de mots et donne une liste de mots sur la pile.

Une petite variation sur l'astuce de base-3. Il est peut-être temps de travailler sur ma base 250, quel que soit le compresseur.

Explication:

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

(Question de comptage d'octets: maintenant que je démontre cela dans TIO, cela prend une liste de mots sur la pile et donne une liste de mots sur la pile, mais vous ne pouvez pas vraiment faire grand-chose avec cette liste de mots sauf si vous fermez le bloc commencé par µ. Dois-je compter cette accolade fermante?)


1
Dois-je mettre fin à cette accolade? Oui, si vous en avez besoin.
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.


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!


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.


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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.