Na mojej lekcji ekonomii wraz z przyjaciółmi lubimy wymyślać sposoby zmiany kolejności cyfr w formacie daty (w formacie MM / DD / RR), aby utworzyć prawidłowe równanie matematyczne. W większości przypadków oprócz konkatenacji możemy używać dodawania, odejmowania, mnożenia, dzielenia, nawiasów i potęgowania.
Twój program powinien zrobić coś podobnego. Program powinien zaimportować bieżącą datę i wstawić operatory, aby wydrukować wyrażenie zgodnie z następującymi regułami.
- Cyfry MUSZĄ być używane w kolejności. Zmiana kolejności cyfr jest niedozwolona.
- Wynikowe wyrażenie musi być matematycznie dokładne.
- Dozwolone jest dodawanie, odejmowanie, mnożenie, dzielenie, potęgowanie i stosowanie nawiasów. Podobnie jest łączenie cyfr. Jednak nie wszystkie operacje są konieczne. Nie można użyć znaku odejmowania, aby cyfra była ujemna (jak
-1+1+11=10
11 listopada 2010 r.). - Program musi zostać uruchomiony w ciągu 60 sekund na standardowej maszynie.
Na przykład to wyzwanie zostało napisane 10 listopada 2015 r. Program zinterpretuje to jako 11/10/15. Przykładowy wynik to (1+1)/10=1/5
.
Bonusy
Możesz pomnożyć liczbę bajtów w kodzie przez 0,9 dla każdego z poniższych programów obsługiwanych przez Twój program.
- Program drukuje wszystkie możliwe wyrażenia, które można utworzyć, oddzielone znakami nowej linii. Pomnóż przez dodatkowe 0,95, jeśli wyrażenia są wymienione w porządku rosnącym dodatkowych symboli.
- Program działa również dla dat MM / DD / RRRR, drukując możliwość z pierwszymi dwiema cyframi roku oprócz możliwości bez. Jeśli premia ta zostanie połączona z pierwszą premią, wszystkie możliwości z pierwszymi dwiema cyframi roku muszą zostać wydrukowane.
- Program wyświetla również równanie gdy istnieje wiele równości (na przykład, w dniu 11 listopada 2011 roku,
1=1=1=1=1=1
zostanie wydrukowana, oprócz możliwości, takich jak1*1=1=1=1=1
,1*1*1=1=1=1
i1*1*1*1=1=1
. Wszystkie takie przypadki muszą być wydrukowane na pierwszej premii mają być osiągnięte. - Program obsługuje konwersję do podstaw między 2 a 16. Zauważ, że jeśli podstawa nie jest 10, wszystkie liczby w wyrażeniu muszą być zapisane w tej samej bazie i
(Base b)
muszą być zapisane po wyrażeniu (b
odpowiednio zamienione).
To jest kod golfowy, więc obowiązują standardowe zasady. Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
Python 3,
424420369363 bajtówBrute wymusza wszystkie możliwe kombinacje operacji na liczbach i zatrzymuje się, gdy je znajdzie.
EDYCJA: Zaoszczędź 4 bajty dzięki @NoOneIsHere
EDYCJA 2: Zapisano 51 (!) Bajtów dzięki @ValueInk
źródło
except:pass
i usunąć spację w[ (p//(len(o)**i))%len(o)]
.__future__
, czy aktualizacja do Python 3 będzie lepsza w twojej sytuacji? Nie rozumiem też, dlaczego cofasz się,o
gdy tworzysz listę operatorów z parenami, którą masz.o=([[x,x+'(',x+')']for x in",+,-,==,*,/,**".split(',')])
za 2 bajty