Wyzwanie:
Wyprowadza „liczby całkowite” jednej z następujących sześciu tabel arytmetycznych na podstawie danych wejściowych:
- add ( +
);
- odejmowanie ( -
);
- mnożenie ( *
);
- podział ( /
);
- potęgowanie ( ^
);
- działanie modulo ( %
).
Zasady:
- Co mogę określić jako „całkowitych końcowych cyfr”: każdy wynik arytmetycznej argumentu, który jest dokładnie jeden z następujących elementów:
0
,1
,2
,3
,4
,5
,6
,7
,8
,9
. Oznacza to, że wykluczasz każdy wynik10
lub wyższy, każdy wynik-1
lub niższy i każdy wynik nie będący liczbą całkowitą. Jak obliczyć wyniki arytmetyczne: Najpierw używając pierwszej cyfry, a następnie operandu z cyfrą lewą.Możesz to zrobić na odwrót (tj.y/x
Zamiastx/y
), o ile jesteś konsekwentny dla wszystkich sześciu wyników! (Więc nie są dopuszczone do użytkuy-x
ix/y
w tej samej odpowiedzi.) †- Nie wyprowadzimy niczego do podzielenia przez 0 przypadków testowych (dla tabel operacji dzielenia i modulo)
- Nie będziemy generować niczego dla Edge-Case
0^0
.
Wynik:
Więc wypisz następujące (format tabeli jest nieco elastyczny (patrz poniżej): więc wiersze są opcjonalne i dodane głównie dla czytelności przypadków testowych):
Dodanie:
+ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 | 1 2 3 4 5 6 7 8 9
2 | 2 3 4 5 6 7 8 9
3 | 3 4 5 6 7 8 9
4 | 4 5 6 7 8 9
5 | 5 6 7 8 9
6 | 6 7 8 9
7 | 7 8 9
8 | 8 9
9 | 9
Odejmowanie:
- | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 1 2 3 4 5 6 7 8 9
1 | 0 1 2 3 4 5 6 7 8
2 | 0 1 2 3 4 5 6 7
3 | 0 1 2 3 4 5 6
4 | 0 1 2 3 4 5
5 | 0 1 2 3 4
6 | 0 1 2 3
7 | 0 1 2
8 | 0 1
9 | 0
Mnożenie:
* | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 0 0 0 0 0 0 0 0 0 0
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 2 4 6 8
3 | 0 3 6 9
4 | 0 4 8
5 | 0 5
6 | 0 6
7 | 0 7
8 | 0 8
9 | 0 9
Podział:
/ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 |
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 1 2 3 4
3 | 0 1 2 3
4 | 0 1 2
5 | 0 1
6 | 0 1
7 | 0 1
8 | 0 1
9 | 0 1
Potęgowanie:
^ | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 | 1 1 1 1 1 1 1 1 1
1 | 0 1 2 3 4 5 6 7 8 9
2 | 0 1 4 9
3 | 0 1 8
4 | 0 1
5 | 0 1
6 | 0 1
7 | 0 1
8 | 0 1
9 | 0 1
Modulo:
% | 0 1 2 3 4 5 6 7 8 9
-----------------------
0 |
1 | 0 0 0 0 0 0 0 0 0 0
2 | 0 1 0 1 0 1 0 1 0 1
3 | 0 1 2 0 1 2 0 1 2 0
4 | 0 1 2 3 0 1 2 3 0 1
5 | 0 1 2 3 4 0 1 2 3 4
6 | 0 1 2 3 4 5 0 1 2 3
7 | 0 1 2 3 4 5 6 0 1 2
8 | 0 1 2 3 4 5 6 7 0 1
9 | 0 1 2 3 4 5 6 7 8 0
Zasady konkursu:
- Końcowe znaki nowej linii i końcowe spacje są opcjonalne
- Poziome i pionowe linie w przypadkach testowych są opcjonalne. Dodałem je tylko dla lepszej czytelności. †
- Odstępy między wynikami NIE są opcjonalne.
- Symbol arytmetyki może być inny, o ile jest jasne, który to jest. Tj.
×
Lub·
zamiast*
do mnożenia;÷
zamiast/
do podziału; itp. †
I tak długo, jak jest to jedna postać, przepraszam za Python**
. - Format wejściowy jest elastyczny. Możesz wybrać indeks od 0-5 lub 1-6 dla odpowiednich sześciu tabel; możesz wprowadzić symbol argumentu; itp. (W przeciwieństwie do tego, co wyświetlasz w wyniku, możesz wpisać pełne ciągi lub
**
w przypadku Pythona.)
Po prostu upewnij się, że określisz format wejściowy, którego używasz w swojej odpowiedzi!
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, 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.
† Przykład prawidłowego wyniku bez linii poziomych i pionowych, ÷
jako symbol i użycie y/x
zamiast x/y
:
÷ 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0
1 1
2 2 1
3 3 1
4 4 2 1
5 5 1
6 6 3 2 1
7 7 1
8 8 4 2 1
9 9 3 1
1
, inne0
, inne coś innego0^0
lub dzielą / mod 0, ale będziesz musiał to obejść. Jeśli chodzi o twoje drugie pytanie: tak, o ile cyfry są nadal w tych samych kolumnach / wierszach, możesz użyć tyle spacji, ile chcesz.y-x
,y/x
,y^x
ay%x
zamiastx-y
,x/y
,x^y
ix%y
? Hmm, chyba dobrze. Zmienię to w odpowiedzi; tak długo, jak będziesz konsekwentny dla wszystkich sześciu z nich (więc niey-x
ix/y
w tej samej odpowiedzi).Odpowiedzi:
Japt , 45 bajtów
Współpracował z @ETHproductions
Uruchom to online!
Pobiera dane wejściowe jako:
"+"
do dodania"-"
do odejmowania"*"
do mnożenia"/"
do podziału"p"
do potęgowania"%"
dla moduloObjaśnienie (z rozszerzonymi skrótami):
źródło
JavaScript (ES7), 128 bajtów
Specjalna obudowa
0^0
kosztowała mnie 8 bajtów.źródło
^
), ale dzięki!Operacyjny język skryptowy Flashpoint ,
343333303301 bajtówZadzwoń z:
Nie golfowany:
Wynik:
operator +
operator -
operator *
operator /
operator ^
operator%
źródło
Python 2 ,
240231226224203202200197 bajtówWypróbuj online!
Pobiera dane wejściowe jako „+”, „-”, „*”, „/”, „^” lub „%”.
Edycje
-9-16 dzięki dzięki @FelipeNardiBatista za wspaniałe wskazówkiZejdź do 221 z większą pomocą @FelipeNardiBatista, a następnie do 203, przegrywając
and E(c)==int(E(c))
. Jeśli sprawdzamy, czyE(c)
jest wrange(10)
środku, zawsze będzie liczbą całkowitą, jeśli tam jest. Nie ma potrzeby powielania kontroli.To musi spaść poniżej 200 bez przełączania się na Python 3 i deklarowania
P=print
. Jakieś pomysły? Zawsze chętnie się uczę.Tak! Wiedziałem, że da się to zrobić. 197. Czas na łóżko teraz. Spędziłem na tym wystarczająco dużo czasu. Dzięki za interesujące wyzwanie @KevinCruijssen.
źródło
('**',i)[i<'^']
i(i<'^'or x>0 or b>0)
oszczędza 4 bajtya=i=input()
zfor z in R:a+=' '+`z`
pewnymi dodatkowymi bajtami zapisanymi vsa=i+' 0 1 2 3 4 5 6 7 8 9'
1.
vs1.0
iE(c)in R
vs-1<E(c)<10
dla 2 bajtówx+b>0
vsx>0 or b>0
i"b%s(x*1.)"%('**',i)[i<'^']
vs"b"+('**',i)[i<'^']+"(x*1.)"
(
,)
w twoim złączeniu na 223 bajtyMathematica, 150 bajtów
Definiuje jednoargumentową funkcję,
±
która pobiera jeden ze znaków+-*/^%
jako dane wejściowei
(tak na przykład±"^"
) i zwracaGrid
obiekt, który wygląda dokładnie tak, jak ostatni wynik w OP.<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>
kojarzy z każdym możliwym znakiem wejściowym odpowiednią (wymienną) funkcję binarną (gdzie#-#2&,1##&,#/#2&
są wersje gry w golfaSubtract,Times,Divide
); dlatego<|...|>[i][r,#]
oblicza operację binarną ze wszystkimi możliwymi pierwszymi argumentami i#
jako drugi argument.If[0<=#<=9,#]/._@__->""&
konwertuje każdy wynik na aNull
lub""
jeśli nie jest to wynik jednocyfrowy (/._@__->""
jest to konieczne, ponieważ niektóre wyniki, takie jak,1/0
nie mogą być przetworzone przez nierówności0<=#<=9
). Na koniec przygotowujemy różne nagłówki i stopki i wyświetlamy odpowiedź.źródło
0^0
. ” Czy Mathematica domyślnie nic nie wyświetla dla tego przypadku?0^0
toIndeterminate
, co daje nam nieszczęśliwy, nieoceniony wynik wIf[0<=Indeterminate<=9, Indeterminate]
połowie obliczeń; ale/._@__->""
jest regułą, która przyjmuje każdą nieocenioną funkcję i jej argumenty i zamienia ją na niewidoczny ciąg.#^0=1
i0^#
= 0`0^0
. Dobrze do tej pory i wygodne dla tego wyzwania. :) Btw, twój link nie działa. Pojawia się błąd, że nie mam uprawnień dostępu do niego.±"^"
.Python 3,
343335363362 bajtówNajsmutniejsze w tym jest to, że bije mnie odpowiedź Javy ... Rano zagram w golfa.
Zamień
-8 bajtów, przełączając się na rozumienie listy zamiast podwójnej pętli
+28 bajtów, aby uniknąć wielkości krawędzi
0 ^ 0
. -.--1 bajt, zmieniając
==0
na<1
dzięki @StewieGriffinźródło
0-9
. Btw, umm .. Zauważyłem jeden błąd w twoim Repl. Obecnie wyprowadza**
zamiast^
potęgowania. (Ponadto możesz wprowadzać dane**
, ale nie wypisywać ich w tabeli wyników. Obecnie masz to na odwrót.)Java 7,
312305 bajtówNie używa linii poziomych / pionowych, a znaki są wyświetlane w przykładach wyzwania (
+-*/^%
).Używa indeksu
0-5
dla sześciu operandów matematycznych jako danych wejściowych.-7 bajtów dzięki @Frozn .
Wyjaśnienie:
Kod testowy:
Wypróbuj tutaj.
źródło
b
jakodouble
celup
i pozbyć sięr
poprzez przypisanie wartości do powiązanej trójskładnikowychb
.Haskell,
230199182 +534746 + 1 bajt separatora =284247232229 bajtówFunkcja polega na tym
(zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!)
, że sam zajmuje 53 bajty, gdzie 0 to dodawanie, 1 to odejmowanie, 2 to mnożenie, 3 to dzielenie, 4 to potęgowanie, a 5 to modulo.Wypróbuj online!
Wyjaśnienie
W przyszłości (prawdopodobnie). . . . Na razie trochę ciekawostek:? jest operatorem potęgowania! jest operatorem podziału i operatorem mod.
EDYCJA: Część zbiorcza może być spowodowana tym, że większość (?) Pozostałych odpowiedzi używa wartości eval, której Haskell nie ma bez długiego importu.
EDIT2: Dzięki Ørjan Johansen za -31 bajtów (Wow!) Wyłączony kod i -6 bajtów wyłączonych z funkcji! Zmieniono również niektóre z 11 na 10 w celu zachowania spójności.Wypróbuj zaktualizowaną wersję online!
EDYCJA 3: Ta sama osoba, jeszcze siedemnaście bajtów! Wypróbuj zaktualizowaną, zaktualizowaną wersję online!
źródło
!
testy:e<-a`div`b,e*b==a=e
lub(e,0)<-a`divMod`b=e
.(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
last$f k:[' '|k<0||k>9]
. Wreszcie (być może)[0..9]
jest na tyle długi, że opłaca się zdefiniować go jako nazwę przy dwukrotnym użyciu.k<-[o x y]
jest krótszy niż alet
.Python 2 , 197 bajtów
Wypróbuj online!
Dane wejściowe: Python 2
'+'
Dodanie'-'
Sbtraction'*'
Mnożenie'/'
Podział'**'
Potęgowanie'%'
ModuloPython 3 , 200 bajtów
Wypróbuj online!
Dane wejściowe: Python 3
+
Dodanie-
Sbtraction*
Mnożenie//
Podział**
Potęgowanie%
ModuloWyjaśnienie
przechowując
range(10)
zmiennąr
, możemy uzyskać pierwszy wiersz wyniku formatupoprzez mapowanie każdej int w
r
ciągu i łączenie listy ciągów['0','1','2','3','4','5','6','7','8','9']
spacjąs
zp
operatoremZ tym, dla każdego
i
wr
(zakresie), dla każdejj
ocenyi
ij
u operatoraw tym przypadku wyjątek może zostać zgłoszony, jeśli nie zostanie obsłużony - dzielenie lub moduł przez 0. Aby obsłużyć ten przypadek (
i and(j%i==0 and'/'==p or'%'==p)
) i format wyjściowy opisany w instrukcji problemu (wynik dla każdej oceny nie powinien być liczbą ujemną ani liczbą większą niż 10 -eval("j"+p+"i")in r
),W ten sposób drukujemy tabelę arytmetyczną!
Happy Coding!
źródło
APL (Dyalog) ,
6876 bajtówWymaga
⎕IO←0
ustawienia domyślnego w wielu systemach. Monituje o wejście i oczekuje pojedynczego znaku reprezentującego operand.Wypróbuj online!
Znaczna część kodu ma na celu obejście wyników APL dla
÷0
i0*0
przeciwdziałanie modułowi APL (|
) ma odwrócone argumenty w porównaniu do większości innych języków. Byłoby tylko 41 bajtów przeciwnym razie :Wypróbuj online!
źródło
R ,
194177 bajtów-17 bajtów przełączania na manipulowanie danymi wyjściowymi macierzy
Wypróbuj online!
Przejście na to podejście ma pewne wady, a mianowicie nie można go zoptymalizować za pomocą
pryr
i jest trochę nieporęczne w ustawianiu oryginalnej macierzy, ale można go wyprowadzić idealnie z pewnymi końcowymi spacjami w pierwszym wierszu.Nadal muszę użyć tej
substr
sztuczki z powodu%%
operatora mod. Będę nadal go przycinać, gdy będę miał szansę, nadal czuję się niezgrabnie zajmując się specjalnymi przypadkami.źródło
PHP, 191 bajtów
**
zamiast^
jako dane wejściowe+ - / % * **
Wersja online obu wersji
PHP, 245 bajtów bez ewaluacji
Wejście
+ - / % * ^
użyj
bcpowmod($c,1,$r)
zamiast,bcmod($c,$r)
ponieważ potrzebuję trzeciego parametru w danych wejściowych dzielenia.$c**1%$r==$c%$r
Funkcje matematyczne BC
źródło
05AB1E ,
5655 bajtówWyjścia bez linii iz odwróconym
x
iy
. Wejście / wyjście używasz+
,-
,*
,/
,m
,%
.Wypróbuj online lub sprawdź wszystkie tabele .
21 bajty są stosowane w przypadkach, krawędź ustalenie
/0
,%0
i0^0
, w wyniku których0
,0
oraz1
odpowiednio w 05AB1E .. tu bez tej części ( 34 bajtów )Wypróbuj online lub wypróbuj wszystkie stoły .
Wyjaśnienie:
źródło