Korzystając z naszych znanych symboli matematycznych: +, x, nawias i dowolna liczba wymierna, łatwo jest utworzyć wyrażenia, które zostaną ocenione na określoną liczbę. Na przykład 1+(2x3)=7
, (1+2)+(3x6.5)=22.5
i tak dalej. Nudno.
W tym wyzwaniem, użyjemy nowego operatora: ±
. Zastosowanie ±
w wyrażeniu oznacza, że trzeba ocenić ekspresję poprzez zastąpienie ±
„s przez +
lub -
na wszystkie możliwe sposoby i powrót zbiór wszystkich możliwych wartości. Na przykład:
1±2±3 = {-4,0,2,6}
ponieważ1±2±3
może być dowolny1+2+3
,1+2-3
,1-2+3
i1-2-3
, a ich wartości są6,0,2,-4
odpowiednio.(±2)x(2±3) = {-10,-2,2,10}
z podobnych powodów.
Teraz, jak się okazuje, biorąc pod uwagę każdy zestaw różnych liczb rzeczywistych, to jest możliwe, aby utworzyć wyrażenie z +
, x
, (
, )
, ±
, i liczbami rzeczywistymi, że ma wartość danego zestawu.
Zadanie
Twoim zadaniem jest napisanie programu lub funkcji w dowolnym języku, który zabierze sekwencję (lista / tablica / dowolny wygodny format) z liczb całkowitych i wyprowadza wyrażenie (jako ciąg) składający się z +
, x
, (
, )
, ±
, i liczb wymiernych który ocenia na zbiór podanych liczb.
- Pamiętaj, że dokładny znak
±
nie ma znaczenia; możesz użyć dowolnej innej postaci, o ile można ją odróżnić od innych używanych postaci. Musisz jednak wspomnieć, jakiej postaci używasz w swoim zgłoszeniu. - Dane wejściowe mogą składać się z przybliżeń dziesiętnych (do rozsądnej dokładności) użytych liczb wymiernych.
- Dane wejściowe i wyjściowe można pobierać na dowolny ze standardowych sposobów.
- Standardowe luki są zabronione.
- Możesz założyć, że podane liczby całkowite będą różne i podane w porządku rosnącym.
- Dane wyjściowe mogą zawierać spacje i znaki nowej linii.
Zwycięskie kryterium
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
Przykłady
Wejście | Możliwe wyjście ------------- + ----------------------------- [1,2,3] | 2 ± 0,5 ± 0,5 [-7, -3,1,21] | (1 ± 2) x (3 ± 4)
Pomysł zaczerpnięty z pytania z Turnieju Miast, jesień 2015 .
źródło
Odpowiedzi:
Python 2 , 56 bajtów
Wypróbuj online!
?
Oznacza±
. Przykładowe użycie:Chodzi o to, że możemy zrobić wyrażenie
E
i dołączyć nową wartośćh
do zestawu wartości, wykonując to(.5±.5)*(E+-h)+h
.źródło
+-h
nie tylko-h
? To znaczy, dlaczego nie zrobić+
a-
i usunąć ten,-
który jest obecnie w programie?-
operator w wyrażeniu.Haskell , 52 bajty
Wypróbuj online!
Wykorzystuje
?
do±
. Przykład:Funkcja
shows
działashows a b=(show a)++b
- sztuczka, której nauczyłem się od Lynn.źródło
Haskell , 58 bajtów
Używanie
#
dla±
, ponieważ jest to jeden bajt mniej.f
pobiera listę liczb całkowitych i zwraca ciąg znaków.Wynik ma postać
n+(.5#.5)x(rest)
, gdzien
jest pierwszym elementem listy irest
reprezentuje wszystkie pozostałe zn
odejmowanymi od siebie.Wypróbuj online!
źródło
Galaretka , 29 bajtów
Drukuje v + (0,5¤0,5) × (i 1 + (0,5¤0,5) × ((i 2 + (0,5¤0,5) × (... (i n ) ...))), gdzie v jest pierwszą liczbą w tablica wejściowa i n jest n- tą przyrostową różnicą między elementami tablicy wejściowej.
Wypróbuj online!
W jaki sposób?
źródło
05AB1E , 25 bajtów
Wypróbuj online!
Wyjaśnienie
Budowanie wyrażenia z prawej strony kończy się niestety taką samą liczbą bajtów
0¸«¥¤s¨RvX;Dy"ÿ+(ÿ±ÿ)*(ÿ)
. 8 bajtów użytych do instalacji jest tutaj dużym marnotrawstwem.źródło
Haskell, 54 bajty
znak + - to
'?'
. przykład:źródło
JavaScript (ES6),
5651 bajtówNa podstawie formuły @ JonathanAllan.
@
oznacza±
.źródło