To pytanie pochodzi od gry, w którą lubię grać, gdy tkwię w długich spotkaniach telefonicznych.
Biorąc pod uwagę dowolne dwa razy z zegara 24-godzinnego (od 00:00 do 23:59), ile prawidłowych równań matematycznych można wygenerować za każdym razem pomiędzy tylko przy użyciu podstawowych operacji arytmetycznych?
Dane wejściowe: dwa czterocyfrowe ciągi znaków (bez dwukropka) reprezentujące prawidłowe czasy w cyklu 24 godzinnym.
Przykłady:
Dla danych wejściowych = 0000, 1300
03:26 produces: "0+3*2=6" and "03*2=6" etc.
11:10 produces quite a few, including: "1*1=1+0" and "1=1=1^0" and "1=11^0" etc.
12:24 produces: "1/2=2/4" and "1=(2*2)/4" etc.
Prawidłowe operacje to:
- dodanie
- odejmowanie
- mnożenie
- podział (zmiennoprzecinkowy)
- potęgowanie
- Factorial
Inne dopuszczalne symbole
- Zdanie wtrącone
- Znaki równości
Najkrótszy kod wygrywa.
Notatki
- Celem jest znalezienie liczby prawidłowych wyrażeń między dwa razy, a nie liczby, które zawierają poprawne wyrażenie.
- Dwa razy podane jako dane wejściowe są zawarte w zakresie czasów.
- Cyfry można grupować w dowolny sposób, więc „1223” może być „12 23” lub „1 2 23” lub „1 223” itd. Itd.
- Możesz użyć dowolnej liczby nawiasów.
- Możesz użyć więcej niż jednego
=
znaku. Na przykład czas11:11
ma prawidłowe wyrażenie1=1=1=1
. - Jeśli po raz pierwszy nastąpi chronologicznie po raz drugi, przedział czasu powinien się zawinąć, jakby przechodził do następnego dnia.
- Liczby muszą pozostać w oryginalnej kolejności - nie można ponownie porządkować cyfr.
- Podczas grupowania liczb, zero może być absolutnie pierwszą cyfrą, w takim przypadku są one ignorowane („0303” zgrupowane jako „03 03” to tylko dwie cyfry o wartości 3.)
- NIE WOLNO używać znaku minus jako jednoznacznej negacji. Dlatego też „12:01” NIE daje „1-2 = - (01)”, ale NIE „1-2 = 0-1”.
- NIE MOŻESZ dodawać kropek dziesiętnych do cyfr. Dlatego też „12:05” NIE produkuje „1/2 = 0,5”.
- Bez łączenia silni - po cyfrze może następować najwyżej jedna „!”, Nie więcej, w przeciwnym razie wiele razy miałoby nieskończone rozwiązania. Np .: „5!” jest ważny, ale „5 !!” nie jest poprawny.
code-golf
expression-building
clock
nobillygreen
źródło
źródło
0000 1300
należy wyprowadzić równania0000
i1300
uwzględnić je w obliczeniach?Odpowiedzi:
Python3, 363 znaków
Ponieważ do dziś nie udzielono odpowiedzi, oddaję to, co dostałem. Niestety blok try / try jest zbyt gruby, nie znalazłem tam sposobu na zapisanie znaków. To naprawdę trudne z zagnieżdżonymi pętlami, nie wszystko można zrobić za pomocą list, tak myślę, ale może ktoś może mi powiedzieć, jak to zrobić.
Jednak sam ograniczyłem wyzwanie do używania tylko podstawowej matematyki „+ - * /” i żadnych nawiasów.
Mój pełny kod (mam nadzieję, że coś wyjaśniającego) na temat tego CodeGolf można znaleźć na moim pastebin .
źródło