Як плюралізувати еліпсис?


14

Це, очевидно, еліпсисиси.

Натхненний повідомленням чату .

Ваше завдання

Давши список або пробіл або відокремлений комами рядок слів, еліпсисизмінюйте їх.

Для еліпсисиси - якщо слово:

  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 winwssnwsws!


Досить впевнений, що "e" s в "ellipsisessieses" походить від "ellipses" (крім першого "e")
Leaky Nun

15
Я досі не знаю, як плюралізувати еліпсис ... EDIT : мабуть, це еліпси.
повністюлюдський

1
Для кроку 2, я думаю, що слід просто додати е, а не додати першу букву
бензол

@benzene, що може мати більше сенсу, але зараз вже пізно.
програміст5000

2
Це еліпси . Інші множини з однаковим написанням, але різною вимовою для слова, що закінчується на -е, та слова, що закінчується на -е, - це осі та основи .

Відповіді:


16

JavaScript (ES6), 58 57 байт

NB: Це виявляється, що в цій желейній відповіді використовується той самий трюк, що і Джонатан Аллан (хоча я помітив після публікації).

Збережено 1 байт завдяки Джонатану Аллану

Працює над масивами рядків.

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

Тестові справи


Вау, це класно! Хороша робота!
програміст5000

Я вважаю, що ви можете зберегти байт, замінивши 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]]приєднується -1є [1,0,0,-1,1,0,1,0]).


Вам потрібно об’єднати результати з пробілами? Вам дозволяється виводити список / список списків.
програміст5000

@ 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: Так, у нас була точно така ж ідея, як здається. Цього разу стиснення желе швидше виграло цього разу :)
Емінья

6

Сітківка , 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κ→

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Лише трапилось прочитати відповідь @ Арнаульда після кодування цього, але це, в основному, його порт. Пояснення:

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-тільки Чи не доведеться вам додавати додаткові байти для -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

Математика, 89 байт

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

1
Немає Ellipsisessiesesвбудованої математики ? :(
програміст5000



3

Парадок (v0.2.10), 13? байт (CP-1252)

µ96Qó3BÌDX=v+

Спробуйте в Інтернеті!

Знімає список слів і призводить до списку слів у стеку.

Невелика варіація на базі-трюк. Можливо, саме час попрацювати на моєму базовому компресорі 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
Чи повинен я зафіксувати цю закриваючу дужку? Так, якщо вам це потрібно.
Erik the Outgolfer

3

Мова Вольфрама / Математика, 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.