জাভা প্যাকেজটি ছোট করুন


11

সারসংক্ষেপ

একটি সম্পূর্ণ যোগ্য জাভা ক্লাস / প্যাকেজ নাম দেওয়া হয়েছে, আপনি এটি যেমন ছোট করতে হবে:

বিন্দু দ্বারা বিভক্ত প্যাকেজের প্রতিটি অংশের প্রথম অক্ষরটি ছোট করা হবে, শেষ বিভাগ এবং শ্রেণি (এটি উপস্থিত থাকলে) বাদে letter

প্যাকেজের নামগুলি সমস্ত নিম্নতর হবে এবং শ্রেণিটি (এটি উপস্থিত থাকলে) বড় হাতের অক্ষর দিয়ে শুরু হবে এবং আপারকামেলকেস হবে। প্যাকেজগুলি আকারে আসে:

foo.bar.foo

এবং

foo.bar.foo.Class

উদাহরণ

(No Class)
Input com.stackoverflow.main
Output c.s.main

(Class)
Input com.google.parser.Gson
Output c.g.parser.Gson

(Class)
Input com.google.longer.package.TestClass
Output c.g.l.package.TestClass

বিধি

  • বাইটস মধ্যে সংক্ষিপ্ত কোড
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য

1
শ্রেণীর নাম কি সর্বদা শেষ হয়?
শেগি

@ শেগি হ্যাঁ এটি করে
শাওন ওয়াইল্ড


চান fantastic.foo.func.barপরিণত f.f.f.barঅথবা এটি নিশ্চিত করা হয় যে 2 প্যাকেজ একই অক্ষর দিয়ে শুরু করতে পারি না?
এমিগনা

1
f.f.f.barসঠিক হবে।
শন ওয়াইল্ড

উত্তর:


8

রেটিনা , 17 বাইট

\B\w+(\.[a-z])
$1

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

\B         # Start from a position that isn't a word boundary. This ensures that
           # the first letter of the package name is skipped.
\w+        # Match one or more word characters. This is the remainder of the
           # package name which we want to remove.
(          # Capture the next part in group 1, because we want to keep it...
  \.[a-z]  #   Match a period and a lower-case letter. This ensures that we
           #   don't match the package that precedes the class, or the package or
           #   class at the end of the input.
)

এটি এর সাথে প্রতিস্থাপিত হয় $1, এটি হল পিরিয়ড এবং লোয়ার কেস লেটার যা অপসারণ করা উচিত নয়।


আমি আমার প্রথম রেটিনা উত্তর চেষ্টা করতে চেয়েছিলাম কিন্তু রেটিনা গড মার্টিন দেখিয়েছে। যাওয়ার উপায়, আমি!
ম্যাথু রোহ

4

জাভাস্ক্রিপ্ট (ES6), 68 53 বাইট

s=>s.split`.`.map((x,y,z)=>z[y+1]>"["?x[0]:x).join`.`

আমার অন্যান্য সমাধান এখানে দেখুন


চেষ্টা করে দেখুন

f=
s=>s.split`.`.map((x,y,z)=>z[y+1]>"["?x[0]:x).join`.`
i.addEventListener("input",_=>o.innerText=f(i.value))
console.log(f("com.stackoverflow.main"))
console.log(f("c.g.parser.Gson"))
console.log(f("com.google.longer.package.TestClass"))
<input id=i><pre id=o>


1
এটি সহজ করা যেতে পারে s=>s.split`.`.map((x,y,z)=>z[y+1]>"["?x[0]:x).join`.` ?
অ্যারনল্ড

মনে হচ্ছে এটি করতে পারে, ধন্যবাদ, @ আরনাউল্ড।
শেগি

উদ্ভাবনী সমাধান তবে মাত্র 2 টি আপভোট। কিন্তু আমি এই upvote হবে!
অর্জুন 14

2

গণিত, 75 বাইট

#[[;;-3]]~StringTake~1~Join~#[[-2;;]]~StringRiffle~"."&[#~StringSplit~"."]&

বেনামে ফাংশন। ইনপুট হিসাবে একটি স্ট্রিং নেয় এবং আউটপুট হিসাবে একটি স্ট্রিং প্রদান করে।


জেএস কম স্কোর করে ম্যাথমেটিকা ​​?! এটা ঠিক হতে পারে না - আমি কিছু ভুল করেছি, তাই না?
শেগি 11

@ শেগি জাভা 7 জেএস এবং ম্যাথমেটিকার চেয়ে কম স্কোর করছেন? এটা ঠিক হতে পারে না - আমি কিছু ভুল করেছি, তাই না? (এটি প্রতিহত করতে পারেনি;;) সমস্ত কৃতিত্ব মার্টিন ইন্ডিয়ার রেটিনার পোর্ট বিটিডব্লুকে যায় ।
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুইজসেন, মার্টিনের উত্তরের প্রতি আমার দৃষ্টি আকর্ষণ করার জন্য ধন্যবাদ - আমি এখন জাভা স্কোর জেএসের সমস্যা সমাধান করেছি! : ডি
শেগি





1

জাভাস্ক্রিপ্ট (ES6), 36 বাইট

মার্টিনের রেটিনা জবাবের আরেকটি বন্দর । আমার অন্যান্য সমাধান এখানে দেখুন

s=>s.replace(/\B\w+(\.[a-z])/g,"$1")

f=
s=>s.replace(/\B\w+(\.[a-z])/g,"$1")
i.addEventListener("input",_=>o.innerText=f(i.value))
console.log(f("com.stackoverflow.main"))
console.log(f("c.g.parser.Gson"))
console.log(f("com.google.longer.package.TestClass"))
<input id=i><pre id=o>


একটি ভাল সমাধান কিন্তু কোন অগ্রগতি। এটি 0 স্কোরের বেশি দাবিদার। আমি এটা 1 এ পরিণত হবে! :)
অর্জুন

1

ভি , 9 বাইট

Í쓃…®õÀ!

এটি অনলাইন চেষ্টা করুন!

Hexdump:

00000000: cdec 9383 85ae f5c0 21                   ........!

এটি ভি এর স্বাক্ষর রেজেক্স সংক্ষেপণের একটি দুর্দান্ত উদাহরণ ।

ব্যাখ্যা:

Í          " Remove every match on every line:
 ì         " A lower case letter
  “ …      "   *ONLY MATCH THIS PART:*
   ƒ       "   As few characters as possible
      ®    " Followed by a dot
       õÀ! " Not followed by an uppercase letter


0

সেড , 57 22 বাইট

আমি প্রত্যাশা করলাম সমাধান এর চেয়ে কিছুটা কম হবে ...

সম্পাদনা:

সংক্ষিপ্ত সমাধানটি মার্টিন এন্ডারের উত্তর থেকে রেজেেক্স ব্যবহার করে ।

-rপতাকার জন্য 21 বাইট সোর্সকোড +1 বাইট (বা -Eবিএসডি সেডের জন্য পতাকা)।

s|\B\w+(\.[a-z])|\1|g

আপনি কি আমার রেটিনা উত্তর থেকে বিকল্পটি ব্যবহার করতে পারবেন না? s|\B\w+(\.[a-z])|\1|g?
মার্টিন ইন্ডার

@ মার্টিনএেন্ডারে আমি কারও জবাব প্রথমে না দেখে ওয়ান-লাইনার নিয়ে আসতে চেষ্টা করার জন্য বেশ কিছুটা সময় ব্যয় করেছি কিন্তু ব্যর্থ হয়েছি। আমি মনে করি এটি করার আরও ছোট উপায় নেই, তাই আমি আপনারটি ব্যবহার করব। ধন্যবাদ!
ম্যাক্সিম মিখায়লভ

0

হাস্কেল , 58 বাইট

f s|[(a:t,p:x:r)]<-lex s=a:concat[t|x<'a']++p:f(x:r)|1<3=s

এটি অনলাইন চেষ্টা করুন! ব্যবহার: f "some.string"

lexহাস্কেল টোকেন হিসাবে একটি স্ট্রিংকে পার্স করে, সুতরাং lex "some.string"ফিরে আসে [("some",".string")]fস্ট্রিংয়ে টোকেনগুলির উপরে পুনরাবৃত্তি ঘটে এবং সর্বদা aবর্তমান টোকেনের প্রথম চরটি সংযোজন করে , তবে বাকী tটোকেন কেবল তখনই যদি কোলনের পরে অবশিষ্ট স্ট্রিংটি pবড় হাতের অক্ষর দিয়ে শুরু হয়, তা x<'a'। যদি প্যাটার্ন ম্যাচটি ব্যর্থ হয় তবে আমরা শেষ টোকেনে পৌঁছেছি এবং কেবল ফিরে আসছি s

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.