Patlamış alt diziler


32

Giriş

İpi izleyelim abc. Bundan yapılabilecek alt diziler şunlardır:

a, ab, abc, b, bc, c

Şimdi bunları ilk dizgenin altına yerleştirmeliyiz, şöyle:

abc
a
 b
  c
ab
 bc
abc

Dizenin sırası önemli değil, bu yüzden de bu tamamen geçerli:

abc
a
ab
abc
 b
 bc
  c

Bu nedenle, alt dize, ilk dizgede alt dizinin yeri altına yerleştirilir. Yani abcdefve altbağası cde, şuna benzerdi:

abcdef
  cde

Görev

Görev, tüm alt dizileri yukarıda gösterildiği gibi 0'dan büyük bir uzunlukla hizalamaktır . Dizenin yalnızca alfabetik karakterler içereceğini ve en az 1 karakter içerdiğini varsayabilirsiniz . Dolgu için boşluk veya başka bir alfabetik olmayan yazdırılabilir ASCII karakteri ( 32 - 127) kullanabilirsiniz. Belki değil gerekli söz, ancak dize kendisi sadece bu yüzden değil gibi eşsiz karakterleri içerecek ababeri, aiki kez gerçekleşir.

Test durumları

Giriş: abcde

Mümkün çıktı:

a
ab
abc
abcd
abcde
 b
 bc
 bcd
 bcde
  c
  cd
  cde
   d
   de
    e

Giriş: abcdefghij

Mümkün çıktı:

a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
 b
 bc
 bcd
 bcde
 bcdef
 bcdefg
 bcdefgh
 bcdefghi
 bcdefghij
  c
  cd
  cde
  cdef
  cdefg
  cdefgh
  cdefghi
  cdefghij
   d
   de
   def
   defg
   defgh
   defghi
   defghij
    e
    ef
    efg
    efgh
    efghi
    efghij
     f
     fg
     fgh
     fghi
     fghij
      g
      gh
      ghi
      ghij
       h
       hi
       hij
        i
        ij
         j

Bu , bu yüzden en az sayıda bayt olan gönderim kazanıyor!


1
Boş substring nerede?
Sızdıran Rahibe

@KennyLau Oh evet, bu bana daha fazla bilgiyi mücadelede düzenlememi hatırlatıyor.
Adnan

Sondaki yeni satır kabul edilebilir mi?
user81655

@ user81655 Evet, bu kabul edilebilir.
Adnan

Bir dizge dizisi kabul edilebilir mi yoksa yeni satırla ayrılmış mı olmalıdır?
Zgarb

Yanıtlar:



21

Perl, 32 28 24 bayt

İçin +1 içerir -n

Kod:

/.+(??{say$"x"@-".$&})/

STDIN'deki dizeyle çalıştırın:

perl -nE '/.+(??{say$"x"@-".$&})/' <<< abcd

Golf dilleri çok yakın ve henüz çok uzak ...

açıklama

/.+/bir alt dizeyle eşleşir. Maalesef eşleştiğinde durur. Bu yüzden regex'i (??{})genişletmek için çalışma zamanı regex yapısını kullanıyorum, böylece başarısız oluyor ve geriye doğru izleme aşağıdaki alt dizgeyi deneyecek, sonunda hepsini tiksinmeden vazgeçmeden deneyeceğim.

İçinde (??{})I kullanarak geçerli alt dizgiyi kullanarak alt dizgenin ofsetinin kadar boşluk ekledim$"x"@-"

Böylece çıktı düzenli bir şekilde regex geri izlemenin nasıl çalıştığını belgeler:

abcd
abc
ab
a
 bcd
 bc
 b
  cd
  c
   d

1
İyi sos, bu sadece esolangs gibi görünen ezoterik. + 1'leyin.
AdmBorkBork

4
@TimmyD: Garip bir sebepten dolayı golf
oynamak

Bundan ilham alan Perl 6 versiyonu işlevsel olarak çok benzerperl6 -ne 'm/^(.*)(.+)<{+put " "x$0.to,$1}>/'
Brad Gilbert b2gills 2

Girdide çalışmaz ab1( say...değerlendirir diye kabul ediyorum 1). (5.18.2'de test edilmiştir.) Düzenleme: Ah! üzgünüm, soru "dizenin kendisinin yalnızca alfabetik karakterler içereceğini varsayabilirsin" diyor.
msh210

14

MATL , 20 18 bayt

@ Aditsu kullanıcısının yanıtı tarafından üretilen alt dizgelerin deseninden ilham alındı

tt!+gR*c`t3Lt3$)tn

Çevrimiçi deneyin!

Alt dizilerin deseni, girdi ile aynı boyutta bir üst üçgen matris ve son sıra ve sütunun art arda kaldırılmasıyla elde edilen tüm alt matrisler tarafından üretilir.

açıklama

t         % implicit input. Duplicate
t!+g      % square matrix with size as input
R         % keep upper triangular part
*c        % multiply element-wise with broadcast. Convert to char
`         % do...while
  t       %   duplicate
  3Lt3$)  %   remove last row and column
  tn      %   number of remaining elements. Used as loop condition
          % implicitly end loop and display

Eski yaklaşım (Kartezyen gücü)

Diğer cevaplar için ilham kaynağı olması durumunda bu yaklaşımı sürdürüyorum

tn0:2Z^!S!2\Xu4LY)*c

Çevrimiçi derleyicide bu, en uzun sınama durumu için yetersiz bellek kullanır.

Çevrimiçi deneyin!

açıklama

Bu değerlerin her desen oluşturur 0, 1ve 2artan şekilde, ve daha sonra dönüşümleri 2içine 0. Bu olası tüm kalıplarını verir 0ve değerler bitişik bulunmaktadır. Bunlar, hangi karakterlerin orijinal dizeden alındığını işaretlemek için kullanılır.11

Örnek olarak, dizge 'abc'için desenler aşağıdaki gibi üretilir. Öncelikle [0 1 2]girilen karakter sayısına yükselen Kartezyen güç elde edildi:

0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
···
2 2 1
2 2 2

Her satırı sıralamak

0 0 0
0 0 1
0 0 2
0 0 1
0 1 1
···
1 2 2
2 2 2

Dönüşüm 2içine 0(yani mod(...,2)) ve yinelenen satırları kaldırma nihai deseni verir

0 0 0
0 0 1
0 1 1
0 1 0
1 1 1
1 1 0
1 0 0

İçinde her satır bir (bitişik) alt dizeye karşılık gelen bir maskedir. İlk satırın kaldırılması gerekiyor, çünkü boş alt dizeye karşılık geliyor.

t      % Implicitly get input. Duplicate
n      % Number of elements
0:2    % Vector [0 1 2]
Z^     % Cartesian power. Each result is a row
!S!    % Sort each row
2\     % Modulo 2: transform 2 into 0
Xu     % Unique rows
4LY)   % Remove first (corresponds to the empty substring)
*      % Element-wise multiplication by original string
c      % Convert to char. Implicitly display

3
Aklınız bir büyük matris manipülasyon makinesi mi?
kedi

@cat Çok uzun yıllar Matlab kullanımı sanırım :-)
Luis Mendo

14

Retina , 48 32 31 bayt

3 bayt'ı kurtardığı ve daha pek çok şeyin yolunu açtığı için Kenny Lau'ya teşekkürler.

Bayt sayısı, ISO 8859-1 kodlamasını varsayar.

M&!r`.+
%+`( *)\S(.+)$
$&¶$1 $2

Çevrimiçi deneyin!

Üretilen alt dizelerin sırası:

abcde
 bcde
  cde
   de
    e
abcd
 bcd
  cd
   d
abc
 bc
  c
ab
 b
a

açıklama

M&!r`.+

Bu bize girişin tüm öneklerini getirir. Bu, üst üste gelen eşleşmeleri ( ) göz önüne alarak ( ), satır öğelerine ( ) sahip olan tüm eşleşmeleri geri döndürerek ( ), Msondan .+başlayarak ( ) herhangi bir alt diziyi ( ) eşleştirerek yapılır .r&!

Şimdi tek yapmamız gereken , bu öneklerin ardışık öneklerini (boşluklarla değiştirerek) oymak . Bu adımı bir döngü ile adım adım yapıyoruz:

%+`( *)\S(.+)$
$&¶$1 $2

%Bu şeyin tamamı tek tek her satıra yapıldığını araçlar (o zaman varlık için ayrı bir dize göz önüne alındığında ve sonunda linefeeds ile tüm geri birlikte katılmadan). +Çıktı değişen durana kadar bir döngü içinde bu ikame çalıştırmak için Retina söyler (ki bu durumda araçlarında regex artık maçları olduğunu). Daha sonra, regex girişin son satırını en az iki boşluksuz karakterle eşleştirmeye çalışır ve ilk satırın bir boşlukla değiştirildiği yeni bir satır ekler.


Elimizdeki Can !ima Mve 1char versiyonları .+ve .*?
Hesap MakinesiFeline

Ayrıca bir dize öneklerinin önekleri = bir dize önekleri. Belki de eklerin öneklerini kastettin? (Düzeltmek için düzenlenmiştir.)
CalculatorFeline

@CatsAreFluffy Hayır, açıklama doğru oldu. Önekleri öneklerden kaldırdığımızda, alt dizgileri alırız. Diğer önerilere gelince, seçenekleri belirten aşamaları yapacağımı sanmıyorum. Halihazırda, birçok karakter yalnızca bir sahne türü için kullanılıyor, bu gelecekte de muhtemelen değişecek. Gelince .+ve .*regex'i belirtmek zorunda kalacağım ve bunu bir noktada yapmayı planlıyorum, yakında herhangi bir zamanda olacağını sanmıyorum (ve yaparsam, muhtemelen şu özelliklere odaklanacağım. aslında ifade ekler).
Martin Ender


11

Oracle SQL 11.2, 146 bayt

WITH v AS(SELECT LEVEL i FROM DUAL CONNECT BY LEVEL<=LENGTH(:1))SELECT LPAD(SUBSTR(:1,s.i,l.i),s.i+l.i-1)FROM v s,v l WHERE s.i+l.i<=LENGTH(:1)+1;

Un-golfed

WITH v AS(SELECT LEVEL i FROM DUAL CONNECT BY LEVEL<=LENGTH(:1))
SELECT LPAD(SUBSTR(:1,s.i,l.i),s.i+l.i-1)
FROM   v s, v l
WHERE  s.i+l.i<=LENGTH(:1)+1

9

CJam, 20

q{__,{\_N+oSt}/;W<}h

Çevrimiçi deneyin

Açıklama:

q           read the input (initial string)
{…}h        do … while
  _         copy the current string
  _,        copy and get the length
  {…}/      for each value (say i) from 0 to length-1
    \       bring the string to the top
    _N+o    make a copy, append a newline and print
    St      set the i'th element to S=" "
  ;         pop the last result (array full of spaces)
  W<        remove the last character of the current string
             if the string is empty, the do-while loop terminates

8

Python, 57 bayt

f=lambda s,p='':set(s)and{p+s}|f(s[1:],' '+p)|f(s[:-1],p)

Bir setbenzeri çıktılar {' b', 'a', 'ab'}. Fikir, ilk veya son karakteri kesen iki dallı tekrarlamaktır. Yedekli çıktılar verir, ancak setkopyaları otomatik olarak kaldırır. Hizalama için, ilk karakter her kesildiğinde ön pyüze birleştirilen ön eke bir boşluk eklenir .


7

PowerShell v2 +, 69 bayt

param($a)0..($b=$a.length-1)|%{($i=$_)..$b|%{" "*$i+-join$a[$i..$_]}}

Girdiyi alır $a, uzunluğu aşar ( $bdaha sonra kullanılmak üzere işlem ayarını yapar ). Her dış döngü, daha sonra kullanmak üzere $bayarlayarak tekrar tekrar döngü yaparız $i. Her bir iç döngü, $ibir girdi dizgisinin bir dilimiyle birleştirilmiş boşlukların sayısını veririz . Sadece dizgenin içinde dolaştığımız için, bu aslında herhangi bir dizgiyi (yinelenen harfler, boşluklar, her neyse) idare eder.

Örnek

PS C:\Tools\Scripts\golfing> .\exploded-substrings.ps1 "Golfing"
G
Go
Gol
Golf
Golfi
Golfin
Golfing
 o
 ol
 olf
 olfi
 olfin
 olfing
  l
  lf
  lfi
  lfin
  lfing
   f
   fi
   fin
   fing
    i
    in
    ing
     n
     ng
      g

7

C #, 136 132 131 bayt


golfed

String m(String s){String o="",e=o;for(int i=0,a,l=s.Length;i<l;i++,e+=" ")for(a=1;a+i<=l;a++)o+=e+s.Substring(i,a)+"\n";return o;}

Ungolfed

String m( String s ) {
    String o = "", e = o;

    for (int i = 0, a, l = s.Length; i < l; i++, e += " ")
        for (a = 1; a + i <= l; a++)
            o += e + s.Substring( i, a ) + "\n";

    return o;
}

Tam kod

    using System;
using System.Collections.Generic;

namespace Namespace {
    class Program {
        static void Main( string[] args ) {
            List<String> ls = new List<String>() {
                    "abcde",
                    "abcdefghijklmnop",
                    "0123456789",
                };

            foreach (String s in ls) {
                Console.WriteLine( s );
                Console.WriteLine( m( s ) );
                Console.WriteLine( "" );
            }

            Console.ReadLine();
        }

        static String m( String s ) {
            String o = "", e = o;

            for (int i = 0, a, l = s.Length; i < l; i++, e += " ")
                for (a = 1; a + i <= l; a++)
                    o += e + s.Substring( i, a ) + "\n";

            return o;
        }
    }
}

Bültenleri

  • v1.2 - -1 byte- Değişti String o="",e="";için String o="",e=o;1 bayt kaydedin. Fikir Gallant'a aitti ( Bu güncellemeyi son güncellemede uygulamayı unuttum, özür dilerim. ).
  • v1.1 - -4 bytes- Parantezleri forhalkalardan düşürüp evar boşluk artışını dıştaki fordöngünün yineleyici bölgesine kaydırdı . Fikir Gallant'tandı .
  • v1.0 - 136 bytes- İlk çözüm.

1
Kıvrımlı parantezleri iç halkaya bırakabilir ve e=o3 bayttan tasarruf etmek için atayabilirsiniz .
Gallant

ayrıca başka bir 3 String o="",...ile takas edebilirsiniz var o....
TyCobb

@tycobb faydasız dönüştürmek hale getirecektir String o = "", e = "";için varben sonuçlanan içinde, ikiye ayırın gerekir çünkü var o = ""; var e = "";ben biriyle karşılaştırıldığında aynı uzunlukta olan. Bunu yapar, ancak VS, dolaylı olarak yazılan değişkenleri - aka var' kullanırken çok değişkenli bildirime izin vermez . Ama yardımın için teşekkürler. EDIT: Bunu yapamayacağımı bana VS ile bağırmak, yanlış olduğunu kabul ediyorum, yanlış olabilir.
Auhmaan

5

Python 2.7, 70 82 bayt

1 hatta nasıl elde edeceğimi bilemedim. İle arae("abcde",0)

def e(s,p):
 f=len(s)
 for x in range(f):print(' '*p+s[:x+1])
 if f>1:e(s[1:],p+1)

4

Python 3, 80 78 bayt

Önek verilecek boşluk sayısından sonra sonlanacak karakter sayısından kaçının.

lambda x:[print(' '*i+x[i:j+1])for i in range(len(x))for j in range(i,len(x))]

Düzenleme: for döngülerinden önce kaldırılan boşluklar.


4

MATL, 15 14 bayt

Nedeniyle bir bayt Kaydedilen LuisMendo en @ ucu burada !

tfWt2/!-RXzB*c

Pek çok yol ... yeni bir tane bulmak zorunda kaldı. Mutlu bitler! :)

Çevrimiçi deneyin!

Ayrılmış

t       % duplicate input
f       % get indices of nonzero elements in vector (i.e. 1:n)
W       % 2 raised to array, element-wise: 2^(1:n)
t       % duplicate array
2/      % divide by 2: 2^(0:n-1)
!       % transpose array 
-       % element-wise subtraction (w/singleton expansion)
R       % upper triangular part
Xz      % nonzero elements
B       % convert from decimal to binary. Produces a logical array
*       % array product (element-wise, singleton expansion)
c       % convert to character array; 0's automatically converted to spaces

3

JavaScript (ES6), 89 bayt

document.write("<pre>"+(

s=>(a=[...s]).map((_,i)=>a.map((_,j)=>++j>i?r+=" ".repeat(i)+s.slice(i,j)+`
`:0),r="")&&r

)("abcde"))

Dümdüz ileri yaklaşım. Çıktının izleyen bir yeni hattı var.


=>Javascript'te ne anlama geliyor? İkili bir operatör mü
Ewan Delanoy

@EwanDelanoy Bir ES6 Ok İşlevi ilan eder .
user81655

3

JavaScript (ES6), 72

s=>{for(i=j=0;s[j]||s[j=++i];)console.log(' '.repeat(i)+s.slice(i,++j))}      

3

Pyth, 12 11 bayt

jm+*;xQdd.:

Maalesef soru benzersiz karakterleri üstlenmemize izin veriyor, bu yüzden sadece alt dize ilk konumuna bakıyorum ve boşlukları dolduruyorum.


En düşük seviye haritanın içindeyken ;yerine kullanabilirsiniz \ .
FryAmTheEggman

3

Mathematica 89 bayt

r@i_:=StringReplace[i,#->" "]&/@(Complement[y,#]&/@Subsequences[y=Characters@i])//Column

açıklama

i giriş dizesini ifade eder

Subsequences[y=Characters@i]girişin tüm alt dizilerini (temsil edilen karakter listeleri) döndürür. ( Subsequencesv. 10.4'te tanıtıldı)

Her bir alt Complement...dizilim için, bu karakterleri mevcut olmayan giriş dizgisinden döndürür . Bu karakterlerin her biri üzerinden boş bir alanla değiştirilir StringReplace[i,#->" "].

Columnsonuçları tek bir sütunda görüntüler. Her çıkış dizgisinde aynı sayıda karakter bulunur, bu da hizalanmış harflerle sonuçlanır.


r@"abcdefgh"

çıktı


10.0.4 ile 10.4 demek istiyorsun, değil mi? 10.3 yok.
Hesap MakinesiFeline

Evet. 10.4 Düzelteceğim.
DavidC,

3

J, 32 29 28 bayt

(-@{.@i.|.])"1 a:>@-.~&,<\\.

Bu bir monadik fiili değerlendirir. Burada dene. Kullanımı:

   f =: (-@{.@i.|.])"1 a:>@-.~&,<\\.
   f 'abe'
a  
ab 
abe
 b 
 be
  e

açıklama

Bazı diğer cevaplar olarak, her alt dizinin ilk karakterinin oluşum endeksini hesaplarım. Alt diziler takip eden boşlukları olan bir matriste saklanır, bu yüzden doğru miktarda dolgu elde etmek için indeksleri ile onları sağa döndürürüm. Aradaki boşluğun bir parçası "1ve a:gerçekten can sıkıcı ...

(-@{.@i.|.])"1 a:>@-.~&,<\\.  Input is y
                        <\\.  Compute suffixes of prefixes of y, and put them in boxes.
                              This gives a 2D array of substrings in boxes.
                      &,      Flatten the array of boxes,
               a:  -.~        remove all empty strings, and
                 >@           open each box. This places the strings in a 2D matrix of
                              characters, with trailing spaces to make it rectangular.
(          )"1                Do this for each line x in the matrix:
      i.                        The index of every character of x in y.
 -@{.@                          Take the first one and negate it.
        |.]                     Rotate x to the left by that amount.
                                Since we negated the index, this rotates to the right.


@TonHospel Programı düzelttim, şimdi spec izliyor.
Zgarb

3

JavaScript (Firefox 30-57), 65 63 bayt

s=>[for(c of(i=0,s))for(d of(t=r=i?t+' ':'',s.slice(i++)))r+=d]

Bir dizi dizeyi döndürür. ES6 olarak 78 bayttır:

s=>[...s].map((_,i,a)=>a.slice(i).map(c=>r.push(u+=c),t=u=i?t+' ':''),r=[])&&r

2

QBasic, 75 bayt

INPUT s$
FOR i=1TO LEN(s$)
FOR j=1TO i
LOCATE,j
?MID$(s$,j,i+1-j)
NEXT
NEXT

Temel çiftFOR döngü stratejisi, QBasic'in 1 tabanlı endekslemesi için biraz değiştirildi. Ana numara, LOCATE,jimleci jyazdırmadan önce geçerli satırın sütununa götüren kısımdır . Sütun 1, ilk sütun olduğu için, bu, j-1önde gelen boşlukları yazdırmaya eşdeğerdir .


2

Perl 6 , 34 bayt

perl6 -ne 'm/^(.*)(.+)<{+put " "x$0.to,$1}>/'
m/       # match the input line
  ^      # from the start
  ( .* ) # 0 or more characters ( $0 )
  ( .+ ) # 1 or more characters ( $1 )

  <{ # match against the result of:

    +put # print with a trailing newline:
      " " x $0.to, # add the leading spaces
      $1           # the substring
  }>
/

Nedeni +daha önce putdöndürür öyle mi 1yerine Trueher zaman sarfınazar sahiptir böylece girişinde olmamaya garanti edildiği,.

$ perl6 -ne 'm/^(.*)(.+)<{+put " "x$0.to,$1}>/' <<< abcd
   d
  cd
  c
 bcd
 bc
 b
abcd
abc
ab
a

(Ters sırada kullanmak istiyorsanız (.*?)(.+?) yerine(.*)(.+) )

Bu Perl 5 cevabından ilham almıştır .


2

J, 35 23 22 bayt

[:;#\.<@{."_1|.\."1^:2

Beni biraz zaman aldı ama sonunda optimize ettim.

kullanım

   f =: [:;#\.<@{."_1|.\."1^:2
   f 'abcde'
abcde
abcd 
abc  
ab   
a    
 bcde
 bcd 
 bc  
 b   
  cde
  cd 
  c  
   de
   d 
    e

açıklama

[:;#\.<@{."_1|.\."1^:2  Input: s
             |.\."1     For each suffix of s, reverse it
                   ^:2  Repeat that twice to create all exploded substrings
   #\.                  Get the length of each suffix. This is
                        used to make the range [len(s), len(s)-1, ..., 1]
        {."_1           For each value in the range, take that many strings from
                        the list of exploded substrings. This avoids blank substrings
      <@                Box each set of strings
[:;                     Unbox and join the strings together and return

Doğru parantez çiftini kaldırarak 2 bayt tasarruf edebilirsiniz. Ayrıca, [:+./"1' '~:]yerine [:-.[:*/"1' '=]başka bir 2 bayt kaydeder.
Zgarb

2

Java, 138 bayt

String e(String s){int l=s.length(),a=0,i,j;for(;++a<l;)for(i=0;i<=l-a;){s+="\n";for(j=0;j++<i;)s+=" ";s+=s.substring(i,i+++a);}return s;}

biçimlendirilmiş:

String e(String s) {
    int l = s.length(), a = 0, i, j;
    for (; ++a < l;)
        for (i = 0; i <= l - a;) {
            s += "\n";
            for (j = 0; j++ < i;)
                s += " ";
            s += s.substring(i, i++ + a);
        }
    return s;
}

1

Pyke, 15 bayt

QlFUQRd:DlRF2h<

Burada dene!

Dolgulu dizelerin dizisinin kabul edilebilir olduğunu varsayar

Önce pedler sonra doğrayın.


1

Haskell, 65 bayt

(>>=zipWith((++).(`replicate`' '))[0..].init.tails).reverse.inits

Gerçi initsve tailsData.List gerektirir . Çıktı almak içinmapM_ putStrLn. için öne .

Nispeten basit; reverseEmin Özgün dize ilk yapmaktır.

GHCi> mapM_ putStrLn.(>>=zipWith((++).(`replicate`' '))[0..].init.tails).reverse.inits$"abcde"
abcde
 bcde
  cde
   de
    e
abcd
 bcd
  cd
   d
abc
 bc
  c
ab
 b
a
it :: ()
(0.02 secs, 0 bytes)

2
(>>=zipWith(++)(inits$cycle" ").init.tails).inits. Ve lütfen import Data.List;bayt sayımına ekleyin .
nimi

1

Ruby, 75 67 bayt

Anonim işlev Alt dizileri hizalamak için regex ikamesi kullanır. .dolgu karakteridir.

->s{(l=s.size).times{|i|(l-i).times{|j|puts s.tr(?^+s[j,i+1],?.)}}}

1

bash + GNU coreutils, 109 Bayt

l=${#1}
for i in `seq 0 $l`;{
for j in `seq $((l-i))`;{
for k in `seq $i`;{ printf ' ';}
echo ${1:i:j}
}; }

Belki daha kısa bir çözüm var, ama aklıma gelen en iyisi bu. Chracters benzersizliği burada önemli değil.


1

PHP, 151 karakter

Ungolfed

<?php
$input = $argv[1];
foreach(str_split($input) as $p=>$letter)
{
    $spaces = str_repeat(" ", $p);
    echo $spaces.$letter."\n";
    $p++;
    for($i=$p;$i<strlen($input);$i++)
    {
        echo $spaces.$letter.substr($input, $p, $i)."\n";
    }
}
?>

golfed

<?$c=$argv[1];foreach(str_split($c)as$d=>$b){$a=str_repeat(" ",$d);echo$a.$b."\n";$d++;for($e=$d;$e<strlen($c);$e++){echo$a.$b.substr($c,$d,$e)."\n";}}

Örnek

php explodesub.php 'abc'
a
ab
abc
 b
 bc
  c

1

C ++, 145 Bayt

ilk start parametresi giriş olarak, konsol olarak çıkış olarak kullanılır.

#include<iostream>
#define f(y,b,d) for(int y=b;r[0][y];y++){d;}
int main(int,char*r[]){f(x,0,f(y,x+1,std::cout.write(r[0],y)<<'\n')r[0][x]=32)}

Büyük cevap ve PPCG'ye hoş geldiniz! Çok fazla C ++ kullanmıyorum ama std::cout<<r[0]<<y<<'\n'`std :: cout.write (r [0], y) << '\ n' yerine yapamazsınız? Lütfen kısa bir açıklama ekler misiniz? Teşekkürler!
NoOneIsHere

1

Python 2 (Ungolfed) 99 Bayt

t=raw_input()
l=len(t)
for j in range(l):
 for i in range(l):
  if i>=j:print j*' '+t[j:i+1]  

Sonuç:

>>python codegolf.py
abc
a
ab
abc
 b
 bc
  c

>>python codegolf.py
abcdef
a
ab
abc
abcd
abcde
abcdef
 b
 bc
 bcd
 bcde
 bcdef
  c
  cd
  cde
  cdef
   d
   de
   def
    e
    ef
     f

>>python codegolf.py
lmnopqrst
l
lm
lmn
lmno
lmnop
lmnopq
lmnopqr
lmnopqrs
lmnopqrst
 m
 mn
 mno
 mnop
 mnopq
 mnopqr
 mnopqrs
 mnopqrst
  n
  no
  nop
  nopq
  nopqr
  nopqrs
  nopqrst
   o
   op
   opq
   opqr
   opqrs
   opqrst
    p
    pq
    pqr
    pqrs
    pqrst
     q
     qr
     qrs
     qrst
      r
      rs
      rst
       s
       st
        t
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.