Điều gì sẽ ở trên cùng của lịch trang trí này?


14

Có người tặng vợ tôi một cuốn lịch trang trí gồm bốn hình khối. Ở đây nó hiển thị ngày hôm nay (kể từ khi đăng thử thách này) ở mặt trước:

nhập mô tả hình ảnh ở đây

Khi tôi lần đầu tiên nhìn thấy nó, tôi đã nhìn nó từ góc độ sai (từ trực tiếp phía trên) và không thể hiểu tại sao nó lại cung cấp thông tin này:

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

Công việc của bạn là sao chép lỗi của tôi cho bất kỳ ngày nào trong năm 2019.

Thử thách

Viết chương trình hoặc chức năng lấy bất kỳ ngày nào từ năm 2019 và xuất ra những gì xuất hiện trên đầu của tất cả các hình khối khi ngày đó được hiển thị hướng ra phía trước lịch.

Dưới đây là tất cả sáu mặt cho tất cả các hình khối. Để hiển thị, 6bạn chỉ cần lật 9ngược lại. Là 0đối xứng theo chiều dọc, vì vậy 0lộn ngược vẫn còn 0. Có thể có nhiều hơn một câu trả lời đúng cho một số ngày (ví dụ: bất kỳ ngày 11 nào trong tháng sẽ có nhiều cách để sử dụng các hình khối và 0điều đó) để bạn có thể đưa ra bất kỳ câu trả lời đúng nào.

nhập mô tả hình ảnh ở đây

Quy tắc

  1. Sơ hở tiêu chuẩn bị cấm.
  2. Định dạng đầu vào / đầu ra là linh hoạt.
  3. Đầu ra phải theo thứ tự theo khối, nhưng không phải trong khối. Thứ tự phải là khối lập phương đầu tiên, sau đó là hai khối số, tiếp theo là khối ngày trong tuần. Nhưng khi một khối lập phương có hai phần tử trên cùng, hai phần tử đó có thể theo thứ tự.
  4. Bạn có thể thay thế Januarythành December0-11 hoặc 1-12 nếu muốn.
  5. Bạn có thể thay thế các ngày trong tuần bằng 0-6 hoặc 1-7 nếu bạn thích và bạn có thể bắt đầu tuần vào một trong hai Sundayhoặc Monday(nhưng bạn không thể bắt đầu tuần vào bất kỳ ngày nào khác - đây là PPGC, không phải loại nào đó của thị trấn điên rồ.)
  6. Đây là . Ít byte nhất cho mỗi ngôn ngữ sẽ thắng.
  7. Giải thích khuyến khích.

Các trường hợp thử nghiệm

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

Vì vậy, ... tôi đã tự hỏi, làm thế nào mà vật trang trí này có thể hiển thị tất cả các ngày?
Erik các Outgolfer

@ErikTheOutgolfer ngày nào bị thiếu?
ngm

Không liên quan đến thử thách, nhưng, vì tôi không thể ping bạn qua trò chuyện, làm thế nào để bạn sử dụng hai khối giữa? Ý tôi là, tất cả 10 chữ số sẽ có thể được đại diện.
Erik the Outgolfer 19/12/18

1
Các hình khối có thể được sử dụng theo thứ tự. Chúng ta hãy gọi hai khối số trên cùng bên phải và dưới cùng bên trái như trong hình. Để có 18 bạn sử dụng 1 từ trên cùng bên phải và 8 từ dưới cùng bên trái. Để có được 13 bạn sử dụng 1 từ dưới cùng bên trái và 3 từ trên cùng bên phải. Và như thế. 0 1 và 2 phải nằm trên cả hai hình khối. Thực tế là 6 và 9 chia sẻ cùng một mặt khối lập phương cung cấp cho bạn mọi thứ từ 01 đến 31, đó là tất cả những gì cần thiết.
ngm

1
Theo hình ảnh, 27trong 2019-10-27nên đi 36, không 32.
japh

Câu trả lời:


5

C (glibc) , 327 319 286 byte

#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);}

(Một số ngắt dòng được thêm vào cho rõ ràng)

fmất một tháng (1 trận12) và một ngày (1 trận31). In ra thiết bị xuất chuẩn. Hãy thử trực tuyến!

Các trường hợp thử nghiệm:

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

Ung dung

#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]);
}

Chữ số khối

Đây là các khả năng cho các chữ số:

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

Bản đồ sau đây có vẻ như là sự lựa chọn tốt nhất để chơi gôn:

   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

Gian lận

strftimecó nghĩa là được gọi với một struct tmđầu vào là. Thay vào đó, tôi tuyên bố int S[9]và sử dụng S[4]như tm_monS[6]như tm_wday. Điều này hoạt động nếu thư viện C sử dụng cùng một danh sách các thành viên cấu trúc như tiêu chuẩn ISO.

s[99]được sử dụng để lưu trữ các chuỗi khác nhau từ strftime, nhưng làm cho nó trở thành một intmảng tiết kiệm một vài byte trong việc lập chỉ mục.


3

JavaScript (ES6), 142 byte

(year, month, day0, day1)monthdmộty0dmộty1

(month0, month1, day0, day1, weekDay0, weekDay1)0-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]

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.