四つんばいパズル


21

4つの4パズルは、 0から所定の最大値まですべての数に到達するために正確に4つ4S(なし他の数)および動作の定義されたセットを使用することを含む人気のある娯楽数学パズルです。

このバージョンでは、次の演算子のみが許可されます。

  • 任意のグループ化記号を使用できます
  • 加算(+)、減算(-)、乗算(*)、除算(/
  • 階乗(!)、ガンマ関数Γ
  • べき乗(^)、平方根(
  • 連結(例:442 4秒)
  • 小数点(例えば4.42である4、オーバーバーS)(例えば。.4~ = 4/9

操作の標準順序が適用されます。

0〜100の範囲の入力が与えられた場合、プログラムはその入力に対する正しいソリューションを生成する必要があります。プログラムが入力に対して無効なソリューションを出力した場合、そのプログラムは無効です。

たとえば、入力がの0場合、プログラムはを生成し44-44ます。

外部モジュールの使用は許可されていません。_.4~オーバーバー演算子にのみ許可されます-つまり4、小数点の後ろにできるのは1つだけです。

これはコードゴルフであるため、最短のソリューションが優先されます。


編集:明確にするために、プログラムは上記の操作のセットを正確に 4 4秒間に適用して出力する必要があります-これ以上でもそれ以下でもありません。また、.4 = 4/10は有効な用語であり、1つのみを使用していると見なされ4ます。


丸め操作はありませんか?:-(
ジョンドヴォルザーク

@JanDvorak err、いいえ、それは許可されません。
ボラティリティ

ガンマと階乗の両方が許可されていますか?
ジョンドヴォルザーク

@JanDvorakリストされているすべてのもの(リストされているもののみ)を使用できます。
ボラティリティ

!(4)ではなく(4)!)接頭辞関数として階乗を出力できますか?
ジョンドヴォルザーク

回答:


6

GolfScript(129文字*)

[4.`2'√4'24'4!'6'Γ4'1'Γ√4'120'ΓΓ4']2/:F{.F=[[44.`]]*\{`{+{'+*-'1/{:^;.[~@[\]{'()'1/*}%^*@@^~\]\}/}:|~2/~\+|;}+F/}%+}3*\{\0==}+?1=

実行時間は、PCで約4分です。の.&直後に一意性操作を追加することにより、2文字のコストで中程度の高速化を実現できます%+

私はのために事前にコード化された表現を使用し124624120、と44、とだけ使用したものからアップ休む構築+*-。このように、プログラム自体で非整数演算を行う必要はありません。単純な事前コード化された値を最初に配置することで、より単純な式を取得しようとしました。

これらの値はすべて必須です、両方の減算方向をサポートする必要があります(complex_expression - simple_expression逆も同様です)。また、括弧を必要とする操作(特にa*(b-c))を含める必要があるため、すべての部分式を無差別に囲みます。

*プログラムがUTF-8でエンコードされていると仮定してUnicodeコードポイントをカウントし、最新バージョンのRubyを使用してインタープリターを実行しない限り、実際にASCII文字として処理するという事実をじゅうぶんにブラッシングします。これが非常に心配な場合はG、ガンマとvsqrtに使用してください。

まあ、厳密にはas およびas と44引き換えに削除できますが、それは良いトレードオフではありません。1144/471√(Γ√4+(ΓΓ4+Γ√4)!)


7

Python 155バイト

h={4:'4',24:'4!',6:'â4',.4:'.4',1:'âû4',4/9.:'.4~'}
f={}
def g(r,s='24',y='4!'):f[eval(s)]=y;[g(r-1,s+o+`k`,y+o+h[k])for k in h for o in'/*-+'if r]
g(3)

最初の3バイト(\xEF\xBB\xBF)はUTF-8バイト順マークですが、ファイルはANSI形式で保存する必要があります。ように変換されますとにそれぞれCP437CP850だけで、任意のWindowsボックスについて取り組むべきです。ûâΓ

実行時間は、私のコンピューターでは約0.4秒です。

使用例(ファイルに名前を付けるfour_fours.py):

$ python
>>> from four_fours import f
>>> f[39]
'4!+4!/.4/4'
>>> f[87]
'4!*4-4/.4~'
>>> for i in range(101): print i, f[i]
0 4!+4!-4!-4!
1 4!+4!/4!-4!
2 4!-4!+Γ4-4
3 4!-4!+4-Γ√4
4 4!+4!/Γ4-4!
.
.
.
96 4!+4!+4!+4!
97 4!*4!/Γ4+Γ√4
98 4!*4+Γ4-4
99 4!*4+4-Γ√4
100 4!*4!/Γ4+4

0..100の結果。ハッシュの反復方法により4!、可能な限り頻繁に使用することを好みます。

編集:を追加Γ√4 = 1してグループ化の必要性を排除し、不要になったを削除して、バイト数を節約しました√4 = 2


4

J、175の 161文字

   f=.')',~'(',;@((<;._2'+ - * % .4 .4~ g(r(4)) r(4) 4 g(4) 4! ( ) '){~(143402 A.i.9)
      /:~(12,11,0,6$0 4 4)+(9$4 7 7)#:((,@(+/,-/,*/,%/)~)^:2,0.4 4r9 1 2 4 6 24)&i.)

   f 1
(.4+.4)+(.4%r(4))

   f 42
(r(4)+4)+(g(4)*g(4))

   f 100
(r(4)+r(4))+(4*4!)

チェック形式は(v op v) op (v op v)どこv={0.4 4/9 1 2 4 6 24}op={+ - * /}

完全な0..100の結果


.4このゲームでは有効な数字ではないと思います。
ジョンドボラック

@JanDvorakそれは-多分私はそれをより明確にすべきだった
ボラティリティ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.