Dalga yapalım!


29

Giriş:

  • Uzunluğu olan bir dize (dalga snippet'i) >= 2.
  • Pozitif bir tam sayı , n >= 1 .

Çıktı:

Tek satırlı bir dalga çıkardık. Bunu giriş dizesini n kere tekrarlayarak yapıyoruz .

Meydan okuma kuralları:

  • Giriş dizesinin ilk ve son karakteri eşleşirse, toplam çıktıda yalnızca bir kez çıktı alırız (yani ^_^uzunluk 2 olur ^_^_^ve olmaz ^_^^_^).
  • Giriş dizesi herhangi bir boşluk / sekme / yeni satır / etc içermez.
  • Diliniz ASCII olmayan karakterleri desteklemiyorsa, sorun değil. Sadece ASCII-sadece dalga girişi ile mücadeleye uyduğu sürece.

Genel kurallar:

  • Bu , bayt cinsinden en kısa cevap kazanır.
    Code-golf dillerinin, codegolfing olmayan dillerle cevap göndermekten vazgeçmesine izin vermeyin. Herhangi bir programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyonlar / yöntem ile uygun parametreler, tam programlar kullanabilirsiniz. Senin çağrı.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, lütfen gerekirse bir açıklama ekleyin.

Test durumları:

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

Soruya sonuçların snippet'i eklenmesi iyi olur :)
Qwertiy

2
"Olumlu bir tamsayı n >= 1 " bana göre biraz pleonastic görünüyor ... :)
paolo

Yanıtlar:


8

Pyke, 15 14 10 bayt

tQQhQeq>*+

Burada dene!

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

Dalga gibi görünen bir açıklama için +1!
Wastl

23

Python 3, 32 bayt

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

Bitiştirir nİlk karakter sonuncusu eşleşirse tüm kopyalarından ilk karakteri ama ilk çıkarmadan dize kopyalarını.


Bu, sorunun "¯` · .¸¸. · ´¯" dizesini gerektiği gibi işlemez, değil mi? Bunu denemek, ne zaman s[0]ve s[-1]oldukça ilk ve son karakterin yerine, ilk ve son byte başvurmak gibi görünüyor. Düzenleme: ah bekleme, Python 2 var Python 3'te düzgün çalıştığını Python 3. vs
HVD

15

05AB1E , 13 bayt

CP-1252 kodlamasını kullanır .

D¬U¤XQi¦}I<×J

Çevrimiçi deneyin!

açıklama

-___-ve 3örneğin girdi olarak kullanılır.

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 bayt

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
20k için tebrikler!
Adnan,

2
@Adnan Teşekkürler! 20002 de güzel ve simetrik.
Neil,

1
Bu durumda kıvrılma mümkün mü? Bunun s=>n=>...yerine demek istediğim(s,n)=>
Zwei

8

Perl, 29 bayt

İçin 28 bayt kodu + 1 -p.

Birkaç bayt'ı tıraş etmeme yardım ettiğin için @Dada'ya teşekkürler !

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

kullanım

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

Çevrimiçi örnek


2
Güzel. Kurtulmanıza izin vermek <>yerine 3 bayt kullanarak (dolaylı olarak) tasarruf edebilirsiniz . Ve sonra bir tane daha bayt kazanmak yerine kullanabilirsin :-)$'-0s///e//;$_=
Dada

@Dada nice ... Özgün girişimi tamamen mahvettim ve fazla basitleştirdim ve çok daha büyük hale getirdim ... Yorumlarınızı gemiye aldım ama $sonunda eşleşecek bir şeye ihtiyacım var , hala beni bayt olarak kurtarıyor kullanmadığım 'için 3 ekleyerek kaydetmek için bir dosyaya kaydetmek zorunda -pbırakıp geri 1'e bırakabilirim demektir!
Dom Hastings,

1
Huhu. Evet $, daha önce sahip olduğunuz newline yerine gerçekten ihtiyacı var . (Üzgünüm yorumum çok detaylı değildi, acelem vardı ...)
Dada

<>Değiştirme dizesinde kullanma fikrini seviyorum . Ancak n, yeni satır yerine boşlukla ayrılırsa , karakter sayısı biraz azaltılabilir:s/(.+?) (\d+)/$1x$2/e
squishish ossifrage

1
@HomHastings Ah, benim hatam. Düzgün bir şekilde soruyu okumadınız mı :-)
squeamish ossifrage

6

Perl, 23 bayt

İçin +1 içerir -p

STDIN'de ayrı bir satırda giriş dizesini ve ardından sayıyı verin

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

wave.pl:

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

Kelimedeki ilk karakter bir regex özel karakteri değilse, bu 22 baytlık sürüm de çalışır:

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

Temiz! Bence /gonu yapıştırdığınızda değiştirici unuttum ;-)
Dada

@Dada Oops. Sabit
Ton Hospel 7:16

5

MATL, 19 17, 14 bayt

ttP=l):&)liX"h

Bu çevrimiçi tercüman üzerinde ASCII ve MATLAB kullanarak çalıştırıldığında hem unicode hem de ASCII için çalışır.

Çevrimiçi Deneyin!

açıklama

        % 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

Toplu, 117 bayt

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

Tekrar sayısını komut satırı parametresi olarak alır ve dizgiyi STDIN'den okur.



3

Gema, 41 karakter

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

Örnek çalışma:

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 bayt

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

İlk ve son karakterlerin eşleşip eşleşmediğine bağlı olarak dizenin tamamını bir kez, ardından dizenin veya alt dizenin n-1 kopyalarını görüntüler.

.Substring()İndeksinden yöntem çıkışları eğer öyleyse, dizenin sonuna kadar verilen $s[0]-eq$s[-1]yanlış (0 değil) ise, bütün dizeyi olsun. Bu ifade doğruysa (1), alt karakteri ikinci karakterden başlayarak alırız.


Dangit, beni bir kaç dakika sonra yen. Aynı cevabı aldım ($ s ve $ n yerine $ a ve $ b kullanarak).
AdmBorkBork

3

VBA 119 bayt

Bu oyunda yeni ve vba en yüksek bayt ile kazanır: P

Not: vba'nın JAVA HAHA'ya yakın durduğuna inanamıyorum.

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

Açıklama:

+------------------------------------------------------------+-----------------------------------------------------------------------------------+
|                            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'ye Hoşgeldiniz! Bir QBasic programcısı olarak , kısaltılmış kodu (boşlukları ekleyen otomatik biçimlendiriciyle) yazabildiğiniz veya çalıştırabildiğiniz için boşlukların çoğunu kaldırabileceğinizi ve hala geçerli VBA koduna sahip olduğunuzu söyleyebilirim. Bu puanınızı önemli ölçüde arttırır. :)
DLosc

3

CJam, 16 15 bayt

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

Çevrimiçi deneyin

Açıklama:

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
Dalga girişini beğendim. :)
Kevin Cruijssen

3

K, 12 Bayt

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

Teşekkürler


Bu, kuralın 1. baytını 25 bayt {,/y#,$[(*x)~*|x;-1;0]_x}için ilk / son eşleşmeyi ele alır. Kural 1'i {,/y#,x}
bozmaktan

2

PHP, 72 Bayt

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

PHP 7.1 ile 65 Byte'a kadar düşebilir

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

2

Pip , 18 bayt

Regex çözümü, "girilen boşluk yok" kuralından yararlanarak. Dizeyi stdin'den ve sayıyı komut satırı argümanı olarak alır.

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

Çevrimiçi deneyin!

Açıklama:

 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

Böylece, a bdönüşür ab, a adönüşür ave dizenin sonundaki boşluk kaldırılır. Sonra sonuç otomatik olarak yazdırılır.


2

Haskell, 59 bayt

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

Ungolfed versiyonu:

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

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

Çevrimiçi deneyin.

Aynı bayt sayımlı alternatif ( 79 bayt ):

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

Çevrimiçi deneyin.

Elbette kendi soruma cevap vermeye çalışacağım. ;) @ Dpa97
sayesinde -5 bayt . Java 7'den 10'a dönüştürme -21 bayt.

Açıklama:

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.replaceAll ("^.", "") yerine s.split ("^.") [1] çalışmalı, birkaç bayt kaydetmeli
dpa97

@ dpa97 Teşekkürler! Düzenledim. Kullanmayı hep unutuyorum .split.
Kevin Cruijssen

@ dpa97 Sanırım çok fazla düşündüm (ya da biz) .. s.substring(1)iki bayt daha kısa. ;)
Kevin Cruijssen

@KevinCurijssen evet görmeliydim, iyi bul. Galiba regex kullanma fikrine
kapılmıştım

1

Javascript ES6, 49 karakter

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

Ölçek:

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 bayt

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

Sanırım QBIC'e SOL $ ve RIGHT $ eklemeliyim ...

Açıklama:

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

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

Bir dize yinelenen saçma bir yöntem biraz. İstediğiniz tekrar uzunluğundan yeni bir dize oluşturun ve sonra her karakteri tekrarlanacak dizeyle değiştirin. Bunun dışında, diğerleri gibi hemen hemen aynı stratejiye benziyor.

/*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
Hmm, giriş dizgisi a içeriyorsa ne olur x? Belki de, “ Girdi dizgisinde boşluk / sekme / yeni satır / vb .
Kevin Cruijssen

1
Girdi varsa, iyi çalışır x. xx...xÖnce dizeyi yaratır ve sonra xdizeyi baştan başlayarak değiştirilmesi gerekenlerle yeniden değerlendirmeden her birini değiştirir.
süt

1

SpecBAS - 68 bayt

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

Satır içi kullanırIFİlk ve son karakterlerin aynı olup olmadığını kontrol etmek için . Değilse, dizi nsayısını yazdırın . Aksi halde, dizeyi uzunluk-1'e ekleyin, tekrarlayın ve son karakterin sonuna koyun.

Yalnızca ASCII karakterlerini (veya SpecBAS IDE'de yerleşik olan karakterleri) kabul edebilir

görüntü tanımını buraya girin


1

APL, 19 bayt

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

Kullanımı:

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

Açıklama:

  • ⊃⍺=⊃⌽⍺: bakın ilk karakterin son karakterle uyuşup uyuşmadığını
  • ⍺↓⍨: Bu durumda, ilk karakteri bırak
  • : sonucu dahil etme
  • ⍵⍴: kez çoğalt
  • 1↓: ilkini bırak (bu daha kısadır (⍵-1)⍴)
  • : tüm basit unsurları al (boks yapmayı geri al)
  • ⍺,: tüm dizenin bir örneğini öne

1

Postscript, 98 bayt

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

... ancak PS tercümanınızın iletişim arabelleğini yıkaması için altı bayt :(


1

Ortak Lisp (LispWorks), 176 bayt

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

Kullanımı:

    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

Açıklama:

~~ =>   ~

\" =>   " 

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 bayt

Bunu yapmanın kolay yolu, ilk ve son karakterlerin uyuşup uyuşmadığını söyleyebilecek bir geri referanslı regex kullanmaktır. Fakat uzun regex'ler uzundur. Bunu istemiyoruz.

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

Tekrarlanacak dalga tampondadır. Tekrarlanacak sayının kayıt defterinde olduğunu varsayalım "a( qaNqayarlamak için sayı olarak N yazın ). Fikir şudur:

  • İlk ve son baytlar eşleşirse, son karaktere kadar her şeyi silin.
  • İlk ve son baytlar eşleşmiyorsa , tüm karakterleri silin.

Sonra Psilinen metin @azamanları.

  • lDg*: Bu manevra kaçması gerekip gerekmediğine veya bir kelime olup olmamasına bakılmaksızın herhangi bir ilk karakterle eşleşen bir regex oluşturur. (* Düzgün bir şekilde çıkarılan regex'i yapmak için yeterli olur, ancak \<\>bir kelime karakteri olsaydı istenmeyen çöpler eklerdi _.)
  • p^: Son adım dağınıktı. Çizginin başlangıcında orijinal konumuna kadar temizleyin.
  • v$: Görsel modda, $ varsayılan olarak satır sonundan sonraki noktaya gider .
  • ?<C-P>$<CR>hd: Satır sonunda önceki regex varsa, bu arama ona taşınır; Aksi takdirde, çizginin sonunun ötesinde kalın. Oradan sola hareket edin ve ihtiyacımız olan (sıkıcı) silme işlemini gerçekleştiririz.
  • @aP: Argüman olarak kullanılacak sayı tekrarını bir makro olarak çalıştırın P.

1

Ruby, 38 bayt

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

Bunun oldukça açıklayıcı olduğunu düşünüyorum. Hala s[0..-2]bloğu temsil etmenin daha özlü bir yolu olup olmadığını merak ediyorum , ancak henüz bulamadım.


0

Java (117 bayt)

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
Merhaba, PPCG'ye hoş geldiniz! Hmm, ben zaten daha kısa bir Java 7 cevap yazdım . Sizinki daha önce sahip olduğumuza benzer bir yaklaşım kullanıyor. Bu aynı yaklaşımı kullanarak, olabilir golf b>0;b--için b-->0;. Ayrıca, neden b+orada c+=b+a.substring? Yine de, bağımsız bir şekilde ortaya çıktıysanız, bu çok iyi bir ilk cevap. PPCG'de kaldınız! :) Ayrıca, Java'da golf okumak için ilginç ipuçları bulabilirsiniz .
Kevin Cruijssen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.