YYYYMM কে MMMYY এ রূপান্তর করুন


54

এই SO প্রশ্নের উপর ভরসা ।

চ্যালেঞ্জ বরং সহজ: বিন্যাসে ফরম্যাটে YYYYMMএটির একটি তারিখ সময় দেওয়া হয় MMMYY

নিয়মাবলী:

  • ইনপুটটি একটি সংখ্যা বা একটি স্ট্রিং হবে ঠিক 6 টি অক্ষরের দীর্ঘ, কেবলমাত্র সংখ্যার সমন্বয়ে।
  • শেষ দুটি অঙ্কের মধ্যে 01এবং হবে 12
  • আউটপুট রূপে হওয়া উচিত MMMYY, যেখানে MMMমাস (নীচে) জন্য বড় হাতের তিনটি অক্ষর কোড উপস্থাপন করে এবং YYপ্রতিনিধিত্ব করে দুই শেষের ডিজিট YYYYইনপুট অংশ।

সংশ্লিষ্ট কোড সহ মাসের তালিকা:

MM    MMM
01    JAN
02    FEB
03    MAR
04    APR
05    MAY
06    JUN
07    JUL
08    AUG
09    SEP
10    OCT
11    NOV
12    DEC

উদাহরণ:

Input     Output
201604    APR16
200001    JAN00
000112    DEC01
123405    MAY34

5
এই প্রশ্নটি খুব সুষম। ম্যানুয়াল পার্সিং এবং তারিখ লাইব্রেরি উভয়ই সমাপ্ত হয়, অন্তত পাইথনে।
বকুল

10
গতকাল, আমি SO লোগোর পাশে এইচএনকিউতে "YYYYMM থেকে MMMYY রূপান্তর করুন" দেখেছি। এখন আমি পিসিজি লোগোর পাশে একই শিরোনামটি দেখছি। আমি খুব বিভ্রান্ত হয়ে পড়েছিলাম :)
বিড়াল

উত্তর:


20

এমএটিএল, 18 14 13 বাইট

4e!Z{Zc12XOXk

ইনপুটটি স্ট্রিং হিসাবে সরবরাহ করা হয় (একক উদ্ধৃতিতে আবদ্ধ)।

এই সংস্করণটি এমএটিএল-তে কেবল এমএটিএলএবে চলেছে যেহেতু ম্যাটল্যাব স্বয়ংক্রিয়ভাবে বিশ্লেষণ করতে সক্ষম datestr('2016 04')

ব্যাখ্যা

        % Implicitly grab input as a string
4e!     % Reshape input to be 2 x 4 (puts the year in row 1 and month in row 2)
Z{      % Place each row in a separate cell
Zc      % Join them together using a space to create 'yyyy mm' format
12      % Number literal, pre-defined datestring of 'mmmyy'
XO      % Convert from serial date number to string using this format
Xk      % Convert to uppercase
        % Implicitly display

এখানে একটি 18 বাইট সংস্করণ যা অক্টোবায় কাজ করে (এবং সেইজন্য অনলাইন অনুবাদক)

'yyyymm'2$YO12XOXk

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

সমস্ত পরীক্ষার ক্ষেত্রে পরিবর্তিত সংস্করণ

ব্যাখ্যা

            % Implicitly grab input as a string
'yyyymm'    % Push the format string as a string literal
2$YO        % Convert to a serial date number
12          % Number literal, pre-defined datestring of 'mmmyy'
XO          % Convert from serial date number to string using this format
Xk          % Convert to uppercase
            % Implicitly display

3
আমি দেখতে পাচ্ছি না কীভাবে এটি এমনভাবে পরাজিত হতে পারে .. gg
আদনান

20

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

from time import*
lambda s:strftime("%b%y",strptime(s,"%Y%m")).upper()

এটি অন্তর্নির্মিত strftimeএবং strptimeফাংশনগুলি ব্যবহার করে ।

আরও 1 বাইটের জন্য, এখানে এমন একটি সংস্করণ রয়েছে যা স্ট্রিংটিকে ম্যানুয়ালি পার্স করে:

lambda s:" JFMAMJJASONDAEAPAUUUECOENBRRYNLGPTVC"[int(s[4:])::12]+s[2:4]

এটি মাসের নামগুলি আকর্ষণীয় উপায়ে এনকোড করে (একটি বাইট সংরক্ষণের জন্য হেনরি গমেরসালকে ধন্যবাদ)।


11
সেই ম্যানুয়াল পার্সিং পাগল।
মরগান থ্রাপ

@ মরগানথ্রাপ আমি এই উত্তরটি থেকে ধারণা পেয়েছি ।
বেকুল

1
তোমার ম্যানুয়াল সংস্করণ পাইথন 2 69 বাইট মধ্যে সম্পন্ন করা যাবে যদি আপনি ইনপুট হিসাবে একটি সংখ্যা নিতে: lambda n:"JFMAMJJASONDAEAPAUUUECOENBRRYNLGPTVC"[n%100-1::12]+`n`[2:4]
xnor

1
যদিও এটি একটি বাইট হারিয়ে ফেলেছে:lambda s:" JFMAMJJASONDAEAPAUUUECOENBRRYNLGPTVC"[int(s[4:])::12]+s[2:4]
হেনরি গোমারসাল

1
@ a25bedc5-3d09-41b8-82fb-ea6c353d75ae - "আমদানির সময়" আপনাকে 6 টি অক্ষর বাঁচাতে পারে তবে আপনার ব্যয় হবে 10 ("সময়", দ্বিগুণ)
TLW


18

পাওয়ারশেল ভি 2 +, 49 46 বাইট

(date $args[0].insert(4,'-')-U %b%y).ToUpper()

3 জোড় বাঁচানোর জন্য জোয়িকে ধন্যবাদ!

কমান্ড-লাইন ইনপুটটির মাধ্যমে $args[0]সুস্পষ্ট স্ট্রিং (উদাহরণস্বরূপ '201604') হিসাবে ইনপুট নেয় । উপযুক্ত জায়গায় string.Insert()একটি রাখার জন্য ফাংশনটি ব্যবহার করে -এবং ফলস্বরূপ স্ট্রিংটি তিন মাসের শর্টহ্যান্ড প্লাস দুই-অঙ্কের বছরের নির্দিষ্ট করে ফর্ম্যাট প্যারামিটার সহ Get-Dateসেমিডলেটে ইনপুট তৈরি -Uকরে। আমরা প্যারেনস এ এ্যাপ্যাপুলেট করি এবং .ToUpper()আউটপুট স্ট্রিংকে মূলধন করতে একটিতে ট্যাক করি । সেই স্ট্রিংটি পাইপলাইনে রেখে গেছে এবং মুদ্রণ জড়িত।

এছাড়াও, যেমন উল্লেখ করা হয়েছে, এটি স্থানীয়-সংবেদনশীল। এখানে লোকেল সম্পর্কিত তথ্য যা আমি এটি ব্যবহার করি যেখানে এটি সঠিকভাবে কাজ করে।

PS C:\Tools\Scripts\golfing> get-culture

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)

আপনার উদ্ধৃতি দেওয়ার দরকার নেই MMMyy, যেহেতু এটি কোনও সেন্টিমলেটতে একটি সাধারণ যুক্তি। আপনি কেবল ব্যবহার করতে পারেন -UFormat %b%y, -u %b%yপরিবর্তে, যা এমনকি ছোট। পার্শ্ব দ্রষ্টব্য: এই সমাধানটি লোকাল-সংবেদনশীল (যা আমি ব্যক্তিগতভাবে অপছন্দ করি) তবে এটির জন্য অ্যাকাউন্টটি গ্রহণ করতে বেশ খানিকটা দীর্ঘতর হবে admitted
জোয়

-UFormatপরিবর্তে দুর্দান্ত কল । ধন্যবাদ! আমি চারপাশের উদ্ধৃতিগুলি সম্পর্কেও জানতাম না MMMyy- এটি ভবিষ্যতের জন্য জেনে রাখা ভাল।
অ্যাডমবর্কবার্ক

8

রেটিনা , 71 70 বাইট

1 বাইট সংরক্ষণের জন্য Sp3000 ধন্যবাদ।

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে। পেছনের লাইনফিডটি তাৎপর্যপূর্ণ।

(..)(..)$
DECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJANXXX$2$*¶$1
+`...¶

R-6`.

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

ব্যাখ্যা

201604উদাহরণ হিসাবে গ্রহণ :

(..)(..)$
DECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJANXXX$2$*¶$1

এটি মাসের সাথে বছরের শেষের দুটি অদলবদলকে অদলবদল করে লাইনফিড ব্যবহার করে আনারীতে মাসটি প্রসারিত করে, এবং মাসের তালিকাকে বিপরীতে প্রেরণ করে যাতে আমরা পেতে পারি:

20DECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJANXXX¶¶¶¶16

যেখানে লাইনফিডগুলি প্রতিনিধিত্ব করে (0x0A)।

+`...¶

এখন আমরা বারবার তিনটি নন-লাইনফিড অক্ষর এবং তারপরে একটি লাইনফিড সরিয়ে ফেলি। এটিই আমরা প্রতিমাসে প্রতিনিধিত্ব করে প্রতিটি লাইনফিডের জন্য শেষ থেকে কয়েক মাসের তালিকাটি খাই:

20DECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJANXXX¶¶¶¶16
20DECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJAN¶¶¶16
20DECNOVOCTSEPAUGJULJUNMAYAPRMARFEB¶¶16
20DECNOVOCTSEPAUGJULJUNMAYAPRMAR¶16
20DECNOVOCTSEPAUGJULJUNMAYAPR16

এই কারণেই আমরা এটি প্রবেশ করিয়ে দিয়েছি XXX: যেহেতু মাসগুলি গণনা শুরু করে 1, আমরা সর্বদা কমপক্ষে তিনটি অক্ষর এমনকি জানুয়ারীর জন্য সরিয়ে ফেলব।

R-6`.

অবশেষে, আমরা শেষ থেকে 6th ষ্ঠ অক্ষর পর্যন্ত সমস্ত কিছু সরিয়ে ফেলি। অন্য কথায় আমরা কেবল শেষ পাঁচটি অক্ষর রাখি।


এটা বেশ ডাং চালাক।
অ্যাডমবর্কবার্ক

7

সিজেম, 50 46 বাইট

q2/1>~i("4H~0ë~³!ò²×¶7Ö"256b25b'Af+3/=\

এটি অনলাইনে চেষ্টা করুন। কয়েকটা বাইট সংরক্ষণের জন্য স্ট্রিংটি সংকোচনের জন্য মার্টিন ইন্ডারকে ধন্যবাদ।

ব্যাখ্যা

q2/  e# Get input and divide it into groups of 2, like ["20" "16" "04"]
1>~  e# Discard the first item and dump the remaining array to the stack
i(   e# Convert the top value (month) to an integer and decrement it, because
     e# arrays are zero-indexed
"..."256b25b e# Convert this string from base-256 to base-25
'Af+ e# "Add" a capital A to each number to get the letters
3/   e# Divide into groups of 3 to make an array of month names
=\   e# Get the requested month and swap the elements to put the year on
     e# top, so it is printed last


6

জাভা 7, 137 টি অক্ষর (161 বাইট)

String d(String i){return Integer.toString("憯䷳烣㘿烪摿摽㛨近筍矯䏔".charAt(Integer.parseInt(i.substring(4))-1),36).toUpperCase()+i.substring(2,4);}

প্রতিটি মাসের নাম বিবেচনা করুন (জ্যান, ফেবি ইত্যাদি ...) বেস ৩ 36 এর একটি সংখ্যা এবং এটি ইউনিকোড প্রতীককে অনুরূপভাবে এনকোড করে। তারপরে স্ট্রিংটিকে এনকোড করে বেস 36 এ আবার এটি সম্পর্কিত প্রতীক পান এবং এর পরে কিছু সরল স্ট্রিং ম্যানিপুলেশন।

সামান্য শৃঙ্খলাবদ্ধ:

String d(String input){
return 
  Integer.toString("憯䷳烣㘿烪摿摽㛨近筍矯䏔" // encoded month names
  .charAt(Integer.parseInt(input.substring(4))-1),36) // get a symbol from encoded names at position input[4:], decode it to base 36 value
  .toUpperCase()+input.substring(2,4); // get it to upper case and add year
}

আপনি এটি এখানে চলমান দেখতে পাবেন: https://ideone.com/IKlnPY


5

পাইথন, 83 বাইট

from datetime import*
lambda x:datetime.strptime(x,'%Y%m').strftime('%b%y').upper()

আমি আপনার কাছে প্রায় একইরকম একটি উত্তর পোস্ট করেছি। আমি আপনারটি দেখতে পাইনি কারণ উত্তরটি লেখার জন্য কিছুটা সময় নিয়েছিল। আপনি যদি আমার খনি মুছতে চান তবে আমি করব, বা আপনি কিছু অতিরিক্ত বাইট বন্ধ করতে আমার ব্যবহার করতে পারেন।
বকুল

1
এটা ঠিক আছে, আপনি আমাকে 13 বাইট দ্বারা মারলেন, আমি স্বীকার করব। আমি আপনার ম্যানুয়াল উত্তরও পছন্দ করি।
অ্যাটলজিস্ট

5

কোটলিন, 100 বাইট

fun f(d:String)=SimpleDateFormat("MMMyy").format(SimpleDateFormat("yyyyMM").parse(d)).toUpperCase()

জাভা সিম্পলডেট ফরমেটের খুব সোজা এগিয়ে ব্যবহার use


1
হুম, আমি কোটলিনকে চিনি না, তবে এটি জাভা থেকে উদ্ভূত, তাই আপনি কি SimpleDateFormat(যেমন import java.text.*;) এর আমদানিটি অন্তর্ভুক্ত করবেন না ?
কেভিন ক্রুইজসেন

যেহেতু চ্যালেঞ্জটি আউটপুট চেয়েছে, তাই আমি ধরে নেব যে আপনার ফাংশনের অংশ হিসাবে একটি মুদ্রণ আবশ্যক।
ওয়েলস 21

5

ম্যাটল্যাব / অষ্টাভে, 42 বাইট

@(x)upper(datestr(datenum(x,'yyyymm'),12))

একটি বেনামী ফাংশন নামে তৈরি করা হয় ansযে একটি স্ট্রিংটি তারিখটিকে উপস্থাপিত সঙ্গে বলা হয়: ans('201604')

অনলাইন ডেমো

এই সমাধানটি datenumইনপুট তারিখটিকে একটি ক্রমিক তারিখ সংখ্যায় রূপান্তর করতে এবং তারপরে datestrপূর্বনির্ধারিত আউটপুট স্পেস দিয়ে mmmyy( 12) এর প্রয়োজনীয় বিন্যাসে স্ট্রিং প্রতিনিধিত্ব করে। অবশেষে, আমরা upperএটিকে পরিবর্তনের জন্য ব্যবহার করি MMMYYযেহেতু বড় হাতের এক মাস আউটপুট বিকল্প নয়।


1
বাহ, জিজে সবাইকে বেহালার ভাষায় মারধর করছে!
ডাউনওয়েট

5

05AB1E, 51 42 41 বাইট

2ô¦`ï<•r–ºþ¯Bê€õaPù£—^5AºüLwÇ–è•35B3ôsèsJ

ব্যাখ্যা

                                           # implicit input, 123405
2ô                                         # split input into pieces of 2, ['12','34','05']
  ¦`                                       # push last 2 elements to stack, '05', '34'
    ï<                                     # convert month to its int index, 4
      •r–ºþ¯Bê€õaPù£—^5AºüLwÇ–è•35B        # get compressed string containing 3-letter months, 
                                             JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC
                                   3ô      # split into pieces of 3
                                             ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
                                     sè    # get month at index retrieved earlier, MAY
                                       sJ  # join with 2-digit year and implicitly print, MAY34

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

@ আদনানের সৌজন্যে স্ট্রিং সংক্ষেপণের জন্য 9 বাইট সংরক্ষণ করা হয়েছে


1
•r–ºþ¯Bê€õaPù£—^5AºüLwÇ–è•35Bপরিবর্তে "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"9 বাইট সংরক্ষণ করুন
আদনান

5

জাভাস্ক্রিপ্ট, 87 84 80 79 বাইট

x=>(new Date(x.replace(/.{4}/,'$&-'))+'').slice(4,7).toUpperCase()+x.slice(2,4)

মাসটি পেতে, তারিখটি পায় (যা "YYYYmm" "" YYYY-MM "তে রূপান্তরিত) গঠিত হয় এবং 5 থেকে 8 টি অক্ষর পুনরুদ্ধার করে, এটি মাসের প্রথম তিনটি অক্ষর। তবে এটিকে বড় হাতের অক্ষরে রূপান্তর করতে অনেক খরচ হয়।

ডেমো:

function s(x) {
  return (new Date(x.replace(/.{4}/, '$&-')) + '').slice(4,7)
         .toUpperCase() + x.slice(2, 4)
}

console.log(s('201604'));
console.log(s('200001'));
console.log(s('000112'));
console.log(s('123405'));


প্রথমটি হওয়া উচিতAPR16
ডাউনগোট

@ আপগোট এবং আপনার জন্য কী প্রদর্শিত হচ্ছে?
নিকেল

1
আমি পাচ্ছিMAR16
ডাউনগোট

@ আপগোট হাহ, এটি অদ্ভুত, কেন এইভাবে হতে পারে? কারণ আমি এই পেতে
নিকেল

আমার জন্য এটি প্রদর্শন করে APR16তবে তৃতীয় পরীক্ষার কেসটি কেবল DECআমার জন্যই প্রদর্শিত হয়।
আদনান

4

জুলিয়া, 57 56 53 বাইট

s->uppercase(Dates.format(DateTime(s,"yyyym"),"uyy"))

এটি একটি অনামী ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

প্রথমে আমরা কনস্ট্রাক্টর DateTimeটাইপ এবং ফর্ম্যাট স্ট্রিং ব্যবহার করে একটি অবজেক্ট তৈরি করি। নোট করুন যে mফর্ম্যাট স্ট্রিংয়ের মধ্যে একক উভয় এক- এবং দুই-অঙ্কের মাস পাবেন, যদিও এখানে পূর্ববর্তী ক্ষেত্রেটি অপ্রাসঙ্গিক। যেহেতু কোনও দিন নির্দিষ্ট করা হয়নি, তাই মাসের প্রথমটি ধরে নেওয়া হয়।

তারপরে আমরা সাবমডিউল Dates.formatথেকে ফাংশনটি ব্যবহার করে স্ট্রিং হিসাবে মানটি ফর্ম্যাট করতে পারি Base.Dates। স্ট্রিংটি uyyতিন-অক্ষরের মাসের নাম এবং দুই অঙ্কের বছর পায় তবে ফলাফলটি শিরোনামের ক্ষেত্রে হয়, যেমন পছন্দসই APR16 এর পরিবর্তে এপ্রিল 16, সুতরাং আমাদের uppercaseএটির প্রয়োজন ।

এটি অনলাইন চেষ্টা করুন! (সমস্ত পরীক্ষার কেস অন্তর্ভুক্ত)


4

সি, 147 145 112 বাইট

main(m){char a[99]="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";scanf("%4s%d",a+50,&m);printf("%.3s%s",a+--m*3,a+52);}

অনলাইন ডেমো

ধন্যবাদ উগোরেন !


2
কিছু সস্তা কৌশল - মুছুন #include, mএকটি পরামিতি হিসাবে সংজ্ঞায়িত করুন - main(m),
ugoren

2
এছাড়াও, %.3sফর্ম্যাটটি নাল সমাপ্তি সংরক্ষণ করে।
ugoren

ধন্যবাদ @ ইউগোরেন! আমিও পরিবর্তিত "%4s%2d"করতে "%4s%d"
মার্কো

main(m){char a[9];scanf("%4s%d",a,&m);printf("%.3s%s","JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"+--m*3,a+2);}অনেক ছোট
l4m2

4

জাভাস্ক্রিপ্ট ES6, 77 66 বাইট

@ বুলিন্টকে 11 বাইট সংরক্ষণ করা হয়েছে!

a=>(new Date(0,a[4]+a[5]-1)+"").slice(4,7).toUpperCase()+a[2]+a[3]

Dateক্লাসে ফিরে আসা স্ট্রিংটি বের করে তারিখটি পান । তারপরে বছরের মূলধন যোগ করে এবং যোগ করে।

ES5 সংস্করণ:

var a = prompt("Enter YYYYMM: ");
result = (new Date(0,a[4]+a[5]-1)+"").slice(4,7).toUpperCase()+a[2]+a[3]
alert(result);


আমি একই অটোব কৌশলটি দিয়ে 66 66 বাইটে একটি তৈরি করেছি, তবে আমি এটি অনুলিপি করতে পারি না
বিলিন্ট

@ বুলিন্ট আমি ভেবেছিলাম আমিও 66 66 বাইট পেয়েছি তবে খারাপ কপি পেস্ট করার কারণে আমাদের বাইট কাউন্টারটি ভুল হয়েছে;)
ডাউনওয়েট

আপনি মাসের নামটি সাথে পেতে পারেন(Date(0,a[4]- -a[5])+"").substr(4,3)
বুলিন্ট

1
আমি তা পাই না a[4]- -a[5]। এতে কী ভুল ছিল a[4]+a[5]-1?
নীল

1
new Date(0,a[4]+a[5]-1)+""=>new Date(0,a[4]+a[5]-1)+0
l4m2

3

সি #, 94 87 বাইট

string C(string s)=>System.DateTime.Parse(s.Insert(4,"-")).ToString("MMMyy").ToUpper();

সি # 6 সিনট্যাক্স ব্যবহার করে 7 বাইট সংরক্ষণ করা হয়েছে।

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


ল্যাম্বডাসের জন্য আপনি রিটার্নের ধরণের তথ্য ছেড়ে দিতে পারেন, যেমনC(string s)=>...
বিড়াল


3

জাভা 8, 154 113 বাইট

import java.text.*;s->new SimpleDateFormat("MMMyy").format(new SimpleDateFormat("yyyyMM").parse(s)).toUpperCase()

ব্যাখ্যা:

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

import java.text.*;                 // Required import for SimpleDateFormat
s->                                 // Method with String as both parameter and return-type
  new SimpleDateFormat("MMMyy")     //  Create a formatter with format "MMMyy"
   .format(                         //  Format the following:
     new SimpleDateFormat("yyyyMM") //   Create another formatter with format "yyyyMM"
     .parse(s))                     //   Parse the input with this format
  .toUpperCase()                    //  Convert everything to Uppercase and return

আমি মনে করি আপনি আমদানি সরিয়ে ফেললে এবং এর পরিবর্তে সরাসরি উল্লেখ করে আপনি এটি সংক্ষিপ্ত করতে পারবেন java.text.SimpleDateFormat
ফ্রিজড

2
@ ফ্রোজন আসলে, import java.text.*;19 বাইট, এবং দু'জনের java.text.সামনে দু'বার SimpleDateFormat20 বাইট। সুতরাং এটি হ্রাস করার পরিবর্তে এটি 1 বাইট বৃদ্ধি পাবে।
কেভিন ক্রুইজসেন

ওহ হ্যাঁ আপনি ঠিক বলেছেন। আমি সর্বদা অদম্য সংস্করণটি দেখি এবং মনে করি এটি গল্ফযুক্ত সংস্করণের সমান। দুঃখিত :)
ফ্রিজ

@ ফ্রোজেন আহ, কিছুটা খারাপ আমারও। সাধারণত আমি এখনও .*;অবহেলিত কোডের জন্য ব্যবহার করি তবে এবার মনে হয় আমি এটি অবহেলা করেছি। আমার কাছে বিকল্পগুলি সংরক্ষণ করা আছে যা আমার চাকরিতে জাভা ব্যবহার করার পরে এটি স্বয়ংক্রিয়ভাবে এটিকে বিশুদ্ধ আমদানিতে রূপান্তরিত করে, এবং আমি কেবল এটিকে পরিবর্তন করতে ভুলে গিয়েছিলাম import java.text.*;..
কেভিন ক্রুইজসেন

2

ওরাকল এসকিউএল, 49 বাইট

select to_char(to_date(n,'yyyymm'),'MONyy')from t

প্রকারের Tকলাম সহ ডাকা একটি টেবিলে অবশ্যই ডেটা mustোকাতে হবে , বা কেবলমাত্র সমস্ত বছর> 1000 থাকলে, NVARCHAR2(6)CHAR(6)NUMBER

ব্যবহার:

drop table t;
create table t (n VARCHAR2(6));
insert into t values ('201604');
insert into t values ('200001');
insert into t values ('000112');
insert into t values ('123405');    

select to_char(to_date(n,'yyyymm'),'MONyy')from t;

নির্বাচনের পরিবর্তে PRINT ব্যবহার করা এবং পরিবর্তে ইনপুট হিসাবে কোনও ভেরিয়েবল ব্যবহার করে টেবিলটি উল্লেখ না করা সম্ভব হবে? ইনপুট ভেরিয়েবল ঘোষণা করা এবং মান নির্ধারণ করা বাইট গণনাকে প্রভাবিত করে না
t-clausen.dk

এটি কি কোনও টেবিল থেকে ইনপুট নেওয়ার অনুমতি রয়েছে? Codegolf ট্যাগ তথ্য দাড়ায় যে কোন।
pajonk

@ t-clausen.dk প্রিন্ট ব্যবহারের সবচেয়ে সংক্ষিপ্ততম পদ্ধতি হল 58 টি অক্ষর: begin:n:=to_char(to_date(:n,'yyyymm'),'monyy');end;print nএবং আপনার VARIABLE n varchar2;BEGIN:n:='201605';END;31 টির পরিবর্তে একক ইনপুট ( ) এর জন্য 42 টি অতিরিক্ত অক্ষর প্রয়োজন insert into t values('000112');যদি দয়া করে আমাকে বলুন tell
গিয়াকোমো গারাবেলো

@ পাজোনক এই উত্তরে কেউ আমাকে টেবিলের ব্যবহার সম্পর্কে কিছু বলেন না
গিয়াকোমো গারাবেলো

1
@pajonk অনুযায়ী এই , আপনি টেবিলের জন্য ইনপুট ব্যবহার করতে পারেন
t-clausen.dk

2

মাইক্রোসফ্ট এসকিউএল সার্ভার, 57 বাইট

SELECT UPPER(FORMAT(CAST('201601'+'01' AS DATE),'MMMyy'))

Upperফাংশন বিন্যাস বড় হাতের অক্ষরে মাসের হিসাবে আশা করা হবে উত্পাদন করে না প্রয়োজন বোধ করা হয় দিন মাস বিন্যাস প্যাটার্ন।

ব্যবহার:

drop table t;
create table t (n VARCHAR(6));
insert into t values ('201604');
insert into t values ('200001');
insert into t values ('000112');
insert into t values ('123405');    

SELECT UPPER(FORMAT(CAST(n+'01' AS DATE),'MMMyy')) FROM t

আপনার উত্তরটি কেবল দেখেছি, এটি আমার মতোই, এখন অবধি লক্ষ্য করেনি, আমার উত্তর সরিয়ে দিয়েছে
t-clausen.dk

এটি কি কোনও টেবিল থেকে ইনপুট নেওয়ার অনুমতি রয়েছে? Codegolf ট্যাগ তথ্য দাড়ায় যে কোন।
pajonk

@ পাজংক উত্তর এখানে কোনও টেবিল থেকে ইনপুট ব্যবহার করে না, উত্তরটি শীর্ষ লাইন এবং ইনপুট ভেরিয়েবলটি হার্ডকোডযুক্ত। নোট করুন যে আপনি পূর্বে উল্লিখিত হিসাবে আপনি টেবিলগুলি ইনপুট ভেরিয়েবল হিসাবে ব্যবহার করতে পারেন। নীচের অংশটি কয়েকটি মানকে কীভাবে রূপান্তর করতে হয় তার একটি উদাহরণ। টিএসকিউএল এর কাছে এসটিডিএন বা ইনপুট বিবৃতি নেই। ডেটা যুক্ত করার একমাত্র উপায় হল ভেরিয়েবল বা সারণী ব্যবহার করা। আমার সমস্ত উত্তর সেগুলি
ইনপুটটির

ঠিক আছে, স্পষ্ট করার জন্য ধন্যবাদ।
pajonk

2

পাইথ, 45 বাইট

+:."AYw2ûDÈëKH§È¼DYÉx\E±oË"J*3sgz5+3J:z2 4

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

ব্যাখ্যা:

+:."AYw2ûDÈëKH§È¼DYÉx\E±oË"J*3sgz5+3J:z2 4
                                z           Take the input
                               g 5          Slice inclusively from index 5 to the end
                              s             Parse as an int
                            *3              Multiply by 3
                           J                Store in variable J, this also returns J
 :                                          Take a slice
  ."AYw2ûDÈëKH§È¼DYÉx\E±oË"                 Of this packed string
                           J*3sgz5          From the J we defined before
                                  +3J       To J+3
+                                           To this string, append
                                     :z     A slice of the index
                                       2 4  From [2,4).

প্যাকযুক্ত স্ট্রিংয়ে রয়েছে "JANJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"। দুটি JANগুলি তাই আমি এটি সিডো-ওয়ান-ইনডেক্সযুক্ত সূচক করতে পারি।

সম্পাদনা: ফিক্সড বাগ যা টিআইওর সাথে ঝামেলা করছে


2

আর , 65 বাইট

function(A)paste0(toupper(month.abb[el(A:1)%%100]),substr(A,3,4))

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

স্ট্রিং হিসাবে ইনপুট নেয়, ধ্রুবককে উপার্জন করে month.abb। মডুলাস এবং substrপ্রাসঙ্গিক মানগুলি নিষ্কাশন করতে ব্যবহার করে ।


:রূপান্তর করতে চতুর ব্যবহার integer!
জিউসেপ

@ জিউসেপ আমার ধারণা নয় :) আমি এখান থেকে নিয়েছি । আমি সম্ভবত এটি আমার বিদ্যমান উত্তরগুলির একটিতে প্রয়োগ করতে পারি!
জাইসি 22:51

@ জিউসেপ্পে আমি সেক্ষেত্রে একটি ছোট হ্যাক পেয়েছি el- 1 টি কম বাইট।
জেইসি

1

জে, 70 বাইট

4(}.((,~(_3]\'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'){~1-~".)~2&}.){.)]

ব্যবহার

   f =: 4(}.((,~(_3]\'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'){~1-~".)~2&}.){.)]
   f '201604'
APR16
   f '200001'
JAN00
   f '000112'
DEC01
   f '123405'
MAY34

ব্যাখ্যা

4(}.((,~(_3]\'...'){~1-~".)~2&}.){.)] Input: s
                                    ] Identity function, gets the value s
4                                     The constant 4
                                 {.   Take the first 4 chars from s
                            2&}.      Drop the first 2 (Take the last 2) to get the year
  }.                                  Drop the first 4 chars from s to get the month
                        ".            Parse the month substring as a number
                     1-~              Subtract 1 from it
             '...'                    List of MMM month names
         _3]\                         Split the list into nonoverlapping sublists of size 3
      ,~                              Join the MMM month name with the year and return


1

jq, 35 টি অক্ষর

(34 টি অক্ষরের কোড + 1 অক্ষর কমান্ড-লাইন বিকল্প)

(জাস্ট চেষ্টা কিনা ^দ্বারা ব্যবহৃত কৌতুক ডিজিটাল ট্রমা তার মধ্যে ব্যাশ উত্তর jq খুব কাজ করে। কাজ করে। এখন আপনি যারা জানেন এই উত্তরটি সবচেয়ে গুরুত্বপূর্ণ চরিত্র অনুপ্রাণিত। (বিকল্প ব্যবহার করা ascii_upcaseফাংশন।))

strptime("%Y%m")|strftime("%^b%y")

নমুনা রান ( -Rসমস্ত পরীক্ষার কেস পাস করার জন্য কেবলমাত্র এই নমুনায় ব্যবহৃত বিকল্প ))

bash-4.3$ jq -Rr 'strptime("%Y%m")|strftime("%^b%y")' <<END
201604
200001
000112
123405
END
APR16
JAN00
DEC01
MAY34

অন লাইন পরীক্ষা: (URL- মাধ্যমে -R পাসিং সমর্থিত না - তাই ইনপুট হিসাবে JSON স্ট্রিংকে আক্ষরিক পাস পাসিং। -rURL টি মাধ্যমে সমর্থিত নয় - চেক কাঁচা আউটপুট নিজেকে।)


1

ফ্যাক্টর, 82 78 বাইট

[ [ 2 tail* 10 base> month-abbreviation ] [ 4 head 2 tail ] bi append >upper ]

Eshplained:

[                    ! new anonymouse function block (quotation)
  [                  ! new quotation 
    2 tail*          ! "201604" -> "04"
    10 base>         ! "04"     -> 4
    month-abbreviation ! 4 -> "Apr"
  ]                  ! end quotation
  [                  ! new quotation
    4 head           ! "201604" -> "2016"
    2 tail           ! "2016"   -> "16" 
  ]                  ! end quotation
  bi                 ! bifurcate two quotations to TOS
  append             ! "Apr" "16" -> "Apr16"
  >upper             ! "Apr16"    -> "APR16"
]                    ! end quotation

1

পিএইচপি, 78 বাইট

<?=fscanf(STDIN,"%4d%d",$y,$m)?strtoupper(date("My",mktime(0,0,0,$m,1,$y))):0;

"বছরের 2038 সমস্যা" কিছু কম্পিউটারে ঘটতে পারে, যেমন এখানে । তবে এখানে অন্যদের মতো নয়


@ টিটাস, যদি সমস্যা হয় এবং নিজের সমাধান সন্নিবেশ করান তবে দয়া করে অন্য ব্যক্তির পোস্টগুলি সম্পাদনা করার চেষ্টা করবেন না; পরিবর্তে, দয়া করে উত্তরে মন্তব্য করুন বা নিজে একটি নতুন উত্তর তৈরি করুন।
মান কালি

1

সুইফট 2.2, 149 বাইট

let f = NSDateFormatter(),g = NSDateFormatter();f.dateFormat = "yyyyMM";g.dateFormat = "MMMyy"
g.stringFromDate(f.dateFromString(i)!).uppercaseString

কোটলিনের চেয়ে এই খাটো পাওয়ার চেষ্টা করছে ... এটি লজ্জার NSDateFormatterএকটি প্রাথমিক সূচনা নেই যা সেট করে dateFormat। অতিরিক্ত লোকসানের ফলে NSDateFormatterডিফল্ট dateFormatমানও থাকে না ।

সুইফট 3, 136 বাইট

let f = DateFormatter(),g = DateFormatter();f.dateFormat = "yyyyMM";g.dateFormat = "MMMyy"
g.string(from: f.date(from: i)!).uppercased()

NSকিছু ক্লাসে উপসর্গটি মুছে ফেলার জন্য ধন্যবাদ , আমি সুইফট 3 উত্তরটি আরও ছোট করতে সক্ষম হয়েছি। এখনও কোটলিনের চেয়ে কম নয় ...

পরীক্ষার কাজ এবং কেস:

import Foundation
import XCTest

func dateConverter(i: String) -> String? {
    let f = DateFormatter(),g = DateFormatter();f.dateFormat = "yyyyMM";g.dateFormat = "MMMyy"

    if let date = f.date(from: i) {
        return g.string(from: date).uppercased()
    }

    return nil
}

XCTAssert(dateConverter(i: "201604") == "APR16")
XCTAssert(dateConverter(i: "200001") == "JAN00")
XCTAssert(dateConverter(i: "000112") == "DEC01")
XCTAssert(dateConverter(i: "123405") == "MAY34")

1

আর, 154 150 114 112 বাইট

"বি" তে ছয় অঙ্কের ইনপুট নেয়, শেষ দুটি অঙ্ক থেকে প্রথম চারটি সংখ্যা পৃথক করে, 2-সংখ্যার মাসের সংক্ষিপ্তসার করে এবং এটিকে বড় হাতের করে তোলে এবং তৃতীয় এবং চতুর্থ অঙ্কের সাথে সংযুক্ত করে।

Golfed:

function(b){h=substr;i=sprintf;o="%06d";cat(toupper(month.abb[as.numeric(h(i(o,b),5,6))]),h(i(o,b),3,4),sep="")}

Ungolfed:

function(b){
   h=substr;i=sprintf;o="%06d";

   cat(
      toupper(month.abb[as.numeric(h(i(o,b),5,6))]),
      h(i(o,b),3,4),
   sep="")
}

সম্পাদনা: ভেরিয়েবলের সাথে সদৃশ নামগুলি প্রতিস্থাপন করা হয়েছে; আমাকে নির্বোধ বলে স্থির কর -2 বাইটগুলি অজ্ঞাতনামা ফাংশন করে (ধন্যবাদ, বিড়াল)।


চমৎকার উত্তর! আপনি a=কোনও বেনামি ফাংশনটির জন্য ছাড়তে পারেন
বিড়াল

@ কেট আমি বেনাম ফাংশনগুলির সাথে খুব বেশি পরিচিত নই তবে আমি যদি অপসারণ করি তবে ফাংশনটির শুরু এবং শেষের দিকে আমার বন্ধনী যুক্ত করার দরকার নেই a=? এর মতো কিছু: (function(m) {a=3;m*a})(10)
একটি নরম বালিশ

1
না, function(b){h=substr;i=sprintf;o="%06d";cat(toupper(month.abb[as.numeric(h(i(o,b),5,6))]),h(i(o,b),3,4),sep="")}এটি একটি নিজস্ব ফাংশন অবজেক্ট।
বিড়াল

এটি কাজ করে না। উপর RStudio with R 3.2.3 (2015-12-10)আমি পেতেError in i(o, b) : invalid format '%06d'; use format %s for character objects
বিড়াল

@ কেট ডার্ন নতুন সংস্করণগুলিতে সমস্ত কিছু গণ্ডগোল করছে! আমি আর স্টুডিওতে চলছে R version 3.1.1 (2014-07-10)এবং এটি দুর্দান্ত কাজ করে। এখানে এটি কীভাবে কাজ করে, আমি কি নতুন সংস্করণটি পেয়ে কোডটি পরিবর্তন করব? বেনামে ফাংশন টিপের জন্য ধন্যবাদ!
একটি নরম বালিশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.