কোডিং কনভেনশন রূপান্তর


22

কোডিং গল্ফটিতে আপনার একটি কোডিং কনভেনশন শিরোনামকে কেয়ার_সেস_উইথ_ফাউন্ডসকে রূপান্তর করতে হবে। এবং বিপরীতভাবে!

সবিস্তার বিবরণী

নিম্নলিখিত পদ্ধতিতে আবরণ পরিবর্তন করুন:

  • আন্ডারস্কোর চরিত্রটি যদি একটি সীমানার হয় তবে কোনও সীমানা ছাড়াই আচ্ছাদনটিকে শিরোনাম কেসে পরিবর্তন করুন।
  • যদি কোনও সীমানাবিহীন একাধিক শব্দ থাকে তবে আচ্ছাদনটি লোয়ার কেসে পরিবর্তন করুন এবং ডিলিমিটার হিসাবে আন্ডারস্কোর চরিত্র যুক্ত করুন।
  • শুধুমাত্র একটি শব্দের ক্ষেত্রে (বা একটি চরিত্রের ক্ষেত্রে): শব্দটি ছোট হাতের সাথে শুরু হলে শিরোনাম কেসিতে আবরণ পরিবর্তন করুন; যদি শব্দটি উপরের কেস দিয়ে শুরু হয় তবে কেসিং কে লোয়ার কেসে পরিবর্তন করুন।

অনুমোদিত অক্ষর:

  • শুরু থেকে শেষ
  • শুরু থেকে শেষ
  • আন্ডারস্কোর ( _)।

মিশ্র কেসযুক্ত শব্দের সাথে ইনপুট নিষিদ্ধ। অস্বীকৃত মামলার উদাহরণসমূহ:

  • Coding_Convention_Conversion
  • a_BC

উদাহরণস্বরূপ কেস

Input                        | Expected Output
===========================================================
CodingConventionConversion   | coding_convention_conversion
coding_convention_conversion | CodingConventionConversion
abc                          | Abc
Abc                          | abc
ABC                          | a_b_c
a_b_c                        | ABC
a                            | A
A                            | a

বিধি

  • এটা ব্যবহার করা অনুমতি দেওয়া হয় ToUpper, ToLowerএবং ToTitleCaseফাংশন।
  • নিয়মিত এক্সপ্রেশন ব্যবহারের অনুমতি দেওয়া হয়।
  • : সংক্ষিপ্ততম কোড বাইট জেতে!

একটি ToTitleCaseফাংশন ব্যবহার ঠিক আছে? আপনি নির্দিষ্ট করেন নি, তাই আমি ধরে নিলাম এটি ঠিক আছে।
জাস্টিন

@ জাস্টিন: সত্যিই ভাল প্রশ্ন। আসুন এটা আরো মজা করতে এবং ToTitleCase ফাংশন :) নামঞ্জুর
দেরিউজ Wozniak

ডার্ন ... আমার সমাধান এটির উপর নির্ভর করে
জাস্টিন

1
@ জাস্টিন: ঠিক আছে - আমি শুরুতে এটি নির্দিষ্ট করেছিলাম না, সুতরাং সেই ক্ষেত্রে - আসুন যাইহোক এটি অনুমতি দিন।
দারিউস ওজনিয়াক

উত্তর:


4

পাইথ, 25 বাইট 29 33 35 40

@ ডেনিসকে 2 বাইট সংরক্ষণ করা হয়েছে

@ ফ্রাইআমডেজিগম্যানকে 4 টি বাইট সংরক্ষণ করা হয়েছে

?rIz0smrd4cz\_tsXzrG1*\_G

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


আপনার লিঙ্কটি আপডেট করা দরকার।
isaacg

আমি যখন "abc" কে একটি ইনপুট হিসাবে রাখার চেষ্টা করি তখন এটি আউটপুট হিসাবে "বিসি" দেয়। বাগ? :)
দারিউস ওজনিয়াক

কি @ DariuszWoźniak খেয়াল, আপনি থেকে আপনার অবস্থা পরিবর্তন করতে পারেন ঠিক করতে /z\_করতে rIz0। আমি আরও বিশ্বাস করি যে আমি tsXzrG1_Mcj\_G2
অ্যাড্ডারস্কোর

আহ, এটি খুঁজে পেয়েছে:tsXzrG1*\_G
FryAmTheEggman

8

জल्फ, 35 বাইট

@ Cᴏɴᴏʀ O'Bʀɪᴇɴ 1 বাইট ধন্যবাদ সংরক্ষণ । এটি আইএসও 8859-7 এ এনকোড হয়েছে।

? hI'_ΜGI'_dpyH0pxRGIL0"(?=[A-Z])'_

ওহো আমার প্রথম জल्फ প্রোগ্রাম!

ব্যাখ্যা

   // I = input
? hI'_                              // If input contains _
       GI'_                          // Split on _
      Μ    d                         // Loop, then join
            pyH0                     // Make the first character uppercase
                                    // ELSE...
                  RGIL0"(?=[A-Z])    // Split *after* all uppercase chars
                                 '_  // join with _ 
                px                   //Make lowercase

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


আপনি শেষে স্ট্রিং বিচ্ছেদ ব্যবহার করতে পারেন, তাই এটি হয়ে যায় "(?=[A-Z])'_। স্ট্রিংটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়।
কনর ও'ব্রায়ান

@ CᴏɴᴏʀO'Bʀɪᴇɴ ওহ, দুর্দান্ত, ধন্যবাদ!
ডাউনগোট

7

রেটিনা , 37

চারটি বাইট সংরক্ষণের জন্য @ মার্টিনব্যাটনারকে ধন্যবাদ!

^|[A-Z]
_$0
T`Ll`lL`_.
^_|_(?=[A-Z])

(অনুচ্ছেদে নতুন লাইনটি দ্রষ্টব্য।)

এটি অনলাইনে চেষ্টা করুন। নোট এতে m`প্রতিটি ইনপুট লাইন পৃথকভাবে চিকিত্সা করার জন্য কয়েকটি লাইন কনফিগার করার জন্য অতিরিক্ত অন্তর্ভুক্ত করে যাতে সমস্ত পরীক্ষাগুলি একসাথে চালানো যেতে পারে। এটি প্রশ্নের প্রয়োজন হয় না, সুতরাং এগুলি স্কোর হিসাবে গণনা করা হয় না।

  • _ইনপুট শুরুতে বা বড় হাতের অক্ষরের আগে লাইন 1 এবং 2 সন্নিবেশ করান । সমস্ত শব্দ এখন- _বিভক্ত, ক্ষেত্রে নির্বিশেষে।
  • লাইন 3 প্রতিটি শব্দের মধ্যে প্রথম চিঠির ক্ষেত্রে অদলবদল।
  • 4 এবং 5 লাইনগুলি ইনপুটটির _শুরুতে বা বড় হাতের অক্ষর দ্বারা অনুসরণ করা হয় remove

এটি চারটি বাইট সংরক্ষণ করে: retina.tryitonline.net/…
মার্টিন এন্ডার

এছাড়াও আপনি শেষটি বাদ দিয়ে ?=এবং সেই পর্যায়ে প্রতিস্থাপন করে খালি লাইনটি অনুসরণ করতে পারবেন $1(যদিও বাইট গণনাটি প্রভাবিত করে না)।
মার্টিন এেন্ডার

@ মার্টিন খুব ভাল - ধন্যবাদ!
ডিজিটাল ট্রমা

5

জিএনইউ শেড, 46

2 টোপ বাঁচানোর জন্য @ টবিস্পাইটকে ধন্যবাদ!

স্কোরটিতে -E(বা -r) বিকল্পের জন্য +1 অন্তর্ভুক্ত রয়েছে sed

s/(^|_)([a-z])/\u\2/g
t
s/[A-Z]/_\l&/g
s/^_//

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

মোটামুটি সোজা সোজা:

  • লাইন 1 রেখার শুরুতে বিকল্প বা _তারপরে অক্ষরের উপরের অক্ষরের সাথে একটি ছোট হাতের অক্ষর অনুসরণ করে। gপতাকা sসঞ্চালিত পাওয়া প্রতিটি নিদর্শনের জন্য এই প্রতিকল্পন
  • t:উপরের প্রতিস্থাপনের জন্য কোনও মিল থাকলে নামবিহীন লেবেলে ঝাঁপ দেয় । এই লেবেলটি স্পষ্টতই শেষে রয়েছে।
  • অন্যথায় সমস্ত বড় হাতের অক্ষর _সেই চিঠির নিম্নের সাথে প্রতিস্থাপিত হয়
  • এটি _প্রথম চিঠির আগে একটি শীর্ষস্থানীয় ছেড়ে যায় । s/^_//এটি সরিয়ে দেয়

1
@ টবি ধন্যবাদ -Eআমার জিএনইউ সেড ৪.২.২ (উবুন্টু ১৪.০৪.৩) এ কাজ করে, যদিও এটি ম্যান পেজে নেই। আমি কোথাও পড়েছি [উদ্ধৃতি আবশ্যক] এটি -Eএকটি নতুন পিক্স অপশন যা আনুষ্ঠানিকভাবে জিএনইউ শেডে একটি নতুন রিলিজে যুক্ত হবে, তবে ইতিমধ্যে সেখানে অনানুষ্ঠানিকভাবে রয়েছে। নির্বিশেষে, -rআপনার পক্ষে কাজ না করলে সঠিক কাজ -Eকরে।
ডিজিটাল ট্রমা

@Toby লাইন sed / sed.c এর 280-282 হয় /* Undocumented, for compatibility with BSD sed. */ case 'E': case 'r':
ডিজিটাল ট্রমা

@ ডিজিটাল - আমার ভুল হয়েছে; আমার সেড একটি প্রতিশব্দ হিসাবে গ্রহণ করে । আমি কোনও ন্যূনতম প্রোগ্রামটি সঠিকভাবে পাস করছিলাম না-E-rsed -E -e Q
টবি স্পিড

4

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

s=>s.replace(/[A-Z]|(^|_)(.)/g,(c,_,l,i)=>l?l.toUpperCase():(i?"_":"")+c.toLowerCase())

ব্যাখ্যা

রেজেক্সের কোন অংশটি মিলেছে তার উপর নির্ভর করে এটি বিপরীত ক্ষেত্রেটির সাথে ম্যাচটি প্রতিস্থাপন করে।

s.replace(
  /[A-Z]|(^|_)(.)/g,
  (c,_,l,i)=>
    l?
      (i?"_":"")+c.toLowerCase()
    :l.toUpperCase()
)

পরীক্ষা

var solution = s=>s.replace(/[A-Z]|(^|_)(.)/g,(c,_,l,i)=>l?l.toUpperCase():(i?"_":"")+c.toLowerCase())
<input type="text" id="input" value="coding_convention_conversion" />
<button onclick="result.textContent=solution(input.value)">Go</button>
<pre id="result"></pre>


2

রুবি, 101 87 75 বাইট

->s{s.gsub(/^.|[A-Z]/,'_\0').gsub(/_./,&:swapcase).gsub(/_(?=[A-Z])|^_/,'')}

দুর্ভাগ্যক্রমে, এটি রেটিনা সমাধানের মতো ঠিক একই জিনিসটি করে, কারণ যে পদ্ধতিটি আমি নিয়ে এসেছি তার চেয়ে আরও ছোট হওয়া শুরু হয়েছিল।


2

পাইথন 3, 130 বাইট

ক্যাপগুলিতে বিভক্ত করার জন্য রেজেক্স ব্যবহার করে দ্রুত এবং নোংরা প্রচেষ্টা। অত্যন্ত নিষ্ঠুর শক্তি: কেউ যদি অন্যরকম পদ্ধতির সাথে আসতে পারে তবে আমি নিশ্চিত যে এটি মারধর করা যেতে পারে।

import re
lambda s:('_'.join(re.findall('[A-Z][a-z]*',s)).lower(),''.join([a[0].upper()+a[1:]for a in s.split('_')]))[s.islower()]

2

পিএইচপি 160 বাইট

সংক্ষিপ্ততম নয় তবে সম্পূর্ণতার জন্য এখানে আমার পিএইচপি-তে আমার সমাধানটি রূপান্তরিত করার জন্য স্ট্রিং ধরে রেখেছে:

trim(preg_replace_callback('/((^[a-z]|_[a-z])|([A-Z]))/',function($m){return empty($m[2])?'_'.strtolower($m[3]):strtoupper(str_replace('_','',$m[2]));},$s),'_')

1
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্ট্যাক এক্সচেঞ্জে আপনাকে স্বাগতম। এমন একটি ভাষায় কিছু পোস্ট করার জন্য যা আপনি জানতেন যে জিতবে না। কোড-গল্ফ চ্যালেঞ্জগুলি বেশিরভাগ ভাষাগুলির মধ্যে থাকে, সুতরাং একটি নন-গল্ফিং ভাষা ব্যবহার করা ভাল। +1 d: -D
wizzwizz4

1

পার্ল 6 ,  73 72 71   68 বাইট

{.comb(/<:Lu><:Ll>*|<:Ll>+/).map({/<:Lu>/??.lc!!.tc}).join('_'x?/<:Lu>/)} # 73
{.comb(/<:Lu><:Ll>*|<:L>+/).map({/<:Lu>/??.lc!!.tc}).join('_'x?/<:Lu>/)}  # 72
{/<:Lu>/??S:g/(^)?(<:Lu>)/{$0||'_'}$1.lc()/!!S:g/[^|_](<:Ll>)/$0.tc()/}   # 71
{.comb(/<:Lu><:Ll>*|<:L>+/).map({/<:Lu>/??.lc!!.tc}).join('_'x!/_/)}      # 68

ব্যবহার:

# give it a lexical name
my &code = {...}

for <CodingConventionConversion coding_convention_conversion abc Abc ABC a_b_c a A>
{ say .&code }
coding_convention_conversion
CodingConventionConversion
Abc
abc
a_b_c
ABC
A
a

ব্যাখ্যা:

{
  .comb( / <:Lu><:Ll>* | <:L>+ / ) # grab the "words" only
  .map({
      /<:Lu>/ # if the word has uppercase
    ??
      .lc     # lowercase the whole word
    !!
      .tc     # otherwise titlecase the word
   })
  .join(  # join the words
    '_'   # with '_'
    x     # repeated
    !/_/  # zero times if it had a _, otherwise once
  )
}

আপনি ভাবতে পারেন যে আমি কেন একটি চরিত্র শ্রেণীর পরিবর্তে ইউনিকোড বৈশিষ্ট্যগুলি ( <:Lu>, <:Ll>) ব্যবহার করেছি। ইন পার্ল 6 তারা আর বানান ঠিক আছে [a-z]তারা বানান ঠিক আছে <[a..z]>যা বড় হিসাবে 1.6 গুণ বেশি। বন্ধনীগুলি [ … ]নন-ক্যাপচারিং গ্রুপিংয়ের জন্য ব্যবহৃত হয় যা (?: … )পার্ল 5 এর মতো বানান ।


1

জাপট, 40 বাইট

UfV="%A" ?UrV@'_s!Y +Xv} :Ur"^.|_."_sJ u

এটি অনলাইন পরীক্ষা!

কিভাবে এটা কাজ করে

           // Implicit: U = input string
UfV="%A"   // Set variable V to the string "\\A", and get all matches in U.
?          // If the list is not null:
UrV@     } //  Replace each match X and its index Y with this function:
'_s!Y +Xv  //   Return "_".slice(!Y) (1 for Y=0, 0 for anything else) + X.toLowerCase().
:          // Otherwise:
Ur"^.|_."  //  Replace the char at the beginning and each char following an underscore with:
_sJ u      //   The last char of the match (the letter) .toUpperCase().

1

পার্ল 5, 42 বাইট

40 বাইট প্লাস 2 এর জন্য -p(ধন্যবাদ, দেব-নাল )

s/[A-Z]/_\l$&/g||s/(^|_)(.)/\u$2/g;s/_//

উইন্ডোজে পার্ল এবং এমইংডাব্লু 32 ব্যবহার করে আমি কোনও আউটপুট পাই না, আমি কী অনুপস্থিত?
চ্যাটারঅন

@ চেটারওন আমি জানি না মিংডব্লিউ 32 কী, তবে স্ট্রবেরি পার্লে এটি আমার পক্ষে ভাল কাজ করেছে। -Eপরিবর্তে ব্যবহার করুন -e
msh210

1

𝔼𝕊𝕄𝕚𝕟 3, 15 অক্ষর / 32 বাইট (অ-প্রতিযোগিতামূলক)

⟮ѨDZï⟯≠ï?Ⅰ:ѨȎѨƎï

Try it here (Firefox only).

v3 এই চ্যালেঞ্জের পরে প্রকাশিত হয়েছিল, একগুচ্ছ বাগফিক্স এবং লাইব্রেরি আপডেট।

ব্যাখ্যা

এটি কেবল বিল্টিনগুলির একটি ম্যাসআপ।

⟮ѨDZï⟯≠ï?Ⅰ:ѨȎѨƎï // implicit: ï=input
⟮ѨDZï⟯≠ï?        // check if ï is NOT in snake_case
       Ⅰ       // if so, then convert to snake_case
        :ѨȎѨƎï // otherwise, convert to camelCase and make the first letter UPPERCASE


1

পাইথন 3 , 86 বাইট

lambda s,u='_':''.join([u[i>u:]+i.lower()for i in(s<u)*s]or[u]+s.title().split(u))[1:]

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

পাইথন 2 এও কাজ করে

_(95) এর জন্য আসকি মানটি বড় হাতের (65-90) এবং ছোট হাতের অক্ষরের (97-122) অক্ষরের মধ্যে ঠিক যে সুবিধাজনক স্ট্রিংয়ের তুলনা করার সুযোগ দেয় সেটিকে ব্যবহার করা।


1

ফোর্থ (গফোর) , 129 বাইট tes

: f bounds dup c@ 32 xor emit 1+ ?do i c@ '_ < if ." _"i c@ 32 + emit then i c@ '_ > if i 1- c@ '_ = 32 * i c@ + emit then loop ;

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

কোড ব্যাখ্যা

: f              \ start a new word definition
  bounds         \ convert string address and length to beginning and ending address
  dup c@         \ get the first character
  32 xor emit    \ convert to the opposite case and output
  1+             \ add 1 to beginning of string (skip starting char)
  ?do            \ begin counted loop over string character addresses
    i c@ '_ <    \ check if char is uppercase 
    if           \ if it is:
      ." _"      \ output underscore
      i c@       \ get current char
      32 + emit  \ convert to lowercase and output
    then         \ end if block
    i c@ '_ >    \ check if lowercase (not '_')
    if           \ if it is:
      i 1- c@    \ get the previous character
      '_ = 32 *  \ if it's an underscore, multiply by 32 (true = -1 in forth)
      i c@ +     \ add result to current char (make uppercase if previous was '_')
      emit       \ output resulting char
    then         \ end if block
  loop           \ end loop
;                \ end word definition
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.