Tulis program untuk mengganti semua kemunculan "force" dengan "first" dan semua kemunculan "first" dengan "force", dengan menjaga case asli untuk semua posisi karakter:
"ForcefoRcefOrcE" -> "FirstfiRstfIrsT"
"FirstfiRstfIrsT" -> "ForcefoRcefOrcE"
Sisa string harus tetap tidak berubah, dan menjalankan program Anda dua kali akan mengembalikan string asli:
"thirst of forces" -> "thirst of firsts" -> "thirst of forces"
Program Anda harus bekerja pada string awal apa pun. Jadi sebagai petunjuk, Anda sebaiknya menghindari menggunakan karakter ajaib sebagai representasi perantara, karena jika Anda mencoba pengganti tiga pass ( "force" -> "zzzzz", "first" -> "force", "zzzzz" -> "first"
), itu akan gagal pada string yang berisi "zzzzz"
.
Anda harus mendukung berbagai karakter yang diizinkan dalam definisi String oleh bahasa pemrograman Anda (dalam kebanyakan kasus, itu adalah Unicode). Contoh, menggunakan representasi gaya JSON untuk karakter yang tidak dapat dicetak (\ u + 4 digit):
"\u0000\u0001\u0002\u0003the Force of the firsT"
|
V
"\u0000\u0001\u0002\u0003the First of the forcE"
[Ff]
tidak ada maka Anda tidak boleh mengganti kata.Jawaban:
Retina , 33 byte
Cobalah online!
Sunting: Disimpan 5 byte berkat @MartinEnder karena menunjukkan apa yang
Ro
dilakukannya.sumber
Ro
.R
efek pada rentang; misalnya saya tidak akan pernah menyadari bahwaRE
itu setara dengan86420
jika Anda tidak menunjukkannya.JavaScript (ES6),
9388 byteSunting: Disimpan 5 byte dengan mengoptimalkan huruf besar yang tidak berubah.
sumber
APL (Dyalog) , 61 byte
Membutuhkan
⎕IO←0
yang default pada banyak sistem. Dapat empat karakter lebih pendek menggunakan simbol Unicode⍠
bukan⎕OPT
.Cobalah online!
sumber
PHP, 88 Bytes
Versi Online
PHP, 110 Bytes
sumber
$t[0]^first^force
alih - alihstrtr()
.Perl 5 , 52 byte
51 byte kode +
-p
bendera.Cobalah online!
Tidak ada yang terlalu gila terjadi. Temukan kemunculan
force
danfirst
non-case-sensitive (s%force|first%%gi
), lalu transliterasi karakter untuk mengonversi satu ke yang lain.sumber
CJam, 66 byte
Periksa setiap variasi case "first" dan "force" dan cobalah untuk membelahnya. Jika bisa, itu kemudian bergabung kembali dengan kata-kata terbalik.
Kodesemu:
sumber
f
relevan untuk menghindari berubahthirst
menjadithorce
ataudivorce
menjadidivirst
?Java 7,
318310 byteOk, ini cukup sulit di Jawa ..
Penjelasan:
Kode uji:
Coba di sini.
Keluaran:
sumber
c(c("..."))
!Jelly ,
3736 byteApakah ada cara untuk menggunakan pengurangan melintasi irisan dengan panjang 5?
Cobalah online!
Bagaimana?
sumber
MATL , 47 byte
Cobalah online!
Ini menggunakan nilai negatif sebagai langkah perantara, dan setelah dua lewat itu mengambil nilai absolut.
sumber
Pyth ,
3635 byteCobalah online!
Pyth tidak terlalu pandai memanipulasi string.
sumber
Flex (lexer), 72 byte
Untuk mengkompilasi dan menjalankan:
sumber
first.l:3: EOF encountered inside an action
(oh, tidak apa-apa: itu membutuhkan baris baru di akhir)ld: library not found for -lfl
(oh tidak apa-apa, perintah adagcc lex.yy.c -ll
di macOS)Python 2, 171 byte
Saya ingin mencoba melakukan ini menggunakan built-in, tetapi tidak dapat mengalahkan metode berantakan dengan semua pemisahan dan zipping.
Saya pikir cukup jelas apa yang saya lakukan di sini. Pisahkan string pada instance dari first dan force (case-insensitive), gantilah instance tersebut dengan versi yang diterjemahkan menggunakan str.translate, dan gabungkan kembali menjadi string lagi.
Cobalah online!
sumber
Python 2.7,
173165 byte8 byte disimpan oleh kuintopia
Yang ini menjadi kotor:
Cobalah online
Memecahnya langkah demi langkah:
S.lower().split("force")
: ambil string, satukan menjadi huruf kecil, pisahkan menjadi beberapa substring yang dipisahkan oleh"force"
s.replace("first","force")for s in <STEP 1>
: Ganti semua"first"
dengan"force"
_`.join("first".join(<STEP 2>)`[2::5]`_
: ganti semua"force"
dengan"first"
dengan menggabungkan kembali"force"
substring yang digambarkan dengan"first"
dan bergabung kembali menjadi string tunggal (garis bawah ditambahkan untuk mendapatkan tanda centang yang benar)zip(<STEP 3>,[(2,1)[l.isupper()]for l in S])
: zip setiap karakter frasa yang diganti dengan pengodean huruf dari string asli (2 untuk huruf kecil, 1 untuk huruf besar)_`[(t[0],t[0].upper())[t[1]==1]for t in <STEP 4>]`[2::5]`_
: Kembalikan casing asli, ubah daftar menjadi string (garis bawah ditambahkan untuk mendapatkan tanda centang yang benar)sumber
C (dentang) ,
201183226214 bytePunya beberapa bug ... Masih perlu bermain golf cukup banyak
(disimpan 12 berkat ceilingcat)
Cobalah online!
sumber
C # 273 byte
Cobalah online!
Port langsung dari jawaban Java Kevin Cruijssen , ternyata ketika datang untuk mendapatkan char di string pada indeks yang diberikan, C # jauh lebih golf daripada java (
s[i++]
bukans.charAt(i++)
)sumber
Japt , 41 byte
Cobalah online!
Ini akan jauh lebih singkat jika Japt memiliki fungsi transliterate yang waras ...
Versi alternatif:
Cobalah online!
sumber
C #, 235 karakter
sumber
Ruby , 55 byte
Cobalah online!
sumber
Java, 382 byte non-comptent
Coba Online
sumber
"The first, force,|first'forced!"
? Selain itu, Anda dapat sedikit kode golf saat ini:if(w.equalsIgnoreCase("force")|w.equalsIgnoreCase("first"))
->,z
setelahString s=""
danz=w.toLowerCase();if(z.equals("force")|z.equals("first"))
. Juga,'O'
bisa79
,'C'
bisa67
dan'E'
bisa69
. Danif
else
dapat diganti dengan satu ternary besar jika-yang lain, karena keduanya melakukannyas+=
.non competent
judulnyaC # (269 Bytes)
lagi solusi c #, hanya yang terkecil-terkecil karena saya mendeklarasikan dua variabel dan tidak dapat menggunakan sintaks lambda. oh well, saya bersenang-senang. :)
penjelasan:
Angkat tali asli, lalu pisahkan pada "FORCE" dan "FIRST".
agregasikan hasil dan pada setiap pemisahan, temukan substring lima karakter yang digunakan untuk membagi string asli menggunakan panjang sejauh string tersebut diagregasi. jika itu "memaksa" menjadikannya "pertama" dan sebaliknya
sumber