Yapboz Dört dörtlü


21

Dört ayak bulmaca verilen bir maksimum 0'dan her sayısına ulaşmak için tam dört 4s (ve başka hiçbir numara) ve operasyonların tanımlanmış bir dizi kullanarak içeren bir popüler eğlence matematiksel bulmaca.

Bu versiyonda, sadece aşağıdaki operatörlere izin verilir:

  • Herhangi bir gruplandırma sembolü kullanılabilir
  • Toplama ( +), Çıkarma ( -), Çarpma ( *), Bölme ( /)
  • Faktör ( !), Gama fonksiyonu ( Γ)
  • Üstel ( ^), Karekök ( )
  • Birleştirme (örn. 44İki 4saniyedir)
  • Ondalık nokta (örn. 4.4İki 4s), Üst Çubuk (örn. .4~ = 4/9)

Standart operasyon sırası uygulanır.

Programınız, 0 ile 100 arasında bir giriş verildiğinde, bu giriş için doğru bir çözüm üretmelidir. Program herhangi bir girişe geçersiz bir çözüm veriyorsa, bu program geçersizdir.

Örneğin, bir giriş ile 0programınız üretebilir 44-44.

Harici modüllerin kullanımına izin verilmez. Sadece _.4~bariyer operatörü için izin verilir - yani, bir tanesi 4ondalık basamağın arkasında olabilir.

Bu kod golf, bu yüzden en kısa çözüm kazanır.


Düzenleme : Ekstra açık olması için, programın tam olarak dört 4saniyeye uygulanan yukarıdaki işlemlerden oluşan bir çıktı vermesi gerekir - daha fazla değil, daha az değil. Ayrıca, .4 = 4/10geçerli bir terimdir ve yalnızca birini kullanıyor olarak sayılır 4.


yuvarlama işlemi yok mu? :-(
John Dvorak

@JanDvorak err, hayır, buna izin verilmezdi.
Volatility

hem gama hem de faktoringe izin verilir mi?
John Dvorak

@JanDvorak listelenen her şey (ancak listelenen şeyleri) kullanabilirsiniz.
Volatility

faktoringin önek işlevi olarak çıkmasına izin veriliyor mu ( !(4)yerine (4)!)?
John Dvorak

Yanıtlar:


6

GolfScript (129 karakter *)

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

Bilgisayarımda çalışma süresi 4 dakikadır. .&Hemen hemen sonra benzersiz bir işlem ekleyerek iki karakterin maliyetinde ılımlı bir hızlanma elde edilebilir %+.

Ben için önceden kodlanmış ifadeler kullanmak 1, 2, 4, 6, 24, 120, ve 44, ve sadece kullananlar kadar dinlenme kurmak +, *ve -. Bu şekilde programın kendisinde tamsayı olmayan bir aritmetik işlem yapmam gerekmez. Daha basit önceden kodlanmış değerleri başlangıçta yerleştirerek daha basit ifadeler almaya çalıştım.

Bu değerlerin hepsine ihtiyaç vardır ve her iki çıkarma yönünü de desteklemek gerekir ( complex_expression - simple_expressionve tersi). Ayrıca parantez gerektiren bazı işlemleri de (özellikle de a*(b-c)) içermesi gerekir , bu yüzden tüm alt ifadeleri ayırt etmeden ayraçlıyorum.

* Programın UTF-8 kodlu olduğunu varsayarsak Unicode kod noktalarını sayıyorum ve tercümanı çalıştırmak için Ruby'nin yeni bir sürümünü kullanmıyorsanız, gerçekten ASCII karakterleri olarak gördüğü gerçeğini halının altına fırlatıyorum. Bu konuda çok endişeleniyorsanız, GGamma ve vsqrt için kullanın .

Kesinlikle 44, 11as 44/4ve 71as karşılığında takas edebilirim √(Γ√4+(ΓΓ4+Γ√4)!)ama bu iyi bir takas değil.


7

Python 155 bayt

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)

İlk üç bayt ( \xEF\xBB\xBF), UTF-8 baytlık sipariş işaretidir, ancak dosyanın bir ANSI formatında kaydedilmesi gerekir. ûVe âolarak yorumlanır olacak ve Γsırasıyla içinde cp437 ve cp850 sadece herhangi bir Windows kutusu hakkında çalışması gerekir.

Bilgisayarımda çalışma zamanı yaklaşık 0.4s.

Örnek kullanım (dosyayı adlandırın 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 için sonuçlar . Karma yinelenme biçimi nedeniyle 4!, mümkün olduğunca sık kullanmayı tercih eder .

Düzenleme: Γ√4 = 1herhangi bir gruplamaya olan ihtiyacı ortadan kaldırarak ve √4 = 2artık gerekmeyen şeyleri kaldırarak ekleyerek birkaç bayt kurtardı .


4

J, 175 161 karakter

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

Kontrol edilen format (v op v) op (v op v)nerede v={0.4 4/9 1 2 4 6 24}veop={+ - * /}

tam 0..100 sonuç


.4Bu oyun için geçerli bir sayı olduğunu sanmıyorum .
John Dvorak

@JanDvorak öyle - belki de daha net hale getirmeliydim
Volatility
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.