Bahasa Geobitsian adalah penyimpangan bahasa Inggris baru di mana sebuah kata dipecah menjadi segmen yang masing-masing harus dimulai dengan huruf yang berbeda. Kemudian setiap kali salah satu huruf awal muncul di string lain, itu diganti dengan seluruh segmen yang sesuai, mempertahankan kapitalisasi.
Proses ini disebut Geobitsizing .
Misalnya kata " Geobit " bisa dipecah menjadi geo bits
, dan puisi omong kosong
Algy met a Bear
A Bear met Algy
The Bear was bulgy
The bulge was Algy
akan menjadi Geobisit dengan itu sebagai
Algeoy met a Bitsear
A Bitsear met Algeoy
The Bitsear was bitsulgeoy
The bitsulgeoe was Algeoy
karena setiap g
menjadi geo
, setiap G
(meskipun tidak ada) menjadi Geo
, setiap b
menjadi bits
, dan setiap B
menjadi Bits
.
Perhatikan bahwa setiap penggantian dilakukan sehubungan dengan string asli, bukan langkah perantara. misalnya jika geo
telah gbo
sebaliknya, yang b
dibuat tidak akan diganti dengan bits
.
Tantangan
Tulis program atau fungsi yang dapat menghasilkan bahasa Geobitsian.
Ambil string satu baris yang terbuat dari huruf kecil (az) dan spasi. Ini akan menjadi kata yang digunakan sebagai argumen Geobitsizing, dengan spasi memisahkan segmen. Anda dapat mengasumsikan:
- Segmen tidak akan kosong. Jadi spasi tidak akan bertetangga satu sama lain atau berada di awal atau akhir string.
- Setiap segmen dimulai dengan huruf yang berbeda. Jadi tidak boleh lebih dari 26.
Sebagai contoh, beberapa string tersegmentasi valid Anda harus mendukung adalah geo bits
, butt ner
, alex
, dan do o r k nob
(segmen huruf tidak berpengaruh tetapi berlaku). Tapi geo
, butt ner
, Alex
, dan do o r k n ob
tidak valid.
Program atau fungsi Anda juga perlu menggunakan string arbitrer lain untuk menerapkan Geobitsizing, dan mencetak atau mengembalikan bahasa Geobitsian yang dihasilkan.
Anda dapat menganggap bahwa string ini hanya berisi baris baru dan ASCII yang dapat dicetak.
Ingat bahwa case huruf harus dipertahankan dari input ke output.
Berikut adalah beberapa contoh lain yang digunakan no pro gr am m ing
sebagai argumen Geobitsizing:
[empty string]
→ [empty string]
i
→ ing
I
→ Ing
Mmmm, mmm... MmmmMMM: m&m!
→ Mmmm, mmm... MmmmMMM: m&m!
(tidak ada perubahan)
People think bananas are great, don't you?
→ Proeoprole thingnok bamnoamnoams amre grreamt, dono't you?
Pet a Puppy
Google Wikipedia
↓
Proet am Prouproproy
Groogrle Wingkingproedingam
Perhatikan bahwa hasilnya harus sama tidak peduli bagaimana argumen itu diatur, misalnya ing pro m no am gr
harus menghasilkan hasil yang sama seperti di atas.
Kode terpendek dalam byte menang.
["no", "pro", "gr", "am", "m", "ing"]
\\b${l}(\\S+)
walaupun itu menghabiskan biaya 5 byte.abra cadabra
,!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Itu harus mencakup semua kasus tepi, dan ada banyak dari mereka jika mencoba untuk menggunakan regexes ...Jawaban:
Jelly , 18 byte
Cobalah online!
Versi alternatif, 15 byte (tidak bersaing)
Fungsi case title Jelly memiliki bug; itu tidak menggunakan kata pertama. Itu sudah diperbaiki, jadi berikut ini berfungsi sekarang.
Kode ini melakukan hal yang sama seperti pada versi yang bersaing, kecuali bahwa
Œt
(judul kasus) menggantikan huruf besar bersyarat yang dicapai olehŒu1¦€
.Bagaimana itu bekerja
sumber
Python 3, 71 byte
Uji di Ideone .
Bagaimana itu bekerja
Dalam Python 3 , built-in
str.translate
mengambil string dan kamus, dan mengganti setiap karakter dalam string yang titik kodenya adalah kunci dari kamus tersebut dengan nilai yang sesuai, yang mungkin berupa string, integer atau None (setara dengan string kosong).Mengubah string kata w menjadi case title (yaitu, huruf kapital huruf pertama dari setiap kata) dan menambahkannya ke hasil
w+' '
menciptakan string kata-kata yang dipisahkan ruang dengan versi huruf kecil dan besar (huruf pertama). Tanpa argumen kedua,str.split
pisahkan di whitespace, jadi(w+' '+w.title()).split()
buat daftar semua kata.Akhirnya, pemahaman kamus
{ord(t[0]):t for t in...}
mengubah setiap kata t menjadi entri kamus dengan kunciord(t[0])
(titik kode huruf pertama) dan nilai t , sehinggastr.translate
akan melakukan penggantian yang dimaksud.sumber
Python,
126999581 byteBanyak terima kasih kepada Dennis:
Sunting1: tidak perlu ditambahkan ke sementara
Edit2:
S
dapat berisi huruf besar ...Sunting3: jangan menduplikasi G
Sunting4: dikompres sedikit lebih dan mendorongnya menjadi satu baris
Sunting5: menggunakan lambda tanpa nama dan
j=join' '
sumber
Pyth, 19 byte
Cobalah online!
sumber
Vim, 46 penekanan tombol
Jelek, dan Meretas.
sumber
Retina , 36 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
sumber
Pyth,
1816Coba di sini
Menentukan fungsi
g
yang melakukan geobitsising. Sebagai sebuah program, ini akan sedikit lebih pendek jika string kedua adalah baris tunggal, tetapi input multiline tidak sepadan:Ide umum di sini adalah untuk memberi judul case string geobitsian dan menambahkannya ke string asli. Kemudian pisahkan itu pada spasi dan untuk setiap string, ambil huruf pertama dan petakan ke string yang diwakilinya. Dengan begitu
X
akan mengubah huruf pertama dari setiap kata menjadi kata penuh.sumber
Python 2,
8378 byteUji di Ideone .
Bagaimana itu bekerja
Kami mengulangi semua karakter c dalam string s .
Kami menambahkan spasi ke string kata w , lalu mencari kejadian huruf c yang lebih rendah , didahului oleh spasi.
Jika kejadian seperti itu ada,
find
akan mengembalikan indeks spasi dalam string' '+w
, yang cocok dengan indeks c di w .w[...:]
dengan demikian mengembalikan buntut w , mulai dari kata dengan huruf pertama c .split()
membelah ekor pada spasi,[0]
memilih potongan pertama (kata) dan[1:]
menghapus huruf pertama.Setelah menambahkan c ke hasil sebelumnya, kami mendapatkan kata yang ditulis dengan benar yang dimulai dengan c .
Jika tidak ada kata yang dimulai dengan c ,
find
akan mengembalikan -1 .Dengan demikian,
w[...:]
menghasilkan karakter terakhir w ,split()
membungkusnya dalam array,[0]
membatalkan pembungkusan, dan[1:]
menghapus satu-satunya karakter dari string.Setelah mendahului c , kita mendapatkan string singleton yang karakternya c , jadi seluruh operasi adalah no-op.
Akhirnya,
''.join
menyatukan semua string yang dihasilkan, mengembalikan versi Geobitsized dari s .sumber
Julia,
7268 byteCobalah online!
sumber
CJam, 19 byte
Uji di sini.
Penjelasan
sumber
JavaScript ES6,
676370 byteUji ini di Firefox. bug membuat ini lebih lama dari yang saya inginkan
Penjelasan
sumber
f("abracadabra")("1Dbw")
kembali"1abracadabraDbracadabrababracadabrawbracadabra"
.Ruby,
656058 byteCobalah online!
sumber