Latar Belakang
Merayakan rilis Dyalog APL 16.0 , di mana solusi untuk masalah ini adalah {⊢⌺(≢⍵)⊢⍵}
Penjelasan
Tugas
Diberikan string ASCII yang dapat dicetak dengan panjang ganjil n , buat sebuah n × n persegi dengan string terpusat secara horizontal, diduplikasi untuk dipusatkan secara vertikal, dan dengan akrostik dari string yang sama di setiap baris dan kolom. Perhatikan bahwa semua tapi string yang berpusat akan dipotong untuk menjaga ukuran persegi ini n × n .
Penjelasan kode Anda akan sangat dihargai.
Aturan
- Anda mungkin memiliki trailing spasi dan baris baru (ini termasuk segitiga kanan bawah)
- Anda dapat mengembalikan daftar string
Contoh menggunakan string ABXCD
:
n adalah 5. Pertama kita menggambar dua string tengah, satu horizontal dan satu vertikal
┌─────┐ │ A │ │ B │ │ABXCD│ │ C │ │ D │ └─────┘
(5 × 5 kotak pembatas ditambahkan untuk kejelasan)
Kemudian kami menempatkan semua akrostik yang mungkin, secara horizontal dan vertikal:
SEBUAH AB ┌─────┐ │ ABX│CD │ ABXC│D │ABXCD│ A│BXCD │ AB│XCD │ └─────┘ CD D
Akhirnya, kami hanya mengembalikan apa yang ada di dalam kotak pembatas:
ABX ABXC ABXCD BXCD XCD
Uji kasus
World
:
Wor
Worl
World
orld
rld
mississippi
:
missis
mississ
mississi
mississip
mississipp
mississippi
ississippi
ssissippi
sissippi
issippi
ssippi
Pneumonoultramicroscopicsilicovolcanoconiosis
:
Pneumonoultramicroscopi
Pneumonoultramicroscopic
Pneumonoultramicroscopics
Pneumonoultramicroscopicsi
Pneumonoultramicroscopicsil
Pneumonoultramicroscopicsili
Pneumonoultramicroscopicsilic
Pneumonoultramicroscopicsilico
Pneumonoultramicroscopicsilicov
Pneumonoultramicroscopicsilicovo
Pneumonoultramicroscopicsilicovol
Pneumonoultramicroscopicsilicovolc
Pneumonoultramicroscopicsilicovolca
Pneumonoultramicroscopicsilicovolcan
Pneumonoultramicroscopicsilicovolcano
Pneumonoultramicroscopicsilicovolcanoc
Pneumonoultramicroscopicsilicovolcanoco
Pneumonoultramicroscopicsilicovolcanocon
Pneumonoultramicroscopicsilicovolcanoconi
Pneumonoultramicroscopicsilicovolcanoconio
Pneumonoultramicroscopicsilicovolcanoconios
Pneumonoultramicroscopicsilicovolcanoconiosi
Pneumonoultramicroscopicsilicovolcanoconiosis
neumonoultramicroscopicsilicovolcanoconiosis
eumonoultramicroscopicsilicovolcanoconiosis
umonoultramicroscopicsilicovolcanoconiosis
monoultramicroscopicsilicovolcanoconiosis
onoultramicroscopicsilicovolcanoconiosis
noultramicroscopicsilicovolcanoconiosis
oultramicroscopicsilicovolcanoconiosis
ultramicroscopicsilicovolcanoconiosis
ltramicroscopicsilicovolcanoconiosis
tramicroscopicsilicovolcanoconiosis
ramicroscopicsilicovolcanoconiosis
amicroscopicsilicovolcanoconiosis
microscopicsilicovolcanoconiosis
icroscopicsilicovolcanoconiosis
croscopicsilicovolcanoconiosis
roscopicsilicovolcanoconiosis
oscopicsilicovolcanoconiosis
scopicsilicovolcanoconiosis
copicsilicovolcanoconiosis
opicsilicovolcanoconiosis
picsilicovolcanoconiosis
icsilicovolcanoconiosis
Ucapan Terima Kasih
Berkat dzaima , Leaky Nun , Tn. Xcoder untuk semuanya kecuali gagasan tantangan ini.
Jawaban:
Python 2 , 60 byte
Cobalah online!
sumber
MATL , 8 byte
Cobalah online!
Penjelasan
sumber
Retina ,
7059 byteCobalah online! Sunting: Disimpan 11 byte dengan bantuan dari @MartinEnder. Penjelasan: Tahap pertama mengulang input sekali untuk setiap karakter, padding dengan tepat pada setiap baris untuk mendapatkan geser. Tahap terakhir kemudian menghilangkan 25% dari masing-masing sisi untuk menghasilkan hasil yang diinginkan.
sumber
n/2
ruang kiri dan kanan (menggunakan sesuatu seperti(..)+.
->$#1$* $&$#1$*
dengan ruang tambahan) dan kemudian hanya melakukan!&`...
di mana...
pertandingann
persisn
karakter.$*sp
?Java 8,
120103 byte-17 byte terima kasih kepada @ OlivierGrégoire .
Penjelasan:
Coba di sini.
sumber
i=l/2+1
dani-->1
danfor(;i<l
menyimpan byte.s->{int l=s.length(),i=l/2;while(i-->0)s=" "+s+" ";while(++i<l)System.out.println(s.substring(i,l+i));}
(103 byte). Satu-satunya perubahan signifikan adalah bahwa string dengan spasi dihasilkan sekali dan untuk semua alih-alih "on the fly" (dan tentu saja cetak alih-alih kembali).Haskell,
6462 byteCobalah online! Bagaimana itu bekerja:
sumber
Prolog SWI, 234 byte
Mungkin coba online di sini: http://swish.swi-prolog.org/p/hEKigfEl.pl
NB.
_
sini, karena itu menunjukkan itu berfungsi dan tidak mempengaruhi jumlah byte.Contoh berjalan di Swish:
Pendekatan, pada dasarnya hal pertama yang saya bisa lakukan, dan tidak diragukan lagi pengguna Prolog yang ahli dapat mempersingkatnya:
Kode yang dijelaskan dan dikomentari (mungkin tidak berjalan), baca dari
superacrostic()
bawah, laluhelper()
badan utama, laluhelper()
huruf besar:sumber
05AB1E , 11 byte
Cobalah online!
Penjelasan
sumber
JavaScript (ES6), 75 byte
sumber
APL (Dyalog Unicode) , 10 karakter = 22 byte
Cobalah online!
{
...}
fungsi anonim di mana argumen diwakili oleh ⍵⊢
berikan area tertutup saat⌺(
...)
menggeser stensil ukuran≢
panjang dari⍵
argumen⊢
di⍵
argumenCara kerjanya adalah dengan membiarkan setiap karakter membentuk bagian tengah string dengan panjang yang sama dengan input, padding ke kiri atau kanan sesuai kebutuhan. Ambil contoh
ABXCD
:String memiliki lima karakter, sehingga stensil akan memiliki "pembuka" yang lebar lima karakter.
┌──↓──┐
pembukaan stensil dengan penanda tengah│ ABX│CD
biarkanA
berada di tengah│ ABXC│D
kemudianB
│ABXCD|
dllA|BXCD |
AB|XCD |
└──↑──┘
posisi stensil akhirsumber
PHP , 98 byte
Cobalah online!
sumber
JavaScript (ES8),
666362 byteMengembalikan array.
Cobalah
Penjelasan
Fungsi anonim mengambil string sebagai argumen melalui parameter
s
.Pisahkan string ke array karakter individu.
Dapatkan panjang string dan tetapkan ke variabel
l
.Peta di atas array, melewati setiap elemen melalui fungsi, di mana
x
adalah indeks elemen saat ini.Untuk setiap elemen, kembalikan string asli dengan spasi diawali hingga panjangnya 1,5 kali dari panjang aslinya.
Dapatkan substring panjang
l
mulai dari indeks elemen saat ini.sumber
V ,
14, 11 byteCobalah online!
3 byte disimpan berkat @nmjmcman!
Hexdump:
Pendekatan asli (18 byte):
Penjelasan:
sumber
ê
. Terima kasih :)PowerShell Core , 68 byte
Cobalah online!
Penjelasan yang tidak disatukan
sumber
[($_..($_+$L))]
?(
tidak pergi dengan bergabung, itu dilakukan-join ($Padding + $Text)[0,1,2,3,4]
untuk memilih beberapa karakter dari string empuk untuk jalur output, dan bergabung dengan mereka menjadi string untuk menjadi cara yang lebih singkat untuk dilakukan.SubString()
. dan itu menghasilkan padding di tempat dan berbagai karakter di tempat. Penjelasan ungolf lengkap ditambahkan ke jawaban saya.Japt ,
191714 byteDisimpan 5 byte berkat @ETHproduksi dan @Shaggy
Uji secara online!
-R
panji ditambahkan untuk bergabung dengan baris baru (tujuan visibilitas)Penjelasan
sumber
Sp½*Ul
, tetapi saya tidak berpikir ada satu atm ... BTW, Anda biasanya dapat berubahsXX+Y
menjaditXY
(s == .slice
,t == .substr
)Arang , 26 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode.
sumber
Jelly , 11 byte
Cobalah online!
Bagaimana itu bekerja
sumber
QBIC , 32 byte
Sobat, sudah waktunya bagi saya untuk menambahkan
space$
ke QBIC ...Penjelasan
Contoh dijalankan
sumber
Mathematica, 88 byte
sumber
Haskell ,
8670 byteIni (masih) terlalu lama, tapi terima kasih @bartavelle untuk mengingatkan saya bahwa mengeluarkan daftar string juga dapat diterima!
Cobalah online!
sumber
Python 3 , 68 byte
Cobalah online!
sumber
PowerShell ,
133119 byteCobalah online!
Tidak disatukan
sumber
Python 2 ,
76 7473 byte-1 terima kasih kepada @FelipeNardiBatista
Tentu saja, tidak sependek jawaban Python yang lain, tetapi ada baiknya mencoba metode yang sama sekali berbeda:
Cobalah online!(dengan versi 74 byte)
Ini pertama menghasilkan String penuh, dan kemudian mengirisnya agar sesuai dengan kuadrat.
Penjelasan
sumber
(2*x+~i)
untuk menyimpan byteJ , 19 byte
Cobalah online!
Penjelasan
sumber
''
sebagai penggantinya.C # (.NET Core) , 101 byte
Pada dasarnya jawaban @ KevinCruijssen. Menghemat 2 byte karena
string.Length
tidak perlu () dan 2 byte lainnya karena argumen keduastring.Substring()
adalah panjang daripada indeks akhir, tetapi kemudian kehilangan 2 byte karenaConsole.WriteLine()
lebih panjang. Saya memiliki implementasi yang lebih naif, tapi itu sekitar dua kali lebih lama jadi ...sumber
Excel VBA, 68 Bytes
Golf
Fungsi jendela langsung VBE anonim yang mengambil input dari sel
[A1]
dan output ke jendela langsung VBETidak disatukan
sumber
Perl 5 , 53 + 1 (
-n
) = 54 byteCobalah online!
sumber