Ai là tổng thống của Hoa Kỳ?


56

Thử thách

Viết chương trình lấy đầu vào một ngày từ ngày 30 tháng 4 năm 1789 đến ngày 21 tháng 8 năm 2019 và trở lại là đầu ra là tổng thống của Hoa Kỳ ngày hôm đó.

Ghi chú

Để biết danh sách các tổng thống Hoa Kỳ , định dạng tên của họ và thời kỳ tổng thống của họ, xem bên dưới:

April 30, 1789 - March 4, 1797          George Washington
March 4, 1797 - March 4, 1801           John Adams
March 4, 1801 - March 4, 1809           Thomas Jefferson
March 4, 1809 - March 4, 1817           James Madison
March 4, 1817 - March 4, 1825           James Monroe
March 4, 1825 - March 4, 1829           John Quincy Adams
March 4, 1829 - March 4, 1837           Andrew Jackson
March 4, 1837 - March 4, 1841           Martin Van Buren
March 4, 1841 - April 4, 1841           William Henry Harrison
April 4, 1841 - March 4, 1845           John Tyler
March 4, 1845 - March 4, 1849           James K. Polk
March 4, 1849 - July 9, 1850            Zachary Taylor
July 9, 1850 - March 4, 1853            Millard Fillmore
March 4, 1853 - March 4, 1857           Franklin Pierce
March 4, 1857 - March 4, 1861           James Buchanan
March 4, 1861 - April 15, 1865          Abraham Lincoln
April 15, 1865 - March 4, 1869          Andrew Johnson
March 4, 1869 - March 4, 1877           Ulysses S. Grant
March 4, 1877 - March 4, 1881           Rutherford B. Hayes
March 4, 1881 - September 19, 1881      James A. Garfield
September 19, 1881 - March 4, 1885      Chester A. Arthur
March 4, 1885 - March 4, 1889           Grover Cleveland
March 4, 1889 - March 4, 1893           Benjamin Harrison
March 4, 1893 - March 4, 1897           Grover Cleveland
March 4, 1897 - September 14, 1901      William McKinley
September 14, 1901 - March 4, 1909      Theodore Roosevelt
March 4, 1909 - March 4, 1913           William Howard Taft
March 4, 1913 - March 4, 1921           Woodrow Wilson
March 4, 1921 - August 2, 1923          Warren G. Harding
August 2, 1923 - March 4, 1929          Calvin Coolidge
March 4, 1929 - March 4, 1933           Herbert Hoover
March 4, 1933 - April 12, 1945          Franklin D. Roosevelt
April 12, 1945 - January 20, 1953       Harry S. Truman
January 20, 1953 - January 20, 1961     Dwight D. Eisenhower
January 20, 1961 - November 22, 1963    John F. Kennedy
November 22, 1963 - January 20, 1969    Lyndon B. Johnson
January 20, 1969 - August 9, 1974       Richard Nixon
August 9, 1974 - January 20, 1977       Gerald Ford
January 20, 1977 - January 20, 1981     Jimmy Carter
January 20, 1981 - January 20, 1989     Ronald Reagan
January 20, 1989 - January 20, 1993     George H. W. Bush
January 20, 1993 - January 20, 2001     Bill Clinton
January 20, 2001 - January 20, 2009     George W. Bush
January 20, 2009 - January 20, 2017     Barack Obama
January 20, 2017 - Incumbent            Donald Trump

Một nhiệm kỳ tổng thống được dự định là ngày đầu tiên bao gồm và ngày cuối cùng bị loại trừ. Ví dụ: "4 tháng 3 năm 1861 - 15 tháng 4 năm 1865; Abraham Lincoln" có nghĩa là Lincoln là tổng thống từ ngày 4 tháng 3 năm 1861 đến ngày 14 tháng 4 năm 1865.

Đây là môn đánh gôn, chương trình ngắn nhất trong mỗi ngôn ngữ sẽ thắng.

Thí dụ

Đầu vào: "Ngày 7 tháng 2 năm 1865" Đầu ra: "Abraham Lincoln"


18
Xin chào, chào mừng bạn đến với CGCC! Điều này có vẻ như là một thử thách tốt đẹp, nhưng tất cả các thử thách nên được khép kín. Thay vì liên kết Wikipedia, vui lòng có một danh sách ở đây gồm tất cả các tổng thống và thời kỳ của họ (tốt nhất là trong khối mã, vì vậy một thanh cuộn sẽ xuất hiện). Ngoài ra, tôi khuyên bạn nên có định dạng đầu vào linh hoạt, để mọi người có thể nhập dưới dạng chuỗi ở bất kỳ định dạng nào, ba số nguyên lỏng lẻo, đối tượng ngày, v.v ... cách họ thấy phù hợp với ngôn ngữ họ chọn.
Kevin Cruijssen

3
Ngoài ra, đối với những thách thức trong tương lai, tốt nhất là trước tiên hãy đăng chúng trong Sandbox of Proposedes . Ở đó bạn có thể nhận được phản hồi và làm cho thách thức tốt hơn, trước khi đăng nó lên chính. Tận hưởng kì nghỉ của bạn! :)
Kevin Cruijssen

11
Làm thế nào linh hoạt là định dạng IO?
qwr

15
WolframAlpha["president on "<>#]&Tôi chắc chắn rằng Mathicala thuần túy có tích hợp sẵn ở đâu đó nhưng cho đến khi tôi tìm thấy cái mà nó gọi là tôi đang gắn bó với W | A.
Pavel

8
@Pavel trong trường hợp đó WolframAlpha["US president on "<>#]&khiến nó khiến tôi đầu ra không chính xác
jonatjano

Câu trả lời:


27

PHP , 936 byte

for($a=explode('-',gzinflate(base64_decode('dVTRbtswDPwV/YANKXZq+zFJ1wRts3VZtgB7Y2Mm1ipLAO0089+PtNIuHbAnAzySd+RRNkVZ6XxSJUsMdES1g66x/tgHn5iiKnSms+Q+NF7Nami7xJTajLFtE1ro1D0eDkidZJe6itnQYqfWUNsYNsV1OHgKyNHJ9G/rryfr98M7wyT2mfma8KzuYf8SG2Wx0Rqot179AK/mJ0JB8qhpZ52z0KoVehrUCoguEhjP38i2g0OS2PRK1kOqnoJ7kXAk/wn7BrjJFgYXJH2qdaHLZM0UQLW6428bSCaZZmPFHYF/cSzsySLtR+B68PmJG3oQNTdR7eyZoGG1jzx8cCMw1bnJ3wdntVH+TdT03Q1dx62+pWrJZD0jRaTYnPoG6RBY2DzlwQeUPZbmin/GRUAHi66OUGXKZNFg1yMJOKO+OcmgZdzLksIrIwuHr+jAj0VRxhz9L2h50KsFV9n/ii4n9GbNev9gvcMhMZUWDXJIGGrepNqE0EldL1j10dBwlqVv4SCgiWS7EGoKZ8VJo4hqcrkCloVeLWURVPMtC5RpPtxkAe6VhS9CcLY+ogCRaIX0jNQzkQzA8ewfU2/TD/pyccoksoFB/NjSqRVvKz4GY6rk9myPTS9Vn2yHvgnnsSs7L+h4h3epekDvsZZd3GTGTEzyOPg6ePHw3fyKzZeajZWDrNVn+3sMFzlPVPKrJXB8jmy9BIvY37btoBb8TkbWMrJugpfUDcJxlFrGxpd3v0rVLuUr7RqGqjjFnNfPZlovf4OJ1ua64C2b47HRHIifqvryDC1w1EQtfwA=')));$d=$a[+$i++];)date(Ymd,strtotime($argn))>$d?$m=$a[$i++]:die($m);echo'Donald Trump';

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


Kiểm tra: Hãy thử trực tuyến!

Mã cho các bài kiểm tra là cùng một logic nhưng hơi khác một chút để thay thế die(...)bằng return...để tôi có thể lặp lại các bài kiểm tra.


Tôi đã tạo ra một chuỗi có ngày bắt đầu của nhiệm kỳ tổng thống trừ đi 1 ngày theo định dạng YYYYMMDDvà tên của tổng thống trong đó, cách nhau bởi -. Thí dụ:17890429-George Washington-17970303-John Adams-18010303-Thomas Jefferson-...

Chuỗi này được nén bằng gzdeflate và đầu ra được nén được chuyển đổi thành base-64 để tất cả các ký tự đều có thể in ASCII và tôi có thể đăng chúng ở đây hoặc sử dụng chúng trong TIO .

Trong kịch bản, chuỗi được phân tách -và lặp lại. Đối với mỗi vòng lặp lặp:

  • $dđược đặt thành giá trị lặp hiện tại (là ngày bắt đầu -1 ngày của tổng thống) và biến vòng lặp ( $i) được tăng thêm một.
  • Nếu ngày đầu vào lớn hơn $d, thì $mđược đặt thành giá trị lặp tiếp theo (là tên tổng thống cho $d) và biến vòng lặp ( $i) được tăng thêm một lần nữa. Điều này cho phép vòng lặp để có được tên tổng thống nhưng nhảy qua chúng trong các lần lặp.
  • Nếu ngày đầu vào không lớn hơn $d, thì điều đó có nghĩa là lần lặp trước đó là chủ tịch chính xác, do đó $mđược in bằng diechức năng, điều này sẽ dừng toàn bộ chương trình sau khi in tên.

Cuối cùng, nếu vòng lặp kết thúc (có nghĩa là không dieđược gọi), tên của tổng thống cuối cùng được in, vì chúng ta biết không phải tổng thống trước đó đã có một trận đấu (về cơ bản là bất cứ điều gì sau đó January 19, 2017) đều in tên của tổng thống cuối cùng, ngay cả khi đó là January 1, 3999.


lưu 20 byte bằng cách thay thế chuỗi gz của bạn bằng gist.github.com/007/b40b52da40b454d2196d0a807a6fcfaf
Ryan Moore

Tôi không biết PHP, nhưng bạn có thể xóa base64 và chèn các ký tự không thể in được không (bạn có thể cung cấp một hexdump).
MilkyWay90

@RyanMoore, cảm ơn vì chuỗi nén tốt hơn, đáng buồn là tôi không kiểm soát được câu trả lời này nữa và mục đích của tôi đã nhận được nhiều phiếu bầu (và một số phiếu giảm giá nữa) đã bị xóa khỏi nó ( trong phiên bản này ). Vì vậy, tôi sẽ không chỉnh sửa hoặc đánh golf câu trả lời này nữa mặc dù vẫn còn một số khả năng chơi gôn cho nó.
Đêm 2

@ MilkyWay90, điều đó là hoàn toàn có thể. Nhưng tôi đã đăng phiên bản này một cách có chủ đích để có một mã có thể đọc được ở đây và các liên kết TIO. Về cơ bản, đây không phải là một câu trả lời cốt lõi.
Đêm2

15

Bash , 1229 1124 byte

-103 byte với các nhận xét tuyệt vời của @ GammaFunction, loại bỏ một vài thay thế không hiệu quả (Adams) và tái cấu trúc mã để sử dụng ngày bù từ ngày trước thay vì ngày tuyệt đối cho mỗi nhiệm kỳ tổng thống.

M=(. Ja F Mar Ap May Jun Jul Au S O N D)
A=40000
B=80000
s=son
a=James
c=Andrew
d=William
e=Harri$s
f=Franklin
g=George
h=Grover#Cleveland
i=Roosevelt
j=John
k=#W.#Bush
X="304:$g#Washington
$A:$j#Adams
$B:Thomas#Jeffer$s
$B:$a#Madi$s
$B:$a#Monroe
$A:$j#Quincy#Adams
$B:$c#Jack$s
$A:Martin#Van#Buren
100:$d#Henry#$e
39900:$j#Tyler
$A:$a#K.#Polk
10405:Zachary#Taylor
29595:Millard#Fillmore
$A:$f#Pierce
$A:$a#Buchanan
40111:Abraham#Lincoln
39889:$c#$j$s
$B:Ulysses#S.#Grant
$A:Rutherford#B.#Hayes
615:$a#A.#Garfield
39385:Chester#A.#Arthur
$A:$h
$A:Benjamin#$e
$A:$h
40610:$d#McKinley
79390:Theodore#$i
$A:$d#Howard#Taft
$B:Woodrow#Wilson
20598:Warren#G.#Harding
59402:Calvin#Coolidge
$A:Herbert#Hoover
120108:$f#D.#$i
79708:Harry#S.#Truman
$B:Dwight#D.#Eisenhower
21002:$j#F.#Kennedy
58998:Lyndon#B.#$j$s
50789:Richard#Nixon
29211:Gerald#Ford
$A:Jimmy#Carter
$B:Ronald#Reagan
$A:$g#H.$k
$B:Bill#Clinton
$B:$g$k
$B:Barack#Obama"
T=($1)
D=0${T[1]%,}
for((;;)){ [[ $T =~ ${M[++i]} ]]&&break;}
N=0$i
S=$[${T[2]}-1797]${N: -2}${D: -2}
for z in $X;{ O=$[O+${z%:*}];[ $S -lt $O ]&&z=${z//#/ }&&echo ${z#*:}&&exit;}
echo Donald Trump

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

Rất nhiều nén thủ công :)


Một vài điều nữa: Loại bỏ X=($X), lặp lại như for z in $Xsẽ chia $ X trên $ IFS. Sử dụng [ -lt ], và sử dụng $Tthay vì ${T[0]}. Một vài dòng cuối cùng, tổng thể phải là 1191 byte
GammaFunction

1092 ! Tôi đã đơn giản hóa việc phân tích cú pháp tháng (ví dụ: nếu chúng tôi đã vượt qua tháng 6 và bắt đầu bằng J, thì phải đến tháng 7. Tôi cũng đã thay đổi thử nghiệm thành [ ${T#${M[++i]}*} ]. Bây giờ chúng tôi có thể rời khỏi tháng 12 hoàn toàn). Tôi cũng bao gồm sự dẫn đầu :về một vài cái tên (làm điều này :Johncó nghĩa là làm cho tất cả các dấu phân cách :thay vì #).
GammaFeft

12

T-SQL, 1169 981 979 977 byte

Holy cow, tôi đã tìm ra nén chuỗi trong SQL ( có sẵn trong SQL 2016 trở lên ):

SELECT TOP 1 STUFF(value,1,8,'')
FROM d,STRING_SPLIT(
    CAST(DECOMPRESS(CAST('H4sIAAAAAAAEAHVT23LaMBD9FX1AxiMZg+1HIAWGhDaltMz0bYMXrEaWOmsc6r/vrpw27kOHB8ZnL+fs2VWqTa6NKe+DB1epA3XNz7tU61LABRCcXtSnZ2hAQCPgGgNdUB0Tteja+s6U5STmWufU0ll/DZ7BohzlbpJRehG77Ae+PcIFJD+PKra2aXq1BLoiCZjpQhdrJEldBaoYm8XGe3uqgSr10f6KdLOJMal57H0VvFokahtq3w6RSCffapWoB/Qeq57xaVR9f7OX+qruE/XBtujrcIvE2VRnxmyAqFdfkuhKVDmZaP6tCPwLTypl+xBafEV35WhaSnSD9Ix0VZsQXmOzdMJTmCW4Vy5ZhuBsdUHBjaQfmQS9WieK6SrrLxwxkeYYQkXhpo7WDaPo2J8/nYWG+9/EgQOchZt3w2WHGkMVCMeyijIfl+1OD9Y77CUQadYkOnl1kg+ePS6KSLRA/wMa1iw+2CihKKb/KxH+Ylljy6tT80TN6Vp3NES4ZAsNtoKvgc4WndTkUdi+u9ZIZ96uLG4DPbYcm0UJX13ftlzHO1iz6TLNTFaTzX1FeHtfczGLLPNngpqHfLT+FJzg0/ydfdHx0XiI8L+LfLJIJxRc61wXO/ZKvF3xf8N2ciCLer6DnF3PpvcuyHDZ9L39Q6KegnsR1OiMUbm5Q++QBmi8O/TcZeTrJMrc8eGzmm/AN9zxVXBguKk/4/JrHPLTgVcYPnc8bK/mFTRinBkNvAuegqgfLucNhOqNVEdNhzo00Kotns9IMZAPFxO7v7XN+SSy9O/bh7bmS+WX/hut0W9jPwQAAA=='as XML).value('.','varbinary(max)'))AS varchar(max)),',')
WHERE LEFT(value,8)<i

Không lưu khá nhiều như tôi hy vọng nó có thể, có thể là do số lượng mã cần thiết để chuyển đổi / deconvert.

Đây là phiên bản gốc, tương đương với mã chạy sau khi chuỗi được mã hóa được giải nén (1169 byte):

SELECT TOP 1 SUBSTRING(value,9,99)
FROM d,STRING_SPLIT(
    '20170119Donald Trump,20090119Barack Obama,20010119George W. Bush,19930119Bill Clinton,19890119George H. W. Bush,19810119Ronald Reagan,19770119Jimmy Carter,19740808Gerald Ford,19690119Richard Nixon,19631121Lyndon B. Johnson,19610119John F. Kennedy,19530119Dwight D. Eisenhower,19450411Harry S. Truman,19330303Franklin D. Roosevelt,19290303Herbert Hoover,19230801Calvin Coolidge,19210303Warren G. Harding,19130303Woodrow Wilson,19090303William Howard Taft,19010913Theodore Roosevelt,18970303William McKinley,18930303Grover Cleveland,18890303Benjamin Harrison,18850303Grover Cleveland,18810918Chester A. Arthur,18810303James A. Garfield,18770303Rutherford B. Hayes,18690303Ulysses S. Grant,18650414Andrew Johnson,18610303Abraham Lincoln,18570303James Buchanan,18530303Franklin Pierce,18500708Millard Fillmore,18490303Zachary Taylor,18450303James K. Polk,18410403John Tyler,18410303William Henry Harrison,18370303Martin Van Buren,18290303Andrew Jackson,18250303John Quincy Adams,18170303James Monroe,18090303James Madison,18010303Thomas Jefferson,17970303John Adams,17890429George Washington',',')
WHERE LEFT(value,8)<i

Ngắt dòng chỉ dành cho khả năng đọc.

Đầu vào được lấy từ bảng có sẵn với trường , theo quy tắc IO của chúng tôi . Ngày nhập được định dạng dưới dạng số có 8 chữ số .Cười mở miệngiINTTôiYYYYMMDD

Một vài thủ thuật tôi đã sử dụng để lưu byte:

  • Tôi đã sắp xếp các tổng thống giảm dần để tôi không phải thêm ORDER BYmã vào
  • Tôi đã trừ 1 trong ngày "bắt đầu" của mỗi thuật ngữ, vì vậy tôi có thể sử dụng <thay vì<=
  • String-chia là nhiều ngắn hơn một danh sách lớn của VALUES()sẽ là, mặc dù tôi phải sau đó phá vỡ chuỗi ngoài với SUBSTRINGLEFT.
  • EDIT : Đã lưu 2 byte bằng cách thay đổi SUBSTRING()thànhSTUFF()

Sử dụng các chuỗi nén được mã hóa Base64 trong SQL

(Đã thêm vào chủ đề Mẹo SQL )

Vì vậy, Microsoft đã thêm một COMPRESSvà một DECOMPRESSchức năng trở lại trong SQL 2016, xử lý GZIP; vấn đề là nó trả về a VARBINARY, mặc dù ngắn hơn bằng byte (khi được lưu trữ trong VARBINARYtrường SQL ), dài hơn khi được hiển thị bằng ký tự (hex thô), khiến nó không phù hợp để chơi gôn.

Chuyển đổi sang Base64 rõ ràng là câu trả lời, nhưng tìm ra một triển khai ngắn, đơn giản là một thách thức. Tôi đã dựa trên phiên bản của mình về câu trả lời cũ này trên SO , nó cung cấp cho chúng ta hầu hết những gì chúng ta cần, mặc dù nó không sử dụng các chức năng GZIP mới. Tôi chỉ cần chèn các chức năng mới vào đúng chỗ, và đánh nó xuống một chút.

Để sử dụng phương pháp này trong mã của riêng bạn:

--Run this to generate your compressed string:
DECLARE @s VARCHAR(MAX)='Your really long string goes right here'
SELECT CONVERT(VARCHAR(MAX),(SELECT CONVERT(VARBINARY(MAX),COMPRESS(@s))FOR XML PATH(''),BINARY BASE64))

--Use your compressed string and the following code to get back to the original:
DECLARE @e VARCHAR(MAX)='H4sIAAAAAAAEAIvMLy1SKEpNzMmpVMjJz0tXKC4pygRS6fmpxQpFmekZJQoZqUWpAGGwW5YnAAAA'
SELECT CAST(DECOMPRESS(CAST(@e as XML).value('.','varbinary(max)'))AS varchar(max))

Đó là 75 73 byte mã bổ sung để giải nén một chuỗi được mã hóa, vì vậy rõ ràng chỉ sử dụng mã này cho các chuỗi rất dài.

EDIT : Đã lưu 2 byte trong mã giải nén CASTthay vì CONVERT.


12

Excel, 1243 1206 1180 byte

-37 byte bằng cách trừ từ tất cả các ngày
-26 byte bằng cách thay đổi các giá trị trừ

=CHOOSE(MATCH(A1-65^4,{39805,119679,159679,239679,319679,399679,439679,519679,559679,559779,599679,639679,650084,679679,719679,759679,799790,839679,919679,959679,960294,999679,1039679,1079679,1119679,1160289,1239679,1279679,1359679,1380177,1439679,1479679,1599787,1679495,1759495,1780497,1839495,1890184,1919495,1959495,2039495,2079495,2159495,2239495,2319495}),"George Washington","John Adams","Thomas Jefferson","James Madison","James Monroe","John Quincy Adams","Andrew Jackson","Martin Van Buren","William Henry Harrison","John Tyler","James K. Polk","Zachary Taylor","Millard Fillmore","Franklin Pierce","James Buchanan","Abraham Lincoln","Andrew Johnson","Ulysses S. Grant","Rutherford B. Hayes","James A. Garfield","Chester A. Arthur","Grover Cleveland","Benjamin Harrison","Grover Cleveland","William McKinley","Theodore Roosevelt","William Howard Taft","Woodrow Wilson","Warren G. Harding","Calvin Coolidge","Herbert Hoover","Franklin D. Roosevelt","Harry S. Truman","Dwight D. Eisenhower","John F. Kennedy","Lyndon B. Johnson","Richard Nixon","Gerald Ford","Jimmy Carter","Ronald Reagan","George H. W. Bush","Bill Clinton","George W. Bush","Barack Obama","Donald Trump")

Đầu vào nằm trong ô A1có định dạng YYYYMMDDdo Excel không giống như ngày trước năm 1900.

Tôi không biết phương pháp nén cho ngày hoặc tên sẽ không thêm byte. Phương pháp "trừ [giá trị] từ tất cả các ngày" có thể áp dụng cho giải pháp của bất kỳ ai.


Tôi tìm thấy một giải pháp 1102 byte trong Google Sheets sử dụng cùng một nguyên tắc. Excel không có Splitchức năng nên không thể dịch được.

=Index(Split("George Washington,John Adams,Thomas Jefferson,James Madison,James Monroe,John Quincy Adams,Andrew Jackson,Martin Van Buren,William Henry Harrison,John Tyler,James K. Polk,Zachary Taylor,Millard Fillmore,Franklin Pierce,James Buchanan,Abraham Lincoln,Andrew Johnson,Ulysses S. Grant,Rutherford B. Hayes,James A. Garfield,Chester A. Arthur,Grover Cleveland,Benjamin Harrison,Grover Cleveland,William McKinley,Theodore Roosevelt,William Howard Taft,Woodrow Wilson,Warren G. Harding,Calvin Coolidge,Herbert Hoover,Franklin D. Roosevelt,Harry S. Truman,Dwight D. Eisenhower,John F. Kennedy,Lyndon B. Johnson,Richard Nixon,Gerald Ford,Jimmy Carter,Ronald Reagan,George H. W. Bush,Bill Clinton,George W. Bush,Barack Obama,Donald Trump",","),Match(A4-65^4,{39805,119679,159679,239679,319679,399679,439679,519679,559679,559779,599679,639679,650084,679679,719679,759679,799790,839679,919679,959679,960294,999679,1039679,1079679,1119679,1160289,1239679,1279679,1359679,1380177,1439679,1479679,1599787,1679495,1759495,1780497,1839495,1890184,1919495,1959495,2039495,2079495,2159495,2239495,2319495}))

2
Tôi không biết rõ về Excel (và Excel địa phương của tôi là tiếng Hà Lan, vì vậy tôi không thể xác minh), nhưng điều này có đúng không? Đây không phải là tìm kiếm một trận đấu chính xác thay vì một trận đấu thấp hơn so với ngày? Điều này sẽ cho bất cứ điều gì cho chúng ta nói 19000101?
Kevin Cruijssen

3
@KevinCruijssen Không, MATCH()một đối số thứ 3 tùy chọn match_type để xác định xem có nên sử dụng kết hợp chính xác hay không. Loại trừ đối số đó sử dụng mặc định, đó là một đối sánh "nhỏ hơn hoặc bằng", vì vậy mã này là chính xác.
BradC

@BradC Ah, không biết điều đó. Cảm ơn vì đã giải thích! +1 từ tôi. :)
Kevin Cruijssen

1
Thủ thuật hay với việc trừ đi một giá trị cố định từ mỗi giá trị, tôi sẽ phải xem liệu nó có giúp tôi không.
BradC

9

05AB1E , 587 584 568 byte

.•6}©ß þz∊‘Îнúj7a>º ·,$_+šüÑßu?PδIëàá©ā.ǝ/¬j«Ížr‹þVwô¨"¶&ˆ₃ǝαh^¼ì∞öîNÊÌ.ÚáýиÇ÷©Mèé…—¾…тŒ¹/ÈÂÓŒš/«ª³PÉÇJúΓÁ¦';X·₅ï»/„q<ƶÚÙÊtÔιuš2βƒ¼ï\~ö…3ihD·¢ðΘmζ8É9Ïγ=^$¨Ä₆ËÂÊPv5+}þ¯ÑX4hÖdÀÒuàнº₁›ǝΘ³P@¥ùnðT“É)ó_“:Èx³«äƒæ¤∞Wgþ¶š}ô|ićcÁ‘.·ƒp>Z¬Aéγê‰ù‰¥Ó₃#/›pÐT¹Â¹J3—ΛΓkÙ»(áÌ›₃z@ìqW›Â"™raÒ›₂%ïx{
_Ωb≠¹₁ľÊÌ›}çºô|ôëKÝǝÚï,‚£=A©áāY∊~"KøVóΓyΛJÚΘ·ˆUΩ₂TнîëнÐQнĆ!!¶%Ý₃ó¸ß0ûиî€AvÙ∍Õ
'«₂θSè‡H¿ÏLôǝāqaмÑIƶ%ŸSdUbåÐÉιδJ¯4₆>θçàƶñwC¨OVÀàczdRæs?5ʒP8“ƒÍÜðαŸÝf,ƒη,™`ÿeиäƵθC≠ýzX‡)и∞úø+þćÎÌвĆ挱ðí1•™„qz„K.‡„  ¡•gpöz&»XZ1rć¾{¦¯Û¿p~Θø•Ƶaв₄R«•e½òœu#ÈĆÔFƵ•Ƶ`вŽcƵ«•9…åœòFýLÂ]FÜÔĀ=Ƶ®5¿ùK»Ωм••Rwg•в««•1L₄Æ•+I‹Oè

Đầu vào là một ngày kết hợp theo định dạng yyyyMMdd(ví dụ: 20190821ngày 21 tháng 8 năm 2019).

-16 byte nhờ @Grimy .

Hãy thử trực tuyến hoặc xác minh một vài trường hợp thử nghiệm .

Giải trình:

Chúng tôi bắt đầu bằng cách tạo một danh sách các tổng thống theo thứ tự thời gian:

.•6}©...ðí1            # Push compressed string "george washington  john adams  thomas jefferson  james madison  james monroe  john quincy adams  andrew jackson  martin van buren  william henry harrison  john tyler  james kz polk  zachary taylor  millard fillmore  franklin pierce  james buchanan  abraham lincoln  andrew johnson  ulysses sz grant  rutherford bz hayes  james az garfield  chester az arthur  grover cleveland  benjamin harrison  grover cleveland  william mcqinley  theodore roosevelt  william howard taft  woodrow wilson  warren gz harding  calvin coolidge  herbert hoover  franklin dz roosevelt  harry sz truman  dwight dz eisenhower  john fz kennedy  lyndon bz johnson  richard nixon  gerald ford  jimmy carter  ronald reagan  george hz wz bush  bill clinton  george wz bush  barack obama  donald trump"
                       # Titlecase each word in the string
qzK.‡                 # Replace all lowercase "q" with "K" (for McKinley),
                        # and all lowercase "z" with "."
                        # (only lowercase letters and spaces can be compressed as string)
  ¡                    # Split the string on "  " (two spaces)

Sau đó, chúng tôi tạo một danh sách tất cả các ngày dưới dạng số nguyên theo định dạng yyyyMMdd(thứ tự không liên quan cho danh sách này):

gpözXZ1rć¾{¦¯Û¿p~Θø• # Push compressed integer 57036763189461803778321913240836786322696217070172
  Ƶa                    # Push compressed integer 137
    в                   # Convert the large integer to base-137 as list:
                        #  [4,12,20,28,32,40,44,48,52,56,60,64,72,80,84,88,92,96,100,112,116,124,132,136]
     R                 # Push 1000, and reverse it to "0001"
       «                # And concat it to each item:
                        #  [40001,120001,200001,280001,320001,400001,440001,480001,520001,560001,600001,640001,720001,800001,840001,880001,920001,960001,1000001,1120001,1160001,1240001,1320001,1360001]
                        # (this is for all the March 4th dates)
e½òœu#ÈĆÔFƵ•           # Push compressed integer 47362342587646909879438102
  Ƶ`                    # Push compressed integer 223
    в                   # Convert the large integer to base-223 as list:
                        #  [155,163,171,179,183,191,195,203,211,219,222]
     ŽcƵ                # Push compressed integer 9817
        «               # And concat it to each item:
                        #  [1559817,1639817,1719817,1799817,1839817,1919817,1959817,2039817,2119817,2199817,2229817]
                        # (this is for all the January 20th dates)
1厨£ÆÊÂç-iYúΛȾEW½Ω≠tW
                        # Push compressed integer 42494608868313599134973321717434089414197466371857150907
  Rwg                 # Push compressed integer 1770507
       в                # Convert the large integer to base-1770507 as list:
                        #  [440101,530406,680112,840616,1040611,1260499,1480109,1660819,1770506]
                        # (these are the remaining dates; i.e. those who died earlier)
««                      # Merge the three lists together:
                        #  [40001,120001,200001,280001,320001,400001,440001,480001,520001,560001,600001,640001,720001,800001,840001,880001,920001,960001,1000001,1120001,1160001,1240001,1320001,1360001,1559817,1639817,1719817,1799817,1839817,1919817,1959817,2039817,2119817,2199817,2229817,440101,530406,680112,840616,1040611,1260499,1480109,1660819,1770506]
  1L₄Æ•                # Push compressed integer 17970302
        +               # Add it to each item in the list:
                        #  [18010303,18090303,18170303,18250303,18290303,18370303,18410303,18450303,18490303,18530303,18570303,18610303,18690303,18770303,18810303,18850303,18890303,18930303,18970303,19090303,19130303,19210303,19290303,19330303,19530119,19610119,19690119,19770119,19810119,19890119,19930119,20010119,20090119,20170119,20200119,18410403,18500708,18650414,18810918,19010913,19230801,19450411,19631121,19740808]

Sau đó, chúng tôi sử dụng đầu vào để xác định tên tổng thống đầu ra dựa trên các ngày trong danh sách:

I                      # Check for each value in the integer-list if the Input is smaller
                        # (1 if truthy; 0 if falsey)
  O                     # Sum these to get the amount of truthy values
   è                    # And use that to (0-based) index into the president-names list
                        # (after which the result is output implicitly)

Xem mẹo 05AB1E này của tôi (phần Cách nén chuỗi không phải là một phần của từ điển ? , Cách nén số nguyên lớn ? , Và Cách nén danh sách số nguyên? ) Để hiểu cách tất cả các chuỗi, số nguyên và danh sách nén hoạt động.


1
@Grimy Tôi thực sự không thể sao chép nó, vì vậy tôi phải tự nén lại sau khi tôi thấy những gì bạn đã làm. Tôi đã kiểm tra mọi tên tổng thống, và tất cả các chữ cái đã được thực hiện. Nhưng cách hay để lưu byte bằng cách chuẩn độ trước, sau đó sử dụng các chữ cái viết thường không còn nữa để chuyển đổi thành dấu chấm và chữ in hoa. Cảm ơn vì -16!
Kevin Cruijssen

Rất nhiều trong số đó là những từ trong từ điển, dẫn đến những cải tiến lớn. Để bắt đầu, đây là -32
Grimmy

1
@Grimy Có lẽ sẽ thử cách tiếp cận đó ở đâu đó vào tuần tới. Hiện tại sắp ăn, và ngày mai tôi sẽ bận rộn với công việc do thời hạn.
Kevin Cruijssen

1
464 . Điều này vẫn có thể ngẫu hứng, nhưng tôi không nghĩ nó có thể đánh bại 426 của Jelly . Nén chuỗi của họ chỉ là tốt hơn.
Grimmy

7

Thạch ,  431 428 427  426 byte

“¡Ẹị’ḃ4ż“ƓĠƒƝƊ!ɓa(‘ḅ⁹
“FQIȥ’ḃ8Ėẋ/€<8ż¢F1,303yo119
“f×Ð<Mk7LqƇ%_¡¤cċ⁴ẏ’Do13’⁽¤.;Äż¢ḅȷ4<VSị“¡ṀÑṅyȮÇæjRṂ~ɠƥ⁺'Ḃġ"Ƈ~Ị'9ƒȮṃ$ḶPȯṅṡḊl¥JƊ€ẊḥSṣọwɦṡ5ėṂU #Fɲẓ÷iḄþ%~%ñçŒfƒƙɼ=ɓ⁼¡⁻Q`⁵¡ḍ36)żȥÑR\ḋ⁾ḶƤ0ÞṘḳ÷¦IṂ\}ƊĊÐḳŻƈɦ!zɠ⁺ƈṖṭW⁸ƥṛU|ḄØ^ẓfḂḣƈCȦ8ɱḤH⁵AKṢzȯỵƭḊ:TʠƬ/~ƝÑȥgṖ(ṁȯDƲṫỴftlBOȧ6Ụiṃıẉ_ƈvh5ṄUɓạẓDẠẸıṣƥ"bçȥ¿çOġQẹİẊẸs*⁶ż,Ḍg®ƲW×ɗ,ẏ¡Ḅ5M5)ṀạƈCṛʂẎŒƬwġ⁶NẠṆRƇsẊ<fŀȯ⁵øȤ\⁾.>ḋTṖĠUṇŻṬTṖræ_TçṡȤOʠƥðȦe]ƈ⁵cṆWƭƲ>`½n¿O¡ṭOþV¤ṡẊ²rdS€ė)ƘIÆ&ṙḞ¬5[pṁȥLṘVỴɠ»ḲṚƑ”.ẋṭƲ€KỴ¤

Một chương trình đầy đủ chấp nhận một chuỗi YYYYMMDDin tên của tổng thống.

Hãy thử trực tuyến! Hoặc xem bộ thử nghiệm của Kevin Cruijssen.

Làm sao?

“¡Ẹị’ḃ4ż“...‘ḅ⁹ - Link 1, getNonStandardEndMonthDays: no arguments
“¡Ẹị’           - base 250 literal       = 106467
     ḃ4         - to bijective base 4    = [1,2,1,3,3,3,1,4,3]
        “...‘   - code-page indices      = [147,196,158,150,145,33,155,97,40]
       ż        - zip together           = [[1,147],[2,196],...,[3,40]]
              ⁹ - built-in literal       = 256
             ḅ  - from base (vectorises) = [403,708,414,918,913,801,411,1121,808]

“FQIȥ’ḃ8Ėẋ/€<8ż¢F1,303yo119 - Link 2, getEndMonthDays: no arguments
“FQIȥ’                      - base 250 literal    = 1114518671
      ḃ8                    - to bijective base 8 = [8,2,3,3,4,3,2,2,1,7]
        Ė                   - enumerate           = [[1,8],[2,2],[3,3],[4,3],[5,4],[6,3],[7,2],[8,2],[9,1],[10,7]]
           €                - for each:
          /                 -   reduce with: 
         ẋ                  -     repeat          = [[1,1,1,1,1,1,1,1],[2,2],[3,3,3],[4,4,4],[5,5,5,5],[6,6,6],[7,7],[8,8],9,[10,10,10,10,10,10,10]]
            <8              - less than 8?        = [[1,1,1,1,1,1,1,1],[1,1],[1,1,1],[1,1,1],[1,1,1,1],[1,1,1],[1,1],[0,0],0,[0,0,0,0,0,0,0]]
               ¢            - call last Link (1)  = [403,708,414,918,913,801,411,1121,808]
              ż             - zip together        = [[[1,1,1,1,1,1,1,1],403],[[1,1],708],[[1,1,1],414],[[1,1,1],918],[[1,1,1,1],913],[[1,1,1],801],[[1,1],411],[[0,0],1121],[0,808],[0,0,0,0,0,0,0]]
                F           - flatten             = [1,1,1,1,1,1,1,1,403,1,1,708,1,1,1,414,1,1,1,918,1,1,1,1,913,1,1,1,801,1,1,411,0,0,1121,0,808,0,0,0,0,0,0,0]
                 1,303      - pair literal        = [1,303]
                      y     - translate           = [303,303,303,303,303,303,303,303,403,303,303,708,303,303,303,414,303,303,303,918,303,303,303,303,913,303,303,303,801,303,303,411,0,0,1121,0,808,0,0,0,0,0,0,0]
                        119 - literal             = 119
                     o      - logical OR          = [303,303,303,303,303,303,303,303,403,303,303,708,303,303,303,414,303,303,303,918,303,303,303,303,913,303,303,303,801,303,303,411,119,119,1121,119,808,119,119,119,119,119,119,119]

“...’Do13’⁽¤.;Äż¢ḅȷ4<VSị“...»ḲṚƑ”.ẋṭƲ€KỴ¤ - Main Link: list of characters, X
“...’                                     - base 250 literal    = 5999595155245555951555559593750993764595999
     D                                    - to base 10          = [5,9,9,9,5,9,5,1,5,5,2,4,5,5,5,5,9,5,1,5,5,5,5,5,9,5,9,3,7,5,0,9,9,3,7,6,4,5,9,5,9,9,9]
       13                                 - literal             = 13
      o                                   - logical OR          = [5,9,9,9,5,9,5,1,5,5,2,4,5,5,5,5,9,5,1,5,5,5,5,5,9,5,9,3,7,5,13,9,9,3,7,6,4,5,9,5,9,9,9]
         ’                                - decrement           = [4,8,8,8,4,8,4,0,4,4,1,3,4,4,4,4,8,4,0,4,4,4,4,4,8,4,8,2,6,4,12,8,8,2,6,5,3,4,8,4,8,8,8]
          ⁽¤.                             - literal             = 1797
             ;                            - concatenate         = [1797,4,8,8,8,4,8,4,0,4,4,1,3,4,4,4,4,8,4,0,4,4,4,4,4,8,4,8,2,6,4,12,8,8,2,6,5,3,4,8,4,8,8,8]
              Ä                           - cumulative sums     = [1797,1801,1809,1817,1825,1829,1837,1841,1841,1845,1849,1850,1853,1857,1861,1865,1869,1877,1881,1881,1885,1889,1893,1897,1901,1909,1913,1921,1923,1929,1933,1945,1953,1961,1963,1969,1974,1977,1981,1989,1993,2001,2009,2017]
                ¢                         - call last Link (2)  = [303,303,303,303,303,303,303,303,403,303,303,708,303,303,303,414,303,303,303,918,303,303,303,303,913,303,303,303,801,303,303,411,119,119,1121,119,808,119,119,119,119,119,119,119]
               ż                          - zip together        = [[1797,303],[1801,303],[1809,303],[1817,303],[1825,303],[1829,303],[1837,303],[1841,303],[1841,403],[1845,303],[1849,303],[1850,708],[1853,303],[1857,303],[1861,303],[1865,414],[1869,303],[1877,303],[1881,303],[1881,918],[1885,303],[1889,303],[1893,303],[1897,303],[1901,913],[1909,303],[1913,303],[1921,303],[1923,801],[1929,303],[1933,303],[1945,411],[1953,119],[1961,119],[1963,1121],[1969,119],[1974,808],[1977,119],[1981,119],[1989,119],[1993,119],[2001,119],[2009,119],[2017,119]]
                  ȷ4                      - literal 10^4        = 10000
                 ḅ                        - from base           = [17970303,18010303,18090303,18170303,18250303,18290303,18370303,18410303,18410403,18450303,18490303,18500708,18530303,18570303,18610303,18650414,18690303,18770303,18810303,18810918,18850303,18890303,18930303,18970303,19010913,19090303,19130303,19210303,19230801,19290303,19330303,19450411,19530119,19610119,19631121,19690119,19740808,19770119,19810119,19890119,19930119,20010119,20090119,20170119]
                     V                    - evaluate (X)        (i.e. X -> YYYYMMDD)
                    <                     - less than? (vectorises)
                      S                   - sum                 (a number between 0 and 44 inclusive)
                                        ¤ - nilad followed by link(s) as a nilad:
                        “...»             -   compression of dictionary words and strings
                             Ḳ            -   split at spaces
                                     €    -   for each (part):
                                    Ʋ     -     last four links as a monad:
                               Ƒ          -        invariant under?:
                              Ṛ           -          reverse (true for initials only)
                                ”.        -        literal = '.'
                                  ẋ       -        repeat
                                   ṭ      -        tack (the part - e.g. [['A'],'.'])
                                      K   -   join (back up) with spaces
                                       Ỵ  -   split at newline characters
                       ị                  - index into (that list) (1-indexed & modular)
                                          - implicit (smashing) print

Thêm một từ tôi. Điều này có vẻ tuyệt vời
MilkyWay90

Cảm ơn! Mất khá nhiều thời gian để đặt lại với nhau.
Jonathan Allan

5

Thạch , 454 byte

“¡#<Ḷ“¡D{“ß“®“c“ƒⱮ“¡“(Ȥ“u^“£“ɠn“ƒ⁺“¥“¢r“ƈ⁶“©“ƙm“¡B⁻“¤“Pẋ“ḣ¢“¡“¡ẓk“¡CẆ“¢“S¢“ėẋ“ṄỴ“t<“Œ“¦’ḃ2$¹<?€ȷ2F4ȷ4,8ȷ4ĖF¤yÄ<⁸TṪị“€`ɲ×ƥF7ȯẒ⁼ẈẎu⁻ɠṇẠẈƊ⁻QḲỌ ỊƭʠµḢƊCṾr⁻=ßạḌ`^ḌX§®tṭN£jx,ƈ=suĖɼ_ḍf9*ÆṙỊṪṄ Jʋ ȯṡẉ ỌẏⱮøÞ⁴xḤżḅñ£ṡṭʂMṚ¶ṇwıƲṁEnÄ`:®ƥʂ_xd⁶ŒĖṁƙƝg°ṂʠkṫhO5Ịḅḳ³'ø⁵aẏṄKḂẆZØ4JḌþḂ⁸⁸XlIVḤOḲØṢÐ!}?Ọ°ḲẆiḢAr`ġƘ⁸ḷ[¿T§ẓ⁵|ḍdɓ^ṭƲfỴĖġJw(Ȯ:⁺k=£ŀnṗ*'hẹḋŻZOLæزẋ⁼ẏ&ı6ḣṗẈƥ¡:9D¢=G§⁴eỤ6wẈ6ṗw6⁺zOẉ}OṆƲdṃ'ıẠ£¤þ4¢1ȷfɓ.ṪpṀ⁴Ṡtṁ⁷ẇlŒ!ṠyaṪ66xvḍgġ¤goḍRẒ³żẎịṣ6ĿⱮ}ḲkƒiL²?Ḃ¿ḥƝ¤dėḤ½Ṗ,cRÐþɼ©ṢƈḅṬḊṬɠṅÞ»Ỵ¤

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

Một liên kết đơn được lấy làm đối số của nó ngày ở định dạng YYYYMMDD và trả về một chuỗi với câu trả lời.

Các trường hợp thử nghiệm (mượn từ câu trả lời 05AB1E của @ KevinCruijssen ).


4

JavaScript (Node.js) ,  855 851  803 byte

d=>(g=i=>(p+=parseInt((a=(require('zlib').inflateRawSync(Buffer("ZVJtct0gDLwKB1A9dSaTtGfoKWSQDc+AXgS2S09f8T6cdPqDsc2utKuVv411jTC6FV4EzzO6eD53GG26vc0Wtp+3t9uhjkwn7+0dxnf6hPu5JHiJP8524mHcr7fPV3yDF+Z79XcL48em2ASy/yP+1dRCLAuZA4sPeamc4cI+G3SYClTPCYu50DyTlI5homISuvDli7Mw3cs+tpBte1RjdkKHuaBdOzuh1JDNjtlMm1CGI8QYMBlPWZrxKHLv2hvVFkkeAutgrhxX+INWSc1UbJEFkpajODPrM7EQzIJ5jSpxDSSWHtXTplUZM+Ak6FVOGZZjPu2pXJfdYitF+WUwizaqIFv1JDOrxDSovUbl0RKVgjIHig6sp1JJ+p3O5zeBRXjXCxtpp6giMFHWOvV1jvgf5RlFsr9CjtQ0eWKnQxlhLp1VP+Pio49dcdY7Zid8GMV6XwU0WLN0u+J0n2Ax7qpsmWNwC4FONJFUbdIdfEbmhi9K3WfrQVTZkibnjrD42jkUCmU10HfT1zQPZqWcyTWILTvOPapnohL6vpzJ4XefmQSjbkvzhEtIqRmrgWkj4dwBIVwwP/9HP5hj0N0VD5POrVGFXPmETwxF/y7DEyYEd2/UTV//Ag","base64"))+"").split`,`)[i],32))<new Date(d)/864e5?g(i+1):a[i+44].replace(/\b./g,c=>c.toUpperCase()))(p=0)

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

Làm sao?

Chuỗi nén chứa danh sách 89 giá trị.

44 giá trị đầu tiên là độ dài của các nhiệm vụ tổng thống được biểu thị bằng số ngày và được mã hóa trong cơ sở 32 (là cơ sở nén tốt nhất).

45 giá trị tiếp theo là tên tổng thống trong trường hợp thấp hơn. Trường hợp tiêu đề được áp dụng sau đó (mẹo mượn từ câu trả lời của @ KevinCruijssen ).


Do trường hợp Tiêu đề, McKinley xuất ra là "Mckinley".
TheJim01

@ TheJim01 Cảm ơn bạn đã báo cáo điều này. Bây giờ đã sửa.
Arnauld

3

SOGL , 475 byte

⁵æ“DƧ▓«ļ¶↕Q∫<⅔∑+fQyΛ‼Bī:׀═&Sf',№═׀ΔΥκ\κΗδ=6oΡΠω«i℮ī K }½6YΨδ~░pTø№ŗ◄&Λθ▒“Æš“─{1α:C'⁰%+:"⅞“*c'⁰÷+dr"⅞“*b'«*e++>?al"t!■u↔R⅝Θνj╤←⁵κP׀λc⅜-Gc⁸׀!┐)└█5¦@T¬[@∫↕‛ρ℮↑δŗιf√³I2~Δ▓η¤⁴b¡νθ@36⅛Π└Ξ±Ƨ⅜⅓mwθ:∫^⌠≥-N\T‛V;r□τθ⁹;C{¾lΠƨUΒΡ║⁸Κ≤øΔ°?U┼S→iļ┐Kπzz∑Θ⅛%τ`ωΗ2D≡ψ_;OR⁴w≡1Z⅓ēυ%─ž′ιVJοUζķπd└≈³ΘΟ‚GR2┌═NΒθ↔T²νsσ□lQMæν÷¦Π±°≡═øΡTe¼ž⁰λ_►○³1≡№╚█λΜβΤ½<Π±Cļ¬└⁴┘čgr⁰⁄▲8|}⁸ē4№╤#√⅔d?÷≥}▼eī┼^ƧX‽>≥▼k ¹Wļm║⌠¦→┘C׀ψΠ¼⁽tΠ↔:φbεļ▓Β√⁷->→⅜O∑░=`ξε↕ņ⅛╚πBπσ§T׀ķīT:‽4;%≥═pP¶G→○▼φβjτ9v⁄6Υ◄⁹¤{τ/∑a⁰}┐⁵e¬č‘ūƧkiƧKiŗƧ, Θw←

Hãy thử nó ở đây!

Ngày logic có lẽ có thể được cải thiện một chút.


3

PHP , 888 byte

$_=0;$l=explode('|',gzinflate(substr($a=base64_decode('AAALMQW0C2oLagtqBbULagW1AB8FlgW1AewDyQW1BbUF3wWLC2oFtQDHBO4FtQW1BbUGdgqoBbULagNxB/kFtRFGCxgLagQMB14H6wN/BbULagW1C2oLagtqZVLtjtpADHyVfYK8Ax8FBEd7pWmR+s9kTXbLxq68CXSlffjaheNO6q8o6/HMeOw1svTojpBDpH5kqlsO5GYehlzbwANkt8XzGSVbDQbMbg8+fvhjEsZ729cpUlce3TPygje3he5i6D3IGMn9AHLzSZDqMaYUYXAbJCluAyJ3ViNqS0J5COwa98rpUn9CF0CRLZTEUvfaDuLdSr8DC9aVAF2SSrxGlA4f3fNJuwiozk4CQeVe1CInetpTOZP9nkrOiv/WuLUSjfUwjQHlzCoxb9RewfygnCkE5Bwx+boImEcUe5vJGCapa+GrPiwSXjEB+TpH+gWD+nqO+B/kLYp9t4uUsGjyyF6HcgfmbKjxPS6+2dgtnPWN2QvfnNaM96gCSG5tdsXrPusC0lWVF8wp+h7rBuWEMiqJOXiPbNl8UDKfxYJoZRo0ueUt9mE0zKeYkQLfbDe2plXjdkiEvtSXQp7JonpL9BBtX959jn9sZhRIui3Ns27jMBS30INQogOTFQ4IPRjs3z1uGndsdHc51LnOrVFFGvlZftZA9LrclxMMUJd3IjP9+y8='),90)));foreach(str_split(substr($a,0,90),2)as$i=>$d)(strtotime($argn)+5701449600)/86400<($_+=hexdec(bin2hex($d)))&&@die($l[$i-1]);echo end($l);

Hãy thử


3

05AB1E , 464 444 438 418 byte

-15 hoặc hơn byte bằng cách đánh cắp ý tưởng từ câu trả lời của Kevin Cruijssen

Đã vượt qua 444 vẫn là 444):

.•J@λ
A∞‚XÃUδ„«›Æx…ΔΣ¸ÃEÛö›³;Î!¦ǝzŽ`²œ∊ïøÞ‰Cf4₆и)Kuм¹5®‹м£Ž}мNPõüïí
^ā-Ǩåˆ[Ü_5δ³ÂBмzIΣŠÒÅÆè"²0¢₆'$Ćùù»õJ´õý¢ºн³õ?ëØ؆Dǝç.r˜èÌ•ć¡`“ŒÕ‡¹„б·Ž²¿É‰Þ³×‰Þ̯„Ðëìncy±·¢Œžˆ–ÄîèÿíÈ£ÎÈœ„ÐÕÀ‰Þ kz™éÿ¥•¹êardœãÿ²ÀâÓ‰Þÿ㳫ƢŒš•ÿ—§Î¶ÿ橉ޖÖÿל–Ö·Š¶‹r¯ŽÇÕÈœ¶‹r¯ŽíÈÿíÈ©Æ»äft–œrow¦‹¼‰ gz†èingãŸîÁÿ²Àÿ„Ð fz½¸ÿš••Öÿéï™»»É»‰ÖŠÿŒÕÕ¹ wzŒ›‰ŽµÍŒÕ wzŒ›‹²ÿ¹Ñÿ“™„qz„K.‡#•¥ü„¨%¨₃Ó8•3в4α£ðý•9ÕS&µç©•3в±žD*•¾¹iìzÓ.+,âšÜĀ‘ó₆x.»δ•žHв«9._.¥•U<¶•+I32β‹Oè

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

Phần 1: tên

Có hai loại nén chuỗi trong 05AB1E:

  • Các chuỗi Base-27 mã hóa mỗi chữ cái trong ~ 0,6 byte (về mặt kỹ thuật: log (27) / log (255)), nhưng chúng chỉ có thể chứa [a-z ](chữ thường và khoảng trắng).
  • Các chuỗi từ điển mã hóa các từ tiếng Anh thông dụng (cộng với khoảng trắng trước) thành 2 byte và tất cả các ký tự ASCII trong mỗi 1 byte (chúng chỉ được chuyển qua không được sửa đổi). Họ cũng có thể sử dụng byte ÿ, để bật một giá trị từ ngăn xếp và nhúng nó vào chuỗi.

Chúng tôi sẽ sử dụng kết hợp tối ưu của cả hai. Vì việc chuyển đổi từ mã hóa này sang mã hóa khác phát sinh một số chi phí, điều này phức tạp hơn so với việc chọn mã hóa ngắn nhất cho mỗi tên riêng lẻ. Ví dụ:

  • Việc ingnhập Harding Calvin~ 1,8 byte trong cơ sở-27 so với 3 byte trong chuỗi từ điển. Nhưng HardCalvincả hai đều có trong từ điển, vì vậy chúng tôi cuối cùng ingkhông để lại nén trong chuỗi từ điển.
  • Việc Herbnhập Coolidge Herbert Hoover~ 3 byte trong cơ sở-27 so với chỉ 2 trong chuỗi từ điển (vì herbnằm trong từ điển). Nhưng không Coolidgephải Hoovertrong từ điển, vì vậy chúng tôi kết thúc việc mã hóa Herbthành cơ sở 27.

Để giải quyết các hạn chế mà các chuỗi cơ sở 27 chỉ có thể chứa [a-z ], chúng tôi gán các ý nghĩa đặc biệt cho một số chữ cái. Giữa họ, 44 tổng thống sử dụng hết 26 chữ cái, nhưng chúng ta vẫn có thể chơi các thủ thuật:

  • Các chỉ js là nói cách điển ( James, Benjamin, ...), do đó jlà miễn phí cho cơ sở-27 dây.
  • Chỉ qcó trong Quincy, vì vậy chữ thường qlà miễn phí
  • Chỉ zcó trong Zachary, vì vậy chữ thường zlà miễn phí
  • Chỉ có xmột Nixon, vì vậy chữ hoa Xlà miễn phí (chúng tôi không thực sự sử dụng cái đó)

Như đã nói, hãy nhìn vào mã.

.•J@λ
A∞‚XÃUδ„«›Æx…ΔΣ¸ÃEÛö›³;Î!¦ǝzŽ`²œ∊ïøÞ‰Cf4₆и)Kuм¹5®‹м£Ž}мNPõüïí
^ā-Ǩåˆ[Ü_5δ³ÂBмzIΣŠÒÅÆè"²0¢₆'$Ćùù»õJ´õý¢ºн³õ?ëØ؆Dǝç.r˜èÌ•

# (The newlines are significant.) This is the base-27 string:
# "j trumpjack obamaj reaganj nixonj lyndon bzj dz roosevelt harry sz truman dwight dz eisenhowerjidge herbert hooverj mcqinley theodore rooseveltj garfieldjerford bzj ulysses szj buchananjmorejlk zacharyj buren"

ć    # extract the first character
 ¡   # split the rest on that character (a "j")
  `  # dump the list on the stack
# We now have " buren" at the top of the stack, and " trump" at the bottom.

“ŒÕ‡¹„б·Ž²¿É‰Þ³×‰Þ̯„Ðëìncy±·¢Œžˆ–ÄîèÿíÈ£ÎÈœ„ÐÕÀ‰Þ kz™éÿ¥•¹êardœãÿ²ÀâÓ‰Þÿ㳫ƢŒš•ÿ—§Î¶ÿ橉ޖÖÿל–Ö·Š¶‹r¯ŽÇÕÈœ¶‹r¯ŽíÈÿíÈ©Æ»äft–œrow¦‹¼‰ gz†èingãŸîÁÿ²Àÿ„Ð fz½¸ÿš••Öÿéï™»»É»‰ÖŠÿŒÕÕ¹ wzŒ›‰ŽµÍŒÕ wzŒ›‹²ÿ¹Ñÿ“
# Dictionary string. All the values we just dumped on the stack are popped by `ÿ`s in this string. We end up with:
# "george washington john adams thomas jefferson james madison james monroe john quincy adams andrew jackson martin van buren william henry harrison john tyler james kz polk zachary taylor millard fillmore franklin pierce james buchanan abraham lincoln andrew johnson ulysses sz grant rutherford bz hayes james az garfield chester az arthur grover cleveland benjamin harrison grover cleveland william mcqinley theodore roosevelt william howard taft woodrow wilson warren gz harding calvin coolidge herbert hoover franklin dz roosevelt harry sz truman dwight dz eisenhower john fz kennedy lyndon bz johnson richard nixon gerald ford jimmy carter ronald reagan george hz wz bush bill clinton george wz bush barack obama donald trump"

™         # title case
 „qz      # literal "qz"
    „K.   # literal "K."
       ‡  # transliterate (replaces all "q" with "K" and all "z" with "."

# This takes care of two issues at once: title casing would leave McKinley with a lowercase k, and base-27 strings can't contain "."
# We now have a long string, with all the presidents' names in order. We need to split it into 45 strings (one per president).
# We could've used a special marker to delimit the presidents, but it turns out it's more efficient to count the words in each name:

#                  # split on spaces (yes i know i've been using # for comments, but there's no actual comment character in 05AB1E)
 •¥ü„¨%¨₃Ó8•3в     # compressed list 222221211212222221111222221212211111222202122
              4α   # vectorized absolute difference with 4: 222223233232222223333222223232233333222242322
                   # this is the list of the number of words in the presidents' names
                   # (note that "George H. W. Bush" is the only 4-word name, forcing us to use base-3 instead of base-2 for the compressed list, which costs 3 bytes)

£                  # split the list of words according to the list of wordcounts: [["George", "Washington"], ..., ["Donald", "Trump"]]
 ðý                # join each sub-list with spaces

Bây giờ chúng tôi có một danh sách 45 tên đầy đủ theo thứ tự thời gian, vì vậy chúng tôi đã hoàn thành phần này.

Phần 2: ngày

Để dễ dàng so sánh ngày, chúng tôi chuyển đổi chúng thành số nguyên. Điều này được thực hiện với một chuyển đổi từ cơ sở 32, mang lại 1024 * năm + 32 * tháng + ngày (và không quan tâm rằng năm "chữ số" lớn hơn 32).

Chúng tôi bắt đầu với một danh sách số lượng các cuộc bầu cử liên tiếp (các cuộc bầu cử không thay đổi tổng thống), theo thứ tự thời gian đảo ngược:

•9ÕS&µç©•3в   # compressed list 111010111011020000011000000101110

Ba số 1 đầu tiên tương ứng với Obama, Bush và Clinton đều được chọn lại một lần. Cả 2 đơn độc tương ứng với McKinley và Theodore Roosevelt đều được tái đắc cử một lần (McKinley chết tại văn phòng và Theodore Roosevelt là phó chủ tịch của ông, vì vậy không có cuộc bầu cử nào khác giữa các cuộc bầu cử của họ). Cần có một số 4 trong đó cho Franklin D. Roosevelt + Truman, nhưng đây cũng là thời điểm mà ngày khánh thành thay đổi từ ngày 4 tháng 3 đến ngày 20 tháng 1, vì vậy chúng tôi sẽ xử lý trường hợp đặc biệt này sau.

±             # bitwise not (equivalently: add 1, then negate): [-2, -2, ..., -1]
 žD*          # multiply by 4096 [-8192, -8192, ..., -4096]

Hãy nhớ rằng 1024 có nghĩa là một năm, vì vậy 4096 có nghĩa là một nhiệm vụ đầy đủ. Bây giờ đây là một danh sách các thời gian giữa các tổng thống mới được bầu (vẫn theo thứ tự thời gian đảo ngược, đó là lý do tại sao các con số cần phải âm).

Bây giờ, hãy quan tâm đến 9 tổng thống không phục vụ toàn bộ nhiệm vụ (4 người chết vì nguyên nhân tự nhiên, 4 người bị ám sát, Nixon đã từ chức):

•¾¹iìzÓ.+,âšÜĀ‘ó₆x.»δ•žHв   # compressed list [45088, 9317, 15270, 16548, 20475, 22484, 22410, 18666, 11155, 43819]

45088 là đồng bằng thời gian từ ngày 4 tháng 3 năm 1797 (lần đầu tiên giới thiệu vào ngày 4 tháng 3) đến ngày 4 tháng 4 năm 1841 (lần chết đầu tiên tại chức). Những con số sau đây là thời gian giữa 9 trường hợp tử vong / từ chức. Cuối cùng, 43819 là đồng bằng thời gian từ ngày 9 tháng 8 năm 1974 (từ chức của Nixon) đến ngày 20 tháng 1 năm 2017 (giới thiệu mới nhất vào ngày 20 tháng 1).

«             # merge the two lists of time deltas
 9._          # rotate left by 9 (the number of January 20 introductions)
    .¥        # undelta
      •U<¶•   # compressed integer 1979491, meaning March 4, 1933 (the last March 4 introduction)
           +  # add to each

Bây giờ chúng tôi có một danh sách tất cả các ngày mà tổng thống thay đổi. Trật tự này có một chút thú vị: nó bắt đầu vào năm 1933, sau đó theo sau các giới thiệu ngày 4 tháng 3 theo thời gian, sau đó là cái chết / từ chức chuyển tiếp theo thời gian, sau đó quay trở lại cùng với các giới thiệu ngày 20 tháng 1. Tuy nhiên, thứ tự sẽ không thực sự quan trọng.

I             # get the input date
 32β          # convert from base 32, yielding an integer
    ‹         # vectorized compare with our list, yielding a list of 0/1 booleans
     O        # sum
      è       # use the sum to index into the list of presidents' names
              # implicit output

Và chúng ta đã hoàn thành.


1
Oh, bạn thậm chí đánh bại câu trả lời Jelly bây giờ! Rất đẹp. Nhìn về phía trước để xem một lời giải thích.
Kevin Cruijssen

@KevinCruijssen Tôi đã thêm một lời giải thích (:
Grimmy

2

Than , 550 byte

✂⊟Φ⪪”}¶⟲φε"1It↙θ|&s1%⎚÷X2J¦T↶M↙@P≡,7gSC{WTB¿μ;↗AEoU…⁹aⅉ:(↶Þ|‹Cρr]χY↨×⪪…✳μⅉⅈ²]⌈&ρτ“↖s∕↘yⅉ⊘K%QUi&Uρ⦃→↑^_tZ}↙s⪪3#\UZ¶L↥ρ÷Qa.ρE⊞B↘¿⦃{RC⁴βLΦï←⁹″*²⌊∕~L‽∧&;⁵⪪⪪◨sFψ⊗=₂εωb5⎚∧¬Ii»S⟲H⧴⮌⁵↷≕≦-Lκ↗⦃″✂DcgSOE}PΣ℅ξ»u➙ïA⁼×◧⁴Gθkιbσ6�V→↓B⮌⦃]σ0↶L↷'Þ¡σ?αδ⪫4⁶M"‽W◨-n℅O≡o ⊙^fκ{~✳N⦄y⊟≦Kθ!«↘pB;fJ<ιU%D‴▶p|‹⌕ιHpIt‽7}u1~φνL▶⮌;NY✂S>ÞSλ<«⦃¬k⦄J⦃◧‴}v≕﹪φEβ<⁴↘la»�λ⁼.Xξ.th⊕jEχ>m4J'⁺▷αZ↷|D$⸿Sz⪪←fFωρ↓oⅉ⊙⁰vFQ0T⪫?GE▷|℅±P;χ'|x>i↨E◧⁺4M↖‴№⟦Π~‹σ_▷⁵N?6ⅉ |x+\⁺“≡C⟦⁹⁸pC⊕Dïψ?◧⎇ςΠH&]▷≧β↓⧴J<(1←¦6‽GG✂¡58Go…Qψ/§§c↷ZQ\@ςr⁹}TZ?«fPO)⧴\`↘℅⦄&yθ%⪫iλ*fÀ-ⅈ↖→◨⬤F″‖↘→⁹S#″▶Φ∨¬w◧«℅ySq§mCIπF?sⅈP⍘↷≔f‽k↥ABMX﹪”¶‹ιθχ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Đưa đầu vào ở định dạng ISO. Giải trình:

    ”...”       List of decremented dates and presidents
   ⪪     ¶      Split on newlines
  Φ       ‹ιθ   Keep those that precede the input
 ⊟              Take the last
✂            χ  Remove the date

2

Stax , 550 509 502 byte

ª╠TkªÑTs¬¢‼É▼╠→+╕s☼∩b°┴ò0J Öª◙%µ♪)Çb○Σ²╦àôä√P┼[╫»↓♪─y·:+x/ p~┤☺kèT┤╩☺♀◄╗*DX○e╩+ë%╫↔^║;◙/Θ╛B║K>▌GΣR╥♠╞N┬6dt♥h♪T⌠╥⌠ó←`±ΘÆM:\V►╢◘≥pe½╖→Ea}╚≤╠ΓÜ╗,πUF[╢▄¥¥▒t≥òK"=☺S╟▐ü%û▼98╕→→ñ`eB▌y↨\%Ç│╝û°6R┘K√â°◘RfçMñ♪3╦┤â╞╥┼«╧j/εⁿ○ó▀CäI3┘c▄}═%[C_%jgÿÉJÑS═g(┴`╦%êk9½é╔PT¶◄<║╕à¼╬≤`dεµc╨╔?Z=╧╥RDΓl.┘uFⁿ∟Juö♥,╠╛z¡ÇM7m☺╩?ïPª$πä♂ ╝Jò'æφ▬♠w►○ôr├=é┴╪ù#?∩E↓╣J∩╒░▒○LÑ∞¥╗å▐Ü└ä∙↨l♀╠├d┴Uÿ╩(╔♦)═╦¢αe£/bΦ╜%d$Öä¢M║╖q]¢╝8╨ÖBÿ┼÷{@0╕/#└â╪~V§πp<≡k♫á∩g4üÉà↔DR[√á√ü.îºV'X♥9↔øiè²≈τoæ┴0☻ó╪!‼⌡¼'↔ δ'X⌂■OpX¬E╡░├a"√4lB<└♣A╪º╕4íbz♠ìÿ°Γ═àÅ└5äº5æ2§ΩWª

Chạy và gỡ lỗi nó cũng có các bài kiểm tra của Kevin Cruijssen

Chương trình này thực thi chính xác, nhưng nếu bạn sử dụng công cụ "Uncompress Literals", nó sẽ làm hỏng mã nguồn. Nó kết thúc bằng cách đặt hai chữ nguyên ngay cạnh nhau, làm cho một chữ lớn hơn. Tất nhiên, điều đó không làm điều tương tự như chương trình ban đầu.

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.