Como pluralizar reticências?

14

É obviamente elipsisessieses.

Inspirado por uma mensagem de bate-papo .

Seu desafio

Dada uma lista ou espaço ou sequência de palavras separada por vírgula, as reticências indicam o significado.

Para elipsesessieses-ify uma palavra:

  1. Comece com a palavra.
  2. Adicione a primeira letra da palavra original ao final.
  3. Adicione 2 da última letra da palavra original ao final.
  4. Adicione a penúltima letra da palavra original ao final.
  5. Adicione a primeira letra da palavra original ao final.
  6. Adicione a última letra da palavra original ao final.
  7. Repita as etapas 5 e 6 uma vez.
  8. Você Terminou!

Você pode assumir:

  • As palavras de entrada serão apenas alfanuméricas
  • Entrada e saída podem ser uma sequência ou lista separada por espaço
  • A entrada conterá apenas palavras
  • As palavras terão pelo menos 2 letras
  • A entrada corresponderá ao regex /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • Você pode ter um formato de entrada e saída diferente
  • Mais por vir ...

Casos de teste:

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

As respostas mais curtas são recebidas por bytes em bytesbssebsbs winswssnwsws!

programmer5000
fonte
Certeza que o "e" é em "ellipsisessieses" é de "elipses" (exceto o primeiro "E")
Leaky freira
15
Eu ainda não sei como pluralizar reticências ... EDIT : Aparentemente, é elipses.
totallyhuman
1
Para a etapa 2, eu acho que deveria ser apenas adicionar um e, não adicione a primeira letra
benzeno
@ benzeno que pode fazer mais sentido, mas agora é tarde demais.
programmer5000
2
São elipses . Outros plurais que têm a mesma ortografia, mas pronúncia diferente para uma palavra que termina em -is e uma palavra que termina em -e são eixos e bases .

Respostas:

16

JavaScript (ES6), 58 57 bytes

NB: Isso acaba usando o mesmo truque que Jonathan Allan nesta resposta Jelly (embora eu tenha notado depois de postar).

Guardado 1 byte graças a Jonathan Allan

Funciona em matrizes de strings.

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

Casos de teste

Arnauld
fonte
Uau, isso é legal! Bom trabalho!
programmer5000
Acredito que você pode salvar um byte substituindo 21102121por 01120101e n-2com -n.
Jonathan Allan
@JonathanAllan Good catch. Obrigado!
Arnauld
11

Geléia ,  13 12  11 bytes

⁽×ʠb3’ịṭµ€K

Um programa completo que pega uma lista de listas de caracteres e imprime a saída separada por espaço.

Experimente online!

Quão?

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

Como alternativa, uma lista de palavras para lista de palavras também é possível em 11 bytes :

⁽×ʠb3’ị;@µ€

⁽×ʠb3’também pode ser substituído por 4,⁵Bj-para a mesma contagem de bytes
( [4,10]em binário é [[1,0,0],[1,0,1,0]]associado por -1is [1,0,0,-1,1,0,1,0]).

Jonathan Allan
fonte
Você precisa unir os resultados com espaços? Você tem permissão para produzir uma lista / uma lista de listas.
programmer5000
@ programmer5000 Sim, juntando-se com espaços é opcional aqui
ASCII-only
@ programmer5000 Existe uma alternativa de 11 byter que retorna uma lista que forneci abaixo da resposta principal (observe que não há como diminuir a principal para 10 removendo o Kporque, como um link monádico, a lista retornada não seria uma nível profundo, o que eu imagino estar empurrando E / S frouxa demais - ou seja, seria uma entrada do ["this", "is", "it"]valor de retorno [['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]](onde "..." são listas de caracteres) e deixá-lo para imprimir como um programa completo o esmagaria todos juntos como thistssitstsisissiisisitittiitit)
Jonathan Allan
7

05AB1E , 12 bytes

εD•Lz•3вÍèJ«

Experimente online!

Explicação

ε              # 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
fonte
1
Hehe, grandes mentes ...
Jonathan Allan
@ JonathanAllan: Sim, tivemos exatamente a mesma idéia que parece. Jellys menor compressão ganhou o dia desta vez :)
Emigna
6

Retina , 52 49 bytes

3 bytes graças a Arnauld.

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

Experimente online!

Freira Furada
fonte
5
Essa terceira linha de código me lembra um mutante do Total Recall.
Jonathan Allan
@ JonathanAllan Quem foi inspirado por Eccentrica Gallumbits mencionada no Guia do Mochileiro das Galáxias.
Neil
5

Python 2 , 56 bytes

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

Experimente online!

Eu acho que este é o meu FGITW mais rápido e nem é tão impressionante. : P

totalmente humano
fonte
4

Python 3 , 60 bytes

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

Experimente online!

Mr. Xcoder
fonte
4

Carvão , 20 bytes

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

Experimente online! Link é a versão detalhada do código. Só aconteceu de ler a resposta de @ Arnauld depois de codificar isso, mas esta é basicamente uma porta dela. Explicação:

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
fonte
18 bytes talvez?
somente ASCII
@ Somente ASCII Você não precisaria adicionar bytes extras para o -rssinalizador?
Neil
Não tenho certeza, acho que sim? -rsé lá apenas para desativar a impressão a entrada rápida embora
ASCII-only
Devo apenas tornar o -rsmodo o padrão?
somente ASCII
4

sed, 46 bytes

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

Experimente online!

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

Recebe a entrada como uma matriz e gera uma matriz.

-9 bytes graças a Programmer5000

Casos de teste:

Rick Hitchcock
fonte
3

Mathematica, 89 bytes

((f[a_]:=#~StringTake~a;k=#<>(q=f@1)<>(w=f[-1])<>w<>f@{-2}<>q<>w<>q<>w)&/@StringSplit@#)&
J42161217
fonte
1
Não há mathematica Ellipsisessiesesembutido? :(
programmer5000
3

Dyalog APL, 51 49 bytes

Requer ⎕ML←3

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

-9 bytes graças a @ Adám no chat!

Experimente online!

Zacharý
fonte
3

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

µ96Qó3BÌDX=v+

Experimente online!

Leva uma lista de palavras e resulta em uma lista de palavras na pilha.

Uma pequena variação no truque base-3. Talvez esteja na hora de trabalhar na minha base 250 - seja qual for o compressor.

Explicação:

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

(Pergunta com contagem de bytes: agora que estou demonstrando isso no TIO, é necessária uma lista de palavras na pilha e resulta em uma lista de palavras na pilha, mas você realmente não pode fazer muito com essa lista de palavras a menos que você feche o bloco iniciado por µ. Devo contar essa chave de fechamento?)

betaveros
fonte
1
Devo cunhar essa chave de fechamento? Sim, se você precisar.
Erik the Outgolfer
3

Wolfram Language / Mathematica, 66 bytes

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

Basta agitá-lo bem rápido, pode ter uma pequena melhoria aqui ou ali.

user6014
fonte
2

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

usou um truque da postagem de @ Arrnauld para salvar alguns bytes

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

Experimente online!

Xcali
fonte
2

Carvão , 38 30 bytes

-8 bytes graças ao ASCII-only.

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

Experimente online! Link é a versão detalhada.

Observe o espaço à direita.

totalmente humano
fonte
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;}}

Recebe a entrada como uma matriz de String e modificou essa matriz original em vez de retornar uma nova para salvar bytes.

Provavelmente pode ser jogado um pouco mais ..

Explicação:

Experimente aqui.

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

Experimente online!

Função Lambda que recebe entrada como matriz de seqüências de caracteres e modifica a matriz original para saída

jkelm
fonte