Diberikan string untuk menyandikan, dan sejumlah kolom (kunci), menyandikan string sebagai berikut:
Saya akan menggunakan contoh Hello, world!
dan kuncinya3
Pertama, tuliskan jumlah kolom:
1 2 3
Selanjutnya, tulis teks mulai dari kiri atas, satu karakter per kolom, dan ketika Anda kehabisan kolom, pergi ke baris berikutnya.
1 2 3
H e l
l o ,
w o
r l d
!
Sekarang, untuk mendapatkan teks yang disandikan, baca teks mulai dari sudut kiri atas, tetapi kali ini, pertama baca satu kolom, lalu yang berikutnya, dan seterusnya. Jika tidak ada karakter di slot, beri spasi.
Hl r!eowl l,od
Perhatikan bahwa di sini, ada ruang tambahan.
Ini adalah teks Anda yang disandikan.
Test case lain Programming Puzzles and Code Golf SE
dengan kunci 5
:
1 2 3 4 5
P r o g r
a m m i n
g P u z
z l e s
a n d C
o d e G
o l f S
E
Teks yang dikodekan adalah PagzaooErm lndl omPedef gius rnz CGS
.
Lebih banyak kasus uji
"abcdefghijklmnopqrstuvwxyz", 2 -> "acegikmoqsuwybdfhjlnprtvxz"
"codegolf.stackexchange.com", 4 -> "cg.ccgoooskhemdltea. efaxnc "
"Pen Pineapple Apple Pen!!!", 7 -> "PeAeeapnnpp! pl!Ple!ie n P "
"1,1,2,3,5,8,13,21,34,55,89", 10 -> "18,,,5115,3,2,8,2931 ,, 53 ,4 "
Ingat, ini adalah kode-golf , jadi kode dengan byte paling sedikit menang.
Programming Puzzles and Code Golf
,3
.Jawaban:
MATL , 4 byte
Cobalah online!
Ini tentang sejelas mungkin.
e
adalah builtin yang membentuk kembali sebuah matriks menjadi n baris. Jadi kita baca di input1 sebagai string, dan bentuk ke dalam matriks dengan baris input2 :Kemudian, kami memindahkannya untuk mendapatkan ini:
Setelah itu, kami hanya memanggil
1e
untuk membentuk kembali menjadi satu baris, dan menampilkannya sebagai string.Seperti yang Anda lihat dalam program sampel ini , fungsi "membentuk kembali" dengan mudah menambahkan nol sebanyak yang diperlukan agar matriks menjadi persegi panjang yang sempurna. Ketika ditampilkan sebagai string, MATL memperlakukan '0 sebagai spasi, jadi ini secara otomatis mengisi jumlah ruang yang diperlukan tanpa kerja ekstra.
sumber
Jelly , 3 byte
TryItOnline!
Bagaimana?
sumber
PHP, 85 Bytes
PHP, 90 Bytes
sumber
Ruby,
786765 byteLihat di eval.in: https://eval.in/668412
Tidak disatukan
sumber
Pyth - 5 byte
Cobalah online di sini .
sumber
Python 2, 46 byte
Idenya adalah untuk mengambil string input, menyalinnya
n
kali dengan karakter pertama dari dihapus, lalu mengambil setiapn
karakter.Mari kita lihat misalnya di
s="abcdef", n=3
, di mana panjangnya adalah kelipatan darin
:Siklus pertama melalui string mengambil setiap
n
karakter th dari yang pertama. Kemudian, setiap siklus berikutnya menggeser satu indeks ke kanan karena karakter pertama dilewati. Untuk memastikan bahwa panjangnya adalah kelipatann
, string awal diisi dengan spasi.sumber
Japt, 15 byte
Uji secara online!
Japt memiliki "semua subbagian panjang N" built-in, tetapi tidak juga "semua subbagian yang tidak tumpang tindih" atau "setiap Nth char". Tiba-tiba, ada lubang menganga dalam hidupku ...
Penjelasan
sumber
Python 2, 58 byte
Uji di Ideone .
sumber
def f(s,n):t=[*s,' '];del t[print(end=s[::n]):f(''.join(t),n-1):n]
, tapi terlalu lama ...JavaScript (ES6), 84 byte
Ini solusi rekursif.
sumber
R,
9281 byteCobalah R-biola
Ini ternyata sedikit sakit kepala karena R secara otomatis mendaur ulang vektor input ketika baris atau kolom yang ditentukan dalam pembuatan matriks bukan kelipatan dari panjang input. Karena itu kita harus menambahkan vektor
-nchar(x)%%n
spasi sebelum meneruskannya ke fungsi matriks.Langkah terakhir adalah hanya mentransposisikan matriks dan mencetaknya.
sumber
l=nchar(x)
? Sepertinya Anda tidak menggunakan apal
pun. Fungsinyael
cukup penemuan, +1.Perl, 61 byte
54 byte kode dan
-F -pi
bendera.Mengambil string input tanpa baris akhir final, dan kunci harus ditempatkan setelah
-i
bendera:sumber
Mathematica,
4340 byteBerkat miles untuk menghemat tiga byte!
Fungsi tanpa nama mengambil dua argumen, array karakter dan integer; mengembalikan array karakter. Sebagian besar pengangkatan berat dilakukan oleh
Thread
fungsi, yang (dalam konteks ini) bertukar baris dan kolom.Partition
perlu dipanggil dengan beberapa argumen yang tidak berguna sehingga akan sesuai dengan argumen kelima" "
.sumber
Thread
bukanTranspose
Join@@Thread@Partition[##,#2,1," "]&
Ruby, 89 byte
Skor mengerikan, tips dihargai.
sumber
size
sebagai gantilength
untuk satu byte.Perl, 87 byte
Menerima dua argumen sebagai parameter dan Penggunaan:
sumber
Pyth, 40 byte
Uji di sini
Mungkin kode Pyth paling jelek yang pernah ada, tapi ini adalah percobaan pertama saya di Pyth.
Jika ada yang punya tips untuk meningkatkan golf saya, silakan tinggalkan komentar!
sumber
(-len(Z))%Q
, jadi Anda bisa menggantinya+Q-*Q/lZQlZ
dengan%_lZQ
. (Atau, Anda bisa mengatur ulang+Q-*Q/lZQlZ
untuk+-*/lZQQlZQ
Ini tidak lebih pendek, tapi.+-*/
Tampak dingin;))Sebenarnya , 12 byte
Saran bermain golf disambut baik, terutama jika Anda dapat menemukan cara bermain golf untuk mengisi ruang. Cobalah online!
Tidak melakukanolf
Versi 12 byte lainnya
Dalam versi ini, urutan input terbalik, tetapi ini dapat diubah jika itu tidak diizinkan. Saran bermain golf diterima. Cobalah online!
Tidak melakukanolf
sumber
Pyke, 10 byte
Coba di sini!
sumber
C #, 161 byte
Saya mohon maaf.
sumber
GolfSharp , (tidak bersaing) 82 byte
sumber
Groovy, 90 Bytes
Pad input dengan plafon ukuran dibagi menjadi
n
potongan.Dapatkan string empuk sebagai daftar karakter.
Susun menjadi n potongan dan transpos.
Hasil dalam:
sumber
Python 3, 48 byte
sumber
Powershell, 57 byte
Skrip uji:
Keluaran:
sumber
SINCLAIR ZX81 / TIMEX TS-1000/1500 BASIC, 134 byte BASIC tokenized
Parameter pertama
A$
adalah nilai string yang ingin Anda sandi, dan yang keduaA
adalah jumlah kolom yang ingin Anda sandi. VariabelC
digunakan untuk menambahkan baris baru setelahA
karakter.Baris 4 hingga 6 termasuk mencetak nomor kolom di bagian atas area layar.
Baris 7 menambahkan baris baru (
"\r\n"
setara).Baris 8 - 13 kemudian akan mencetak setiap karakter
A$
.Program ini tidak memerlukan ekspansi RAM untuk berfungsi.
sumber
K (oK) , 27 byte
Larutan:
Cobalah online!
Penjelasan:
sumber
05AB1E (warisan) , 3 byte
Versi Python legacy digunakan sebagai ganti penulisan ulang Elixir, karena versi baru tidak secara implisit mengubah string menjadi karakter ketika menggunakan
zip
, yang dilakukan versi lama.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber