Там я починил (с лентой)


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 Хе-хе, ты действительно прав, что это пустая трата «ленты». Хм, может быть что-то, что я мог бы использовать во второй части испытания . ;)
Кевин Круйссен

Что делать, если строка входит с лентой - например, abTAPEgh?
Manassehkatz-Восстановить Моника

@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 в аргументах любой ссылки TAB 05AB1E, которую вы можете добавить, -dчтобы получить необработанный дамп стека операций за операцией вместо объяснения, но я пытаюсь опубликовать их тоже, это не так просто, особенно в некоторых мой LOL.
Волшебный Осьминог Урна

10

Желе , 13 байт

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

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

объяснение

OI '«¡ʂƁ» ṁ $ € ż @ - Полная программа. Возьмите строку в качестве аргумента командной строки.
О - Порядковый. Получить значения ASCII каждого символа.
 I '- получить приращения (дельты) и вычесть 1 из каждого.
          € - за каждую разницу я ...
   «¡ꟅƁ» ṁ $ - сформировать сжатую строку «лента» в соответствии с этими значениями.
                В основном расширяет / укорачивает «ленту» до необходимой длины.
           ż @ - чередовать со входом.

Вот трюк, чтобы довести вас до 12
Джонатан Аллан

@JonathanAllan Это кажется мне недействительным. Это выводит abctapetapetmnnnopapstetapezraвместо abctapetapetmnnnoptasttapetzra.
г-н Xcoder

7
О, да, это недействительно - я не осознавал, что мы должны тратить ленту с рулона!
Джонатан Аллан

7

Haskell , 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 байта, используя literal ^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 байт
Asone Tuhid

@AsoneTuhid о хорошо, спасибо
HyperNeutrino

4

Скала , 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))

разматывается

г = а => [... а] .reduce (
  (Х, у) =>
    x + [... Array (
      (f = y.charCodeAt () - (x.slice (-1) .charCodeAt ()))> 1? (ф-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))
Рик Хичкок,

Благодарность! Мне абсолютно противно, как это работает, но приятно знать, что это работает в будущем.
Джал


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 за указание на это) и применяем операцию Reduce, где мы выравниваем каждый символ до требуемой длины, используя «TAPE» в качестве строки-заполнителя.


В вопросе говорится, что вы можете принять ввод как массив символов. ( 53 байта )
Asone Tuhid

2

K (ок) , 33 байта

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

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

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

-':x вычтите каждый предыдущий (используйте воображаемый 0 перед первым элементом)

1_ уронить первый предмет

0, добавить 0

-1+ добавить -1

0| max (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 байта, благодаря floorcat , путем обновления до Java 10+ и переключения типов наvar
  • -3 байта благодаря Кевину Круйссену , печатая результат моей (ранее) альтернативной версии вместо того, чтобы возвращать ее

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» напрямую.
Разнагул

Ваш ответ все еще великолепен, так что не беспокойтесь об этом. :) Я получаю советы по игре в гольф почти каждый раз, когда публикую ответ сам. И еще проще сыграть в гольф существующий ответ, чем полностью сыграть в него с самого начала. 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вокруг него. Может быть, есть более элегантное решение.

Ungolfed

#(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 %))

Ungolfed

#(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 (Дьялог Классик) , 30 байтов

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

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

{ } анонимная функция с аргументом

⎕a⍳⍵ найти индексы своих символов в алфавите

2-/ парные различия (предыдущий минус следующий)

1+ добавить 1

- NEGATE

0⌈ max (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
Добро пожаловать на сайт! Вы можете удалить много пустого пространства для игры в гольф и обязательно проверить эти советы для игры в гольф на Java !
Caird Coneheringaahing

1
Вам не нужно создавать переменную t, потому что вы используете ее только один раз. Вы можете просто сделать "TAPETAPETAPETAPETAPETAPET".substring....
Рейнис Мажейкс

Добро пожаловать в 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.