Wprowadzenie
Mój kalkulator zachowuje się dziwnie. Czasami, gdy wpisuję 8
, wyświetla się 2
. A czasami, gdy wpisuję 6
, wyświetla się +
. Niektóre przyciski są pomieszane!
Czy ktoś mógłby mi pomóc ustalić, który?
Wyzwanie:
Dane wejściowe: lista niepoprawnych równań z poprawnymi wynikami.
Wyjście: dwa zamienione przyciski.
Na przykład:
dane wejściowe mogą być:
123 = 3
8423 = 252
4+4 = 8
4*7-10 = 417
9/3 = 3
42-9 = -36
Dla których oczekiwane wyniki to: 2
i *
.
Czemu? Ponieważ WSZYSTKIE równania byłyby poprawne, gdybyśmy zamienili 2 i *:
1*3 = 3
84*3 = 252
4+4 = 8
427-10 = 417
9/3 = 3
4*-9 = -36
Zasady konkursu:
- Dane wejściowe mogą mieć dowolny rozsądny format. Może być pojedynczym ciągiem z ogranicznikiem spacji; lista ciągów lub tablica; lista z równaniami i inna lista z poprawnymi wynikami. Twoja decyzja. Proszę podać używany format wejściowy!
UWAGA: Oznacza to również, że możesz wprowadzić przypadek testowy-5--15
jako-5- -15
lub-5 - -15
. Jednak wynikową liczbę--
należy wprowadzić bez spacji lub ze spacją między każdą cyfrą. Tak więc przypadek testowy9119
można wprowadzić jak9119
lub9 1 1 9
(powód91 19
jest niedozwolony, ponieważ można następnie kierować się przestrzenią do znalezienia- -
). Więc spacje są (nieco) opcjonalne i dozwolone. - Format wyjściowy może być również w dowolnym rozsądnym formacie. Mogą być dwie postacie; pojedynczy dwuznakowy ciąg; lista ciągów zawierająca dwa znaki. Twoja decyzja. Ponownie, proszę podać używany format wyjściowy!
- Możesz używać dowolnych 14 wyjściowych mapowań
0123456789+-*/
. Więc możesz nawet wypisać dwie różne liczby całkowite, jeśli chcesz (ponownie, proszę podać zastosowane mapowanie, jeśli istnieje). - Musisz tylko obsługiwać liczby całkowite. Więc nie będzie żadnych przypadków testowych takich jak
1/8=0.125
lub1/8=0
. - Operandy arytmetyczne, które będziesz musiał obsługiwać: add (
+
); odejmowanie (-
); mnożenie (*
lub×
lub·
); podział (/
lub÷
). (UWAGA: Znaki między nawiasami są dodawane jedynie jako wyjaśnienie). - Będziesz musiał obsługiwać liczby ujemne. Środki
-
te można interpretować w równaniu jako zarówno argument matematyczny, jak i wskaźnik ujemny. - Można założyć, podane nieprawidłowe równań i rzekome poprawne równania są zawsze aktualne (więc nie będzie rzeczy, jak
4-/2
i9+-+8
na przykład). - Niepoprawne równania wejściowe mogą zawierać podział przez 0, ale poprawione i oczekiwane równania nigdy nie będą zawierać podziału przez 0.
- Niepoprawne równania wejściowe mogą już być poprawne, nawet jeśli zamienisz zamierzone przyciski z powrotem.
- Dany równanie wejściowy może być istotne dla przycisków do wymiany (jak
4+4=8
i9/3=3
równań, z zamienione przycisków2
i*
). - Możesz założyć, że zawsze będzie tylko jedna możliwa zamiana, którą można wykonać dla danych przypadków testowych.
- Oba przyciski zamiany będą zawsze obecne w co najmniej jednym z niepoprawnych równań.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Przypadki testowe:
Input:
123 = 3
8423 = 252
4+4 = 8
4*7-10 = 417
9/3 = 3
42-9 = -36
Output: 2 *
Input:
4/2 = 6
3/0 = 3
0/8+2 = 4
95-5 = 90
4+2 = 2
Output: + /
Input:
7+4 = 11
5-15 = 46
212-23 = -2121
Output: 1 -
Input:
4+8/2-9*1 = -5
99/3-13 = 20
1+2+3+4 = 10
4-3-2-1 = -6
Output: 2 4
Input:
18/18 = 1
98-8 = 90
55*88 = 4840
-5--15 = 10
Ouput: 5 8
Input:
9119 = 18
5-3 = 513
8*-9 = 152
13116/3 = -1
Output: 1 -
--
. Na przykład 1991 = 2, -/3 = 3
. (Wiele języków myli to z operatorem dekrementacji.)
91 19
przypadku rozwiązania 9--9
i brak spacji w 9119
przypadku rozwiązania 9229
wymaga wiedzy na temat rozwiązania podczas tworzenia przypadków testowych. Gdyby to było dozwolone, mógłbym po prostu dodać spację tylko przed zamienionymi znakami, a rozwiązanie mogłoby zostać natychmiast uzyskane z przypadku testowego.
*
i /
przed +
i binarnym -
?