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 abcdef
dan 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 a
terjadi 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 kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
Jawaban:
Pyth,
141310 byteTerima kasih kepada @FryAmTheEggman karena telah menghemat 3 byte.
Cobalah online!
sumber
jmXQ-Qd;.:
Ide serupa, menggunakanX
.Perl,
322824 byteTermasuk +1 untuk
-n
Kode:
Jalankan dengan string di STDIN:
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:
sumber
perl6 -ne 'm/^(.*)(.+)<{+put " "x$0.to,$1}>/'
ab1
(saya berasumsi karenasay...
mengevaluasi ke1
). (Diuji pada 5.18.2.) Edit: Oh! maaf, pertanyaannya mengatakan "Anda dapat mengasumsikan bahwa string itu sendiri hanya akan berisi karakter alfabet".MATL ,
2018 byteTerinspirasi oleh pola substring yang dihasilkan oleh jawaban @ aditsu
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
Pendekatan lama (kekuatan Kartesius)
Saya menjaga pendekatan ini jika itu berfungsi sebagai inspirasi untuk jawaban lain
Dalam kompiler online ini kehabisan memori untuk test case terpanjang.
Cobalah online!
Penjelasan
Ini menghasilkan semua pola nilai
0
,1
dan2
dalam urutan yang meningkat, dan kemudian berubah2
menjadi0
. Ini memberikan semua pola yang mungkin0
dan di1
mana1
nilai-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:Menyortir setiap baris memberi
Mengubah
2
menjadi0
(yaitumod(...,2)
) dan menghapus baris duplikat memberikan pola terakhirdi mana setiap baris adalah topeng yang sesuai dengan substring (berdekatan). Baris pertama harus dihapus karena sesuai dengan substring yang kosong.
sumber
Retina ,
483231 byteTerima kasih kepada Kenny Lau karena telah menghemat 3 byte dan membuka jalan untuk lebih banyak lagi.
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
Urutan substring yang dihasilkan:
Penjelasan
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:
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.sumber
!
implikasiM
dan versi 1char dari.+
dan.*
?.+
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).Oracle SQL 11.2, 146 byte
Tidak bermain golf
sumber
CJam, 20
Cobalah online
Penjelasan:
sumber
Python, 57 byte
Output
set
seperti{' b', 'a', 'ab'}
. Idenya adalah untuk mengulang dua cabang yang memotong karakter pertama atau terakhir. Ini memberikan output yang berlebihan, tetapiset
secara otomatis menghapus duplikat. Untuk penyelarasan, setiap kali karakter pertama terpotong, spasi ditambahkan ke awalanp
, yang digabungkan ke depan.sumber
PowerShell v2 +, 69 byte
Mengambil input
$a
, mengulang panjang (pengaturan$b
dalam proses untuk digunakan nanti). Setiap loop luar, kita loop ke atas$b
lagi, pengaturan$i
untuk digunakan nanti. Setiap loop dalam, kami menampilkan$i
jumlah 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
sumber
C #,
136132131 byteGolf
Tidak disatukan
Kode lengkap
Rilis
-1 byte
- MengubahString o="",e="";
toString o="",e=o;
untuk menghemat 1 byte. Idenya adalah dari Gallant ( saya lupa menerapkan bagian ini di pembaruan terakhir, saya minta maaf. ).-4 bytes
- Menjatuhkan kurung darifor
loop dan memindahkan kenaikan ruange
var ke zona iterator dari loop luar . Idenya adalah dari Gallant .for
136 bytes
- Solusi awal.sumber
e=o
untuk menyimpan 3 byte.String o="",...
denganvar o...
untuk 3 lainnya.String o = "", e = "";
untukvar
karena saya harus memisahkan mereka menjadi dua, sehinggavar 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 - aliasvar
. Tapi terima kasih atas bantuannya. EDIT: Memiliki VS berteriak kepada saya bahwa saya tidak bisa melakukannya, saya berasumsi itu salah, mungkin salah.Python 2.7,
7082 byteSaya tidak tahu bagaimana cara mendapatkannya di 1 baris. Telepon dengan
e("abcde",0)
sumber
Python 3,
8078 byteUlangi jumlah spasi untuk diawali dengan dan kemudian jumlah karakter untuk diakhiri.
Edit: Ruang yang dihapus sebelum for for loop.
sumber
MATL,
1514 byteDisimpan satu byte karena tip @ LuisMendo di sini !
Begitu banyak cara ... harus menemukan yang baru. Selamat bit! :)
Cobalah online!
Meledak
sumber
JavaScript (ES6), 89 byte
Pendekatan lurus ke depan. Output memiliki baris baru.
sumber
=>
dengan Javascript? Apakah ini operator binerJavaScript (ES6), 72
sumber
Pyth,
1211 byteSayangnya pertanyaannya memungkinkan kita untuk mengasumsikan karakter unik, jadi saya hanya mencari posisi pertama dari substring, dan pad dengan spasi.
sumber
;
alih-alih\
ketika berada di dalam peta level terendah.Mathematica 89 byte
Penjelasan
i
mengacu pada string inputSubsequences[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 melaluiStringReplace[i,#->" "]
.Column
menampilkan hasil dalam satu kolom. Setiap string keluaran memiliki jumlah karakter yang sama, menghasilkan huruf yang selaras.sumber
J,
32 2928 byteIni mengevaluasi ke kata kerja monadik. Coba di sini. Pemakaian:
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
"1
dana:
benar-benar menjengkelkan ...sumber
a e
bukan substring seperti yang didefinisikan oleh tantanganJavaScript (Firefox 30-57),
6563 byteMengembalikan array string. Sebagai ES6, 78 byte:
sumber
QBasic, 75 byte
Strategi double-
FOR
loop dasar , dimodifikasi sedikit untuk pengindeksan berbasis 1 QBasic. Trik utamanya adalahLOCATE,j
, yang memindahkan kursor ke kolomj
dari baris saat ini sebelum mencetak. Karena kolom 1 adalah kolom pertama, ini setara dengan mencetakj-1
spasi terdepan.sumber
Perl 6 , 34 byte
Alasan untuk
+
sebelumput
ini sehingga kembali1
bukanTrue
, yang dijamin tidak akan di masukan sehingga selalu harus mundur.(Jika Anda menginginkannya, gunakan urutan yang berlawanan dan
(.*?)(.+?)
bukan(.*)(.+)
)Ini terinspirasi oleh jawaban Perl 5 .
sumber
J,
352322 byteButuh beberapa saat, tetapi akhirnya saya mengoptimalkannya.
Pemakaian
Penjelasan
sumber
[:+./"1' '~:]
alih - alih[:-.[:*/"1' '=]
menyimpan 2 byte lainnya.Java, 138 byte
Diformat:
sumber
Pyke, 15 byte
Coba di sini!
Asumsikan array string berlapis dapat diterima
Bantalan pertama dan kemudian memotong.
sumber
Haskell, 65 byte
Itu membutuhkan
inits
dantails
dari Data.List, meskipun. Untuk meng-output-nya, tambahkanmapM_ putStrLn.
ke depan.Relatif mudah; yang
reverse
adalah untuk memastikan string asli pertama.sumber
(>>=zipWith(++)(inits$cycle" ").init.tails).inits
. Dan tolong tambahkanimport Data.List;
ke jumlah byte.Ruby,
7567 byteFungsi anonim.
Menggunakan subtitusi regex untuk menyelaraskan substring..
adalah karakter pengisi.sumber
bash + GNU coreutils, 109 Bytes
Mungkin ada solusi yang lebih pendek, tetapi ini adalah yang terbaik yang terlintas di pikiran saya. Keunikan para chracters tidak penting di sini.
sumber
PHP, 151 karakter
Tidak disatukan
Golf
Contoh
sumber
C ++, 145 Bytes
parameter awal pertama digunakan sebagai input, konsol sebagai output
sumber
std::cout<<r[0]<<y<<'\n'
daripada `std :: cout.write (r [0], y) << '\ n'? Bisakah Anda menambahkan penjelasan singkat? Terima kasih!Python 2 (Tidak Digubah) 99 Bytes
Hasil:
sumber