Давайте сделаем волну!


29

Входные данные:

  • Строка (фрагмент-волна) с длиной >= 2.
  • Положительное целое число n >= 1 .

Выход:

Мы выводим однолинейную волну. Мы делаем это, повторяя входную строку n раз.

Правила соревнований:

  • Если первый и последний символ входной строки совпадает, мы выводим его только один раз в общем выводе (т. Е. ^_^Длины 2 становится, ^_^_^а не ^_^^_^).
  • Входная строка не будет содержать пробелов / табуляции / новых строк / и т. Д.
  • Если ваш язык не поддерживает символы не ASCII, тогда это нормально. Пока это все еще соответствует требованию с ASCII-только волновым входом.

Основные правила:

  • Это , поэтому выигрывает самый короткий ответ в байтах.
    Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования.
  • К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами, полные программы. Ваш звонок.
  • По умолчанию лазейки запрещены.
  • Если возможно, добавьте ссылку с тестом для вашего кода.
  • Также, пожалуйста, добавьте объяснение, если это необходимо.

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

_.~"(              length 12
_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(

'°º¤o,¸¸,o¤º°'     length 3
'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'

-__                length 1
-__

-__                length 8
-__-__-__-__-__-__-__-__

-__-               length 8
-__-__-__-__-__-__-__-__-

¯`·.¸¸.·´¯         length 24
¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯

**                 length 6
*******

String & length of your own choice (be creative!)

Было бы неплохо добавить в вопрос фрагмент с результатами :)
Qwertiy

2
«Целое положительное число n >= 1 » кажется мне довольно приятным ... :)
paolo

Ответы:



23

Python 3, 32 байта

lambda s,n:s+s[s[0]==s[-1]:]*~-n

Объединяет nкопии строки, удаляя первый символ из всех копий, но первый, если первый символ соответствует последнему.


Это неправильно обрабатывает строку «¯` · .¸¸. · ´¯», не так ли? Когда я пытаюсь это сделать, s[0]и, s[-1]кажется, ссылаюсь на первый и последний байт, а не на первый и последний символ. Изменить: ах, подождите, это Python 2 против Python 3. Он работает правильно в Python 3.
hvd

15

05AB1E , 13 байтов

Использует кодировку CP-1252 .

D¬U¤XQi¦}I<×J

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

объяснение

-___-и 3используется в качестве ввода, например.

D              # duplicate input string
               # STACK: "-___-", "-___-"
 ¬U¤X          # push copies of the first and last element of the string
               # STACK: "-___-", "-___-", "-", "-"
     Q         # compare for equality 
               # STACK: "-___-", "-___-", 1
      i¦}      # if true, remove the first char of the copy of the input string
               # STACK: "-___-", "___-" 
         I<    # push input number and decrease by 1
               # STACK: "-___-", "___-", 2
           ×   # repeat the top string this many times
               # STACK: "-___-", "___-___-"
            J  # join with input string
               # STACK: "-___-___-___-"
               # implicitly output

11

JavaScript (ES6), 47 байт

f=
(s,n)=>s+s.slice(s[0]==s.slice(-1)).repeat(n-1)
;
<div oninput=o.textContent=n.value&&f(s.value,n.value)><input id=s><input id=n type=number min=1><div id=o>


1
Поздравляю на 20к!
Аднан

2
@ Adnan Спасибо! 20002 тоже, что приятно и симметрично.
Нил

1
Возможно ли в этом случае карри? Я имею в виду делать s=>n=>...вместо(s,n)=>
Zwei

8

Perl, 29 байт

28 байт код + 1 для -p.

Спасибо @Dada за помощь в сборе нескольких байтов!

s/^((.).*?)(\2?)$/$1x<>.$3/e

использование

perl -pe 's/^((.).*?)(\2?)$/$1x<>.$3/e' <<< "'°º¤o,¸¸,o¤º°'
3"
'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'
perl -pe 's/^((.).*?)(\2?)$/$1x<>.$3/e' <<< '**
6'
*******

Интернет пример.


2
Ницца. Вы можете сэкономить (косвенно) 3 байта, используя <>вместо того $', чтобы избавиться от него -0. И тогда вы можете использовать s///eвместо того, //;$_=чтобы выиграть еще один байт :-)
Dada

@ Дада, хорошо ... Я полностью испортил свою первоначальную попытку, упростил ее и в итоге сделал ее намного больше ... Я учел ваши комментарии на доске, но мне кажется, что мне нужно, $чтобы соответствовать концу, но при этом сохраняются мои байты как не используя 'означает, что я могу отбросить его, чтобы сохранить в файл, чтобы сохранить добавив 3 для -pи сбросить его обратно до 1!
Дом Гастингс

1
Хуха. Да, это действительно нужно $вместо новой строки, которую вы имели ранее. (Извините, мой комментарий не был очень подробным, я спешил ...)
Дада

Мне нравится идея использования <>в строке замены. Но если nразделить пробелом вместо новой строки, количество символов может быть немного уменьшено:s/(.+?) (\d+)/$1x$2/e
брезгливое ossifrage

1
@DomHastings Ах, моя ошибка. Не правильно прочитал вопрос :-)
брезгливый оссифраж

6

Perl, 23 байта

Включает +1 для -p

Введите строку ввода с последующим номером в отдельных строках на STDIN

wave.pl <<< "'°º¤o,¸¸,o¤º°'
3"

wave.pl:

#!/usr/bin/perl -p
$_ x=<>;s/(.)\K
\1?//g

Если первый символ в слове не является специальным символом регулярного выражения, эта 22-байтовая версия также работает:

#!/usr/bin/perl -p
$_ x=<>;/./;s/
$&?//g

Ухоженная! Я думаю, что вы забыли /gмодификатор, когда вставили его ;-)
Dada

@ Дада Ой. Исправлено
Тон Хоспел

5

MATL, 19 17 14 байтов

ttP=l):&)liX"h

Это работает для ASCII на онлайн-интерпретаторе, а также для Unicode и ASCII при запуске с использованием MATLAB.

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

объяснение

        % Implicitly grab the input as a string
        %   STACK:  {'abcdea'}
        %
tt      % Make two copies and push them to the stack
        %   STACK:  {'abcdea'    'abcdea'    'abcdea'}
        %
P       % Flip the second copy around
        %   STACK:  {'abcdea'    'abcdea'    'aedcba'}
        %
=       % Perform an element-wise comparison. Creates a boolean array
        %   STACK:  {'abcdea'    [1 0 0 0 1]}
        %
l)      % Get the first element. If the first and last char are the same this will be
        % TRUE (1), otherwise FALSE (0)
        %   STACK:  {'abcdea'    1 }
        %
:       % Create an array from [1...previous result]. If the first char was repeated,
        % this results in the scalar 1, otherwise it results in an empty array: []
        %   STACK: {'abcdea'    1 } 
        %
&)      % Break the string into pieces using this index. If there were repeated
        % characters, this pops off the first char, otherwise it pops off
        % an empty string
        %   STACK: {'a'    'bcdea'}
        %
li      % Push the number 1 and explicitly grab the second input argument
        %   STACK: {'a'    'bcdea'    1    3}
        %
X"      % Repeat the second string this many times
        %   STACK: {'a'    'bcdeabcdeabcdea'}
        %
h       % Horizontally concatenate the first char (in case of repeat) 
        % or empty string (if no repeat) with the repeated string
        %   STACK: {'abcdeabcdeabcdea'}
        %
        % Implicitly display the result


4

Пакет, 117 байт

@set/ps=
@set t=%s%
@if %s:~0,1%==%s:~1% set t=%s:~1%
@for /l %%i in (2,1,%1)do @call set s=%%s%%%%t%%
@echo %s%

Принимает количество повторений в качестве параметра командной строки и считывает строку из STDIN.



3

Гема, 41 персонаж

* *=@subst{\? \$1=\?\; =;@repeat{$2;$1 }}

Образец прогона:

bash-4.3$ gema '* *=@subst{\? \$1=\?\; =;@repeat{$2;$1 }}' <<< '_.~"( 12'
_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(

bash-4.3$ gema '* *=@subst{\? \$1=\?\; =;@repeat{$2;$1 }}' <<< "'°º¤o,¸¸,o¤º°' 3"
'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'

bash-4.3$ gema '* *=@subst{\? \$1=\?\; =;@repeat{$2;$1 }}' <<< '** 6'
*******

3

PowerShell v2 +, 48 байт

Param($s,$n)$s+$s.Substring($s[0]-eq$s[-1])*--$n

Выводит всю строку один раз, за ​​которой следуют n-1 копии строки или подстроки, в зависимости от того, совпадают ли первый и последний символы.

В .Substring()метод выхода из индекса подается в конце строки, так что если имеет $s[0]-eq$s[-1]значение FALSE (0), мы получаем всю строку. Если это утверждение истинно (1), мы получаем подстроку, начинающуюся со второго символа.


Дангит, ты избил меня на несколько минут. У меня был тот же ответ (используя $ a и $ b вместо $ s и $ n).
AdmBorkBork

3

VBA 119 байт

Новичок в этой игре и VBA побеждает с самыми высокими байтами: P

PS: не могу поверить, что VBA стоит близко к JAVA HAHA

Function l(s,x)
l=s: s=IIf(Left(s,1)=Right(s,1),Mid(s,2,Len(s)),s)
z: x=x-1: If x>0 Then l=l & s: GoTo z:
End Function

Объяснение:

+------------------------------------------------------------+-----------------------------------------------------------------------------------+
|                            code                            |                                     function                                      |
+------------------------------------------------------------+-----------------------------------------------------------------------------------+
| l=s                                                        | input string s is saved to base                                                   |
| s = IIf(Left(s, 1) = Right(s, 1), Right(s, Len(s) - 1), s) | checks whether 1 and last char is equal,                                          |
|                                                            | if yes removes the first char from s and that s will be used to for further joins |
| z:                                                         | z: is a label                                                                     |
| x = x - 1:                                                 | decreases looping round                                                           |
| If x > 0 Then l = l & s: GoTo z:                           | join strings until no more rounds to do                                           |
+------------------------------------------------------------+-----------------------------------------------------------------------------------+

3
Добро пожаловать в PPCG! Как сам программист на QBasic, я бы сказал, что вы можете удалить большую часть пробелов и при этом иметь действительный код VBA, поскольку вы можете набирать или вставлять сокращенный код (с помощью автоформатера, добавляющего пробелы), нажимать run, и это работает. Это значительно улучшит ваш счет. :)
DLosc

3

CJam, 16 15 байт

l]li*{(s@)@|@}*

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

Объяснение:

l]li*            Create a list of n-times the input string.
{(s@)@|@}*       Fold this list by taking out the last character of the first 
                 argument and the first character of the second argument and 
                 replacing them by their unique set union.
                 e.g.: "aba" "aba" -> "ab" 'a"a"| "ba" -> "ab" "a" "ba"
                       "abc" "abc" -> "ab" 'c"a"| "bc" -> "ab" "ca" "bc

2
Мне нравится ваш волновой вклад. :)
Кевин Круйссен

3

К, 12 байт

{,/[y#(,)x]}


/in action
{,/[y#(,)x]}["lollol";4]
"lollollollollollollollol"
{,/[y#(,)x]}["-_";10]
"-_-_-_-_-_-_-_-_-_-_"

/explanation (read function from right to left)
x is the string and y is the number of repetitions
(,)y    --enlist x so it becomes 1 value (rather than a list)
y#x     --take y many items of x
,/      --coalesce the list ,/[("-_";"-_")] --> "-_-_"

Благодарность


Это нарушает правило 1. {,/y#,$[(*x)~*|x;-1;0]_x}для 25 байтов обрабатывает первое / последнее совпадение. Если вы счастливы отключающая Правило 1, то вы можете иметь {,/y#,x}на 8
streetster

2

PHP, 72 байта

<?=($a=$argv[1]).str_repeat(substr($a,$a[0]==substr($a,-1)),$argv[2]-1);

в PHP 7.1 его можно уменьшить до 65 байт

<?=($a=$argv[1]).str_repeat(substr($a,$a[0]==$a[-1]),$argv[2]-1);

2

Пип , 18 байт

Решение Regex, использующее правило «без пробелов во входных данных». Принимает строку из stdin и число в качестве аргумента командной строки.

(q.s)XaR`(.) \1?`B

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

Объяснение:

 q.s                Read from stdin and append a space
(   )Xa             String-multiply by first cmdline arg
       R            Replace
        `(.) \1?`     Regex: char followed by space followed by (optional) same char again
                 B    Callback function, short for {b}: return 1st capturing group

Таким образом, a bпревращается в ab, a aпревращается в a, и пространство в конце строки удаляется. Затем результат автоматически распечатывается.


2

Haskell, 59 байт

a%b=concat$replicate a b
a@(s:z)#n|s/=last z=n%a|1<2=s:n%z

Безголовая версия:

-- Helper: Appends str to itself n times
n % str = concat (replicate n str)

-- Wave creating function
(x:xs) # n
 -- If start and end of wave differ, 
 | x /= last xs = n%(x:xs)
 | otherwise   = x:(n%xs)

2

Java 10, 123 111 109 107 102 100 79 байтов

s->n->{var r=s;for(;n-->1;r+=s.matches("(.).*\\1")?s.substring(1):s);return r;}

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

Альтернатива с тем же количеством байтов ( 79 байтов ):

(s,n)->{for(var t=s.matches("(.).*\\1")?s.substring(1):s;n-->1;s+=t);return s;}

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

Я, конечно, постараюсь ответить на свой вопрос. ;)
-5 байт благодаря @ dpa97 .
-21 байт конвертируется из Java 7 в 10.

Объяснение:

s->n->{                // Method with String and integer parameters and String return-type
  var r=s;             //  Result-String, starting at the input-String
  for(;n-->1;          //  Loop `n-1` times
    r+=s.matches("(.).*\\1")?
                       //   If the first and last characters are the same:
        s.substring(1) //    Append the result-String with the input-String, 
                       //    excluding the first character
       :               //   Else:
        s);            //    Append the result-String with the input-String
  return r;}           //  Return the result-String

1
s.split ("^.") [1] вместо s.replaceAll ("^.", "") должен работать, сохранить пару байтов
dpa97

@ dpa97 Спасибо! Я редактировал это. Я всегда забываю об использовании .split.
Кевин Круйссен

@ dpa97 Я думаю, что (или мы) это переосмыслили .. s.substring(1)на два байта короче. ;)
Кевин Круйссен

@KevinCurijssen да, наверное, видел это, хорошая находка. Я думаю, что застрял на идее использования регулярных выражений ...
dpa97

1

Javascript ES6, 49 символов

(s,n)=>s.replace(/(.).*?(?=\1?$)/,m=>m.repeat(n))

Тест:

f=(s,n)=>s.replace(/(.).*?(?=\1?$)/,m=>m.repeat(n))
console.log(document.querySelector("pre").textContent.split(`
`).map(s=>s.split` `).every(([s,n,k])=>f(s,n)==k))
<pre>_.~"( 12 _.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(
'°º¤o,¸¸,o¤º°' 3 '°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'
-__ 1 -__
-__ 8 -__-__-__-__-__-__-__-__
-__- 8 -__-__-__-__-__-__-__-__-
¯`·.¸¸.·´¯ 24 ¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯
** 6 *******</pre>


1

QBIC , 65 байт

;:~left$$|(A,1)=right$$|(A,1)|A=left$$|(A,len(A)-1)][1,a|B=B+A]?B

Я думаю, что я должен добавить LEFT $ и RIGHT $ к QBIC ...

Объяснение:

;          make the first cmd line parameter into A$
:          make the second cmd line parameter into a (num)
~left..]   Drop the last char if equal to the first char
[1,a...]   FOR the given number of repetitions, concat A$ to B$ (starts out empty)
?B         print B$

1

C #, 79 байт

(s,n)=>s+new string('x',n-1).Replace("x",s[0]==s[s.Length-1]?s.Substring(1):s);

Немного абсурдный способ повторения строки. Создайте новую строку нужной длины повтора, а затем замените каждый символ строкой повтора. Кроме того, похоже, в значительной степени та же стратегия, что и многие другие.

/*Func<string, int, string> Lambda =*/ (s, n) =>
    s                                      // Start with s to include first char at start
    + new string('x', n - 1).Replace("x",  // Concatenate n-1 strings of...
        s[0] == s[s.Length - 1]            // if first/last char are the same
            ? s.Substring(1)               // then skip the first char for each concat
            : s                            // else concat whole string each time
    )
;

1
Хм, а что будет, если входная строка содержит x? Возможно, было бы лучше изменить это на пробел, поскольку « строка ввода не будет содержать пробелов / табуляции / новых строк / и т. Д. ».
Кевин Круйссен

1
Это будет хорошо работать, если вход имеет x. xx...xСначала создается строка, а затем заменяется каждая xбез переоценки строки с самого начала на то, что необходимо заменить.
молоко

1

SpecBAS - 68 байт

1 INPUT a$,n: l=LEN a$: ?IIF$(a$(1)<>a$(l),a$*n,a$( TO l-1)*n+a$(l))

Использует inline-, IFчтобы проверить, совпадают ли первый и последний символы. Если нет, выведите строкуn количество раз. В противном случае разделите строку на длину-1, повторите это и поставьте последний символ в конце.

Может принимать только символы ASCII (или символы, встроенные в SpecBAS IDE)

введите описание изображения здесь


1

APL, 19 байт

{⍺,∊1↓⍵⍴⊂⍺↓⍨⊃⍺=⊃⌽⍺}

Использование:

      '^_^' {⍺,∊1↓⍵⍴⊂⍺↓⍨⊃⍺=⊃⌽⍺} 5
^_^_^_^_^_^

Объяснение:

  • ⊃⍺=⊃⌽⍺: посмотреть, соответствует ли первый символ последнему символу
  • ⍺↓⍨: если это так, опустите первый символ
  • : приложить результат
  • ⍵⍴: повтори это раз
  • 1↓: отбросить первый (это короче чем (⍵-1)⍴)
  • : получить все простые элементы (отменить бокс)
  • ⍺,: добавить один экземпляр всей строки в начало

1

Постскриптум, 98 байт

exch/s exch def/l s length 1 sub def s 0 get s l get eq{/s s 0 l getinterval def}if{s print}repeat

... но вам может понадобиться 'flush', чтобы ваш интерпретатор PS очистил буфер связи, еще шесть байтов :(


1

Common Lisp (LispWorks), 176 байт

(defun f(s pos)(if(equal(elt s 0)(elt s #1=(1-(length s))))(let((s1(subseq s 0 1))(s2(subseq s 0 #1#)))(dotimes(j pos)(format t s2))(format t s1))(dotimes(j pos)(format t s))))

Использование:

    CL-USER 130 > (f "_.~~\"(" 12)
    _.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(
    NIL

    CL-USER 131 > (f "'°o¤o,??,o¤o°'" 3)
    '°o¤o,??,o¤o°'°o¤o,??,o¤o°'°o¤o,??,o¤o°'
    NIL

    CL-USER 132 > (f "-__" 1)
    -__
    NIL

    CL-USER 133 > (f "-__" 8)
    -__-__-__-__-__-__-__-__
    NIL

    CL-USER 134 > (f "ˉ`·.??.·′ˉ" 24)
    ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ`·.??.·′ˉ
    NIL

    CL-USER 135 > (f "**" 6)
    *******
    NIL

Объяснение:

~~ =>   ~

\" =>   " 

Ungolf:

    (defun f (s pos)
      (if (equal (elt s 0) (elt s (1- (length s))))
          (let ((s1 (subseq s 0 1)) (s2 (subseq s 0 (1- (length s)))))
            (dotimes (j pos)
              (format t s2))
            (format t s1))        
        (dotimes (i pos)
          (format t s))))

1

Vim, 17 байт

Самый простой способ сделать это - использовать регулярное выражение обратной ссылки, которое может определить соответствие первого и последнего символов. Но длинные регулярные выражения длинные. Мы этого не хотим.

lDg*p^v$?<C-P>$<CR>hd@aP

Волна для повторения находится в буфере. Я предполагаю, что число, которое будет повторяться, находится в реестре "a(введите qaNqс N в качестве числа, чтобы установить его). Идея заключается в следующем:

  • Если первый и последний байты совпадают, удалите все до последнего символа.
  • Если первый и последний байты не совпадают, удалите все символы.

Затем Pудаленный текст @aраз.

  • lDg*: Этот маневр создает регулярное выражение, соответствующее любому первому символу, независимо от того, нужно ли его экранировать или нет, или это слово или нет. ( *было бы достаточно, чтобы сделать правильно экранированное регулярное выражение, но добавило бы нежелательный \<\>мусор, если бы это был символ слова, например _.)
  • p^: Последний шаг был грязным. Очистить до исходной позиции, начало строки.
  • v$В визуальном режиме, $по умолчанию переходит к AFTER конца строки.
  • ?<C-P>$<CR>hd: Если предыдущее регулярное выражение существует в конце строки, этот поиск будет перемещен к нему; в противном случае оставайтесь за концом строки. Двигайтесь влево оттуда, и мы выполняем (утомительное) удаление, которое нам нужно.
  • @aP: Запустите число repeat как макрос, который будет использоваться в качестве аргумента P.

1

Рубин, 38 байт

->s,n{s[0]==s[-1]?s[0..-2]*n+s[0]:s*n}

Я думаю, это довольно очевидно. Мне все еще интересно, есть ли более краткий способ представить s[0..-2]блок, но я еще не нашел его.


0

Java (117 байт)

String w(String a,int b){String c=a;for(;b>0;b--)c+=b+a.substring(a.charAt(a.length()-1)==a.charAt(0)?1:0);return c;}

1
Привет, добро пожаловать в PPCG! Хм, я выложил уже более короткий ответ Java 7 здесь . Ваш использует подход, подобный тому, который я имел ранее. Используя этот же подход, вы можете играть b>0;b--в гольф b-->0;. Кроме того, почему b+там в c+=b+a.substring? Тем не менее, это отличный первый ответ, если вы придумали его самостоятельно. Приятного пребывания здесь на PPCG! :) Кроме того, вы можете найти советы по игре в гольф на Java интересными для чтения.
Кевин Круйссен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.