এই আলংকারিক ক্যালেন্ডারের শীর্ষে কী থাকবে?


14

কেউ আমার স্ত্রীকে চার কিউব সমন্বয়ে একটি আলংকারিক ক্যালেন্ডার দিয়েছেন। এখানে এটি আজকের তারিখটি (এই চ্যালেঞ্জের পোস্ট হিসাবে) সম্মুখভাগে দেখানো হচ্ছে:

এখানে চিত্র বর্ণনা লিখুন

আমি যখন এটি প্রথম দেখলাম তখন আমি এটিকে ভুল কোণ থেকে দেখলাম (সরাসরি উপরে থেকে) এবং কেন এই তথ্য দিয়েছে তা বুঝতে পারছিলাম না:

[["February", "January"], [3], [7], ["Monday", "Tuesday"]]

আপনার কাজটি 2019 এর যে কোনও তারিখের জন্য আমার ত্রুটিটি প্রতিলিপি করা।

চ্যালেঞ্জ

একটি প্রোগ্রাম বা ফাংশন লিখুন যা 2019 থেকে যে কোনও তারিখ গ্রহণ করে এবং ক্যালেন্ডারের সামনের দিক থেকে যখন তারিখটি সামনে প্রদর্শিত হয় তখন সমস্ত কিউবের শীর্ষে প্রদর্শিত হবে।

সমস্ত কিউব জন্য ছয় পক্ষ এখানে। একটি প্রদর্শন করতে 6আপনি কেবল 9উল্টো দিকে ঘোরান। 0তাই উল্লম্বভাবে প্রতিসম হয়, 0উলটাইয়া এখনও 0। কিছু তারিখের জন্য একাধিক সঠিক উত্তর থাকতে পারে (উদাঃ যে কোনও মাসের 11 তম কিউবগুলি ব্যবহার করার একাধিক উপায় থাকতে পারে এবং 0জিনিসটি) যাতে আপনি কোনও সঠিক উত্তর আউটপুট করতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

বিধি

  1. স্ট্যান্ডার্ড লুফোলস নিষিদ্ধ।
  2. ইনপুট / আউটপুট বিন্যাস নমনীয়।
  3. আউটপুট কিউব দ্বারা ক্রমযুক্ত হতে হবে, তবে একটি ঘনকের মধ্যে নয়। অর্ডারটি অবশ্যই প্রথমে মাস কিউব, তারপরে দুটি নম্বর কিউব এবং তারপরে সপ্তাহের দিন কিউব হবে। কিন্তু যখন একটি ঘনকের উপরে দুটি উপাদান থাকে তখন those দুটি উপাদান উভয়ই ক্রম হতে পারে।
  4. আপনি প্রতিস্থাপন করতে পারেন Januaryথেকে Decemberযদি আপনি চান 0-11 বা 1-12।
  5. আপনি যদি চান তবে আপনি সপ্তাহের দিনগুলি 0-6 বা 1-7 এর সাথে প্রতিস্থাপন করতে পারেন এবং আপনি সপ্তাহটি উভয়ই দিয়ে শুরু করতে পারেন Sunday বা Mondayঅন্য কোনও দিন শুরু করতে পারেন (তবে আপনি অন্য কোনও দিন সপ্তাহ শুরু করতে পারবেন না - এটি পিপিজিসি, কোনও প্রকার নয় পাগল-শহর।)
  6. এটি । প্রতিটি ভাষার জন্য সবচেয়ে কম বাইট জিততে পারে।
  7. ব্যাখ্যা উত্সাহিত।

পরীক্ষার মামলা

(Tue) 2019-01-29   [[ "July", "August" ], [3], [7], [ "Thursday", "Wednesday" ]]
                   [[ "August", "July" ], [3], [7], [ "Wednesday", "Thursday" ]]

                   etc. since the order within each cube doesn't matter.


(Thu) 2019-07-11   [[ "May", "June" ], [3], [8], [ "Saturday", "Friday" ]]
                   [[ "May", "June" ], [8], [3], [ "Saturday", "Friday" ]]

                   since the two 1 cubes could be either way.

(Sun) 2019-10-27   [[ "January", "February" ], [3], [6], [ "Friday", "Saturday" ]]

(Wed) 2019-05-01   [[ "March", "April" ], [8], [3], [ "Monday", "Tuesday" ]]
                   [[ "March", "April" ], [6], [3], [ "Monday", "Tuesday" ]]
                   [[ "March", "April" ], [9], [3], [ "Monday", "Tuesday" ]]

                   since the 0 cube could have either the 8 side or the 6 side facing up, and the 6 could also be considered a 9.


(Sat) 2019-08-24   [[ "February", "January" ], [8], [5], [ "Sunday" ]]

সুতরাং ... আমি ভাবছিলাম, এই আলংকারিক জিনিসটি কীভাবে সমস্ত তারিখ দেখাতে সক্ষম?
এরিক আউটগলফার

নিবন্ধটি অনুসরণ করুন
এনজিএম

চ্যালেঞ্জের সাথে সম্পর্কিত নয়, তবে, যেহেতু আমি আপনাকে চ্যাটে পিং করতে পারছি না, আপনি কীভাবে মাঝারি দুটি কিউব ব্যবহার করবেন? আমি বলতে চাইছি, সমস্ত 10 সংখ্যার প্রতিনিধিত্ব করতে সক্ষম হওয়া উচিত।
এরিক আউটগলফার

1
কিউবগুলি উভয় ক্রমে ব্যবহার করা যেতে পারে। গ্রাফিকের মতো দুটি সংখ্যক কিউবকে শীর্ষ ডান এবং নীচে বামে কল করি। 18 পেতে আপনি উপরে ডান থেকে 1 এবং নীচে বাম থেকে 8 ব্যবহার করেন। 13 পেতে আপনি নীচে বাম থেকে 1 এবং উপরের ডান থেকে 3 ব্যবহার করুন। ইত্যাদি। 0 1 এবং 2 উভয় কিউবে থাকতে হবে। 6 এবং 9 টি একই ঘনক্ষেতের মুখ ভাগ করে নেওয়ার বিষয়টি আপনাকে 01 থেকে 31 পর্যন্ত সমস্ত কিছু দেয় যা প্রয়োজনীয়।
এনজিএম

1
ছবি অনুযায়ী, 272019-10-27যেতে হবে 36, না 32
যাফ

উত্তর:


5

সি (গ্লিবসি) , 327 319 286 বাইট

#define C strftime(s
#define U(B,E)S[6]=E-1,C+B,99,"%A"+2*!E,S)
S[9],s[99];f(M,D){S[4]=112233107696>>3*M&7;C,9,"%B",S);S[4]^=1;
C+3,9,"%B",S);M=161102>>(D+M*23/9-1-2*(M>2))%7*3&7;U(6,M);U(9,(M^1));
printf("%s/%s %d%d %s/%s\n",
s,s+3,D>29?4:D%10<6?8:3,D>29?8:1070160091>>D%10*3&7,s+6,s+9);}

(স্পষ্টতার জন্য কিছু লাইন বিরতি যুক্ত করা হয়েছে)

fএক মাস (1-12) এবং এক দিন (1–31) লাগে। ছদ্মবেশে প্রিন্ট।এটি অনলাইন চেষ্টা করুন!

পরীক্ষার কেস:

2019-01-29: July/August 37 Thursday/Wednesday
2019-07-11: May/June 83 Saturday/Friday
2019-10-27: January/February 36 Friday/Saturday
2019-05-01: March/April 83 Monday/Tuesday
2019-08-24: February/January 85 /Sunday

Ungolfed

#include <stdio.h>
#include <time.h>
void f(int M, int D) {
    int month_cube[] = {6,3,0,5,2,7,4,1,4,0,5,1};
    int day_cube[] = {3,3,3,4,5,2,2,6,7,7};
    int week_cube[] = {6,1,5,2,7,4,0}; /* 1=Sun, 7=Sat, 0=none */
    int D1 = D/10, D2 = D%10;
    char s[4][99] = {{0}};
    struct tm t;

    t.tm_mon = month_cube[M-1];
    strftime(s[0], 99, "%B", &t);
    t.tm_mon = month_cube[M-1]^1;
    strftime(s[1], 99, "%B", &t);

    if (D1 >= 3) { /* D = 30, 31 */
        D1 = 4, D2 = 8;
    } else {
        if (D2 <= 5) {
            D1 = 8; /* 012[69]78: 012 -> 8 */
        } else {
            D1 = 3; /* 012345: 012 -> 3 */
        }
        D2 = day_cube[D2];
    }

    int W = (D + M*23/9 - 1 - 2*(M>2)) % 7; /* day of week */
    if (week_cube[W]) {
        t.tm_wday = week_cube[W] - 1;
        strftime(s[2], 99, "%A", &t);
    }
    if (week_cube[W]^1) {
        t.tm_wday = (week_cube[W]^1) - 1;
        strftime(s[3], 99, "%A", &t);
    }

    printf("%s/%s %d%d %s/%s\n", s[0], s[1], D1, D2, s[2], s[3]);
}

অঙ্ক কিউব

অঙ্কগুলির সম্ভাবনাগুলি:

Cube 1:
0 1 2 3 4 5
3 3 3 4 5 2
5

Cube 2:
0 1 2        6 7 8 9
8 8 8        2 6 7 7
6                2
9

নিম্নলিখিত ম্যাপিংটি গল্ফিংয়ের জন্য সেরা পছন্দ বলে মনে হচ্ছে:

   01 02 03 04 05 06 07 08 09
   83 83 84 85 82 32 36 37 37

10 11 12 13 14 15 16 17 18 19
83 83 83 84 85 82 32 36 37 37

20 21 22 23 24 25 26 27 28 29
83 83 83 84 85 82 32 36 37 37

30 31
48 48

cheats

strftimestruct tmইনপুট হিসাবে ডাকা মানে । পরিবর্তে, আমি ডিক্লেয়ার int S[9]এবং ব্যবহারের S[4]হিসাবে tm_monএবং S[6]হিসাবেtm_wday । সি লাইব্রেরি স্ট্রোক সদস্যদের একই তালিকা আইএসও স্ট্যান্ডার্ড হিসাবে ব্যবহার করে তবে এটি কাজ করে।

s[99]এর থেকে বিভিন্ন স্ট্রিং সঞ্চয় করতে ব্যবহৃত হয় strftime, তবে এটিকে intঅ্যারে তৈরি করে ইনডেক্সিংয়ে কয়েকটি বাইট সংরক্ষণ করে।


3

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

(year, month, day0, day1)যেখানে ইনপুট লাগেমিএনটি 1-ইনডেক্সড, একটিY0 তারিখের প্রথম সংখ্যা এবং একটিY1 দ্বিতীয় সংখ্যা।

রিটার্নস (month0, month1, day0, day1, weekDay0, weekDay1)যেখানে সপ্তাহে দিন সঙ্গে 0-সূচীবদ্ধ করা হয়0রবিবারের জন্য দ্বিতীয় সপ্তাহের দিনটি ফাঁকা থাকলে সেট করা থাকে is-1

(y,m,t,u)=>[M=-~((s='45226276204264')[m--+6]||4*m%2),M+1,t<3?u<6?8:3:s[t-3],u<3?3:s[u-3],D=s[(new Date(y,m,t*10+u).getDay()+6)%7+7],-~D%7||-1]

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

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