Latar Belakang
Saya saat ini berada dalam kelas AP Comp Sci A: Java, dan saya ingin memulai beberapa teman saya dengan bermain golf kode. Saya mendapat tantangan dari kursus, dan saya ingin melihat berapa byte yang dapat dilakukan oleh komunitas ini.
Detail tantangan:
Diberikan dua string input, string utama dan string pivot, lakukan hal berikut:
Jika string pivot tepat sekali sebagai substring dari string utama, bagian dari string utama yang datang sebelum string pivot akan ditukar dengan bagian yang datang setelahnya, sambil menjaga urutan dalam substring yang sedang ditukar .
Sebagai contoh:
Jika string pivot kosong atau string pivot tidak ditemukan dalam string utama, program tidak harus memiliki perilaku yang ditentukan.
Jika ada lebih dari satu instance dari string pivot, perpecahan harus terjadi pada yang pertama dan hanya instance pertama dari pivot.
Contoh: Diberikan string utama OneTwoThreeTwoOne
dan string pivot Two
, output seharusnya ThreeTwoOneTwoOne
.
Mengingat string 1Two2Two3Two4
dan pivot utama Two
, output harus 2Two3Two4Two1
.
Mengingat string utama OneTwoThree
dan string pivot "Dua", output seharusnya ThreeTwoOne
. Diberikan string utama the rabbit is faster than the turtle
dan string pivot
is faster than
(perhatikan spasi tunggal sebelum dan sesudahnya), hasilnya harus the turtle is faster than the rabbit
.
Mengingat string utama 1-2-3-4-5-6
dan pivot -
, output seharusnya 2-3-4-5-6-1
.
Kata penutup:
Ini adalah pertanyaan pertama saya tentang golf kode, jadi jika Anda memiliki saran atau kritik yang membangun, maka jangan ragu untuk mengatakannya.
Selain itu, kode saya untuk proyek ini (ditulis dalam bahasa Jawa karena kursus berfokus pada itu) dapat ditemukan di bawah. Jika Anda memiliki tips, saya ingin sekali melihatnya. Saat ini 363 byte, tapi saya yakin kalian bisa datang dengan solusi yang jauh lebih baik dan lebih kecil.
import java.util.Scanner;interface Main{static<T>void D(T f){System.out.println(f);}static void main(String[]A){Scanner s=new Scanner(System.in);D("Enter the first String:");String a=s.nextLine();D("Enter the pivot String:");String p=s.nextLine();if(p.isEmpty()|!a.contains(p)){D("Error: Pivot String not found.");return;}String w[]=a.split(p,2);D(w[1]+p+w[0]);}}
Catatan: Teks untuk input dan untuk kasus bahwa string pivot tidak ditemukan adalah wajib untuk tugas asli, tetapi tidak untuk tantangan ini.
pivot='-'
danmain='1-2-3-4-5-6'
? Sebagian besar hasil kiriman2-3-4-5-6-1
untuk ini, tapi seperti yang saya mengerti tantangannya seharusnya2-1-3-4-5-6
.2-3-4-5-6-1
.Jawaban:
Mathematica, 42 byte
Cobalah online!
sumber
Jelly , 6 byte
Cobalah online!
Penjelasan
sumber
œṣ
adalah "membagi x sekitar sublists sama dengan y ",ṙ1
memutar array satu tempat ke kiri danj⁴
bergabung dengan input kedua.Python 2 , 37
39byteDi mana
a
string utama danb
string pivot.Cobalah online!
sumber
split(b)
kesplit(b,1)
untuk menentukan bahwa Anda hanya ingin membagi pada kesempatan pertama.split
menerima lebih banyak argumen, terima kasih!Bahasa Wolfram (Mathematica) , 34 byte
Cobalah online!
Fungsi tanpa nama, kari yang harus dipanggil dengan pivot pertama dan kedua string utama. Misalnya, jika Anda menetapkan fungsi ke nama
f
:sumber
Ohm v2 , 4 byte
Cobalah online!
sumber
Perl 5 , 20 + 2 (
-pl
) = 22 byteCobalah online!
Mengambil string pivot pada baris pertama, lalu string penuh pada baris kedua.
sumber
/
s sekitar$_
dapat dihapus$_=~<>;$_="$'$&$
"` adalah 20 byte dan membaca argumen dalam urutan yang benarPython 2 ,
5344 byteterima kasih kepada ThePlasmaRailgun untuk beberapa byte
Cobalah online!
sumber
print k[1]+p+k[0]
. Ini seharusnya memiliki perilaku yang dimaksudkan.k,j=m.split(p,1);print j,p,k
untuk 38 byte.Python 2 , 37 byte
Cobalah online!
sumber
C # (Visual C # Compiler) , 56 byte
Cobalah online!
sumber
Alice , 18 byte
Cobalah online!
Penjelasan
Ini hanya kerangka kerja untuk mode ordinal linear (pemrosesan string) kode. Membuka kontrol aliran zigzag, kita mendapatkan:
sumber
SOGL V0.12 ,
95 byteCoba Di Sini!
Penjelasan:
sumber
Retina ,
2423 bytetank ke Martin Ender selama -1 byte
Cobalah online!
sumber
Python 2 , 48 byte
Cobalah online!
sumber
Pyth , 8 byte
Coba di sini!
Penjelasan
sumber
Arang , 13 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
R ,
635857 byteCobalah online!
M
adalah string utama,P
adalah pivot.Jawaban retina ovs menunjukkan bahwa saya dapat memperbaiki upaya saya sebelumnya pada pendekatan regex
dengan menambahkan
?
ke grup tangkap pertama.sumber
Java 8, 47 byte
Cobalah online
sumber
JavaScript (ES6),
4140 byteUji kasus
Tampilkan cuplikan kode
sumber
J , 14 byte
Bagaimana itu bekerja:
Argumen kiri adalah pivot, yang benar - string yang akan dibalik
Cobalah online!
sumber
C,
106100 byteCobalah online!
sumber
SNOBOL4 (CSNOBOL4) , 53 byte
Cobalah online!
Mengambil input sebagai Pivot, lalu Main, dipisahkan oleh baris baru.
Ini pada dasarnya setara dengan SNOBOL dari jawaban R saya .
sumber
Perl 6 , 31 byte
Menguji
sumber
PHP, 62 byte
membutuhkan PHP 7.1; mungkin gagal jika pivot berisi regex chars khusus (
\+*?[^]$(){}=!<>|:-
).tidak ada perubahan jika Pivot kosong, kosongkan output jika Pivot tidak dalam input.
Jalankan dengan
-n
.versi aman, 77 byte:
tidak ada perubahan jika Pivot kosong, kosongkan output jika Pivot tidak dalam input.
Jalankan dengan
-n
.versi non-regex, 71 byte:
menghasilkan peringatan jika Pivot kosong; tidak ada perubahan jika Pivot tidak dimasukkan.
Jalankan dengan
-nr
.Cobalah secara online .
sumber
Merah , 63 byte
Cobalah online!
sumber
Swift , 131 byte
Penjelasan (ungolfed)
sumber
C (gcc) , 76 byte
Cobalah online!
sumber
C ++ 11, 64 byte
Sebuah lambda, yang menangkap string s, p dan a, dengan sebagai referensi (masuk-keluar).
Kode uji
sumber
Bersih , 83 byte
Sebuah
String
di Clean biasanya{#Char}
- sebuah tanpa box (#
)Char
array ({}
). Fungsi ini mengambil[Char]
alih-alihString
, yang merupakan versi valid keduaString
.Tanda tangan fungsi penuh adalah
f :: [.t] .t -> [.t] | [.t <= Char]
.Cobalah online!
sumber
Japt ,
87 byteCoba di sini
sumber