Facciamo l'onda!


29

Ingresso:

  • Una stringa (il frammento d'onda) con una lunghezza >= 2.
  • Un numero intero positivo n >= 1 .

Produzione:

Emettiamo un'onda a linea singola. Lo facciamo ripetendo la stringa di input n volte.

Regole della sfida:

  • Se il primo e l'ultimo carattere della stringa di input corrispondono, lo emettiamo una sola volta nell'output totale (cioè ^_^diventa di lunghezza 2 ^_^_^e non ^_^^_^).
  • La stringa di input non conterrà spazi bianchi / tabs / new-line / etc.
  • Se la tua lingua non supporta caratteri non ASCII, allora va bene. Finché è ancora conforme alla sfida con input wave solo ASCII.

Regole generali:

  • Questo è , quindi vince la risposta più breve in byte.
    Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione.
  • Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti, programmi completi. La tua chiamata.
  • Sono vietate le scappatoie predefinite .
  • Se possibile, aggiungi un link con un test per il tuo codice.
  • Inoltre, si prega di aggiungere una spiegazione, se necessario.

Casi test:

_.~"(              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!)

Sarebbe bello aggiungere snippet con risultati alla domanda :)
Qwertiy

2
"Un numero intero positivo n >= 1 " mi sembra un po 'pleonastico ... :)
paolo

Risposte:


8

Pyke, 15 14 10 byte

tQQhQeq>*+

Provalo qui!

  QhQeq    -    input_1[0] == input_1[-1]
 Q     >   -   input_1[^:]
        *  -  ^ * V
t          -   input_2 - 1
         + - input_1 + ^

+1 per una spiegazione che assomiglia a un'onda stessa!
wastl,

23

Python 3, 32 byte

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

Concatena le ncopie della stringa, rimuovendo il primo carattere da tutte le copie ma il primo se il primo carattere corrisponde all'ultimo.


Questo non gestisce correttamente la stringa "¯` ​​· .¸¸. · ´¯" della domanda, vero? Quando lo provo s[0]e mi s[-1]riferisco al primo e all'ultimo byte, piuttosto che al primo e all'ultimo carattere. Modifica: ah, aspetta, questo è Python 2 vs. Python 3. Funziona correttamente in Python 3.
hvd

15

05AB1E , 13 byte

Utilizza la codifica CP-1252 .

D¬U¤XQi¦}I<×J

Provalo online!

Spiegazione

-___-e 3usato come input per esempio.

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 byte

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
Congratulazioni per 20k!
Adnan,

2
@Adnan Grazie! Anche 20002, che è bello e simmetrico.
Neil,

1
Il curry è possibile in questo caso? Intendo fare s=>n=>...invece di(s,n)=>
Zwei il

8

Perl, 29 byte

28 byte codice + 1 per -p.

Grazie a @Dada per avermi aiutato a radere qualche byte!

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

uso

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

Esempio online.


2
Bello. È possibile salvare (indirettamente) 3 byte utilizzando <>invece di $'come consente di sbarazzarsi di -0. E poi puoi usare s///einvece di //;$_=vincere un altro byte :-)
Dada,

@Dada bello ... Ho completamente rovinato il mio tentativo originale e semplificato troppo e ho finito per renderlo molto più grande ... Ho preso i tuoi commenti a bordo ma mi sembra di aver bisogno di un $abbinamento alla fine, mi salva ancora byte come non usare 'significa che posso rilasciarlo, è necessario salvarlo in un file per salvare l'aggiunta di 3 per -pe rilasciarlo nuovamente su 1!
Dom Hastings,

1
Huhu. Sì, in effetti ha bisogno $della nuova riga che avevi in ​​precedenza. (Mi dispiace che il mio commento non sia stato molto dettagliato, avevo fretta ...)
Dada,

Mi piace l'idea di utilizzare <>la stringa di sostituzione. Ma se nè separato da uno spazio anziché da una nuova riga, il conteggio dei personaggi può essere leggermente ridotto:s/(.+?) (\d+)/$1x$2/e
ossifrage schizzinoso

1
@DomHastings Ah, errore mio. Non ho letto correttamente la domanda :-)
ossifrage schizzinoso

6

Perl, 23 byte

Include +1 per -p

Fornire la stringa di input seguita dal numero su righe separate su STDIN

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

wave.pl:

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

Se il primo carattere della parola non è un carattere speciale regex, funziona anche questa versione da 22 byte:

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

! Neat Penso che tu abbia dimenticato il /gmodificatore quando lo hai incollato ;-)
Dada,

@Dada Oops. Risolto
Ton Hospel

5

MATL, 19 17 14 byte

ttP=l):&)liX"h

Questo funziona con ASCII sull'interprete online e sia per Unicode che ASCII quando eseguito usando MATLAB.

Provalo online!

Spiegazione

        % 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

Lotto, 117 byte

@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%

Prende il numero di ripetizioni come parametro della riga di comando e legge la stringa da STDIN.



3

Gema, 41 personaggi

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

Esecuzione di esempio:

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 byte

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

Emette l'intera stringa una volta, seguita da n-1 copie della stringa o sottostringa, a seconda che il primo e l'ultimo carattere corrispondano.

Il .Substring()metodo restituisce dall'indice fornito alla fine della stringa, quindi se restituisce $s[0]-eq$s[-1]false (0), otteniamo l'intera stringa. Se questa affermazione è vera (1), otteniamo la sottostringa a partire dal secondo carattere.


Dangit, mi hai battuto di qualche minuto. Ho avuto la stessa risposta (usando $ ae $ b invece di $ se $ n).
AdmBorkBork,

3

VBA 119 byte

Novità di questo gioco e vba vince con i byte più alti: P

PS: non posso credere che VBA sia vicino a 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

Spiegazione:

+------------------------------------------------------------+-----------------------------------------------------------------------------------+
|                            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
Benvenuti in PPCG! Come programmatore QBasic, direi che puoi rimuovere la maggior parte degli spazi e avere ancora un codice VBA valido, dal momento che puoi digitare o incollare il codice abbreviato (con l'autoformatter che aggiunge gli spazi), premi run e funziona. Ciò migliorerebbe notevolmente il tuo punteggio. :)
DLosc,

3

CJam, 16 15 byte

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

Provalo online

Spiegazione:

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
Mi piace il tuo input-wave. :)
Kevin Cruijssen,

3

K, 12 byte

{,/[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 ,/[("-_";"-_")] --> "-_-_"

Grazie


Ciò infrange la Regola 1. {,/y#,$[(*x)~*|x;-1;0]_x}per 25 byte gestisce la prima / ultima corrispondenza. Se sei felice di infrangere la Regola 1, allora puoi averne {,/y#,x}per 8.
streetster

2

PHP, 72 byte

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

con PHP 7.1 potrebbe essere ridotto a 65 byte

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

2

Pip , 18 byte

Soluzione Regex, sfruttando la regola "nessuno spazio in input". Prende la stringa da stdin e il numero come argomento della riga di comando.

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

Provalo online!

Spiegazione:

 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

Pertanto, a bsi trasforma in ab, a asi trasforma in ae lo spazio alla fine della stringa viene rimosso. Quindi il risultato viene stampato automaticamente.


2

Haskell, 59 byte

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

Versione non golfata:

-- 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 byte

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

Provalo online.

Alternativa con lo stesso conteggio byte ( 79 byte ):

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

Provalo online.

Cercherò ovviamente di rispondere alla mia domanda. ;)
-5 byte grazie a @ dpa97 .
-21 byte convertiti da Java 7 a 10.

Spiegazione:

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] invece di s.replaceAll ("^.", "") dovrebbe funzionare, salva un paio di byte
dpa97,

@ dpa97 Grazie! L'ho modificato. Ho sempre dimenticato di utilizzare .split.
Kevin Cruijssen,

@ dpa97 Penso di aver (o abbiamo) pensato troppo ... s.substring(1)è più corto di due byte. ;)
Kevin Cruijssen,

@KevinCurijssen sì, avrei dovuto vederlo, buona scoperta. Penso di essere rimasto bloccato all'idea di usare regex ...
dpa97,

1

Javascript ES6, 49 caratteri

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

Test:

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 byte

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

Immagino che dovrei aggiungere LEFT $ e RIGHT $ a QBIC ...

Spiegazione:

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

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

Un metodo un po 'assurdo per ripetere una stringa. Creare una nuova stringa della lunghezza di ripetizione desiderata, quindi sostituire ogni carattere con la stringa da ripetere. A parte questo, sembra praticamente la stessa strategia di molti altri.

/*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
Cosa succede se la stringa di input contiene a x ? Forse sarebbe meglio cambiarlo in uno spazio, dal momento che " La stringa di input non conterrà spazi bianchi / tabs / new-line / etc. ".
Kevin Cruijssen,

1
Funzionerà bene se l'input ha x. Crea ilxx...x prima stringa e quindi sostituisce ciascuna xsenza rivalutare la stringa dall'inizio con ciò che deve essere sostituito.
latte

1

SpecBAS - 68 byte

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

Utilizza in linea IFper verificare se il primo e l'ultimo carattere sono uguali. In caso contrario, stampare il nnumero di stringhe più volte. Altrimenti, unisci la stringa a lunghezza 1, ripeti e metti l'ultimo carattere alla fine.

Può accettare solo caratteri ASCII (o caratteri integrati nell'IDE SpecBAS)

inserisci qui la descrizione dell'immagine


1

APL, 19 byte

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

Uso:

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

Spiegazione:

  • ⊃⍺=⊃⌽⍺: vedi se il primo personaggio corrisponde all'ultimo carattere
  • ⍺↓⍨: in questo caso, rilascia il primo carattere
  • : racchiudi il risultato
  • ⍵⍴: replicalo volte
  • 1↓: rilascia il primo (è più corto di (⍵-1)⍴ )
  • : ottieni tutti gli elementi semplici (annulla la boxe)
  • ⍺,: aggiungi un'istanza dell'intera stringa in primo piano

1

Postscript, 98 byte

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

... ma potresti aver bisogno di un 'flush' puntato su quello per far sì che il tuo interprete PS svuoti il ​​buffer delle comunicazioni, altri sei byte :(


1

Lisp comune (LispWorks), 176 byte

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

Uso:

    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

Spiegazione:

~~ =>   ~

\" =>   " 

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 byte

Il modo più semplice per farlo è usare una regex di riferimento che può dire se il primo e l'ultimo carattere corrispondono. Ma le regex lunghe sono lunghe. Non lo vogliamo.

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

L'onda da ripetere è nel buffer. Suppongo che il numero da ripetere sia nel registro "a(digitare qaNqcon N come numero per impostarlo). L'idea è:

  • Se il primo e l'ultimo byte corrispondono, elimina tutto fino all'ultimo carattere.
  • Se il primo e l'ultimo byte non corrispondono, eliminare tutti i caratteri.

Quindi Pi @atempi del testo cancellato .

  • lDg*: Questa manovra crea una regex che corrisponde a qualsiasi primo personaggio, indipendentemente dal fatto che debba essere evaso o meno, o che sia una parola o meno. ( *basterebbe a rendere la regex correttamente sfuggita, ma aggiungerebbe \<\>immondizia indesiderata se fosse un carattere verbale, come_ .)
  • p^: L'ultimo passo è stato disordinato. Pulisci nella posizione originale, all'inizio della riga.
  • v$: In modalità visiva, $per impostazione predefinita passa a dopo la fine della riga.
  • ?<C-P>$<CR>hd: Se la regex precedente esiste alla fine della riga, questa ricerca si sposterà su di essa; in caso contrario, rimanere oltre la fine della linea. Spostati a sinistra da lì e realizziamo la (noiosa) cancellazione di cui abbiamo bisogno.
  • @aP: Esegue la ripetizione del numero come macro da utilizzare come argomento per P.

1

Rubino, 38 byte

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

Penso che questo sia abbastanza autoesplicativo. Mi chiedo ancora se esiste un modo più conciso di rappresentare il s[0..-2]blocco, ma non l'ho ancora trovato.


0

Java (117 byte)

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
Ciao, benvenuto in PPCG! Hmm, ho già pubblicato una risposta Java 7 più breve qui . Il tuo utilizza un approccio simile a quello che avevo in precedenza. Usando questo stesso approccio, puoi giocare b>0;b--a golf b-->0;. Inoltre, perché b+c'è c+=b+a.substring? Tuttavia, è un'ottima prima risposta se ce la fai in modo indipendente. Goditi il ​​tuo soggiorno qui su PPCG! :) Inoltre, potresti trovare interessanti suggerimenti per giocare a golf in Java .
Kevin Cruijssen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.