Czterech czwórek puzzle jest popularnym rekreacyjnych puzzle matematyczne, które polega na użyciu dokładnie cztery 4s (i żaden inny numer) i zdefiniowany zestaw operacji, aby osiągnąć każdy numer od 0 do danego maksimum.
W tej wersji dozwolone są tylko następujące operatory:
- Można stosować dowolne symbole grupujące
- Dodawanie (
+
), odejmowanie (-
), mnożenie (*
), dzielenie (/
) - Factorial (
!
), funkcja Gamma (Γ
) - Potęgowanie (
^
), pierwiastek kwadratowy (√
) - Łączenie (np.
44
To dwa4
s) - Kropka dziesiętna (np.
4.4
To dwa4
s), Overbar (np..4~ = 4/9
)
Obowiązuje standardowa kolejność operacji.
Twój program powinien wygenerować poprawne rozwiązanie dla danych wejściowych od 0 do 100 włącznie. Jeśli program wyświetli nieprawidłowe rozwiązanie dla dowolnego wejścia, program jest nieprawidłowy.
Na przykład po wprowadzeniu wartości 0
program może wygenerować 44-44
.
Korzystanie z zewnętrznych modułów jest niedozwolone. Dozwolony _.4~
jest tylko operator naziemny - to znaczy tylko jeden 4
może znajdować się za kropką dziesiętną.
To jest golf golfowy, więc wygrywa najkrótsze rozwiązanie.
Edycja : Aby być bardziej przejrzystym, program musi wypisać zestaw powyższych operacji zastosowanych do dokładnie czterech 4
s - nie więcej, nie mniej. Ponadto .4 = 4/10
jest prawidłowym terminem i liczy się jako użycie tylko jednego 4
.
źródło
!(4)
zamiast(4)!
)?Odpowiedzi:
GolfScript (129 znaków *)
Czas pracy na moim komputerze to 4 minuty. Umiarkowane przyspieszenie można uzyskać kosztem dwóch postaci, dodając operację wyjątkowości
.&
bezpośrednio po%+
.Używam PREKODOWANE wyrażeń na
1
,2
,4
,6
,24
,120
, i44
, i zbudować odpocząć od tych, używając tylko+
,*
i-
. W ten sposób nie muszę wykonywać żadnej arytmetyki niecałkowitej w samym programie. Próbowałem uzyskać prostsze wyrażenia, umieszczając prostsze wstępnie zakodowane wartości na początku.Wszystkie te wartości są wymagane † i konieczne jest wsparcie obu kierunków odejmowania (
complex_expression - simple_expression
i odwrotnie). Konieczne jest również uwzględnienie niektórych operacji, które wymagają nawiasów (a konkretniea*(b-c)
), więc wszystkie podwyrażenia dzielę bez rozróżnienia.* Liczę punkty kodu Unicode, zakładając, że program jest zakodowany w UTF-8, i szczotkuję pod dywan fakt, że jeśli nie używasz najnowszej wersji Ruby do uruchomienia interpretera, to naprawdę traktuje go jako znaki ASCII. Jeśli bardzo się tym martwisz, użyj
G
dla Gamma iv
sqrt.† Cóż, ściśle mógłbym usunąć
44
w zamian za11
jak44/4
i71
jak√(Γ√4+(ΓΓ4+Γ√4)!)
, ale to nie jest dobry kompromis.źródło
Python 155 bajtów
Pierwsze trzy bajty (
\xEF\xBB\xBF
) to znak kolejności bajtów UTF-8, chociaż plik należy zapisać w formacie ANSI.û
Iâ
będzie interpretowana jako√
iΓ
odpowiednio w cp437 i cp850 , który powinien działać na niemal każdym polu Windows.Czas działania wynosi około 0,4 s na moim komputerze.
Przykładowe użycie (nazwij plik
four_fours.py
):Wyniki dla 0..100 . Ze względu na sposób iteracji skrótu woli używać go
4!
tak często, jak to możliwe.Edycja: zapisano pewną liczbę bajtów, dodając
Γ√4 = 1
, co eliminuje potrzebę grupowania, i usuwając√4 = 2
, co nie było już konieczne.źródło
JOT,
175161 znakówSprawdzony format to
(v op v) op (v op v)
gdziev={0.4 4/9 1 2 4 6 24}
iop={+ - * /}
pełne wyniki 0..100
źródło
.4
jest to poprawny numer dla tej gry.