Diberikan string, kuadratkan pertama sebagai berikut:
Pertama, tulis string.
abcde
Selanjutnya, tulis string diputar satu kiri.
abcde
bcdea
Terus lakukan ini sampai Anda menulis baris len (string) .
abcde
bcdea
cdeab
deabc
eabcd
Sekarang, baca dari string seperti ini:
----+
+--+|
|+>||
|+-+|
+---+
Pemberian yang mana:
abcdeabcdcbaedcbcdeabaede
Cetak string ini.
Uji kasus
abcdef -> abcdefabcdedcbafedcbcdefabcbafedefaf
cena! -> cena!cenanec!anena!cec!a!
ppcg -> ppcgppcppgcpcgpg
abc -> abcabacbc
ab -> abab
a -> a
->
Berikan komentar jika test case salah.
Ingat, ini adalah kode-golf , jadi kode dengan jumlah byte terkecil menang.
cena!
salah. Ini harus sesuai dengan contoh Andaabcde
karena keduanya 5 huruf:cena!cenanec!anena!cec!a!
Jawaban:
JavaScript (ES7),
83807877 byteProgram yang sesuai dengan bonus ES3:
Penjelasan
Ini mengambil keuntungan dari fakta bahwa output untuk mis. String 5 panjang dapat direpresentasikan sebagai:
di mana setiap digit mewakili indeks dalam string (mulai dari 0), modulo panjang string. Dengan kata lain, jika n adalah panjang string, kami menambah indeks 2n - 1 kali, lalu mengurangi 2 (n - 1) - 1 kali, lalu menambahkannya 2 (n - 2) - 1 kali, dll. Ini dapat disederhanakan dengan algoritma berikut:
Ini berfungsi karena lantai (sqrt (x)) beralih paritas setelah iterasi 2n - 1 , kemudian iterasi 2 (n - 1) - 1 , dll.
sumber
Pyth , 15 byte
Program yang mengambil input dari
"quoted string"
dan mencetak hasilnya.Cobalah online! atau verifikasi semua kasus uji (dimodifikasi untuk input ganda).
Bagaimana itu bekerja
sumber
Python 2.7 (dalam CMD.EXE), 91 byte
Ini memerlukan terminal dengan backspace kerja (
\b
), dan tidak akan bekerja pada repl.it atau ideone.com . Pernyataan cetak yang diakhiri dengan koma memisahkan keluaran lebih lanjut dengan ruang alih-alih dengan baris baru atau kembali. Backspace memungkinkan kita untuk menimpa ruang pemisah.Python 2.7, 96 byte
Cobalah ideone.com atau repl.it (terima kasih kepada Oliver). Input harus berupa string python, mis
'cena!'
.Empat potong ditambahkan oleh loop (
s[i:]
,s[:n-i]
,r[i+2:]
,r[:n-i]
) diambil dari empat tepi spiral. Misalnya dengan01234
kotak adalah:Jadi kita ambil
01234
,0123
,210
,4321
. Variabelnyai
adalah indeks nilai kiri atas di setiap langkah proses. Dalam spiral terakhir, beberapa irisan mungkin kosong.sumber
S=''
,print S
danS+=
, dan pembungkus segala sesuatu sebelumi+=2
dalamprint()
pernyataan dengansep=''
, Anda dapat menyimpan 2 bytes.i<=n
ken>i
"a string of odd length."
Jelly ,
1110 byteTryItOnline! , atau semua tes
Bagaimana?
Kotak yang tidak terpisahkan adalah serangkaian deretan "tepi atas ditambah tepi kanan" dan "tepi bawah plus tepi kiri", yang masing-masing merupakan kebalikan dari putaran sebelumnya tanpa huruf pertama dan terakhir, dan yang pertama adalah input ditambah input tanpa huruf terakhir (mis. input
"abcde"
memiliki output"abcdeabcd" + "cbaedcb" + "cdeab" + "aed" + "e"
).sumber
05AB1E, 12 byte
Cobalah online!
Penjelasan:
sumber
MATL , 27 byte
Input kosong keluar dengan kesalahan (menghasilkan output yang benar).
Cobalah online! Atau verifikasi semua kasus uji .
sumber
C,
9594 BytesTerinspirasi oleh jawaban @ETHproductions.
sumber
Perl, 99 byte
Spasi bukan bagian dari program dan disediakan untuk keterbacaan.
Bukan kode yang sangat efisien. Saya seharusnya bisa memperpendek tiga baris pertama, tetapi semua yang saya coba gagal. Operator ternary itu juga perlu diperbaiki, tetapi dengan cara ini memungkinkan untuk memperpendek kode saya dengan, 10 byte karena saya dapat memotong begitu banyak.
Kode bekerja dengan menyusun daftar palindrom, dipisahkan oleh angka genap, yang mewakili nilai tempat dari string yang akan ditarik.
sumber
-F
yang akan menggantikan baris 1 dan 3. Berikan input denganecho -n
untuk menghapuschop
. (yang seharusnya membuat Anda sekitar 81 byte)Sebenarnya ,
2113 byteAlgoritma ini sebagian besar didasarkan pada jawaban Jelly Jonathan Allan . Ada dua cara untuk mencetak hasil sebagai satu string. Pendekatan yang digunakan di sini menduplikasi langkah perantara dan kemudian menambahkannya ke total berjalan dalam register 1 (string kosong secara default);
;╕
dalam fungsi, lalu╛
di akhir. Pendekatan lain adalah menduplikasi langkah menengah, meninggalkan langkah-langkah duplikat pada tumpukan, dan menjumlahkannya menjadi satu string di akhir;;
dalam fungsi, lalukΣ
di akhir.Saran bermain golf diterima. Cobalah online!
Tidak melakukanolf
sumber
Python 3, 59 byte
repl.it
Port langsung jawaban Jelly saya ; hanya program penuh yang mengambil input (bukan fungsi).
Ini
print(x,end='')
adalah pernyataan cetak yang tidak akan mencetak baris baru default.sumber
Python 3, 93 byte
Cobalah online!
sumber
print(...,end='')
, lakukanprint(end=s[i:]+s[:n-i]+r[i+2:]+r[:n-i]
abcde
, itu hilange
pada akhirnya.i<=n
alih-alihn-i
untuk kondisi Anda.