Diberikan daftar terurut dari string huruf yang sama (az XOR AZ) di mana setiap string didahului oleh 0 karakter spasi atau lebih, mengeluarkan daftar yang sama tetapi dengan string yang diurutkan pada setiap tingkat indentasi. Kedalaman indentasi di bawah orang tua yang berbeda dihitung sebagai daftar yang berbeda untuk keperluan penyortiran.
Contoh
Jika input Anda adalah:
bdellium
fox
hound
alien
aisle
wasabi
elf
alien
horseradish
xeno
irk
wren
tsunami
djinn
zebra
output Anda seharusnya
aisle
horseradish
xeno
wasabi
alien
elf
bdellium
alien
fox
hound
djinn
zebra
irk
tsunami
wren
Jika Anda suka, anggap itu seperti daftar direktori, dan Anda perlu mengurutkan nama-nama dalam setiap direktori.
Detel
- Item dapat diindentasi oleh sejumlah spasi. Jika diindentasi dengan jumlah spasi yang sama dengan item sebelumnya, item tersebut termasuk dalam hierarki sortir yang sama dengan item sebelumnya. Jika diindentasi oleh lebih banyak ruang, ini adalah awal dari sub-hierarki baru.
- Jika sebuah garis diindentasi oleh lebih sedikit spasi daripada garis di atasnya, ia menghubungkan ke sub grup terdekat di atasnya dengan # yang sama atau lebih sedikit spasi sebelumnya (seperti lobak pada contoh di atas, yang menghubungkan ke grup wasabi di atasnya karena wasabi adalah item pertama di atasnya yang tidak memiliki lebih banyak ruang daripada lobak)
- Anda harus menjaga level indentasi setiap item input dalam output Anda
- Tab pada output tidak diizinkan
- Baris pertama dari input tidak akan pernah diindentasi
- Program Anda harus menangani setidaknya satu string semua huruf besar dan huruf kecil semua; tidak harus menangani keduanya.
Mencetak gol
Ini adalah kode-golf , jadi jawaban yang menggunakan byte paling sedikit menang.
['a','..b', '.c', '..d']
, apa yang seharusnya menjadi output?['a','..b', '.c', '..d']
atau['a','.c','..b', '..d']
atau hal lain? (Saya menggunakan'.'
bukannya ruang untuk kejelasan visual).Jawaban:
Pyth , 23 byte
Coba di sini!
sumber
Python 2 , 117 byte
Cobalah online!
Dibawa sebagai input daftar string; dan menampilkan daftar string, diurutkan sesuai kebutuhan.
Idenya adalah untuk mengubah setiap elemen menjadi daftar yang berisi "jalur absolut" sebagai daftar; dan kemudian biarkan Python menangani penyortiran. Misal jika inputnya adalah:
Kemudian melalui
reduce()
, kami mengonversi ke daftar daftar:yang akan diurutkan sebagai:
dan kemudian menampilkan elemen terakhir dari setiap daftar di daftar-daftar untuk mendapatkan:
sumber
APL (Dyalog Unicode) , 31 byte SBCS
Lambda awalan anonim, mengambil dan mengembalikan daftar string.
Cobalah online!
{
...}
"dfn";⍵
adalah argumen⍵[
...]
indeks argumen dengan indeks berikut:' '(
...)¨⍵
terapkan fungsi tacit berikut untuk setiap string dengan spasi sebagai argumen kiri:,
menyatukan ruang ke string⊣=
Daftar Boolean menunjukkan di mana ruang sama dengan setiap karakter itu,⊂⍨
menggunakannya untuk mempartisi (mulai bagian yang benar) gabungan ruang dan string↑
mencampur daftar daftar string ke dalam matriks string{
...}⍀
reduksi kumulatif vertikal dengan "dfn" ini;⍺
dan⍵
args atas dan bawah:≢⍵
panjang senar bawah1=
apakah itu sama dengan 1? (yaitu apakah tidak ada satu pun ruang di sana?):⍺
jika demikian, kembalikan argumen atas⋄⍵
selain itu, kembalikan argumen yang lebih rendah⍋
naik kelas (cari indeks yang akan mengurutkannya)sumber
Retina , 47 byte
Cobalah online! Catatan: Beberapa garis memiliki spasi tambahan. Penjelasan:
Langkah pertama adalah menyisipkan setiap kata ke dalam baris berikut dengan lekukan yang sama. Misalnya, dengan garis
aisle
,wasabi
danelf
garis yang dihasilkan adalahaisle
,aisle wasabi
danaisle wasabi elf
. Saya menemukan regex ini dengan coba-coba sehingga mungkin ada kasus tepi dengan itu.Kita sekarang dapat mengurutkan garis case-insensitive.
Hapus semua kata yang dimasukkan.
sumber
Perl 6 ,
120 83 81 63 54 37 4742 byte-5 byte berkat nwellnhof
Cobalah online!
Ini menggunakan metode Chas Brown . Blok kode anonim yang mengambil daftar garis dan mengembalikan daftar garis.
Penjelasan:
sumber
{my@a;.sort:{@a[+.comb(' ')...*>@a]=$_;~@a}}
diperlukan untuk mendukung tingkat indentasi yang lebih tinggi.Bersih ,
112101 byteCobalah online!
Fungsi anonim
:: [[Char]] -> [[Char]]
yang terbungkus$ :: [[Char]] -> [[[Char]]]
dalam format output yang tepat.$
mengelompokkan string menjadi "lebih banyak ruang daripada" dan "segala sesuatu yang lain sesudahnya", berulang di setiap grup dan mengurutkannya ketika disatukan. Pada setiap langkah, daftar yang diurutkan terlihat seperti:Bersihkan , 127 byte
Cobalah online!
Menentukan fungsi
$ :: [[Char]] -> [[Char]]
yang memisahkan string menjadi tupel dalam bentuk(spaces, letters)
yang secara rekursif disortir oleh fungsi helper? :: [([Char],[Char])] -> [[([Char],[Char])]]
.Dijelaskan:
sumber
JavaScript (Node.js) ,
1141009288 byteCobalah online!
Pendekatan yang mirip dengan jawaban Python Chas Brown, tetapi menggunakan ekspresi reguler sebagai gantinya.
Penjelasan
sumber
K4 , 51 byte
Larutan:
Contoh:
Asumsi:
Sebuah. Bahwa setiap hierarki akan mulai dengan level terendah, yaitu Anda tidak akan mendapatkan:
Penjelasan:
sumber
Perl 5, 166 byte
Tidak disatukan (semacam):
Ini implementasi rekursif yang cukup mudah. Kami memeriksa level indentasi dengan mencari karakter non-spasi pertama (
/\S/
) dan mendapatkan indeksnya ($-[0]
). Sayangnya, kami benar-benar harus mendeklarasikan beberapa variabel yang digunakan dalam rekursi, atau mereka akan secara global dan rekursi tidak akan berfungsi dengan benar.sumber