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 -
code-golf
number
arithmetic
integer
code-golf
math
number
geometry
code-golf
grid
code-golf
math
number
sequence
primes
code-golf
sequence
kolmogorov-complexity
code-golf
string
ascii-art
alphabet
code-golf
math
sequence
integer
code-golf
number-theory
integer
natural-language
code-golf
date
code-golf
function
code-golf
ascii-art
code-golf
math
number-theory
primes
classification
code-golf
array-manipulation
decision-problem
matrix
code-golf
number
code-golf
code-golf
ascii-art
matrix
code-golf
string
code-golf
sequence
base-conversion
code-golf
code-golf
math
number-theory
combinatorics
integer-partitions
code-golf
integer
binary
base-conversion
code-golf
integer
base-conversion
palindrome
code-golf
code-golf
integer-partitions
code-golf
math
ascii-art
matrix
code-golf
number
sequence
number-theory
matrix
code-golf
interpreter
code-golf
graph-theory
code-golf
ascii-art
decision-problem
code-golf
division
code-golf
array-manipulation
primes
code-golf
string
ascii-art
code-golf
primes
counting
code-golf
matrix
unicode
code-golf
source-layout
code-golf
grammars
code-golf
string
cops-and-robbers
regular-expression
obfuscation
string
code-challenge
cops-and-robbers
regular-expression
code-golf
kolmogorov-complexity
game
card-games
code-golf
kolmogorov-complexity
code-golf
array-manipulation
matrix
code-challenge
cops-and-robbers
code-challenge
decision-problem
cops-and-robbers
code-golf
permutations
Kevin Cruijssen
źródło
źródło
--
. Na przykład1991 = 2, -/3 = 3
. (Wiele języków myli to z operatorem dekrementacji.)91 19
przypadku rozwiązania9--9
i brak spacji w9119
przypadku rozwiązania9229
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-
?Odpowiedzi:
Perl 6 ,
132113 bajtówDzięki Jo King za -19 bajtów.
Wypróbuj online!
Dane wejściowe to ciąg równań oddzielony przecinkami i ciąg wyników oddzielony przecinkami (mam nadzieję, że jest to w porządku). Dane wyjściowe to ciąg zawierający dwa zamienione przyciski.
Prawidłowo obsługuje
--
. Produkt może fałszywie dodatnie dla---
,++
,**
, lub//
, ale nie mogłem wymyślić przypadku testowego.źródło
---
;++
;**
;//
; lub inne rzeczy, takie jak*+
itp. Jedynym podwójnym sąsiadującym niecałkowym numerem, który musisz obsługiwać, jest--
. Ponadto, jeśli dobrze rozumiem twój kod, nie będziesz potrzebować.subst('-','- '
, ponieważ-5--15
dozwolone jest wprowadzanie przypadku testowego ze spacją. Nie jesteś pierwszym, który dodaje kod, aby programowo dodać tę przestrzeń, więc sprecyzuję to w opisie wyzwania.**
ponieważ mają one znaczenie jako wyrażenia Perla 6 i mogą powodować fałszywe alarmy.1992 = 1
może być1**2 = 1
lub1//2 = 1
, na przykład. Dotyczysubst
przypadków, w których prawidłowe równanie zawiera--
, na przykład dodanego nowego przypadku testowego.JavaScript (ES7),
159158 bajtówEdycja: nowa wersja zgodna ze zaktualizowanymi zasadami dotyczącymi
--
Zapisanego 1 bajtu dzięki @Shaggy
Pobiera dane wejściowe w składni curry,
(e)(r)
gdzie e jest tablicą równań, a r jest tablicą oczekiwanych wyników. Zwraca tablicę znaków.Przypadki testowe
Pokaż fragment kodu
Sformatowane i skomentowane
źródło
eval
nia siętry / catch
: codepen.io/anon/pen/rzRrLp .1991 = 2
. Roztwór powinien być1--1 = 2
z9
i-
zamienione.Python 2 ,
204,199,193,173, 165 bajtówWypróbuj online!
źródło
Oracle SQL i PL / SQL, 458 bajtów
Skompiluj funkcję PL / SQL (210 bajtów):
Uruchom SQL (248 bajtów):
Po utworzeniu tabeli
T
z danymi testowymi:Wydajność:
Poprzednia wersja :
Przyjęto ciąg znaków, taki jak
'123 = 3'
:Ta sama funkcja PL / SQL i SQL (322 bajty):
Po utworzeniu tabeli
T
z danymi testowymi:Wydajność:
Aktualizacja - testowanie :
SQL Fiddle
Konfiguracja schematu Oracle 11g R2 :
Zapytanie 1 :
Wyniki :
Zapytanie 2 :
Wyniki :
Zapytanie 3 :
Wyniki :
Zapytanie 4 :
Wyniki :
Zapytanie 5 :
Wyniki :
Zapytanie 6 :
Wyniki :
źródło
||REPLACE(x,'--','- -')||
, format wejścia / wyjścia jest elastyczny, więc możesz wprowadzać dane-5--15
tak-5- -15
, jak chcesz. Ponadto, jaki byłby dla mnie najłatwiejszy sposób zweryfikowania działania wszystkich przypadków testowych, zwłaszcza ostatniego? Czy link TIO jest w jakiś sposób możliwy?||REPLACE(x,'--','- -')||
używa się oczekiwanego poprawnego równania, takiego jak ostatnio dodany przypadek testowy?--
rozpoczyna komentarz w SQL, więc albo przypadki testowe muszą zostać sformułowane, aby--
nigdy nie występowały w równaniu (zamieniając je na- -
), lub potrzebuje jakiegoś defensywnego kodowania, aby to usprawiedliwić.13116/3 = -1
należałoby napisać,131 16/3 = -1
aby usunąć to wezwanie doREPLACE
.PowerShell,
222209192 bajtówSkrypt testowy i objaśnienie:
Wydajność:
źródło
05AB1E , 21 bajtów
Dane wejściowe jako dwie listy, pierwsza to równania, a druga wyniki. Wyjście w postaci przefiltrowanej listy par z obydwoma obrotami (tj
[["2","*"],["*","2"]]
.).Wypróbuj online lub sprawdź wszystkie przypadki testowe . (UWAGA: Używa starszej wersji 05AB1E w TIO, ponieważ
.E
jest wyłączona w nowszej wersji w TIO. Z tego powoduï
dodawana jest dodatkowa (rzut na liczbę całkowitą), ponieważ w starszej wersji 05AB1E1.0
i1
wewnętrzne listy nie były równe .)Wyjaśnienie:
źródło