इस सजावटी कैलेंडर के शीर्ष पर क्या होगा?


14

किसी ने मेरी पत्नी को एक सजावटी कैलेंडर दिया जिसमें चार क्यूब्स थे। यहाँ यह आज की तारीख (इस चुनौती की पोस्टिंग के रूप में) सामने दिखा रहा है:

यहाँ छवि विवरण दर्ज करें

जब मैंने पहली बार इसे देखा, तो मैंने इसे गलत कोण से (सीधे ऊपर से) देखा और यह पता नहीं लगा सका कि इसने यह जानकारी क्यों दी:

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

आपका काम 2019 में किसी भी तारीख के लिए मेरी त्रुटि को दोहराने के लिए है।

चुनौती

एक कार्यक्रम या फ़ंक्शन लिखें जो 2019 से किसी भी तारीख को लेता है, और कैलेंडर के सामने से उस तारीख को प्रदर्शित होने पर सभी क्यूब्स के शीर्ष पर दिखाई देने वाले आउटपुट को प्रदर्शित करता है।

यहां सभी क्यूब्स के लिए सभी छह पक्ष हैं। 6आपको प्रदर्शित करने के लिए बस 9उल्टा घुमाएं । 0इसलिए खड़ी सममित है, 0उल्टा अब भी है 0। कुछ तिथियों के लिए एक से अधिक सही उत्तर हो सकते हैं (जैसे कि किसी भी महीने की 11 वीं तारीख को क्यूब्स और 0चीज़ का उपयोग करने का एक से अधिक तरीका होगा ) ताकि आप किसी भी सही उत्तर का उत्पादन कर सकें।

यहाँ छवि विवरण दर्ज करें

नियम

  1. मानक खामियों से मना किया।
  2. इनपुट / आउटपुट प्रारूप लचीला है।
  3. उत्पादन घन के क्रम में होना चाहिए, लेकिन घन के भीतर नहीं। ऑर्डर को पहले क्यूब होना चाहिए, फिर दो नंबर क्यूब्स, उसके बाद वीकडे क्यूब। लेकिन जब किसी घन में शीर्ष पर दो तत्व होते हैं, तो वे दो तत्व या तो क्रम में हो सकते हैं।
  4. आप बदल सकते हैं Januaryकरने के लिए Decemberअगर आप की तरह 0-11 या 1-12।
  5. आप सप्ताह के दिनों को 0-6 या 1-7 के साथ बदल सकते हैं यदि आप चाहें, और आप सप्ताह को या तो शुरू कर सकते हैं Sundayया Monday(लेकिन आप किसी अन्य दिन सप्ताह शुरू नहीं कर सकते हैं - यह PPGC है, किसी प्रकार का नहीं है पागल-शहर का।)
  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" ]]

तो ... मैं सोच रहा था, यह सजावटी चीज़ सभी तिथियों को कैसे दिखा सकती है?
1942

@ErikTheOutgolfer कौन सी तारीख से गायब है?
एनसीएम

चुनौती से संबंधित नहीं, लेकिन, चूंकि मैं आपसे चैट पर पिंग नहीं कर सकता, तो आप दो मध्य क्यूब्स का उपयोग कैसे करेंगे? मेरा मतलब है, सभी 10 अंकों का प्रतिनिधित्व करने में सक्षम होना चाहिए।
19g पर आउटगोल्फर

1
क्यूब्स का उपयोग या तो क्रम में किया जा सकता है। ग्राफिक में दो न्यूमेरिक क्यूब्स को टॉप राईट और बायीं लेफ्ट कहते हैं। 18 प्राप्त करने के लिए आप टॉप राइट से 1 और बॉटम लेफ्ट से 8 का उपयोग करते हैं। 13 पाने के लिए आप बॉटम लेफ्ट से 1 और टॉप राइट से 3 का इस्तेमाल करते हैं। और इसी तरह। 0 1 और 2 दोनों क्यूब्स पर होना है। तथ्य यह है कि 6 और 9 एक ही क्यूब चेहरे को साझा करते हैं, आपको 01 से 31 तक सब कुछ देता है जो कि आवश्यक है।
एनसीएम

1
चित्रों के अनुसार, 27में 2019-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एक महीना (१-१२) और एक दिन (१-३१) लगता है। प्रिंट करने के लिए प्रिंट। इसे ऑनलाइन आज़माएं!

परीक्षण के मामलों:

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

strftimeएक struct tmइनपुट के रूप में कहा जाता है । इसके बजाय, मैं घोषणा int S[9]और उपयोग S[4]के रूप में tm_monऔर S[6]के रूप में tm_wday। यह काम करता है यदि सी लाइब्रेरी आईएसओ मानक के रूप में संरचना सदस्यों की समान सूची का उपयोग करता है।

s[99]से विभिन्न तारों को संग्रहीत करने के लिए उपयोग किया जाता है strftime, लेकिन इसे एक intसरणी बनाने से अनुक्रमण में कुछ बाइट्स की बचत होती है।


3

जावास्क्रिप्ट (ईएस 6), 142 बाइट्स

(year, month, day0, day1)monthday0day1

(month0, month1, day0, day1, weekDay0, weekDay1)01

(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]

इसे ऑनलाइन आज़माएं!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.