Tugas
Tulis sebuah program atau fungsi yang diberi tiga string A, B, C
menghasilkan string output di mana setiap instance B
in A
telah diganti secara rekursif C
. Rekursif mengganti cara mengulang substitusi di mana pada setiap langkah semua contoh yang tidak tumpang tindih dari B
dalam A
(dipilih rakus dari kiri ke kanan) diganti dengan C
sampai B
tidak lebih terkandung dalam A
.
Input output
- Anda dapat menggunakan salah satu metode default untuk I / O .
- Strings hanya akan berisi karakter ASCII yang dapat dicetak (dan mungkin mengandung salah satunya).
B
tidak akan pernah menjadi string kosong, sementaraA
danC
mungkin.- String harus dianggap plaintext, misalnya Anda tidak dapat memperlakukan
B
sebagai pola Regex. - Beberapa kombinasi input tidak akan pernah berakhir. Program Anda dapat melakukan apa saja dalam kasus-kasus itu.
Uji kasus
Ini dalam format: A/B/C\nOutput
Hello, world!/world!/PPCG
Hello, PPCG
Uppercase is up/up/down
Uppercase is down
ababababa/aba/ccc
cccbcccba
delete/e/{empty string}
dlt
{empty string}/no/effect
{empty string}
llllrrrr/lr/rl
rrrrllll
+-+-+-+/+-+/+
+
ababababa/aba/bada
badabbadbada
abaaba/aba/ab
abb
((())())())/()/{empty string}
)
Contoh yang tidak berakhir:
grow/ow/oow
loop/lo/lo
code-golf
string
substitution
code-golf
math
code-golf
string
set-theory
code-golf
code-golf
compile-time
code-golf
kolmogorov-complexity
binary
code-golf
sequence
cops-and-robbers
code-golf
subsequence
card-games
code-golf
sequence
primes
code-golf
code-golf
number
graphical-output
music
code-golf
ascii-art
code-golf
string
lambda-calculus
code-golf
string
code-generation
code-golf
unicode
code-golf
math
combinatorics
code-golf
balanced-string
code-golf
sequence
cops-and-robbers
code-golf
sequence
cops-and-robbers
code-challenge
fastest-code
chess
code-golf
math
graphical-output
code-golf
string
hello-world
animation
code-golf
number
arithmetic
code-golf
integer
code-golf
code-golf
combinatorics
code-golf
kolmogorov-complexity
graphical-output
code-golf
string
code-golf
code-golf
game
code-golf
math
combinatorics
code-golf
ascii-art
popularity-contest
random
code-golf
arithmetic
number-theory
integer
code-golf
tips
underload
code-golf
math
sequence
primes
code-golf
math
path-finding
code-golf
ascii-art
primes
code-golf
kolmogorov-complexity
alphabet
Leo
sumber
sumber
((())())())/()/
downpercase is down
Jawaban:
05AB1E , 2 byte
Cobalah online!
Penjelasan
Ini bisa
:
untuk 1 byte jika kita tidak harus berurusan dengan string kosong.sumber
:
adalah builtin yang menyelesaikan seluruh tantangan? Seharusnya saya melarang builtin;)Python 2 , 43 byte
Cobalah online!
Mengevaluasi string formulir
Untuk mencapai titik tetap jika ada, cukup untuk melakukan penggantian yang sama dengan panjang string asli.
sumber
ES6 (Javascript),
47, 43 byteGolf
Cobalah
sumber
c=>b=>g=a=>a==(a=a.split(b).join(c))?a:g(a)
Some combinations of inputs will never terminate. Your program can do anything in those cases.
Retina , 27 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Input harus dipisahkan dengan linefeed.
Cobalah online! (Untuk kenyamanan, gunakan format input test-suite di mana setiap baris adalah kasus uji yang dipisahkan dengan slash.)
sumber
C #, 44 Bytes
Versi pendek:
Contoh Program:
Penjelasan: Fungsi ini ditulis sebagai ekspresi rekursif ekor, menghindari kata kunci kembali dan kurung keriting dengan mengeksploitasi yang berikut:
Ini memungkinkan kita menyimpannya dalam satu pernyataan.
EDIT: Kembali ke menghilangkan jenis fungsi r, karena itu tampaknya dapat diterima. Dengan tipe deklarasi menggunakan array, itu adalah 68 karakter. Tanpa, itu adalah 44 karakter.
sumber
r=
atau lebih banyak untuk deklarasi (sebagian karena saya tidak sepenuhnya tahu aturannya, sebagian karena saya tidak tahu C # cukup baik untuk menerapkannya).Japt , 15 byte
Uji secara online!
Bagaimana itu bekerja
Japt memiliki built-in rekursif-ganti, tetapi melihat input pertama sebagai regex. Jika input dijamin hanya mengandung karakter alfanumerik, solusi tiga byte ini akan berfungsi:
Jika input diizinkan mengandung arang apapun kecuali
^
,\
, atau]
, solusi 12-byte ini akan berlaku sebaliknya:sumber
C #,
3349 byteMungkin, salah satu cuplikan terkecil yang ditulis dalam C # ... Dan karena
Replace
merupakan bawaan daristring
struct, tidak perlu untukusing
s ( Setidaknya tidak pada fitur bawaan VS, C # Interactive ... )Juga, karena
B
selalu memiliki nilai, kode tidak memerlukan validasi apa pun.Golf
Tidak disatukan
Kode lengkap
Rilis
+19 bytes
- Solusi tetap tidak bersifat rekursif.33 bytes
- Solusi awal.sumber
Replace
melakukan penggantian rekursif?"((())())())".Replace("()", "")
kembali(()))
.Memproses,
7572 byteMencetak hasilnya. Sebut saja seperti
g("llllrrrr", new String[]{"lr","rl"});
sumber
Mathematica,
3532 BytesArgumen diberikan sebagai suatu urutan. Tidak pernah berakhir untuk
grow
contoh, kembaliloop
untukloop
misalnya. Tiga byte off berkat saran Martin.sumber
FixedPoint
cenderung terlalu panjang dan dapat ditiru dengan//.
:#//.x_:>StringReplace[x,#2->#3]&
ReplaceRepeated
bekerja untuk senar!$RecursionLimit
kali, yang secara2^16
default, tidak mempengaruhi jawaban AndaReplaceRepeated
dikendalikan oleh$RecursionLimit
- Saya baru saja mengujinya dengan menetapkan batas ke 20 dan program masih dengan senang hati menerima input yang tidak berakhir ..ReplaceRepeated
ada opsi terpisah (yang tidak dapat digunakan dengan//.
sintaks), dipanggilMaxIterations
. Yang default ke 2 ^ 16. (cc @ngenisis)Ruby, 29 byte
Diberikan 3 argumen, terapkan substitusi ke yang pertama sampai tidak ada yang bisa diganti lagi.
Penjelasan
1
sebelumwhile
hanyalah sebuah nopgsub!
mengembalikan string ataunil
jika tidak ada substitusi yang terjadisumber
Pyke, 6 byte
Coba di sini!
sumber
/// , 3 byte
Masukkan string B setelah slash pertama, C setelah yang kedua dan A di akhir, yaitu:
Cobalah online!
sumber
///
tidak menerima input dengan cara lain./
ada di salah satu string inputJavaScript (Firefox 48 atau yang lebih lama), 43 byte
Membawa argumen yang digulung terbalik. Firefox dulu memiliki parameter ketiga non-standar
replace
yang ditandai bendera regexp tertentu. Parameter ini dihapus di Firefox 49.sumber
SmileBASIC,
7268 byteSalah satu kasus langka di mana membuat fungsi sebenarnya adalah SHORTER di SmileBASIC.
sumber
Javascript 130 byte
Javascript hanya akan menggantikan semua secara bersamaan jika Anda memberinya regex. Agar regex ini berfungsi untuk semua nilai, semua karakter yang digunakan untuk regex perlu diganti dengan versi yang diloloskan. Akhirnya, penggantian dievaluasi untuk mengganti semua instance B dalam A dengan C dan meneruskannya kembali ke fungsi lagi.
sumber
q, 15 byte
Contoh:
link ke unduhan juru bahasa
Penjelasan: ssr , / (konvergen)
sumber
Cheddar, 37 byte
Di ponsel, jadi tautan TIO agak sulit ditambahkan. Pada dasarnya menggunakan rekursi saat memeriksa apakah b ada dalam a. Solusi bisa saja
(a,b,c)->a.sub(Regex{b,"cr"},c)
tetapi tidak berhasil karena suatu alasan.sumber
Perl 6 , 40 byte
Cobalah (jika tio.run diperbarui)
Cobalah versi yang diubah
Diperluas:
sumber
PHP, 46 byte
sumber
PHP, 102 byte
Test case (fungsional)
Test case dengan loop loop
sumber
function replace(...){...}
, jika tidak, pengiriman Anda hanya cuplikan, yang tidak diizinkan secara default;)
Java - 157 byte
Untuk input kosong mengembalikan string kosong.
Gangguan dengan
StackOverflowException
kesalahan saatB
kosong atau diumpankan dengan data seperti iniA/A/A
.Bagaimana itu bekerja:
Kode kode tanpa komentar dengan komentar:
sumber
AutoHotkey, 87 byte
%1%
,,%2%
dan%3%
merupakan 3 argumen pertama yang diteruskan ke suatu fungsi.Jika suatu fungsi mengharapkan argumen variabel, maka
%
s akan dihapus.Mengubah pengaturan sensitivitas kasus biayanya 19 byte tetapi, tanpa itu, Anda akan mendapatkan hal-hal seperti
downpercase is down
.sumber