Objektif
Buat fungsi untuk membalikkan rangkaian senar
Memasukkan
Dua string (spasi + alfanumerik), di mana satu harus dikurangkan untuk yang lain.
- Anda dapat mengasumsikan bahwa string yang akan dikurangkan tidak akan pernah lebih besar dari yang lainnya.
Keluaran
Hasil dari pengurangan
Pengurangan
Anda harus menghapus satu string dari awal atau akhir dari string lain. Jika string ada di awal dan di akhir, Anda hanya dapat menghapus satu, yang mana yang akan dihapus terserah Anda.
Jika string tidak di awal atau di akhir, atau tidak sama persis, itu adalah pengurangan yang tidak valid dan Anda harus menampilkan string asli.
Uji Kasus
Pengurangan Valid
'abcde','ab' -> 'cde'
'abcde','cde' -> 'ab'
'abab','ab' -> 'ab'
'abcab','ab' -> 'abc' or 'cab'
'ababcde','ab' -> 'abcde'
'acdbcd','cd' -> 'acdb'
'abcde','abcde' -> ''
'abcde','' -> 'abcde'
'','' -> ''
Pengurangan Tidak Valid (mengembalikan string asli)
'abcde','ae' -> 'abcde'
'abcde','aa' -> 'abcde'
'abcde','bcd' -> 'abcde'
'abcde','xab' -> 'abcde'
'abcde','yde' -> 'abcde'
Masukan Tidak Valid (tidak perlu ditangani)
'','a' -> ''
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
cde
? Apa yang Anda maksud dengan valid? Apakah kita perlu menilai validitas input, atau maksud Anda bahwa kami tidak akan menerima input yang tidak valid?'abcde','bcd' -> 'abcde'
karena melanggar solusiku'ababcde', 'ab'
→'abcde'
sebagai test case. Beberapa algoritma naif gagal pada yang satu itu.Jawaban:
Java 8,
46454440 byte-1 byte terima kasih kepada TheLethalCoder
-1 byte karena saya bodoh (terima kasih Rod!)
-4 byte terima kasih kepada Kevin Cruijssen
Cobalah online! (termasuk semua kasus uji)
Jawaban Java sebenarnya mengalahkan beberapa bahasa praktis lainnya. Senyum. (dan sekarang ini mengalahkan JS!)
sumber
a->b->
First
keAll
untuk -2 byte. Karena itu^
dan$
selalu baik di akhir atau mulai dari String, jadi bahkan denganreplaceAll
itu hanya menggantinya sekali. Coba di sini. NB: Saya menambahkan byte-count sebelumnya yang dicolokkan ke jawaban Anda, yang biasanya dilakukan setelah mengedit kode-golf di PPCG.All
sebagai gantinyaFirst
, ini menjadi benar:"abab" + "ab" -> ""
JavaScript (ES6), 41 byte
Mengambil input melalui sintaks currying, yaitu
f("abab")("ab")
.sumber
eval()
untuk membangun RegExes sebelumnya ?!Brachylog (Coba Online!), 12 byte
Cobalah online!
Mengambil string untuk mengurangi dari input standar, dan string untuk mengurangi sebagai argumen baris perintah.
Penjelasan
sumber
Retina , 21 byte
1 byte terima kasih kepada Martin Ender.
Cobalah online!
sumber
JavaScript (ES6),
76704541 byteCobalah
sumber
new
.Perl 6 , 21 byte
Cobalah
Diperluas:
sumber
Japt ,
119 byteCobalah online!
sumber
TI-Basic (TI-84 Plus CE), 63 byte
sumber
Ans
bahkan merujuk pada baris keempat?Ans
merujuk pada nilai terakhir yang dievaluasi, jadi dalam hal ini mengacu pada nilai yang dikembalikan olehinString(
, yang merupakan indeks substringStr2
dalam stringStr0
atau 0 jika substring tidak muncul. Pernyataan if tidak mengubah nilai Ans, jadi pada baris keempat indeks masih masukAns
.inString
kerjanya. Golf yang bagus!Mathematica, 162 byte
uji gaya masukan ["abcde", "ab"]
sumber
#
alih-alih#1
- artinya sama persis. Selain itu, alih-alih menggunakanStringJoin@t
, Anda dapat menipu dengan menggabungkan string kosong dengannya""<>t
, yang secara otomatis menggabungkan semuanyat
juga. Pernahkah Anda melihat halaman kiat golf Mathematica ?t={};
di awal, misalnya), tetapi mungkin lebih mudah untuk menggunakan pendekatan yang berbeda sama sekali - sudahkah Anda mencoba menggunakanStringReplace
fungsi?c=Characters;a=c@#;b=c@#2;
l@Intersection[a,b]
adalahl[a∩b]
.Python,
696864575145 byteIni akhirnya menjadi solusi yang sama sekali berbeda dengan Regex.
Berkat Value Ink untuk -2 byte!
dan Felipe Nardi Batista untuk -6 byte besar!
Cobalah online!
sumber
re.sub(c.join("^|$"),'',s,1)
c+'$|^'+c
Pesta ,
666149 byteCobalah online!
kurang golf:
Menggunakan case untuk menguji awal atau akhir, dan menyusun substraksi prefix / suffix (% / #)
sumber
case
, tetapi lebih lama dari yang diperlukan. 2 dan pola-3 dapat digabungkan ke dalam satu:*)c=${1#$2};;
. Kemudian dengan hanya 2 cabang akan lebih pendek untukecho
setiap langsung daripada menggunakan variabel$c
:case $1 in *$2)echo ${1%$2};;*)echo ${1#$2};;esac
. Atau Anda bisa tetap menggunakannya, tetapi tanpacase
:c=${1%$2};[[ $c = $1 ]]&&c=${1#$2};echo $c
.APL (Dyalog) ,
3130 byte-1 terima kasih kepada Zacharý .
Ini sebenarnya menggunakan concatenation terbalik (yaitu kebalikan dari)! Mengambil string asli sebagai argumen kiri, dan apa yang harus dikurangi sebagai argumen benar.
Cobalah online!
Tidak Disatukan:
Legenda:
{
...}
fungsi anonim⍺
argumen kiri dari fungsi saat ini⍵
argumen yang benar dari fungsi saat ini0::
... jika ada kesalahan terjadi, jalankan ini, kalau tidak ...⍣¯1⊢
terbalik,∘⍵
menyatukan ⍵ di sebelah kanan⍵,
menyatukan ⍵ di sebelah kirisumber
{0::⍺{0::⍺⋄,∘⍵⍣¯1⊢⍺}⍵⋄⍵,⍣¯1⊢⍺}
.PHP, 54 Bytes
Testcases
sumber
Python 2 , 68 byte
Cobalah online!
sumber
Haskell , 49 byte
Cobalah online! Penggunaan:
f"" "abcdef" "ab"
. Atau, tentukan(-)=f""
dan gunakan like"abcdef" - "ab"
.Solusi bebas regex ini bekerja dengan membelah string secara rekursi di semua pre-dan postfixes-nya dan memeriksa apakah string yang akan dikurangi cocok dengan salah satunya.
sumber
Python 2 ,
7265 byteCobalah online!
-7 byte berkat @FelipeNardiBatista
sumber
C #, 88 byte
Kompilasi ke a
Func<string, Func<string, string>>
.sumber
Ruby (ekspresi lambda), 29 byte
Yay untuk interpolasi regex! Membutuhkan subtrahends aman-regex, tapi tidak apa-apa sesuai tantangan.
sumber
Tcl , 37 byte
Cobalah online! (sekarang menjalankan semua tes)
Tcl sangat mudah.
proc s {a b}
mendefinisikan fungsi bernamas
yang mengambil parametera
danb
.regsub
pengganti{}
, yang merupakan string kosong, untuk nilaib
kapan pada awal atau akhira
. Pengembaliannya implisit.sumber
C, 96 byte
Sudah menjadi rahasia umum bahwa manipulasi string dalam C rumit, karena golf ekstensi akan menjadi garis batas masokis. Kedengarannya baik bagi saya.
Salah satu program yang kurang mudah dibaca yang saya tulis. Mengambil dua input (terlepas dari bagaimana fungsi terlihat),
char**
menunjuk ke string untuk didekonsiliasi dan achar*
yang merupakan string untuk dihapus. Pointer input diedit di tempat dan menjadi output (yang peduli tentang kebocoran memori pula).Contoh penggunaan:
sumber
AWK ,
2132 byteCobalah online!
Pengiriman asli secara naif menggantikan teks dalam string pertama, bukan hanya pada awal atau akhir.
Cobalah online!
Awalnya mencoba tanpa kawat gigi, tetapi diperlukan trik untuk mencetak garis kosong dan atau tidak cocok yang akhirnya menambahkan lebih banyak byte daripada versi ini.
sumber
R,
204241 byte-1 byte terima kasih kepada MickyT!
Mengembalikan fungsi anonim (yang memiliki argumen dalam urutan
b,a
). Menghitung perbedaan stringa-b
.sub
adalah substitusi sederhana yang menukar kemunculan pertama pola dengan, dalam hal ini, string kosong''
. Bangun regex dengansprintf
untuk mencocokkan hanya pada awal dan akhir string. Membutuhkanpryr
paket untuk diinstal.Pada tautan TIO, gunakan
function(a,b)
definisi yang lebih verbose untuk fungsi selama empat byte lebih.Cobalah online!
sumber
'abcde','bcd' -> 'abcde'
kasingnya?sub
substitusi sederhana yang hanya menukar kejadian pertamab
ina
": Apakah ini swap jika string kedua berada di tengah-tengah string pertama?sprintf('^%s|%s$',b,b)
Common Lisp, 121 byte
Cobalah online!
Common Lisp yang biasa!
Versi tidak disatukan:
sumber
Kotlin , 91 byte
Cobalah online!
sumber
{a,b->var c=a.removePrefix(b);if(a==c){c=a.removeSuffix(b)};c}
Powershell,
3440 byte+6 byte saat
Invalid Subtraction
test case ditambahkanKomentar:
Ekspresi regexp
^$t|$t$
tidak berfungsi seperti yang diharapkan: ia menggantikan kedua kecocokan alih-alih satu (ditandaig
selalu aktif). Jadi, kami terpaksa menggunakan grup lookahead negatif.Skrip uji:
Keluaran:
sumber
QBIC , 57 byte
Whegh, ini berantakan di QBIC / QBasic ...
sumber
Lua ,
7165 byteMenerima saran
Cobalah online!
sumber
Saya awalnya salah membaca instruksi. Terima kasih, Ørjan Johansen karena menunjukkan kesalahan saya!
PowerShell ,
4651 byteCobalah online!
sumber
abcde
-bcd
tidak terjadi di kedua ujung string.Excel, 129 byte
sumber
sed ,
5653 byteCobalah online!
sumber