アメリカの大統領は誰でしたか?


56

チャレンジ

1789年4月30日から2019年8月21日までの1日を入力として受け取り、その日の米国大統領であった出力として戻るプログラムを作成します。

ノート

米国大統領リスト、氏名の形式、大統領の在任期間については、以下を参照してください。

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

大統領は、初日が含まれ、最終日が除外されることを意図しています。たとえば、「1861年3月4日-1865年4月15日、エイブラハムリンカーン」は、リンカーンが1861年3月4 から1865年4月14日まで大統領だったことを意味します。

これはコードゴルフで、各言語で最短のプログラムが勝ちます。

入力: "1865年2月7日"出力: "エイブラハムリンカーン"


18
こんにちは、CGCCへようこそ!これは素晴らしい課題のように見えますが、すべての課題は自己完結型でなければなりません。ウィキペディアのリンクの代わりに、ここにすべての大統領とその期間のリストを用意してください(できればコードブロックで、スクロールバーが表示されます)。また、柔軟な入力形式を使用することをお勧めします。これにより、人々はどのような形式の文字列、3つの緩やかな整数、日付オブジェクトなど、選択した言語にどのように適合するかを入力できます。
ケビンクルーッセン

3
また、将来の課題については、まず提案された課題のサンドボックスに投稿するのが最善です。そこで、メインに投稿する前に、フィードバックを受け取って課題を改善することができます。滞在を楽しんで!:)
ケビン・クルーッセン

11
IO形式の柔軟性はどのくらいですか?
qwr

15
WolframAlpha["president on "<>#]&純粋なMathematicaはどこかに組み込まれていると思いますが、それが呼ばれるものを見つけるまで、私はW | Aに固執しています。
パベル

8
その場合の@Pavelはそれを作るWolframAlpha["US president on "<>#]&私のため出力が正しくない原因
jonatjano

回答:


27

PHP、936バイト

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';

オンラインでお試しください!


テスト: オンラインで試してみてください!

テスト用のコードは、同じロジックですが、交換するのは少し違うdie(...)return...テストを超えるので、私ができるループ。


私は、開始大統領の日付マイナスの形式で、1日持つ文字列を作成しているYYYYMMDDと区切らそれで社長の名前を-。例:17890429-George Washington-17970303-John Adams-18010303-Thomas Jefferson-...

この文字列はgzdeflateを使用して圧縮され、圧縮出力もbase-64に変換されるため、すべての文字は印刷可能なASCIIであり、ここに投稿するかTIOで使用できます。

スクリプトでは、文字列は分割され-、ループされます。ループの繰り返しごとに:

  • $d現在の反復値(社長の開始日-1日)に設定され、ループ変数($i)が1増加します。
  • 入力日付がより大きい場合$d$m次の反復値(の社長名$d)に設定され、ループ変数($i)が再び1増加します。これにより、ループは社長名を取得できますが、繰り返しでそれらを飛び越えます。
  • 入力日付がを超えない場合$d、前の反復が正しいプレジデントであったため、関数$mを使用して印刷されるためdie、名前を印刷した後にプログラム全体が停止します。

最後に、ループが終了した場合(no dieが呼び出されたことを意味します)、最後の大統領の名前が印刷されます。これは、前の大統領のどれもが一致していないことがわかっJanuary 19, 2017ているためですJanuary 1, 3999



PHPはわかりませんが、base64を削除して、印刷できない生の文字を挿入できます(hexdumpを指定できます)。
MilkyWay90

@RyanMoore、より良い圧縮された文字列のおかげで、悲しいことに私はもうこの答えを制御できず、多くのアップ投票(そしていくつかのダウン投票も)を得た私の目的はそれから削除されました(このリビジョンでは)。ですから、ゴルフの可能性はまだ残っていますが、この回答を編集したりゴルフしたりすることはもうありません。
ナイト2

@ MilkyWay90、それは完全に可能です。しかし、ここに読みやすいコードとTIOリンクを用意するために、このバージョンを意図的に投稿しました。基本的に、これはハードコアな答えを意味するものではありませんでした。
Night2

15

バッシュ1229 1124バイト

@GammaFunctionの優れたコメント付きの-103バイト、非生産的な置換(Adams)の削除、および各大統領職の絶対日付ではなく前の日付からの日付オフセットを使用するようにコードをリファクタリングします。

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

オンラインでお試しください!

多くの手動圧縮:)


さらにいくつか:$ IFSで$ Xを分割するX=($X)ので、ループを取り除きfor z in $Xます。を使用し[ -lt ]、の$T代わりに使用します${T[0]}最後の数行は、全体で1191バイトである必要があります
GammaFunction

1092!月の構文解析を簡略化しました(たとえば、6月を過ぎてJで始まる場合、7月までにテストする必要があります。テストを[ ${T#${M[++i]}*} ]。に変更しました。12月を完全に終了できます)。また:、いくつかの名前の先頭を含めました(これは、の代わりに:Johnすべての区切り文字を作成するために行います)。:#
GammaFunction

12

T-SQL、1169 981 979 977バイト

神聖な牛、私はSQLの文字列圧縮を見つけました(SQL 2016以降で利用可能):

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

保存されませんかなりおそらくそれは/ deconvert変換するのにかかるコードの量に、私はそれがかもしれない期待しなだけ。

元のバージョンは次のとおりです。これは、エンコードされた文字列が解凍された後に実行されるコード(1169バイト)と同等です。

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

改行は読みやすくするためのものです。

IOルールに従って、入力はフィールド持つ既存のテーブルから取得されます。入力日付は8桁の数値としてフォーマットされます。dIINTYYYYMMDD

バイトを節約するために使用したいくつかのトリック:

  • 社長を降順に並べ替えたのでORDER BY、コードに追加する必要はありませんでした
  • 各用語の「開始」日付で1を引いたので、<代わりに<=
  • 文字列分割は、大きなリストよりもはるかに短くVALUES()なりますが、文字列をSUBSTRINGandで区切る必要がありLEFTます。
  • 編集:に変更SUBSTRING()して2バイトを保存しましたSTUFF()

SQLでBase64でエンコードされた圧縮文字列を使用する

SQLヒントスレッドに追加)

そのため、Microsoft はGZIPを処理するSQL 2016に関数COMPRESSDECOMPRESS関数を追加しました。問題は、(SQL フィールドに格納されている場合)バイトVARBINARYは短いが、文字(生の16進数)で表示される場合は長いですが、ゴルフに適さないを返すことです。VARBINARY

Base64への変換が明らかに答えですが、短くシンプルな実装を見つけることは困難でした。私はこの古い答えをSOに基づいて作成しました。これにより、必要なもののほとんどが得られますが、新しいGZIP関数は使用されません。新しい機能を適切な場所に挿入して、少しゴルフをする必要がありました。

独自のコードでこのメソッドを使用するには:

--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))

これは、エンコードされた文字列を圧縮解除するための75 73バイトの余分なコードであるため、非常に長い文字列に対してのみこれを使用することは明らかです。

編集:のCAST代わりに、解凍コードに2バイトを保存しましたCONVERT


12

Excel、1243 1206 1180バイト

すべての日付から減算することにより-37バイト
-減算値をいじることにより-26バイト

=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")

Excelは1900年以前の日付を好まないためA1、入力は次の形式のセルにありますYYYYMMDD

バイトを追加しない日付や名前の圧縮方法は知りません。「すべての日付から[値]を引く」方法は、誰のソリューションにも適用できます。


同じ原理を使用して、Googleスプレッドシートで1102バイトのソリューションを見つけました。ExcelにはSplit関数がないため、翻訳できません。

=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
Excelの知識があまりありません(ローカルExcelはオランダ語なので、確認できません)が、これは正しいですか?これは、日付の下位一致ではなく完全一致を検索しませんか?たとえば、この出力は何でしょう19000101か?
ケビンクルーッセン

3
@KevinCruijssenいいえ、完全一致を使用するかどうかを決定するオプションの3番目の引数match_typeMATCH()あります。その引数を除外する場合、「以下」の一致であるデフォルトが使用されるため、このコードは正しいです。
BradC

@BradCあ、それは知らなかった。説明してくれてありがとう!私から+1。:)
ケビンクルーッセン

1
それぞれから固定値を減算する素晴らしいトリック、それが私のものにも役立つかどうかを確認する必要があります。
BradC

9

05AB1E587 584 568 バイト

.•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è

入力は、形式の連結された日付ですyyyyMMdd(つまり20190821、2019年8月21日)。

@Grimyのおかげで-16バイト。

オンラインそれを試してみたり、さらにいくつかのテストケースを確認してください

説明:

大統領のリストを時系列で作成することから始めます。

.•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)

次に、すべての日付のリストを形式の整数として作成しますyyyyMMdd(順序はこのリストには関係ありません):

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]

次に、入力を使用して、リスト内の日付に基づいて出力President-nameを決定します。

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)

(セクション鉱山のこの05AB1Eのヒントを参照してください?文字列ではない辞書の一部を圧縮する方法?大きな整数を圧縮する方法、およびどのように整数のリストを圧縮する?すべての圧縮の文字列、整数、およびリストがどのように機能するかを理解すること。


1
@Grimy本当にコピーできなかったので、あなたが何をしたかを見た後、もう一度自分で圧縮しなければなりませんでした。私はすべての大統領の名前を確認し、すべての手紙を受け取った。しかし、最初にタイトルを付けることでバイト数を節約し、もう存在しない小文字を使用してドットと大文字に変換するのに最適な方法です。-16をありがとう!
ケビンクルーッセン

これらの名前の多くは辞書に載っている言葉であり、大幅に改善されています。まず、-32
Grimmy

1
@Grimyはおそらく来週どこかでそのアプローチを試みます。現在食べようとしていますが、明日は締め切りのために仕事で忙しくなります。
ケビンクルーッセン

1
464。これはまだ改善可能ですが、Jelly's 426に勝るとは思いません。文字列の圧縮が優れています。
グリムミー

7

ゼリー 431の428 427  426 バイト

“¡Ẹị’ḃ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Ỵ¤

YYYYMMDD大統領の名前を印刷する文字列を受け入れる完全なプログラム。

オンラインでお試しください!または(Kevin Cruijssenの) test-suiteを参照してください。

どうやって?

“¡Ẹị’ḃ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

私からプラスワン。これはすごいです

ありがとう!まとめるのにかなり時間がかかった。
ジョナサンアラン

5

ゼリー、454バイト

“¡#<Ḷ“¡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Ðþɼ©ṢƈḅṬḊṬɠṅÞ»Ỵ¤

オンラインでお試しください!

YYYYMMDD形式の日付を引数として受け取り、答えを含む文字列を返すモナドリンク。

テストケース@KevinCruijssenの05AB1E回答から引用)。


4

JavaScript(Node.js) 855 851  803バイト

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)

オンラインでお試しください!

どうやって?

圧縮された文字列には、89個の値のリストが含まれています。

最初の44の値は、日数で表され、32のベース(これが最も圧縮率が高いベース)でエンコードされた大統領の命令の長さです。

次の45個の値は、小文字の社長名です。その後、タイトルケースが適用されます(@KevinCruijssenの答えから借りたトリック)。


タイトルケースのため、マッキンリーは「マッキンリー」として出力します。
TheJim01

@ TheJim01これを報告してくれてありがとう。修正されました。
アーナルド

3

SOGL、475 バイト

⁵æ“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←

ここで試してみてください!

日付ロジックはおそらく少し改善されるでしょう。


3

PHP、888バイト

$_=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);

デモを試す


3

05AB1E464 444 442 418バイト

Kevin Cruijssenの答えからアイデアを盗むことにより、 15バイト

クロス444はまだ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è

オンラインでお試しください!

パート1:名前

05AB1Eには、2種類の文字列圧縮があります。

  • Base-27文字列は各文字を約0.6バイト(技術的にはlog(27)/ log(255))でエンコードしますが、含めることができるのは[a-z ](小文字とスペース)だけです。
  • 辞書文字列は、一般的な英語の単語(およびその前のスペース)を2バイトでエンコードし、すべてのASCII文字をそれぞれ1バイトでエンコードします(これらは変更されずにそのまま渡されます)。また、byteを使用してÿ、スタックから値をポップし、文字列に埋め込むこともできます。

両方の最適な組み合わせを使用します。あるエンコーディングから別のエンコーディングに切り替えるとオーバーヘッドが発生するため、個々の名前ごとに最短のエンコーディングを選択するよりも複雑です。例えば:

  • ing中には、Harding Calvin辞書文字列の3つのバイト対ベース-27で〜1.8バイトを取ります。しかしHardCalvin両方とも辞書に含まれているためing、辞書文字列の内部には圧縮されないままになります。
  • (以降辞書文字列にのみ2対ベース27に〜3バイトを取る辞書です)。ただし、辞書にも辞書にも含まれていないため、ベース27としてエンコードされます。HerbCoolidge Herbert HooverherbCoolidgeHooverHerb

base-27文字列のみに含めることができる制限を回避するために、[a-z ]いくつかの文字に特別な意味を割り当てます。彼らの間で、44人の大統領は26通すべてを使い果たしましたが、私たちはまだトリックをすることができます:

  • 唯一jの辞書の単語(にあるJamesBenjamin、...)、そのjベース-27文字列は無料です。
  • のみにqあるQuincyので、小文字qは無料です
  • のみにzあるZacharyので、小文字zは無料です
  • のみxであるNixonので、大文字がX(私たちは実際には使用されません)無料です

それでは、コードを見てみましょう。

.•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

これで、45のフルネームのリストが時系列で表示されたので、このパートは完了しました。

パート2:日付

日付の比較を容易にするために、整数に変換します。これは1024 *年+ 32 *月+日を与えるbase-32からの変換で行われます(年の「数字」が32より大きいことは気にしません)。

連続する再選(大統領を変えない選挙)の数のリストから始めます。

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

これらの最初の3つの1は、オバマ、ブッシュ、クリントンのすべてが一度再選されることに対応しています。ローン2は、マッキンリーとセオドア・ルーズベルトの両方が1度再選されたことに対応します(マッキンリーは在職中に死亡し、セオドア・ルーズベルトは副大統領であったため、再選の間に他の選挙はありませんでした)。Franklin D. Roosevelt + Trumanには4が必要ですが、これは就任日が3月4日から1月20日に変わったポイントでもあるため、この特別なケースは後で処理します。

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

1024は1年を意味するため、4096は完全な委任を意味することに注意してください。これは、新たに選出された大統領間の時間差のリストになりました(まだ逆の年代順であるため、数値を負にする必要があります)。

さて、完全な任務を果たさなかった9人の大統領の世話をしましょう(4人は自然な原因で亡くなり、4人は暗殺され、ニクソンは辞任しました)。

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

45088は、1797年3月4日(3月4日の最初の紹介)から1841年4月4日(最初の就任)までの時間差です。次の数字は、9人の死亡/辞職間の時間差です。最後に、43819は、1974年8月9日(ニクソンの辞任)から2017年1月20日(1月20日の最新情報)までの時間差です。

«             # 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

現在、大統領が変更されたすべての日付のリストがあります。順序は少しファンキーです。1933年に開始し、3月4日のイントロダクションを時間的に遡って進み、次に死亡/辞任を時間的にフォワードし、1月20日のイントロに沿って戻ります。ただし、実際には順序は関係ありません。

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

これで完了です。


1
ああ、あなたは今、ゼリーの答えを打ち負かしました!非常に素晴らしい。説明を楽しみにしています。
ケビンクルーッセン

:私は説明(追加@KevinCruijssen
Grimmy

2

、550バイト

✂⊟Φ⪪”}¶⟲φε"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﹪”¶‹ιθχ

オンラインでお試しください!リンクは、コードの詳細バージョンです。ISO形式で入力を受け取ります。説明:

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

2

Stax550 509 502 バイト

ª╠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ª

Kevin Cruijssenのテストも搭載して実行およびデバッグする

このプログラムは正しく実行されますが、「リテラルの圧縮解除」ツールを使用すると、ソースコードが破損します。最終的には、2つの整数リテラルを隣り合わせに配置することになり、1つの大きなリテラルが作成されます。もちろん、元のプログラムと同じことはしません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.