Там я це зафіксував (скотчем)


41

Виклик:

Подаючи рядок, що містить лише великі та / або малі літери (що б ви не tapeхотіли ), покладіть горизонтально, щоб виправити його. Ми робимо це, перевіряючи різницю двох сусідніх букв в алфавіті (ігноруючи намотується навколо і тільки йти вперед), і заповнюючи простір як багато TAPE/ , tapeяк ми повинні були б.


Приклад:

Вхід: abcmnnnopstzra
Вихід:abcTAPETAPETmnnnopTAstTAPETzra

Чому?

  • Між cі mмає бути defghijkl(довжина 9), тому ми заповнюємо це TAPETAPET;
  • Між pі sмає бути qr(довжина 2), тому ми заповнюємо це TA;
  • Між tі zмає бути uvwxy(довжина 5), тому ми заповнюємо це TAPET.

Правила виклику:

  • Різниця стосується лише вперед, тому між стрічкою немає жодної стрічки zra.
  • Можна мати кілька таких самих суміжних літер, як nnn.
  • Ви можете приймати дані у будь-якому розумному форматі. Це може бути один рядок, рядковий масив / список, масив символів / список тощо. Вихід має однакову гнучкість.
  • Вам дозволяється використовувати малі та / або великі регістри будь-яким способом. Це стосується як вводу, виходу, так і TAPE.
  • Можливо, немає TAPEнеобхідності, і в цьому випадку вхід залишається незмінним.

Загальні правила:

  • Це , тому найкоротша відповідь у байтах виграє.
    Не дозволяйте мовам коду-гольфу відштовхувати вас від публікації відповідей з не кодовими гольф-мовами. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування.
  • Стандартні правила застосовуються до вашої відповіді, тому вам дозволяється використовувати STDIN / STDOUT, функції / метод із відповідними параметрами та повним програмами типу "повернення". Твій дзвінок.
  • Лазівки за замовчуванням заборонені.
  • Якщо можливо, додайте посилання на тест свого коду.
  • Також, будь ласка, додайте пояснення, якщо це необхідно.

Тестові приклади:

Input:  "abcmnnnopstzra"
Output: "abcTAPETAPETmnnnopTAstTAPETzra"

Input:  "aza"
Output: "aTAPETAPETAPETAPETAPETAPEza"

Input:  "ghijk"
Output: "ghijk"

Input:  "aabbddeeffiiacek"
Output: "aabbTddeeffTAiiaTcTeTAPETk"

Input:  "zyxxccba"
Output: "zyxxccba"

Input:  "abccxxyz"
Output: "abccTAPETAPETAPETAPETAPExxyz"

Input:  "abtapegh"
Output: "abTAPETAPETAPETAPETtaTAPETAPETAPETApeTgh"

Input:  "tape"
Output: "taTAPETAPETAPETApe"

10
Не впевнені, чому ми б відкинули деякі між виправленнями (наприклад, ми відкидаємо APE після виправлення за допомогою TAPETAPET і перед виправленням з TA) для мене здається марною тратою хорошої TAPE, але, можливо, саме так я котиться (вибачте).
Джонатан Аллан

@JonathanAllan Hehe, ти справді маєш рацію, що це начебто трата "стрічки". Хм, могло б я використати в частині 2 виклику . ;)
Кевін Круїссен

А як бути, якщо рядок входить із стрічкою - наприклад, abTAPEgh?
manassehkatz-Reinstate Моніка

@manassehkatz Це було б інтерпретовано як і будь-який інший персонаж, тому ab[TAPETAPETAPETAPET]TA[TAPETAPETAPETA]PE[T]gh(додано значення, []щоб зробити його читабельніше)
Кевін Кройсейсен

1
@KevinCruijssen Що відповідає, хоча (як це стосується питання про "марную стрічку") не на 100% логічно. Тож, можливо, ще один тестовий випадок: введення TAPE, вихід TATAPETAPETAPETAPE (я думаю, що я зрозумів це правильно ...)
manassehkatz-Reinstate Monica

Відповіді:


8

05AB1E , 14 12 байт

'¡ÉIÇ¥<∍‚ζJJ

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

Пояснення

'¡É            # push the string "tape"
   I           # push input
    Ç          # convert to a list of character codes
     ¥         # calculate deltas
      <        # decrement
       ∍       # extend the string "tape" to each of these sizes
               # results in an empty string for sizes smaller than zero
        ‚ζ     # zip with input (results in a list of pairs)
          JJ   # join to a list of strings and then to a string

4
Ви б не хотіли додати пояснення? Я думаю, що це досить схоже на відповідь Jelly, але мені цікаво, хто з символів використовується для якої з операцій, щоб отримати результат. Одне із загальних правил, що стосуються моїх викликів: " Також, будь-ласка, додайте пояснення, якщо це необхідно". Такими мовами, як Jelly, 05AB1E, деревне вугілля, APL тощо, ви можете зберегти, якщо більшість людей не можуть його прочитати, і пояснення є обов'язковим . :)
Кевін Круїссен

@KevinCruijssen: Безумовно. Я зазвичай додаю пояснення до своїх відповідей 05AB1E, але я не завжди встигаю правильно, коли публікую його.
Емінья

1
@KevinCruijssen в аргументах будь-якого посилання 05AB1E TIO ви можете додати, -dщоб отримати неперероблений стек операції за операцією, що відбувається далі замість пояснення, але я намагаюся розмістити їх теж, це не просто, особливо на деяких шахти LOL
Magic Octopus Urn

10

Желе , 13 байт

OI’“¡ʂƁ»ṁ$€ż@

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

Пояснення

OI '"¡ʂƁ» ṁ $ € ż @ - Повна програма. Візьміть рядок як аргумент командного рядка.
O - ординальні. Отримайте значення ASCII кожного символу.
 Я '- Отримайте прирости (дельти) і відніміть 1 з кожного.
          € - За кожну різницю я ...
   „¡ꟅƁ» ṁ $ - Сформуйте стиснуту стрічку "стрічку" відповідно до цих значень.
                В основному подовжує / вкорочує "стрічку" до необхідної довжини.
           ż @ - Перемежуйте вхід.


@JonathanAllan Це здається мені недійсним. Він виводить abctapetapetmnnnopapstetapezraзамість abctapetapetmnnnoptasttapetzra.
Містер Xcoder

7
О, так, це недійсно - я не розумів, що ми витрачаємо стрічку з рулону!
Джонатан Аллан

7

Хаскелл , 58 байт

f(x:y:r)=x:take(length[x..y]-2)(cycle"TAPE")++f(y:r)
f s=s

Спробуйте в Інтернеті! Функція fповторюється за рядком і переглядає послідовні символи xта y. cycle"TAPE"виходить нескінченна струна "TAPETAPETAPE...". [x..y]отримує діапазон символів від xдо yвключно, так що ми повинні відняти два з довжини. Якщо xв алфавіті виникає пізніше, тоді yабо обидва є одним і тим же символом, ми отримуємо від'ємне число після віднімання, але, на щастя, takeприймає і те, і просто нічого не бере.


6

Perl 5 , -F46 байт

#/usr/bin/perl -F
use 5.10.0;
say map{((P,E,T,A)x7)[2..-$^H+($^H=ord)],$_}@F

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


2
Збирався запитати, чому P,E,T,Aзамість цього T,A,P,E, але зараз я помітив, що ви використовували ((P,E,T,A)x7)[2..-$^H+($^H=ord)замість того, ((T,A,P,E)x7)[0..-$^H+($^H=ord)-2щоб зберегти два байти. Гарна відповідь!
Кевін Круїссен

Дуже приємно насправді! Набагато краще, ніж мій наївний підхід! Ви можете зберегти 2 байти, використовуючи буквальний ^H( \x08)!
Дом Гастінгс

@DomHastings Змінні символи керування буквального характеру вже вимкнено для багатьох версій perl. Я міг би претендувати на оцінку на більш старій версії perl (як це я нещодавно робив do$0), але тут лише 2 байти, тому я не турбувався
Ton Hospel

Ах, звичайно! Це тому, що у macOS за замовчуванням є 5.18.2, тому саме цю версію я найбільше знайомий!
Дом Гастінгс



4

C, 84 байти

i,l;f(char*s){for(;*s;)for(putchar(l=*s++),l=s[i=0]+~l;i<l;)putchar("TAPE"[i++%4]);}

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

C (працює в командному рядку Windows), 81 байт

i,l;f(char*s){for(;putchar(l=*s++);)for(l=s[i=0]+~l;i<l;)putchar("TAPE"[i++%4]);}

Вихід:


4

Python 3 , 98 байт

lambda a:"".join(sum(zip(a,[("TAPE"*9)[:y>x and~ord(x)+ord(y)]for x,y in zip(a,a[1:])]),()))+a[-1]

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

-1 байт завдяки Асоне Тухід


@AsoneTuhid Дякую Я рекомендую опублікувати власну відповідь, тому що ви зовсім небагато пограли, і ви також отримали відповідь TFeld на те саме, що редагування призвело б до дуппенів (що не заборонено)
HyperNeutrino

Гаразд, майте -1 байт
Асона Тухід

@AsoneTuhid о добре, спасибі
HyperNeutrino

4

Scala , 66 байт

(s:String)=>s./:("z"){(o,c)=>o+("TAPE"*6).take(c-o.last-1)+c}.tail

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

Пояснення

/: foldLeft over the string
("z") starting with a non-empty string to we don't have to handle the first iteration in a special way
"TAPE"*6 generate a long enough string of TAPETAPETA...
.take(c-o.last-1) take the difference between this character and the previous (now the last char in the output so far) characters from the TAPETAPETA... string. o.last will always be safe because we start with a non-empty string.
o+...+c append it to the output so far ... and add this character to the end
.tail get rid of the leading z we added

Ласкаво просимо в PPCG, і приємна перша відповідь! +1 від мене.
Кевін Кройсейсен

4

PHP , 85 байт

$s=str_split($argv[1]);foreach($s as$l)echo str_pad($l,ord(next($s))-ord($l),'TAPE');

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

Пояснення

$s = str_split($argv[1]);   // convert the parameter string to an array
foreach($s as $l)           // loop the array
echo str_pad(               // print
  $l,                       // the letter
  ord(next($s)) - ord($l),  // calculate the distance to the next letter using ASCII values
  'TAPE'                    // padding string
);                          // profit!

2
Ласкаво просимо на сайт! :)
DJMcMayhem

3

Javascript, 131 127 байт

4 байти збережено завдяки Ріку Хічкоку.

z=(a=>[...a].reduce((x,y)=>x+[...Array((f=y[c='charCodeAt']()-x.slice(-1)[c]())>1?f-1:0)].reduce((e,r,t)=>e+"TAPE"[t%4],"")+y))

Розкручений

z = a => [... a]. зменшення (
  (х, у) =>
    x + [... масив (
      (f = y.charCodeAt () - (x.slice (-1) .charCodeAt ()))> 1? (f-1): 0
    )] зменшити (
      (е, г, т) => 
        e + "TAPE" [t% 4], "") + y
);

Моя проблема тут полягає в тому, що у Javascript не було чіткого способу отримати відстань між символами a і b.

<script>
  z=(a=>[...a].reduce((x,y)=>x+[...Array((f=y[c='charCodeAt']()-x.slice(-1)[c]())>1?f-1:0)].reduce((e,r,t)=>e+"TAPE"[t%4],"")+y))
</script>

<main>
  <input id="input-box" type="text">
  <pre id=output>output</pre>
</main>

<script>
  inputBox = document.getElementById("input-box");
  inputBox.addEventListener("keyup", function(e){
    output.innerText = z(inputBox.value);
  });
</script>


1
Приємно. Ви можете зберегти байт, видаливши крапку з двокрапкою та зберегти ще кілька байтів, призначивши charCodeAtзмінну: z=(a=>[...a].reduce((x,y)=>x+[...Array((f=y[c='charCodeAt']()-x.slice(-1)[c]())>1?f-1:0)].reduce((e,r,t)=>e+"TAPE"[t%4],"")+y))
Рік Хічкок

Дякую! Мене абсолютно огидно, як це працює, але добре знати, що це робить на майбутнє.
Jhal


2

Вугілля деревне , 20 байт

⭆θ⁺…TAPE∧κ⊖⁻℅ι℅§θ⊖κι

Спробуйте в Інтернеті! Пояснення:

 θ              θ       Input string
⭆                       Map over characters
                  κ     Current index
                 ⊖      Decremented
               §        Index into string
             ι          Current character
            ℅ ℅         Ordinal
           ⁻            Subtract
          ⊖             Decremented
         κ              Current index
        ∧               Logical and
    TAPE                Literal string
   …                    Mold to length
                   ι    Current character
  ⁺                     Concatenate
                        Implicitly print

2

Піп , 29 байт

O@a{"TAPE"@<MX[0v-$-Ag]}.BMPa

Вводить введення як аргумент командного рядка (нижній чи верхній регістр, не має значення). Спробуйте в Інтернеті!

Пояснення

O@a{"TAPE"@<MX[0v-$-Ag]}.BMPa
                               a is 1st cmdline arg; v is -1 (implicit)
O                              Output without newline
 @a                            the first character of a
                          MPa  Map this function to pairs of successive characters of a:
                    Ag          Get the ASCII codes of the two characters
                  $-            Fold on subtraction (i.e. asc(first)-asc(second))
                v-              -1 minus the above (i.e. asc(second)-asc(first)-1)
              [0      ]         A list containing 0 and the above
            MX                  Max of the list
          @<                    The first ^ characters (with cyclic indexing)
    "TAPE"                      of this string
   {                   }.B      Concatenate the second character

2

JavaScript (ES6), 80 78 байт

f=([s,...S],t=S[0])=>t?s.padEnd((t>s)*(parseInt(s+t,36)-370)%37,'TAPE')+f(S):s

Відстань між двома символами можна визначити шляхом перетворення їх конкатенації в основу 36, віднімання 370, модуль 37.

Наприклад, (parseInt('cy',36)-370)%37 == 22.

Потім ми можемо використовувати padEndдля заповнення прогалин та рекурсії для обробки циклу.

Випробування:


2

К4 , 48 байт

Рішення:

{,/_[w;x],',[1_d w:&0<d:-1+-':"j"$x;0]#\:"TAPE"}

Приклади:

q)k){,/_[w;x],',[1_d w:&0<d:-1+-':"j"$x;0]#\:"TAPE"}"abcmnnnopstzra"
"abcTAPETAPETmnnnopTAstTAPETzra"
q)k){,/_[w;x],',[1_d w:&0<d:-1+-':"j"$x;0]#\:"TAPE"}"aza"
"aTAPETAPETAPETAPETAPETAPEza"
q)k){,/_[w;x],',[1_d w:&0<d:-1+-':"j"$x;0]#\:"TAPE"}"zyxxccba"
"zyxxccba"
q)k){,/_[w;x],',[1_d w:&0<d:-1+-':"j"$x;0]#\:"TAPE"}"aabbddeeffiiacek"
"aabbTddeeffTAiiaTcTeTAPETk"

Пояснення:

Досить просте рішення, але велика кількість байтів ... Знайдіть дельти, візьміть з рядка "TAPE", приєднайтеся до початкового розрізу рядків, де дельти> 1.

{,/_[w;x],',[1_d w:&0<d:-1+-':"j"$x;0]#\:"TAPE"} / the solution
{                                              } / lambda
                                         "TAPE"  / the string TAPE
                                      #\:        / take each-left
           ,[                      ; ]           / join (,)
                                   0             / zero (ie append zero)           
                              "j"$x              / cast input to int
                           -':                   / deltas
                        -1+                      / subtract 1
                      d:                         / assign to d
                    0<                           / delta greater than 0?
                   &                             / indices where true
                 w:                              / assign to w
               d                                 / index into deltas at w
             1_                                  / drop first
         ,'                                      / join each-both
   _[w;x]                                        / cut input x at indices w
 ,/                                              / flatten

2

Excel VBA, 106 байт

Анонімна функція негайного вікна VBE, яка приймає введення у вигляді великого рядка через клітинку A1та виводить у безпосереднє вікно VBE.

a=90:For i=1To[Len(A1)]:c=Mid([A1],i,1):b=Asc(c):For j=2To b-a:?Mid("peta",j Mod 4+1,1);:Next:?c;:a=b:Next

2

Рубі , 59 53 байти

->s{s.reduce{|x,y|x+y.rjust(y.ord-x[-1].ord,"TAPE")}}

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

Це насправді досить просто - ми беремо введення, як розділимо наш рядок на масив знаків (завдяки Asone Tuhid за вказівку на це) і застосуємо операцію зменшення, де ми виправдовуємо кожну таблицю на необхідну довжину, використовуючи "TAPE" як рядок заповнення.


У запитанні сказано, що ви можете приймати дані як масив символів. ( 53 байти )
Асона Тухід

2

K (oK) , 33 байти

{,/((0|-1+0,1_-':x)#\:"TAPE"),'x}

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

{ } анонімна функція з аргументом x

-':x віднімайте кожен попередній (використовуйте уявний 0 перед першим пунктом)

1_ відкиньте перший предмет

0, додайте 0

-1+ додати -1

0| макс (0, ...)

(... )#\:"TAPE"переформатуйте рядок "TAPE"для кожного елемента зі списку зліва

(... ),'xдодайте відповідний символ xдо кожного перетвореного рядка

,/ об'єднати всіх



2

Java (JDK) , 91 байт

s->{var p='z';for(var c:s)System.out.print("ETAP".repeat(9).substring(1,c>p?c-p:1)+(p=c));}

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

Пояснення

s->{                       // char[]-accepting lambda consumer, printing a String
 var p='z';                //  store the previous character
 for(var c:s){             //  for each character of the string
  System.out.print(        //   print...
   "ETAP".repeat(9)        //    "ETAP" repeated 9 times (to go above 26 chars)
    .substring(1,          //     of which, we substring c-p -1 characters
     c>p?c-p:1             //
    )                      //
   +(p=c)                  //    and append c, while also storing the previous character
  );

Кредити

  • -2 байти завдяки RM
  • -4 байти завдяки слюсарі , оновлення до Java 10+ та переключення типів наvar
  • -3 байти завдяки Kevin Cruijssen , надрукувавши результат моєї (раніше) альтернативної версії замість того, щоб повернути її

int p=123врятував би один персонаж. Не має значення, що pє в першій ітерації, якщо вона більше або дорівнює першому символу. Найбільше значення, яке може мати перший символ, це 'z'== ASCII 122, тому 123 є досить хорошим. Крім того, якщо ви використовували великі літери, ви можете використовувати 91 замість 123, зберігаючи інший символ.
РМ

@RM Дякую, справді це працює!
Олів’є Грегоар

1
-3 байти шляхом друку безпосередньо у вашому альтернативному способі.
Кевін Круїссен

1

C # (.NET Core) , 122 111 байт

Збережено 11 байт завдяки @KevinCruijssen

s=>{var r=""+s[0];for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;)r+="ETAP"[(e-d)%4];return r;}

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

Пояснення:

s => 
{
    var r = "" + s[0];                  //Declare string for the result and initialize with the first character from the input.
    for (                               //Loop over the input,
        int i = 1, e, d;                //starting with the second character, also declare helper variables.
        i < s.Length;                   //Loop until the end of the input is reached.
        r += s[i++])                    //Add the current character to the result and increase the counter.
        for (                           //Loop for adding the TAPE.
            e = d = s[i] - s[i - 1];    //Calculate the differnce between the current and the previous character.
            d-- > 1;)                   //Loop until the difference is 1.
            r += "ETAP"[(e - d) % 4];   //Add a character from the TAPE to the result.
    return r;                           //Return the result.
}

1
Приємна відповідь, +1 від мене. Ви можете зберегти 4 байта, змінюючи whileдо forі видалення дужок: for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+=t[(e-d)%4]);. :) Так, і так як ви використовуєте t="ETAP"тільки один раз, ви можете використовувати його безпосередньо, і зміна stringв , varщоб зберегти ще 7 байт: s=>{var r=""+s[0];for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+="ETAP"[(e-d)%4]);return r;}.
Кевін Кройсейсен

@KevinCruijssen: Спасибі, я б і не думав про позбавлення від дужок, перемістивши матеріал у цикл for. Також якщо я почуваюся дурним за відсутність, я можу використовувати "ETAP" безпосередньо.
raznagul

Ваша відповідь як і раніше чудова, тому не хвилюйтеся з цього приводу. :) Я отримую поради щодо гольфу майже кожен раз, коли я публікую відповідь. І це також простіше відмовлятись від існуючої відповіді далі, ніж з самого початку цілком гольфувати. PS: ви, можливо, їх уже бачили, але поради щодо гольф-коду в C # та Поради щодо гольфу на <всіх мовах> можуть бути цікавими для прочитання, якщо ви ще цього не зробили.
Кевін Кройсейсен



1

Clojure, 139 119 байт

#(reduce-kv(fn[r x c](let[a(cycle "TAPE")i int d(-(i(nth(cycle %)(inc x)))(i c))](str r(if(> d 1)(apply str c(take(dec d)a))c))))""(vec %))

Анонімна функція, яка приймає рядок і повертає записану на екран. Як завжди, Clojure, здається, не дуже добре працює. Те, що мені реально не вдалося, це короткий пошук чергового чергового чергового. На останньому чарі я отримав би OutOfBoundsExceptionпричину очевидну. Тож я поклав це cycleнавколо. Можливо, є більш елегантне рішення.

Безумовно

#(reduce-kv
  (fn [r x c]
    (let [a (cycle "TAPE")
          i int
          d (-
             (i (nth (cycle %) (inc x)))
             (i c))]
      (str r
           (if (> d 1)
             (apply str c (take (dec d) a))
             c))))
  ""
  (vec %))

Оновлення

Вдалося відшарувати кілька байт. Позбавився від набридливого ifтвердження, зменшивши різницю. takeстворює порожній список, якщо число 0 або менше, що в свою чергу призводить до порожнього рядка.

#(reduce-kv(fn[r x c](let[d(-(int(nth(cycle %)(inc x)))(int c)1)](str r c(apply str(take d(cycle "TAPE"))))))""(vec %))

Безумовно

#(reduce-kv
  (fn [r x c]
    (let [d (-
             (int (nth (cycle %) (inc x)))
             (int c)
             1)]
      (str
       r
       c
       (apply
        str
        (take
         d
         (cycle "TAPE"))))))
  ""
  (vec %))

1

APL (Dyalog Classic) , 30 байт

{∊⍵,¨⍨⍴∘'TAPE'¨0,0⌈-1+2-/⎕a⍳⍵}

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

{ } анонімна функція з аргументом

⎕a⍳⍵ знайти в алфавіті показники його знаків

2-/ парні різниці (попередній мінус наступний)

1+ додати 1

- заперечувати

0⌈ макс (0, ...)

0, додайте 0

⍴∘'TAPE'¨циклічно переробити рядок 'TAPE'до кожного

⍵,¨⍨ додайте кожну таблицю з аргументу до відповідної перетвореної рядки

сплющити


1

CJam , 27 25 байт

q_:i2ew.{:-~0e>_"TAPE"*<}

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

Далеко, далеко від інших мов гольфу, але я все одно пишаюся цим гольфом.

Пояснення

q                            Read the input
     ew                      And take windows of size
    2                          2
   i                           from the code points
  :                            of each of its characters.
        {               }    For each of these windows:
         :                     Reduce with
          -                      subtraction.
                                 Since there are only 2 elements, this just subtracts them.
             e>                Take the maximum
           ~                     of this difference's bitwise negation
            0                    and zero.
                                 This returns -n-1 if n is negative, and 0 otherwise.
                                 Call this new value m.
                      *        Repeat
                "TAPE"           the string "TAPE" m times.
               _       <       And then take the first m elements.
                             The result of this will be an array of strings which consist of
                             the string "TAPE" repeated the proper amount of times.
       .                     Zip this array with the original input.
                             Since the original input is one element longer than this array,
                             the nothing is pushed after the final character.
                             Implicitly print everything.



0

Java, 213 166 153 байт

i->{String o="";for(int a=0,l=i.length;++a<=l;){char u=i[a-1],n;o+=u;if(a<l){n=i[a];o+="TAPETAPETAPETAPETAPETAPET".substring(0,n-u>0?n+~u:0);}}return o;}

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

    String o = "";
    for (int a = 0, l = i.length; ++a <= l; ) {              // for each character
        char u = i[a - 1];                                    //  current character
        o += u;                                               //  add current character to output string 
        if (a < l) {                                          //  if it's not the last one
            char n = i[a];                                    //  next character
            o += "TAPETAPETAPETAPETAPETAPET".substring(0, n - u > 0 ? n +~ u : 0); // fill with enough tape but only forward
        }
    }
    return o;

Будь ласка, допоможіть мені зробити це краще.

Дякуємо @cairdcoinheringaahing за підказку щодо білих просторів. Завдяки @RM за підказку на стрічці. Дякуємо @KevinCruijssen за підказки лямбда та виразів.


1
Ласкаво просимо на сайт! Ви можете видалити багато пробілів для гольфу на цю відповідь і переконайтеся, що перегляньте ці поради щодо гольфу на Яві !
caird coinheringaahing

1
Вам не потрібно створювати змінну t, оскільки ви використовуєте її лише один раз. Можна просто зробити "TAPETAPETAPETAPETAPETAPET".substring....
RM

Ласкаво просимо до PPCG! На додаток до того, що сказав @RM , ви можете пограти ще кілька речей: int a=1,l=i.length;a<=l;a++можна int a=0,l=i.length;++a<=l;, char u=i[a-1];o+=u;if(a<l){char n=бути char u=i[a-1],n;o+=u;if(a<l){n=, (n-u)не потребує дужок, а n-u-1може бути n+~u. Також ваша відповідь наразі є фрагментом замість функції. Щоб зробити лямбда вам потрібно додати i->{спереду і }в кінці. Загалом: спробуйте в Інтернеті. 153 байт
Кевін Круїссен

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