Как приумножить многоточие?


14

Это явно эллипсиссы.

Вдохновленный сообщением чата .

Ваш вызов

Учитывая список или пробел или строку слов, разделенных запятыми, ellipsisessiesesify их.

К многоточию-ифу слово:

  1. Начните со слова.
  2. Добавьте первую букву оригинального слова в конец.
  3. Добавьте 2 из последней буквы исходного слова в конец.
  4. Добавьте в конец последнюю или последнюю букву оригинального слова.
  5. Добавьте первую букву оригинального слова в конец.
  6. Добавьте последнюю букву оригинального слова в конец.
  7. Повторите шаги 5 и 6 один раз.
  8. Вы сделали!

Вы можете предположить:

  • Вводимые слова будут только буквенно-цифровыми
  • Вход и выход могут быть строкой или списком через пробел
  • Вход будет содержать только слова
  • Слова будут длиной не менее 2 букв
  • Ввод будет соответствовать регулярному выражению /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • Вы можете иметь другой формат ввода и вывода
  • Еще не все...

Тестовые случаи:

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!


Уверен, что "e" в "ellipsisessieses" происходит от "ellipses" (кроме первого "e")
Leaky Nun

15
Я до сих пор не знаю, как приумножить многоточие ... РЕДАКТИРОВАТЬ : очевидно, это эллипсы.
полностью человек

1
Для шага 2, я думаю, что это должно быть просто добавить е, а не добавить первую букву
бензол

@benzene, это может иметь больше смысла, но сейчас уже слишком поздно.
programmer5000

2
Это эллипсы . Другие множественные числа, которые имеют одинаковое написание, но различаются по произношению для слова, оканчивающегося на -is, и слова, оканчивающегося на -e, являются осями и основами .

Ответы:


16

JavaScript (ES6), 58 57 байт

NB: в этом ответе желе получается использовать тот же трюк, что и Джонатан Аллан (хотя я заметил это после публикации).

Сохранено 1 байт благодаря Джонатану Аллану

Работает над массивами строк.

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

Контрольные примеры


Вау, это круто! Хорошая работа!
programmer5000

Я считаю, что вы можете сохранить байт, заменив 21102121на 01120101и n-2с -n.
Джонатан Аллан

@JonathanAllan Хороший улов. Благодарность!
Арно

11

Желе ,  13 12  11 байт

⁽×ʠb3’ịṭµ€K

Полная программа, которая берет список списков символов и печатает вывод через пробел.

Попробуйте онлайн!

Как?

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

В качестве альтернативы список слов в список слов также возможен в 11 байтов :

⁽×ʠb3’ị;@µ€

⁽×ʠb3’также может быть заменено 4,⁵Bj-на тот же счетчик байтов
( [4,10]в двоичном [[1,0,0],[1,0,1,0]]соединяется -1is [1,0,0,-1,1,0,1,0]).


Вам нужно объединить результаты с пробелами? Вам разрешено выводить список / список списков.
programmer5000

@ programmer5000 Да, объединение с пробелами здесь необязательно
только ASCII

@ programmer5000 Существует альтернативный 11-байтовый, который возвращает список, который я дал ниже основного ответа (обратите внимание, что нет способа уменьшить основной до 10, удалив символ, Kпотому что в качестве монадической ссылки возвращаемый список не будет одним на глубоком уровне, который, я думаю, слишком далеко продвигает слабый ввод-вывод - то есть для ввода ["this", "is", "it"]возвращаемого значения будет [['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]](где «...» - списки символов) и оставление его для печати, так как полная программа разбьет его все вместе как thistssitstsisissiisisitittiitit)
Джонатан Аллан

7

05AB1E , 12 байтов

εD•Lz•3вÍèJ«

Попробуйте онлайн!

объяснение

ε              # 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
Хе-хе, великие умы ...
Джонатан Аллан

@JonathanAllan: Да, у нас была точно такая же идея, как кажется. Короткое сжатие желе выиграл день на этот раз :)
Emigna

6

Retina , 52 49 байт

3 байта благодаря Арно.

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

Попробуйте онлайн!


5
Эта третья строка кода напоминает мне мутанта из Total Recall.
Джонатан Аллан

@JonathanAllan Кто был вдохновлен Эксцентриком Галлумбитсом, упомянутым в Руководстве Автостопщика по Галактике.
Нил



4

Древесный уголь , 20 байтов

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

Попробуйте онлайн! Ссылка на подробную версию кода. Только прочитал ответ @ Arnauld после кодирования этого, но это в основном порт этого. Объяснение:

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-only Не нужно ли добавлять дополнительные байты для -rsфлага?
Нил

Не уверен, я так думаю? -rsхотя можно отключить печать приглашения ввода
только ASCII

Должен ли я просто сделать -rsрежим по умолчанию вместо этого?
Только для ASCII


3

JavaScript (ES6), 74 60 байт

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

Принимает ввод как массив и выводит массив.

-9 байт благодаря Programmer5000

Тестовые случаи:


3

Mathematica, 89 байт

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

1
Там нет Ellipsisessiesesвстроенной математики ? :(
programmer5000



3

Paradoc (v0.2.10), 13? байты (CP-1252)

µ96Qó3BÌDX=v+

Попробуйте онлайн!

Принимает список слов и приводит к списку слов в стеке.

Небольшая вариация трюка с базой-3. Может быть, пришло время работать на моей базе 250-любой компрессор.

Объяснение:

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

(Вопрос подсчета байтов: теперь, когда я фактически демонстрирую это в TIO, он берет список слов в стеке и приводит к списку слов в стеке, но с этим списком слов вы мало что можете сделать. если вы не закроете блок, начинающийся с µ. Должен ли я считать эту закрывающую скобку?)


1
Должен ли я назвать эту закрывающую скобку? Да, если вам это нужно.
Эрик Outgolfer

3

Wolfram Language / Mathematica, 66 байт

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

Просто взбил это очень быстро, может быть небольшое улучшение здесь или там.




2

Java 8, 117 байт

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

Принимает входные данные в виде массива String и изменяет этот исходный массив вместо возврата нового для сохранения байтов.

Скорее всего, можно играть в гольф еще немного ..

Объяснение:

Попробуй это здесь.

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 байт

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

Попробуйте онлайн!

Лямбда-функция, которая принимает входные данные в виде массива строк и изменяет исходный массив для вывода

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.