Substring yang meledak


32

pengantar

Mari kita amati senarnya abc. Substring yang dapat dibuat dari ini adalah:

a, ab, abc, b, bc, c

Kita sekarang perlu menyelaraskannya di bawah string awal, seperti ini:

abc
a
 b
  c
ab
 bc
abc

Urutan string tidak masalah, jadi ini juga berlaku:

abc
a
ab
abc
 b
 bc
  c

Jadi, substring diposisikan di bawah lokasi substring di string awal. Jadi untuk abcdefdan substring cde, akan terlihat seperti ini:

abcdef
  cde

Tugas

Tugasnya adalah untuk menyelaraskan semua substring dengan panjang lebih besar dari 0 , seperti yang ditunjukkan di atas. Anda dapat mengasumsikan bahwa string itu sendiri hanya akan berisi karakter alfabet dan memiliki setidaknya 1 karakter. Untuk padding, Anda dapat menggunakan spasi atau karakter ASCII lain yang tidak dapat dicetak ( 32 - 127). Mungkin tidak perlu disebutkan, tetapi string itu sendiri hanya akan berisi karakter unik, jadi tidak suka aba, karena aterjadi dua kali.

Uji kasus

Memasukkan: abcde

Output yang mungkin:

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

Memasukkan: abcdefghij

Output yang mungkin:

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

Ini adalah , jadi pengiriman dengan jumlah byte paling sedikit menang!


1
Di mana substring kosong?
Leaky Nun

@ KennyLau Oh ya, itu mengingatkan saya untuk mengedit beberapa info lagi ke tantangan.
Adnan

Apakah trailing newline dapat diterima?
user81655

@ user81655 Ya, itu bisa diterima.
Adnan

Apakah array string dapat diterima, atau harus dipisahkan dengan baris baru?
Zgarb

Jawaban:



21

Perl, 32 28 24 byte

Termasuk +1 untuk -n

Kode:

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

Jalankan dengan string di STDIN:

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

Bahasa-bahasa golfnya begitu dekat namun begitu jauh ...

Penjelasan

/.+/cocok dengan substring. Sayangnya itu berhenti setelah cocok satu. Jadi saya menggunakan runtime regex construct (??{})untuk memperluas regex sehingga gagal dan mundur akan mencoba substring berikut, pada akhirnya mencoba semuanya sebelum menyerah dengan jijik.

Di dalam (??{})I mencetak substring saat ini diawali oleh banyak spasi sebagai offset dari menggunakan substring$"x"@-"

Jadi outputnya dengan rapi mendokumentasikan bagaimana regex backtracking bekerja:

abcd
abc
ab
a
 bcd
 bc
 b
  cd
  c
   d

1
Saus yang enak, ini sama esoterisnya dengan esolang. Punya +1.
AdmBorkBork

4
@TimmyD: Untuk beberapa alasan aneh ada orang yang mengatakan bermain golf memberi nama buruk kepada Perl ...
Ton Hospel

Versi Perl 6 yang diilhami dari hal ini sangat mirip secara fungsionalperl6 -ne 'm/^(.*)(.+)<{+put " "x$0.to,$1}>/'
Brad Gilbert b2gills

Tidak berfungsi pada input ab1(saya berasumsi karena say...mengevaluasi ke 1). (Diuji pada 5.18.2.) Edit: Oh! maaf, pertanyaannya mengatakan "Anda dapat mengasumsikan bahwa string itu sendiri hanya akan berisi karakter alfabet".
msh210

14

MATL , 20 18 byte

Terinspirasi oleh pola substring yang dihasilkan oleh jawaban @ aditsu

tt!+gR*c`t3Lt3$)tn

Cobalah online!

Pola substring dihasilkan oleh matriks segitiga atas dengan ukuran yang sama dengan input, dan semua submatrices diperoleh dengan secara berturut-turut menghilangkan baris dan kolom terakhir.

Penjelasan

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

Pendekatan lama (kekuatan Kartesius)

Saya menjaga pendekatan ini jika itu berfungsi sebagai inspirasi untuk jawaban lain

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

Dalam kompiler online ini kehabisan memori untuk test case terpanjang.

Cobalah online!

Penjelasan

Ini menghasilkan semua pola nilai 0, 1dan 2dalam urutan yang meningkat, dan kemudian berubah 2menjadi 0. Ini memberikan semua pola yang mungkin 0dan di 1mana 1nilai-nilai berdekatan. Ini digunakan untuk menandai karakter mana yang diambil dari string asli.

Sebagai contoh, untuk string 'abc'pola dihasilkan sebagai berikut. Pertama-tama kekuatan Kartesius yang [0 1 2]diangkat ke jumlah karakter input diperoleh:

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

Menyortir setiap baris memberi

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

Mengubah 2menjadi 0(yaitu mod(...,2)) dan menghapus baris duplikat memberikan pola terakhir

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

di mana setiap baris adalah topeng yang sesuai dengan substring (berdekatan). Baris pertama harus dihapus karena sesuai dengan substring yang kosong.

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
Apakah pikiran Anda satu mesin manipulasi matriks besar?
kucing

@cat Terlalu banyak tahun penggunaan Matlab kurasa :-)
Luis Mendo

14

Retina , 48 32 31 byte

Terima kasih kepada Kenny Lau karena telah menghemat 3 byte dan membuka jalan untuk lebih banyak lagi.

Hitungan byte mengasumsikan penyandian ISO 8859-1.

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

Cobalah online!

Urutan substring yang dihasilkan:

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

Penjelasan

M&!r`.+

Ini memberi kita semua awalan input. Hal ini dilakukan dengan mencocokkan ( M) substring apa saja ( .+) mulai dari akhir ( r), mempertimbangkan pertandingan yang tumpang tindih ( &) dan mengembalikan semua pertandingan yang bergabung dengan umpan baris ( !).

Sekarang yang perlu kita lakukan adalah mengukir awalan berturut-turut dari awalan tersebut (dengan menggantinya dengan spasi). Kami melakukan langkah demi langkah dengan satu lingkaran:

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

The %berarti bahwa seluruh hal ini dilakukan untuk setiap baris secara individual (mengingat string terpisah untuk waktu makhluk, dan bergabung semuanya kembali bersama-sama dengan linefeeds di akhir). The +memberitahu Retina untuk menjalankan substitusi ini dalam satu lingkaran sampai output berhenti berubah (yang dalam hal ini berarti bahwa regex tidak lagi cocok). Regex kemudian mencoba untuk mencocokkan baris terakhir dari input dengan setidaknya dua karakter non-spasi, dan menambahkan baris baru di mana yang pertama digantikan dengan spasi.


Bisakah kita memiliki !implikasi Mdan versi 1char dari .+dan .*?
CalculatorFeline

Juga awalan awalan suatu string = awalan suatu string. Mungkin Anda maksudkan awalan sufiks? (Diedit untuk memperbaiki.)
CalculatorFeline

@CatsAreFluffy Tidak ada penjelasan yang benar. Saat kami menghapus awalan dari awalan, kami mendapatkan substring. Adapun saran lainnya, saya tidak berpikir saya akan membuat opsi menyiratkan tahapan. Sementara saat ini, banyak karakter yang hanya digunakan untuk satu jenis tahap, yang mungkin akan berubah di masa mendatang. Sedangkan untuk .+dan .*saya harus menandai regex, dan sementara saya berencana untuk melakukan itu di beberapa titik, saya tidak berpikir itu akan terjadi dalam waktu dekat (dan jika saya lakukan, saya mungkin akan fokus pada fitur yang sebenarnya menambah ekspresif).
Martin Ender


11

Oracle SQL 11.2, 146 byte

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;

Tidak bermain golf

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

Cobalah online

Penjelasan:

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 byte

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

Output setseperti {' b', 'a', 'ab'}. Idenya adalah untuk mengulang dua cabang yang memotong karakter pertama atau terakhir. Ini memberikan output yang berlebihan, tetapi setsecara otomatis menghapus duplikat. Untuk penyelarasan, setiap kali karakter pertama terpotong, spasi ditambahkan ke awalan p, yang digabungkan ke depan.


7

PowerShell v2 +, 69 byte

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

Mengambil input $a, mengulang panjang (pengaturan $bdalam proses untuk digunakan nanti). Setiap loop luar, kita loop ke atas $blagi, pengaturan $iuntuk digunakan nanti. Setiap loop dalam, kami menampilkan $ijumlah spasi yang digabungkan dengan irisan string input. Karena kita hanya mengulang-ulang string, ini sebenarnya akan menangani string acak (duplikat huruf, spasi, apa pun).

Contoh

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 byte


Golf

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

Tidak disatukan

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

Kode lengkap

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

Rilis

  • v1.2 - -1 byte- Mengubah String o="",e="";to String o="",e=o;untuk menghemat 1 byte. Idenya adalah dari Gallant ( saya lupa menerapkan bagian ini di pembaruan terakhir, saya minta maaf. ).
  • v1.1 - -4 bytes- Menjatuhkan kurung dari forloop dan memindahkan kenaikan ruange var ke zona iterator dari loop luar . Idenya adalah dari Gallant .for
  • v1.0 - 136 bytes- Solusi awal.

1
Anda dapat menjatuhkan kurung kurawal pada loop dalam dan menetapkan e=ountuk menyimpan 3 byte.
Gagah

dapat juga bertukar String o="",...dengan var o...untuk 3 lainnya.
TyCobb

@tycobb itu akan membuat convert berguna String o = "", e = "";untuk varkarena saya harus memisahkan mereka menjadi dua, sehingga var o = ""; var e = "";yang sama panjang dibandingkan dengan yang saya miliki. Akan melakukannya, tetapi VS tidak mengizinkan beberapa variabel deklarasi ketika menggunakan variabel yang diketik secara implisit - alias var. Tapi terima kasih atas bantuannya. EDIT: Memiliki VS berteriak kepada saya bahwa saya tidak bisa melakukannya, saya berasumsi itu salah, mungkin salah.
auhmaan

5

Python 2.7, 70 82 byte

Saya tidak tahu bagaimana cara mendapatkannya di 1 baris. Telepon dengane("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 byte

Ulangi jumlah spasi untuk diawali dengan dan kemudian jumlah karakter untuk diakhiri.

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

Edit: Ruang yang dihapus sebelum for for loop.


4

MATL, 15 14 byte

Disimpan satu byte karena tip @ LuisMendo di sini !

tfWt2/!-RXzB*c

Begitu banyak cara ... harus menemukan yang baru. Selamat bit! :)

Cobalah online!

Meledak

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 byte

document.write("<pre>"+(

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

)("abcde"))

Pendekatan lurus ke depan. Output memiliki baris baru.


Apa yang dimaksud =>dengan Javascript? Apakah ini operator biner
Ewan Delanoy

@EwanDelanoy Ini menyatakan Fungsi Panah ES6 .
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 byte

jm+*;xQdd.:

Sayangnya pertanyaannya memungkinkan kita untuk mengasumsikan karakter unik, jadi saya hanya mencari posisi pertama dari substring, dan pad dengan spasi.


Anda bisa menggunakan ;alih-alih \ ketika berada di dalam peta level terendah.
FryAmTheEggman

3

Mathematica 89 byte

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

Penjelasan

i mengacu pada string input

Subsequences[y=Characters@i]mengembalikan semua urutan (mewakili daftar karakter) dari input. (Subsequences diperkenalkan dalam ay. 10.4)

Untuk setiap Complement...urutan , kembalikan karakter-karakter itu dari string input yang tidak ada. Masing-masing karakter digantikan oleh ruang kosong melalui StringReplace[i,#->" "].

Columnmenampilkan hasil dalam satu kolom. Setiap string keluaran memiliki jumlah karakter yang sama, menghasilkan huruf yang selaras.


r@"abcdefgh"

keluaran


Maksud Anda 10.0.4 10.4, kan? 10.3 tidak memilikinya.
CalculatorFeline

Iya nih. 10.4 Saya akan memperbaikinya.
DavidC

3

J, 32 29 28 byte

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

Ini mengevaluasi ke kata kerja monadik. Coba di sini. Pemakaian:

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

Penjelasan

Seperti beberapa jawaban lain, saya menghitung indeks kemunculan karakter pertama dari setiap substring. Substring disimpan dalam matriks dengan spasi tambahan, jadi saya memutarnya ke kanan dengan indeks mereka untuk mendapatkan jumlah padding yang tepat. Sepotong spasi putih di antara "1dan a:benar-benar menjengkelkan ...

(-@{.@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.

a ebukan substring seperti yang didefinisikan oleh tantangan
Ton Hospel

@TonHospel I memperbaiki program, sekarang mengikuti spek.
Zgarb

3

JavaScript (Firefox 30-57), 65 63 byte

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

Mengembalikan array string. Sebagai ES6, 78 byte:

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

2

QBasic, 75 byte

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

Strategi double- FORloop dasar , dimodifikasi sedikit untuk pengindeksan berbasis 1 QBasic. Trik utamanya adalah LOCATE,j, yang memindahkan kursor ke kolom jdari baris saat ini sebelum mencetak. Karena kolom 1 adalah kolom pertama, ini setara dengan mencetak j-1spasi terdepan.


2

Perl 6 , 34 byte

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
  }>
/

Alasan untuk +sebelum putini sehingga kembali 1bukan True, yang dijamin tidak akan di masukan sehingga selalu harus mundur.

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

(Jika Anda menginginkannya, gunakan urutan yang berlawanan dan (.*?)(.+?)bukan (.*)(.+))

Ini terinspirasi oleh jawaban Perl 5 .


2

J, 35 23 22 byte

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

Butuh beberapa saat, tetapi akhirnya saya mengoptimalkannya.

Pemakaian

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

Penjelasan

[:;#\.<@{."_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

Anda dapat menyimpan 2 byte dengan menghapus pasangan kurung yang tepat. Selain itu, melakukan [:+./"1' '~:]alih - alih [:-.[:*/"1' '=]menyimpan 2 byte lainnya.
Zgarb

2

Java, 138 byte

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

Diformat:

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 byte

QlFUQRd:DlRF2h<

Coba di sini!

Asumsikan array string berlapis dapat diterima

Bantalan pertama dan kemudian memotong.


1

Haskell, 65 byte

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

Itu membutuhkan initsdan tailsdari Data.List, meskipun. Untuk meng-output-nya, tambahkanmapM_ putStrLn. ke depan.

Relatif mudah; yang reverseadalah untuk memastikan string asli pertama.

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. Dan tolong tambahkan import Data.List;ke jumlah byte.
nimi

1

Ruby, 75 67 byte

Fungsi anonim. Menggunakan subtitusi regex untuk menyelaraskan substring. .adalah karakter pengisi.

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

1

bash + GNU coreutils, 109 Bytes

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

Mungkin ada solusi yang lebih pendek, tetapi ini adalah yang terbaik yang terlintas di pikiran saya. Keunikan para chracters tidak penting di sini.


1

PHP, 151 karakter

Tidak disatukan

<?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";
    }
}
?>

Golf

<?$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";}}

Contoh

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

1

C ++, 145 Bytes

parameter awal pertama digunakan sebagai input, konsol sebagai output

#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)}

Jawaban yang bagus dan selamat datang di PPCG! Saya tidak menggunakan banyak C ++ tetapi tidak bisa Anda lakukan std::cout<<r[0]<<y<<'\n'daripada `std :: cout.write (r [0], y) << '\ n'? Bisakah Anda menambahkan penjelasan singkat? Terima kasih!
NoOneIsHere

1

Python 2 (Tidak Digubah) 99 Bytes

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]  

Hasil:

>>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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.