Bir numarayı ifade etme
60'lı yıllarda Fransızlar TV oyunu şovu "Des Chiffres et des Lettres" i icat etti. Şovun Rakamlar bölümünün amacı, yarı rastgele seçilen bazı sayıları kullanarak 3 basamaklı belirli bir hedef sayıya olabildiğince yaklaşmaktı. Yarışmacılar aşağıdaki operatörleri kullanabilir:
- birleştirme (1 ve 2 12'dir)
- ek (1 + 2 3'tür)
- çıkarma (5-3 = 2)
- bölünme (8/2 = 4); bölünmeye yalnızca sonuç doğal bir sayı ise izin verilir
- çarpma (2 * 3 = 6)
- parantezler, işlemlerin düzenli önceliğini geçersiz kılmak için: 2 * (3 + 4) = 14
Verilen her sayı yalnızca bir kez kullanılabilir veya hiç kullanılamaz.
Örneğin, hedef sayı 728 tam olarak şu sayılarla eşleştirilebilir: 6, 10, 25, 75, 5 ve 50 şu ifadeyle:
75 * 10 - ( ( 6 + 5 ) * ( 50 / 25 ) ) = 750 - ( 11 * 2 ) = 750 - 22 = 728
Bu kod mücadelesinde, belirli bir hedef numaraya mümkün olduğunca yakın bir ifade bulma görevi verilir. 21. yüzyılda yaşadığımız için, 60'lı yıllara kıyasla daha büyük hedef sayıları ve daha fazla sayı ile çalışacağız.
kurallar
- İzin verilen işleçler: birleştirme, +, -, /, *, (ve)
- Birleştirme işlecinin sembolü yoktur. Sadece sayıları birleştirin.
- "Ters birleştirme" yoktur. 69, 69'dur ve 6 ve 9'a bölünemez.
- Hedef sayı pozitif bir tamsayıdır ve maksimum 18 hane içerir.
- Çalışmak için en az iki sayı ve en fazla 99 sayı vardır. Bu sayılar aynı zamanda en fazla 18 basamaklı pozitif tamsayılardır.
- Hedef sayının sayılar ve operatörler cinsinden ifade edilememesi (aslında büyük olasılıkla) mümkündür. Amaç mümkün olduğunca yaklaşmaktır.
- Program makul bir süre içinde bitmelidir (modern bir masaüstü bilgisayarda birkaç dakika).
- Standart boşluklar geçerlidir.
- Programınız bu bulmacanın "puanlama" bölümündeki test seti için optimize edilmemiş olabilir. Bu kuralı ihlal ettiğinden şüphelenirsem test setini değiştirme hakkını saklı tutarım.
- Bu bir kodagolf değil .
Giriş
Giriş, herhangi bir uygun şekilde biçimlendirilebilen bir sayı dizisinden oluşur. İlk sayı hedef sayıdır. Geri kalan sayılar, hedef sayıyı oluşturmak için birlikte çalışmanız gereken sayılardır.
Çıktı
Çıktı için gereksinimler:
- Aşağıdakilerden oluşan bir dize olmalıdır:
- giriş numaralarının herhangi bir alt kümesi (hedef sayı hariç)
- herhangi bir sayıda operatör
- Çıktının boşluk içermeyen tek satır olmasını tercih ediyorum, ancak gerekirse uygun gördüğünüz gibi boşluklar ve yeni satırlar ekleyebilirsiniz. Kontrol programında dikkate alınmazlar.
- Çıktı geçerli bir matematiksel ifade olmalıdır.
Örnekler
Okunabilirlik için, tüm bu örneklerin tam bir çözümü vardır ve her giriş numarası tam olarak bir kez kullanılır.
Giriş: 1515483, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Çıkış:111*111*(111+11+1)
Giriş: 153135, 1, 2, 3, 4, 5, 6, 7, 8, 9
Çıkış:123*(456+789)
Giriş: 8888888888, 9, 9, 9, 99, 99, 99, 999, 999, 999, 9999, 9999, 9999, 99999, 99999, 99999, 1
Çıkış:9*99*999*9999-9999999-999999-99999-99999-99999-9999-999-9-1
Giriş: 207901, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
Çıkış:1+2*(3+4)*(5+6)*(7+8)*90
Girdi: 34943, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
Çıktı: 1+2*(3+4*(5+6*(7+8*90)))
Ama aynı zamanda geçerli çıktı:34957-6-8
puanlama
Bir programın ceza puanı, aşağıdaki test seti için ifadelerin göreli hatalarının toplamıdır.
Örneğin, hedef değer 125 ise ve ifadeniz 120 veriyorsa, ceza puanınız abs (1 - 120/125) = 0,04 olur.
En düşük puana (en düşük toplam bağıl hata) sahip program kazanır. İki program eşit şekilde biterse, ilk başvuru kazanır.
Son olarak, test seti (8 vaka):
14142, 10, 11, 12, 13, 14, 15
48077691, 6, 9, 66, 69, 666, 669, 696, 699, 966, 969, 996, 999
333723173, 3, 3, 3, 33, 333, 3333, 33333, 333333, 3333333, 33333333, 333333333
589637567, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
8067171096, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199
78649377055, 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462, 506, 552, 600, 650, 702, 756, 812, 870, 930, 992
792787123866, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169
2423473942768, 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 2000000, 5000000, 10000000, 20000000, 50000000
Önceki benzer bulmacalar
Bu bulmacayı oluşturduktan ve kum havuzuna gönderdikten sonra, önceki iki bulmacada benzer (ama aynı değil!) Bir şey fark ettim: burada (çözüm yok) ve burada . Bu bulmaca biraz farklı, çünkü birleştirme operatörünü tanıtıyor, tam eşleşme aramıyorum ve kaba kuvvet olmadan çözüme yaklaşmak için stratejiler görmeyi seviyorum. Bence zorlayıcı.