Tantangannya melibatkan hanya beralih string dalam string lain.
Penjelasan
Jika toggle string adalah substring dari string utama , hapus semua instance dari string toggle dari string utama ; jika tidak, tambahkan string sakelar di akhir string utama .
Aturan
- Semua string terdiri dari karakter ASCII yang dapat dicetak
- Fungsi harus mengambil dua parameter: string utama dan string toggle .
- The String utama bisa kosong.
- The beralih String tidak boleh kosong.
- Hasilnya harus berupa string, yang bisa kosong.
- Jawaban terpendek menang.
Contohnya
function toggle(main_string, toggle_string){ ... }
toggle('this string has 6 words ', 'now')
=> 'this string has 6 words now'
toggle('this string has 5 words now', ' now')
=> 'this string has 5 words'
Menguji kasus
'','a' => 'a'
'a','a' => ''
'b','a' => 'ba'
'ab','a' => 'b'
'aba','a' => 'b'
'ababa', 'aba' => 'ba'
Jawaban:
Jelly , 7 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Java 8,
80706534 byteMungkin 'codegolf' terpendek saya sejauh ini .. xD
dengan bantuan dari komentar ..;)
Penjelasan:
Cobalah online.
sumber
if
ke ternary. Jika tidak ada yang lain, itu akan menyingkirkan "ekstra"return
.return m=m.replace(t,"")?m+t:m;
m==(m=m.replace...
MATL, 11 byte
Cobalah secara Online!
Semua uji kasus
Penjelasan
sumber
Python 3, 38 byte
sumber
JavaScript (ES6),
3937 bytesumber
Pyke, 14 byte
Coba di sini!
Mengingat bahwa Pyke tidak punya
else
struktur, saya pikir ini skor yang cukup masuk akalPenjelasan:
sumber
CJam, 9
Cobalah online. Terima kasih jimmy23013 untuk memotong 1 byte :)
Penjelasan:
sumber
q~:B/2Be]
.Javascript (ECMAScript 6): 47 byte
sumber
("a", ".")
mengembalikan""
bukan"a."
.Retina ,
3831 byteHitungan byte mengasumsikan penyandian ISO 8859-1.
Linefeed tambahan sangat penting. Format input adalah kedua string dipisahkan dengan linefeed.
Cobalah online! Baris pertama memungkinkan menjalankan beberapa test case sekaligus (untuk test suite, gunakan
;
untuk memisahkan string dan linefeed untuk memisahkan test case; baris pertama menangani konversi).Penjelasan
Pada langkah pertama ini kami mengganti semua kemunculan string toggle di string utama dengan
·
. Kita perlu memasukkan penanda ini sehingga kita dapat menentukan setelahnya apakah ada substitusi yang terjadi.Ini adalah subtitusi lain yang menghilangkan
·
marker, atau baris kedua (termasuk linefeed terpisah). Namun, batas1>
adalah yang berarti bahwa hanya kecocokan setelah yang pertama dipertimbangkan. Oleh karena itu, jika toggle string tidak muncul di string utama, kami tidak akan memasukkan apa pun·
, sehingga baris kedua akan menjadi yang pertama cocok dan tidak akan dihapus. Kalau tidak, kami menghapus baris kedua bersama dengan semua kecuali penanda pertama.Meskipun ini menggunakan tahap transliterasi, ini juga digunakan hanya untuk menghapus karakter. Secara khusus, kami memindahkan keduanya
·
dan umpan baris. Kita membutuhkan yang pertama, jika ada pertandingan (karena kemudian yang pertama·
akan tertinggal pada tahap sebelumnya) dan kita membutuhkan yang kedua jika tidak ada pertandingan (untuk menggabungkan dua baris bersama-sama dan dengan demikian tambahkan toggle string ke string utama).sumber
Python (3.4):
55544744 BytesPengujian:
Output Uji
Menggunakan def akan lebih lama karena Anda harus menggunakan pernyataan kembali, jika mungkin tanpa kembali itu akan menghemat 2 BytesKarena pernyataan eksplisit dari fungsi tidak diperlukan (maaf saya tidak tahu itu) 7 Bytes disimpan.sumber
toggle=
.toggle=
pekerjaan Testoggle
diperlukan untuk mengujinya. Tapi Anda hanya perlu menghitung mulailambda m,t:
dari.m+''+t
kem+t
untuk menyimpan 3 byte, jika saya tidak salah.m+' '+t
memasukkan spasi di antara mereka, tetapi setelah membaca deskripsi lagi saya menghapus spasi putih tetapi bukan '' dan +C #, 63
Lebih baik dari Jawa :)
Kode uji:
Keluaran:
sumber
Pyth,
131110 byteSuite uji.
Format input: string pertama dalam tanda kutip, string kedua tanpa tanda kutip.
Ini juga 10 byte:
Suite uji.
Ini adalah 11 byte:
Suite uji.
Solusi 13 byte sebelumnya:
Suite uji.
sumber
?}zQ:Qzk+Qz
Jolf, 12 byte
Atau, jika kita harus menyertakan karakter regex-sensitif:
Coba di sini!
Penjelasan
sumber
JavaScript (ES6), 37 Bytes
Sedikit lebih pendek dari jawaban @ nobe4 dengan memanfaatkan split dan gabung
sumber
Racket, 70 byte
Cukup lurus ke depan.
sumber
Scala,
7270 bytePenerjemah online: www.tryscala.com
sumber
if(r==m)
.Oracle SQL 11.2, 66 byte
sumber
Perl,
3730 byteEkspresi reguler di dalam string toggle tidak dievaluasi karena kutipan dengan
\Q
...\E
.sub F
dan\E
dihapus sesuai dengan komentar oleh msh210.Ini tidak sepenuhnya bebas dari efek samping karena pengaturan
$_
. Menggunakan variabel lokal akan dikenakan biaya enam byte tambahan:Di sisi lain, dengan parameter input yang diaktifkan, dua byte dapat disimpan dengan menggunakan
pop
alih-alihshift
(28 byte):File uji:
Hasil tes:
sumber
sub F
dari jumlah byte Anda. Selain itu, Anda harus dapat menggunakanpop
alih-alihshift
(dengan membalik urutan input, natch), menghemat dua byte. (Belum diuji.) Akhirnya, Anda harus dapat menghilangkan\E
, menghemat dua byte lagi. (Juga belum diuji.)pop
alih-alihshift
bisa membantu, karena$_
harus menjadi argumen pertama yang harus dihindari$_[1]=~s/.../
. Urutan argumen input ditetapkan oleh pertanyaan AFAIK.C # (58 byte)
string F(string s,string t)=>s==(s=s.Replace(t,""))?s+t:s;
Ini menggunakan tugas inline untuk mencukur beberapa byte
sumber
var s,t
atauvar s,var t
sebaliknyastring
?var
hanya dapat digunakan di tempat-tempat di mana jenisnya diketahui pada waktu kompilasi, sehingga tidak dapat digunakan dalam tanda tangan metode. Anda dapat menggunakandynamic
, tetapi 1 karakter lebih lamastring
var F(string s, string t
? Itu bisa disimpulkan ...bash + sed, 28 byte
Script tinggal di file toggle-string.bash, yang kita panggil
bash toggle-string.bash mainstring togglestring
.s/$2//g
menghapus string toggle dari string utamat
melompat ke akhir jika penggantian sebelumnya berhasil (mis. string utama berisi string toggle)/$/$2/
menambahkan toggle string di akhir ($
), jika kita tidak melompat ke akhirbash diperlukan untuk herestring
sumber
Julia,
3331 byteCobalah online!
sumber
PowerShell v2 +, 47 byte
Mengambil input
$a,$b
dan kemudian menggunakan pernyataan pseudo-ternary(... , ...)[...]
untuk melakukan if / else. Bagian dalam dievaluasi terlebih dahulu untuk membentuk array dari dua elemen. Tanggal 0 adalah$a
dengan semua kemunculan$b
-replace
d tanpa apa-apa, yang disimpan ke dalam$c
. Yang ke-1 hanyalah rangkaian string dari$a
dan$b
.Jika
$c
adalah-eq
ual untuk$a
, artinya$b
tidak ditemukan, itu Boolean$true
atau1
, dan elemen 1 dari array (gabungan) yang dipilih. Lain, itu Boolean$false
, jadi kami menampilkan$c
elemen ke-0.Catatan yang
-replace
serakah, jadi itu akan menggantikan dari kiri dulu, artinyaababa / aba
test case akan kembali dengan benarba
.sumber
Java 8, 65 byte
Logika yang sama dengan solusi Java 7, ditulis dengan lambda.
Coba di sini
sumber
Ruby,
33 byte27 byte (28 jika menggunakan subtitusi global)pasti 28 bytesumber
Mathematica, 45 byte
Fungsi anonim yang mengambil string utama dan string toggle (dalam urutan itu) dan mengembalikan hasilnya. Penjelasan:
sumber
TSQL,
143129121 BytesDapat dibaca:
Live Demo
114 Bytes dengan ketat 1 input karakter
sumber
TSQL (Sqlserver 2012), 49 byte
Cobalah online!
sumber
Ruby,
353728 byteHore untuk interpolasi string! Ia bahkan bekerja di regex. Sisanya sederhana: jika string dalam
t
cocok denganm
, gantit
dengan''
, lain kembalim+t
.Edit: Memperbaiki bug.
Sunting: Saya menerapkan saran Kevin Lau, tetapi tampaknya saya telah mencapai algoritma yang sama dengan yang digunakan dalam jawaban Luis Masuelli .
sumber
("a", ".")
mengembalikan"a"
bukan"a."
.m[t]
jauh lebih pendek daripadam.include?(t)
dan masih memeriksa untuk dimasukkan dalam string.k (23 byte)
Contoh:
sumber
Kotlin, 61 Bytes
Ini akan lebih pendek jika penugasan adalah ekspresi di Kotlin, dan parameter bisa berubah, dan ada operator kondisional ternary, sayangnya ini tidak terjadi :(
Cobalah secara Online!
Tidak disatukan
sumber