Tantangan
Diberikan string input, dan bilangan bulat n - memotong setiap berjalan karakter berturut-turut hingga maksimum n panjang. Karakter dapat berupa apa saja, termasuk karakter khusus. Fungsi harus peka huruf besar kecil, dan n dapat berkisar dari 0 hingga tak terbatas.
Contoh input / output:
f("aaaaaaabbbccCCCcc", 2) //"aabbccCCcc"
f("aaabbbc", 1) //"abc"
f("abcdefg", 0) //""
f("aaaaaaabccccccccCCCCCC@", 4) //"aaaabccccCCCC@"
Mencetak gol
Penilaian didasarkan pada jumlah byte yang digunakan. Jadi
function f(s,n){return s.replace(new RegExp("(.)\\1{"+n+",}","g"),function(x){return x.substr(0, n);});}
akan menjadi 104 poin.
Selamat bermain golf!
Sunting: pembatasan bahasa yang dihapus, tetapi saya masih ingin melihat jawaban javascript
Jawaban:
Python 2, 52 byte
Ditulis sebagai sebuah program (54 byte):
Iterasi melalui string input
s
, tambahkan setiap karakter ke string outputr
kecualin
karakter terakhirr
adalah karakter itu.Saya pikir ini akan gagal
n==0
karenar[-0:]
bukan 0 karakter terakhir (string kosong), tetapi seluruh string. Tapi, ini berfungsi karena string tetap kosong, jadi senada dengan senar 0 karakter.Rekursif
lambda
memberi 56 karena pengulanganStrategi alternatif untuk menjaga counter
i
pengulangan karakter terakhir juga ternyata lebih lama dari sekadar memeriksan
karakter terakhir secara langsung.sumber
C,
8178Memodifikasi string yang masuk.
Program Tes
Membutuhkan dua parameter, yang pertama adalah string untuk memotong, yang kedua adalah batas panjang.
Penjelasan:
Ini berfungsi karena pointer sumber akan selalu sama dengan atau lebih besar dari pointer tujuan, jadi kita bisa menulis di atas string saat kita menguraikannya.
sumber
Haskell, 36 byte
Versi point-free dari
\n s -> concatMap (take n) (group s)
.sumber
Javascript ES6,
60545543 byte-12 byte terima kasih kepada @ TestSubject06 dan @Downgoat
Contoh berjalan:
sumber
RegExp("(.)\\1*","g")
ke/(.)\1*/g
(s,n)
kes=>n
, dan penggunaannya menjadif("aaaaaaabbbccCCCcc")(2)
MATL, 9 byte
Cobalah secara Online
Penjelasan
sumber
CJam, 12 byte
Cobalah online!
Penjelasan
sumber
Pyth,
1612 byteCobalah online!
sumber
Python 2, 56 byte
sumber
gs2, 6 byte
Disandikan dalam CP437 :
Ini adalah fungsi anonim (blok) yang mengharapkan angka di atas tumpukan dan string di bawahnya.
Cobalah online. (Kode di sini adalah
lines, dump, read number, [the answer], run-block
.)sumber
Perl 6 ,
3836 bytePenjelasan:
Uji:
sumber
Javascript ES5, 73
Menggunakan kembali regex Lynn dari jawaban Python- nya .
sumber
new
kata kunci untuk -4 byte.Perl 5, 50 byte
46 byte kode + 3 untuk
-i
dan 1 untuk-p
Membawa nomor yang akan dipotong melalui
-i
.Pemakaian
sumber
-p
hanya satu byte?-e
opsi-opsi ini hanya mengkonsumsi 1 byte. Jika skrip harus dijalankan dari file biayanya 3 untuk ruang dan ia menandai sendiri. Ada postingan meta yang akan saya coba dan temukan tetapi saya sedang di ponsel sekarang.Bash 46 byte
Penggunaan: Masukkan jumlah karakter untuk dibatasi, tekan enter dan masukkan string. Ctrl+ Duntuk keluar
sed
(mengirim EOF).sumber
Java 7,
107106 byteAlternatif inline for-loop alternatif sebelumnya untuk String concatenation (yang 1 byte lebih banyak dari
String s="";for(int i=-1;++i<j;)s+="$1";
sayangnya):Kasus yang tidak disatukan & uji:
Coba di sini.
Keluaran:
sumber
Javascript (menggunakan perpustakaan eksternal) (115 byte)
Tautan ke lib: https://github.com/mvegh1/Enumerable
Penjelasan kode: Muat string ke pustaka, yang secara internal mem-parsing sebagai char array. Menerapkan akumulator pada urutan, meneruskan objek kustom sebagai nilai seed. Properti a adalah elemen saat ini, b adalah string terakumulasi, dan c adalah jumlah berurutan dari elemen saat ini. Akumulator memeriksa apakah nilai iterasi saat ini, n, sama dengan nilai elemen terakhir, ca Jika tidak, kami mereset hitungan ke 1 dan mengatur elemen saat ini. Jika jumlah elemen saat ini kurang dari atau sama dengan panjang yang diinginkan, kami mengakumulasikannya ke string kembali. Akhirnya, kita mengembalikan properti b, string terakumulasi. Bukan kode golf, tapi senang saya mendapat solusi yang berfungsi ...
sumber
J,
3130 byteMengelompokkan string input ke dalam run (substring) karakter yang identik, dan mengambil minimum dari panjang run itu dan panjang maks yang dimasukkan untuk memotong string. Kemudian salin karakter pertama dari setiap proses yang berulang kali.
Pemakaian
Penjelasan
sumber
Dyalog APL ,
2220 byteMeminta n dan mengambil string input sebagai argumen.
(
fungsi tacit ...∊
ratakan⊢↑¨⍨
setiap elemen argumen (yaitu setiap partisi) terpotong ke⎕⌊⍴¨
minimum input numerik dan panjang saat ini)
[akhir fungsi tacit] diterapkan⊢⊂⍨
pada input yang dipartisi pada ᴛʀᴜᴇ s dari1,
epend yang ditambahkan ke ( karakter pertama tidak sama dengan pendahulunya yang tidak ada)2≠/⊢
pasangan-bijaksana tidak-sama dari karakter dalam inputsumber
Ruby, 32 byte
sumber
TCC,
75 byteInput adalah string dan angka, dipisahkan oleh spasi.
Cobalah online!
sumber
tcc.lua
file dengan stempel waktu 16-07-25 16:57 UTC, yang tidak memiliki kemampuan untuk membaca beberapa input sekaligus. Jika jawaban Anda memerlukan versi bahasa yang mengunggah tantangan, Anda harus menandainya sebagai tidak bersaing di header. Saya akan menghapus downvote saya ketika Anda melakukannya.