日付から数式を作成する


19

私の経済学のクラスでは、友人と私は、日付(MM / DD / YY)形式の数字を再配置して有効な数学方程式を作成する方法を考え出します。ほとんどの場合、連結に加えて、加算、減算、乗算、除算、括弧、およびべき乗を使用できます。

プログラムは同様のことを行う必要があります。プログラムは現在の日付をインポートし、演算子を挿入して、次の規則に従って式を印刷する必要があります。

  • 数字は順番に使用する必要があります。数字の再配置は許可されていません。
  • 結果の式は数学的に正確でなければなりません。
  • 加算、減算、乗算、除算、べき乗、および括弧の使用が許可されています。数字の連結も同様です。ただし、すべての操作が必要なわけではありません。減算記号を使用して数字を負にすることはできません(-1+1+11=102010年11月11日など)。
  • プログラムは、標準のマシンで60秒で実行する必要があります。

たとえば、このチャレンジは2015年11月10日に作成されました。プログラムはこれを11/10/15と解釈します。サンプル出力はになります(1+1)/10=1/5


ボーナス

プログラムがサポートする次の各コードごとに、コードのバイト数に0.9を掛けることができます。

  • プログラムは、形成可能なすべての可能な式を改行で区切って出力します。式が追加のシンボルの昇順でリストされている場合は、追加の0.95を掛けます。
  • このプログラムはMM / DD / YYYYの日付でも機能し、年の最初の2桁の可能性に加えて、可能性を印刷します。このボーナスを最初のボーナスと組み合わせる場合、年の最初の2桁のすべての可能性を印刷する必要があります。
  • プログラムはまた、複数の等式がある場合の式(例えば、2011年11月11日に、プリント1=1=1=1=1=1などの可能性に加えて、印刷される1*1=1=1=1=11*1*1=1=1=1および1*1*1*1=1=1すべてのそのような場合には、達成すべき最初のボーナスのために印刷されなければなりません。
  • プログラムは、2〜16の基数への変換をサポートしています。基数が10でない場合、式のすべての数値は同じ基数で (Base b)記述し、式の後に(必要bに応じて置き換えて)記述する必要があります。

これはコードゴルフなので、標準的な規則が適用されます。バイト単位の最短コードが優先されます。


1
どのような操作が許可されていますか?
anOKsquirrel

1
@FryAmTheEggmanこれを複製と呼ぶのに十分な類似性はありますか?私はそうは思いませんでした。なぜなら、このチャレンジは1桁だけを使用せず、特定のRHS(平等のみ)を念頭に置いていないからです。
アークトゥルス

17
DD / MM / YYYY> MM / DD / YYYY。
orlp

3
私はあなたが使用したいと思うの式をあなたが書いたところ、あなたの質問に式を(式は方程式の片側だけで、その後、あなたの質問は本当に意味がありません)。
パエロエベルマン

1
これは特定の日付で可能であることが証明されていますか?
ザックゲイツ

回答:


6

Python 3、424 420 369 363バイト

import time as t
r=range
x=len
d=list(t.strftime('%m%d%y'))
o=([[x,x+'(',x+')']for x in ['']+"+ - == * / **".split()])
n=[]
for l in o:
    n=l+n
o=n
for p in r(x(o)**(x(d)-1)):
    e=''
    for i in r(x(d)-1):
        e+=str(d[i])+o[(p//(x(o)**i))%x(o)]
    e+=str(d[-1])
    try:
        if eval(e)and e.find('=')!=-1:
            print(e.replace('==','=').replace('**','^'))
            break
    except:pass

数値の演算の可能な組み合わせをすべてブルートフォースし、見つかった場合は停止します。

編集:@NoOneIsHereのおかげで4バイト節約

編集2:@ValueInkのおかげで51(!)バイトを保存しました


1
こんにちは、PPCGへようこそ!をインライン化しexcept:pass、でスペースを削除でき[ (p//(len(o)**i))%len(o)]ます。
-NoOneIsHere

から部門をインポートしている場合__future__、Python 3へのアップグレードは状況に応じて適切に動作しますか?また、oあなたが持っている括弧付き演算子のリストを作成しているときに、なぜ反転するのか理解できません。
値インク

@ValueInkはい、おそらくpython 3に変更し、かなりのバイトを節約できます。私が挑戦を始めたとき、私はそれを全くゴルフに集中していなかったので、それは間違いなく短くすることができます。また、プログラムは組み合わせを見つけるまですべての組み合わせをブルートフォースするため、速度が問題になります。oの逆を使用すると、動作が速くなる傾向があることがわかりました。おそらくこれをもう少しダウンさせて、真剣な候補にしようと思います。
テオ

o=([[x,x+'(',x+')']for x in",+,-,==,*,/,**".split(',')])2バイトの場合
ジョナサンアラン

1
@JonathanAllanフー。これらを指摘してくれてありがとう。時間があれば(おそらく明日)コードの修正を行う
テオ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.