Tantangan
Diberikan string dan angka, bagi string menjadi banyak bagian yang berukuran sama. Misalnya, jika angkanya 3, Anda harus membagi string menjadi 3 bagian tidak peduli berapa lama string itu.
Jika panjang tali tidak terbagi rata menjadi angka yang disediakan, Anda harus membulatkan ukuran masing-masing bagian dan mengembalikan string "sisa". Misalnya, jika panjang string input adalah 13, dan angkanya adalah 4, Anda harus mengembalikan empat string masing-masing ukuran 3, ditambah string sisa ukuran 1.
Jika tidak ada yang tersisa, Anda mungkin tidak mengembalikan satu, atau mengembalikan string kosong.
Jumlah yang disediakan dijamin kurang dari atau sama dengan panjang tali. Misalnya, input "PPCG", 7
tidak akan terjadi karena "PPCG"
tidak dapat dibagi menjadi 7 string. (Saya kira hasil yang tepat adalah (["", "", "", "", "", "", ""], "PPCG")
. Lebih mudah untuk tidak mengizinkan ini sebagai masukan.)
Seperti biasa, I / O itu fleksibel. Anda dapat mengembalikan pasangan string dan string sisa, atau satu daftar string dengan sisanya di akhir.
Uji kasus
"Hello, world!", 4 -> (["Hel", "lo,", " wo", "rld"], "!") ("!" is the remainder)
"Hello, world!", 5 -> (["He", "ll", "o,", " w", "or"], "ld!")
"ABCDEFGH", 2 -> (["ABCD", "EFGH"], "") (no remainder; optional "")
"123456789", 5 -> (["1", "2", "3", "4", "5"], "6789")
"ALABAMA", 3 -> (["AL", "AB", "AM"], "A")
"1234567", 4 -> (["1", "2", "3", "4"], "567")
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat di setiap bahasa menang.
Poin bonus (tidak benar-benar 😛) untuk membuat solusi Anda benar-benar menggunakan operator divisi bahasa Anda.
;⁹/
PPCG
,7
jadi sisanya adalahPPCG
Jawaban:
Python 2 , 63 byte
Cobalah online!
sumber
PHP> = 7.1, 75 byte
Testcases
PHP> = 7.1, 52 byte
hanya cetak sisanya
Uji Kasus
sumber
Pip , 21 byte
20 byte kode, +1 untuk
-n
bendera.Mengambil input sebagai argumen baris perintah; string keluaran dan sisanya dipisahkan baris baru. Cobalah online!
Penjelasan
Bersenang-senang dengan operasi regex!
Mari kita ambil
abcdefg
string dan3
nomor kita. Kami membangun regex(.{2})(.{2})(.{2})
, yang mencocokkan tiga run dari dua karakter dan menyimpannya dalam tiga grup tangkap. Kemudian, menggunakan variabel pencocokan regex Pip, kita dapat mencetak 1) daftar grup tangkap["ab";"cd";"ef"]
, dan 2) sisa string yang tidak cocok"g"
.sumber
Haskell , 62 byte
#
adalah operator yang mengambilString
danInt
, dan mengembalikan daftarString
.Gunakan sebagai
"Hello, world!"#4
.Cobalah online!
Bagaimana itu bekerja
s
adalah string input dann
jumlah potongan yang tidak tersisa.d
adalah panjang masing-masing bagian "normal".div
adalah pembagian integer.n+1
potongan-potongan, dengan yang terakhir sisanya.i
beralih dari0
ken
, inklusif.i*d
) dari karakter awal adalahdrop
ped sejak awals
, kemudian substring awal adalahtake
n dari hasilnya.d
, kecuali untuk bagian sisanya.n
, karena jika tidak, potongan normal akan diperpanjang sebagai gantinya.take
mengembalikan seluruh string jika panjang yang diberikan terlalu besar, sehingga kita dapat menggunakan angka apa pun>=n-1
untuk bagian sisanya.d+n*0^(n-i)
memberid
jikai<n
dand+n
jikai==n
. Menggunakannya0^x
adalah1
kapanx==0
, tetapi0
jikax>0
.sumber
Python 2 ,
68 6765 byte[]
x[p*i:p+p*i]
asx[p*i][:p]
Cobalah online!
sumber
x[p*i:p+p*i]
denganx[p*i:][:p]
:p
😛 Cukup bagus untuk mengalahkan jawaban Python lainnya!C ++ 14,
209180 byteItu agak terlalu lama, tetapi menggunakan operator divisi:
Pemakaian:
Versi online: http://ideone.com/hbBW9u
sumber
Pyth, 9 byte
Cobalah online
Bagaimana itu bekerja
Pertama
Q
adalah autoinitialized keeval(input())
danz
autoinitialized keinput()
.sumber
Jelly , 11 byte
Cobalah online!
sumber
Karat , 107 byte
Cobalah online!
Diformat:
Ini hanya
map
indeks ke irisan yang benar dari sumberstr
(collect
ing ke aVec
) dan mengiris sisanya.Sayangnya, saya tidak bisa membuat ini menjadi penutupan (74 byte):
sebagai kompiler gagal dengan
dan jika saya memberikan jenis
s:&str
, masa hidupnya salah:sumber
Retina , 92 byte
Cobalah online! Penjelasan: Tahap pertama mengubah jumlah bagian menjadi unary dan juga mengambil panjang string. Tahap kedua kemudian membagi panjang dengan jumlah bagian, menyisakan sisanya. Tahap ketiga mengalikan hasil dengan jumlah bagian lagi. Ini memberi kami jumlah string yang benar dengan panjang yang benar, tetapi mereka belum memiliki konten. Jumlah bagian sekarang dapat dihapus oleh tahap keempat. Tahap kelima membalikkan semua karakter. Ini memiliki efek beralih konten asli dengan string placeholder, tetapi meskipun sekarang di tempat yang tepat, itu dalam urutan terbalik. Placeholder telah memenuhi tujuan mereka dan dihapus pada tahap keenam. Akhirnya tahap ketujuh membalikkan karakter kembali ke urutan aslinya.
sumber
Perl 6 , 36 byte
Cobalah online!
Mengembalikan daftar daftar string, di mana elemen terakhir adalah sisanya (jika ada).
Penjelasan:
sumber
JavaScript (ES6), 77 byte
Mengembalikan array dari dua elemen: bagian string yang dibagi dan bagian sisanya.
Cuplikan Tes
sumber
Japt , 18 byte
Uji secara online! (menggunakan
-Q
bendera untuk memvisualisasikan output)Penjelasan
sumber
Python,
827674 byteNah, sepertinya ini memenuhi syarat untuk poin bonus. Bolehkah saya menerima cookie sebagai gantinya? Oh, tunggu, mereka tidak nyata? Menisik...
Cobalah secara Online!
sumber
len(h)
? :)Python,
95, 87, 7673 BytesCobalah online!
sumber
05AB1E , 12 byte
Cobalah online!
Penjelasan
sumber
Brachylog , 16 byte
Cobalah online!
Mengambil input sebagai daftar
[string, number]
dan menghasilkan sebagai daftar[remainder, parts]
. (Tanda koma diganti dengan titik koma dalam kasus uji "Halo, dunia!" Untuk kejelasan, karena fragmen string tidak dapat dicetak dengan tanda kutip.)(Saya juga mengganti koma dalam kode dengan titik koma untuk format output yang konsisten. Dengan koma , case tanpa sisa hanya akan menampilkan bagian-bagian tanpa sisa yang kosong, dan sebaik itu untuk beberapa tujuan, saya tidak sebenarnya tahu mengapa ia bekerja seperti itu ...)
Setelah ini menjadi
+₁ᵗ⟨ġl⟩
total 16 byte, saya mencoba untuk membuat sesuatu berdasarkan pekerjaan, tetapi karena perbaikannya semakin lama saya memutuskan bahwa saya hanya akan tetap dengan solusi asli saya untuk saat ini.sumber
C (gcc), 72 byte
Cobalah secara Online
sumber
Formula Excel,
185173165161149 byteBerikut ini harus dimasukkan sebagai rumus array ( Ctrl+ Shift+ Enter):
Di mana
A1
berisi input Anda (mis12345678
) DanB1
berisi pembagi. Ini juga menggunakan operator divisi Excel untuk mendapat bonus.Setelah memasukkan rumus sebagai rumus larik, sorot di bilah rumus dan evaluasi menggunakan F9 untuk mengembalikan hasilnya, misalnya:
-12 byte: ganti masing
INDIRECT("1:"&B1+1)
- masing denganOFFSET(A1,,,B1+1)
untuk menyimpan 2 byte per kejadian, ditambah beberapa merapikan menghapus tanda kurung redundan.-8 byte: hapus redundan
INDEX
fungsi yang .-4 byte: pengerjaan ulang "sisa".
-12 byte: menghapus redundan
INT(LEN(A1)/B1)
dengan mengimbangi array yang dihasilkanROW(OFFSET(A1,,,B1+1))
oleh -1.sumber
Python 2 ,
7776 byte-1 byte terima kasih kepada musicman523.
Cobalah online!
sumber
Ruby , 53 byte
Cobalah online!
sumber
Mathematica, 58 byte
Fungsi murni mengambil daftar karakter dan bilangan bulat positif sebagai input. Misalnya, test case terakhir dipanggil oleh
dan mengembalikan:
sumber
Haskell,
12088 bytes (terima kasih kepada Ørjan Johansen!)Apakah
div
dihitung sebagai operator divisi?Saya ingin tahu bagaimana saya bisa mengurangi ini, saya belum mempelajari semua triknya.
sumber
t=splitAt;x!s|n<-div(length s)x,let g""=[];g s|(f,r)<-t n s=f:g r,(a,b)<-t(n*x)s=(g a,b)
. Jadi, (1) Identifier yang digunakan berulang kali dapat disingkat, terutama jika panjang. (2) Pelindung dan pelindung pola hampir selalu lebih pendek darilet
...in
,where
danif
then
else
. (3) Pencocokan pola seringkali lebih baik daripada pengujian kesetaraan. (Oke, bahwalet
dalam pola pengawal tidak terlalu mendasar, saya baru-baru ini mempelajarinya dari orang lain di sini.) Dan lihat codegolf.stackexchange.com/questions/19255/… .let
di penjaga itu cukup licik. Tetapi kode yang lebih pendek lebih mudah dibaca, bukan?Ohm, 3 byte (tidak bersaing?)
Non-bersaing karena built-in belum diimplementasikan di TIO dan saya tidak punya PC berguna untuk menguji apakah itu bekerja di tarikan terbaru dalam repo.
Built-in ¯ \\ _ (ツ) _ / ¯. Saya menggunakan built-in yang salah ... Tapi hei masih ada yang lain berbaring.Sekarang saya menggunakan built-in yang salah dua kali (atau satu built-in yang salah dengan sisanya).Apakah saya mendapatkan poin bonus karena
v
divisi (lantai)?sumber
Hello, world!
5
testcase salah. Cobalah online!CJam , 16 byte
Blok anonim mengharapkan argumen pada stack dan membiarkan hasilnya pada stack setelahnya.
Cobalah online!
Penjelasan
Mengharapkan argumen sebagai
number "string"
.sumber
J , 26 byte
Selain menghilangkan ruang dan langkah menengah, ini belum golf. Saya berharap bahwa saya telah mengambil jalan panjang entah bagaimana, apa dengan tanda kurung dan referensi argumen (
[
dan]
).Lihat buku catatan Jupyter untuk kasus-kasus pengujian, seperti yang berikut:
sumber
R ,
7963 byte-16 dari Giuseppe memperbaiki pengindeksan
Cobalah online!
Dibangun sekitar memberikan input vektor
substring()
sumber
PHP , 152 byte
Terima kasih @ JörgHülsermann (ujung kurung!)
Cobalah online!
sumber
preg_replace
adalah alternatif atau Anda dapat menggunakan[,$s,$d]=$argv;print_r(array_slice(str_split($s,$l=strlen($s)/$d^0),0,$d)+[$d=>substr($s,$l*$d)]);
A
dalam menjalankan pertamaPython 3 , 94 byte
Cobalah online!
sumber
PowerShell v3 + ,
72, 80 byteDiasumsikan
$s
berisi string input;$n
berisi jumlah karakter per "bagian". Ini juga mengasumsikan bahwa "StrictMode" tidak aktif. Kalau tidak, kesalahan akan dikembalikan karena pengindeksan lebih jauh ke dalam array daripada yang sebenarnya ada (yaitu jika array memiliki 4 elemen dan saya sebut elemen 5 tidak ada). Dengan menonaktifkan StrictMode, PS tidak peduli dan itu akan mengabaikan kesalahan.Menggunakan notasi
($s|% ToCharA*)
saya bisa menyimpan 1 karakter dibandingkan dengan$s.ToCharArray()
:)Memperbarui:
Kode yang diperbarui untuk benar-benar memenuhi persyaratan tantangan. Sekali lagi anggap
$s
berisi string input; Namun, kali ini$n
berisi jumlah "potongan". Sisanya dicetak terakhir. Dan saya menggunakan operator divisi PowerShellCobalah online!
sumber