Diberikan kisi-kisi teks persegi panjang, sejajarkan diagonal yang bergerak dari kiri atas ke kanan bawah ke dalam kolom sehingga karakter paling kanan-kanan semua diagonal berada pada level. Gunakan spasi untuk lekukan.
Misalnya, jika kisi input teks adalah
abcd
1234
WXYZ
maka Anda akan berbaris Diagonal W
, 1X
, a2Y
, b3z
, c4
, dan d
di kolom memberikan output ini:
ab
123c
WXYZ4d
Perhatikan bahwa karakter paling kanan-kanan dari semua diagonal WXYZ4d
,, berada pada level yang sama.
Detail
Kotak input teks akan berukuran minimal 1 × 1 dan semua garis akan memiliki panjang yang sama.
Anda dapat menggunakan kisi input sebagai string multiline atau sebagai daftar string baris tunggal.
Kisi masukan hanya akan berisi karakter ASCII yang dapat dicetak (termasuk spasi).
Output secara opsional dapat memiliki satu baris tambahan, tetapi seharusnya tidak ada baris kosong lainnya.
Garis-garis output secara opsional dapat memiliki spasi tambahan, tetapi seharusnya tidak memiliki spasi utama yang tidak perlu.
Contoh lain
Baris kosong memisahkan contoh. Setiap input langsung diikuti oleh outputnya.
123
456
789
1
452
78963
123.?!
456??!
789!!!
123.
456???
789!!!!!
**@
@
**
@ @
/\/\
\/ /
/ /\
\/\/
/
\/\
/ / /
\/\/\/\
12
34
56
78
90
7531
908642
Code
Code
G
O
L
F
FLOG
~
~
Mencetak gol
Kode terpendek dalam byte menang.
Jawaban:
J , 12 byte
Mendefinisikan kata kerja anonim. Cobalah online!
Penjelasan
Dalam J,
u &. v
(baca: diu
bawahv
) berarti "v, lalu u, lalu kebalikan dari v". Pembalikan dan transpos adalah inversi sendiri, sehingga program ini benar-benar berarti "membalikkan, transpos, mengekstrak anti-diagonal terbalik, transpos, mundur".Dengan input contoh:
Membalikkan:
Mengubah urutan:
Ekstrak anti-diagonal terbalik (dan pad dengan spasi):
Mengubah urutan:
Membalikkan:
sumber
Jelly , 11 atau 10 byte
Cobalah online!
Algoritma yang cukup berbeda dari solusi saya yang lain; yang ini menggunakan builtin untuk mendapatkan diagonal, daripada melakukan hal-hal secara manual.
Penjelasan:
Diagonal keluar dalam kemungkinan orientasi terburuk (membutuhkan transposisi berulang, pembalikan, dan rotasi), dan dalam urutan yang salah (Jelly mengeluarkan diagonal utama terlebih dahulu, jadi kita harus memindahkan beberapa diagonal dari ujung ke awal untuk mendapatkannya) dalam urutan). Namun, ini masih lebih pendek dari solusi Jelly saya yang lain.
sumber
CJam , 29 byte
Cobalah online!
Penjelasan
Alih-alih mengekstraksi diagonal, kami melepas lapisan dari ujung, bergantian ke kiri dan kanan. Pertimbangkan input berikut:
Jika kita menulis diagonal seperti yang dipersyaratkan oleh tantangan, kita mendapatkan:
Perhatikan bahwa ini hanyalah (dari bawah ke atas), baris paling bawah, disatukan dengan kolom paling kanan. Definisi ini juga berfungsi jika input berbentuk persegi panjang.
sumber
]
akan membungkus seluruh tumpukan! Saya pikir fungsi harus bekerja terlepas dari isi tumpukan di bawah input, dan Anda tampaknya setuju ^^]
ketika saya mengubahnya ke suatu fungsi.[{)\z}h]
dan menyimpannya fungsi, selama 27 byte.JavaScript,
116101 byteSaya hanya ingin menggunakan
/.$|\n?(?!.*\n)..+/gm
ide pola regex ini . ( https://regex101.com/r/mjMz9i/2 )Rasa regex JavaScript mengecewakan, saya harus menggunakan
(?!.*\n)
karena tidak\Z
diterapkan, dan entah bagaimana saya tidak bisa menggunakannya\0
.sumber
.
alih-alih[^]
karena Anda hanya perlu melewati karakter non-baris baru untuk menemukan baris baru, yang menghemat 2 byte.^
itu perlu di regex akhir, karena\n
sudah ada di awal string, sehingga menghemat byte lain.'$&'+' '.repeat(n)
. Pada dasarnya ungkapan itu hanyalah$&
tetapi dengan ruang yang ditambahkan setiap panggilan, yang mudah untuk diterapkan secara rekursif - gantin=0
denganr='$&'
danf(z,n+1)
denganf(z,r+' ')
dan kemudianr
adalah string pengganti yang diinginkan. Jika saya sudah menghitung dengan benar itu menghemat 12 byte.Jeli , 15 atau 14 byte
Cobalah online!
Ini adalah algoritma yang tidak menggunakan built-in Jelly untuk diagonal. Melakukan itu mungkin membuatnya lebih pendek; Saya mungkin akan mencobanya nanti.
Begini cara algoritma bekerja. Mari kita mulai dengan input ini:
Kita mulai dengan
L’⁶x;\
.L’
memberi kita panjang input minus 1 (dalam hal ini, 2). Kemudian⁶x
memberi kita serangkaian ruang dengan panjang itu (" "
dalam hal ini); dan;\
memberi kita hasil kumulatif ketika menggabungkannya (segitiga spasi). Kami kemudian membalikkan segitiga dan menggabungkannya ke sisi kiri aslinya (;"
menggabungkan elemen daftar yang sesuai,µ
secara paksa menyebabkan penguraian dalam penguraian dan dengan demikian menggunakan input asli sebagai daftar kedua secara default), memberi kami ini:Ini hampir merupakan solusi yang kita inginkan, tetapi kita perlu memindahkan elemen ke bawah untuk menjadi rata dengan string terakhir. Itu masalah transposing (
Z
), membalikkan di dalam setiap baris (U
), transposing lagi (Z
), dan membalikkan garis ()Ṛ
):mengubah urutan
mundur dalam baris
mengubah urutan
membalikkan baris
Akhirnya,
Y
bergabung dengan baris baru. Tidak jelas bagi saya apakah ini diperlukan atau tidak untuk memenuhi spesifikasi (yang memungkinkan input sebagai daftar string, tetapi tidak mengatakan hal yang sama tentang output), sehingga jumlah byte yang tepat tergantung pada apakah itu termasuk atau dihilangkan.sumber
Pyth, 16 byte
Big Pyth :
Karena orang mengatakan bahasa golf sulit dibaca, saya merancang Big Pyth, yang mudah dibaca dan mudah diterjemahkan ke Pyth. File yang ditautkan menerjemahkan aliran input Big Pyth ke Pyth. Setiap token Big Pyth yang dipisahkan dengan spasi putih berhubungan dengan token Pyth, baik karakter atau a
.
diikuti oleh karakter. Pengecualiannya adalahimplicit
token, yang tersirat dalam kode Pyth.Saya ingin melihat seberapa bagus format penjelasan Big Pyth, jadi saya tidak akan memberikan penjelasan lain. Tanyakan kepada saya apakah Anda ingin sesuatu dijelaskan.
sumber
JavaScript (ES6), 140 byte
Mengambil input dan output sebagai array string. Juga menerima input array karakter dua dimensi, dan menyimpan 7 byte jika output array karakter dua dimensi dapat diterima. Penjelasan: Tinggi hasil
m
adalah minimum tinggih
dan lebarw
array asli, sedangkan lebarnya hanya satu kurang dari jumlah tinggi dan lebar array asli. Baris sumber untuk karakter pada bagian utama hasil datang langsung dari baris yang sesuai dari array asli, menghitung dari bawah, sedangkan pada bagian tambahan dari hasil baris sumber bergerak naik satu baris untuk setiap kolom tambahan. Kolom sumber untuk kedua bagian hasil ternyata sama dengan kolom tujuan yang dipindahkan satu kolom ke kiri untuk setiap baris sumber di atas bagian bawah.sumber
Oktaf, 57 byte
sumber
Python 3, 247 byte
sumber
join(i) for
.Python 2, 150 byte
Mengambil input sebagai daftar string.
sumber
Clojure, 194 byte
Diterapkan dengan cara yang sulit dengan mengelompokkan karakter ke
G
dan kemudian menghasilkan garis.Mengambil input sebagai
vec
darivec
s seperti[[\a \b \c \d] [\1 \2 \3 \4] [\W \X \Y \Z]]
. Contoh:sumber