Herausforderung:
Ausgabe der 'Integer-Ziffern' einer der folgenden sechs Arithmetik-Tabellen basierend auf der Eingabe:
- addition ( +
);
- Subtraktion ( -
);
- Multiplikation ( *
);
- Division ( /
);
- Potenzierung ( ^
);
- Modulo-Betrieb ( %
).
Regeln:
- Was definiere ich als ‚integer-Ziffern‘: Jedes Ergebnis der arithmetischen Operanden , die genau eine der folgenden ist:
0
,1
,2
,3
,4
,5
,6
,7
,8
,9
. Das heißt , Sie ausschließen jedes Ergebnis10
oder höher, jedes Ergebnis-1
oder weniger, und jedes nicht-ganzzahlige Ergebnis. So berechnen wir die Rechenergebnisse: Verwenden Sie zuerst die oberste Ziffer und dann den Operanden mit der linken Ziffer.Sie dürfen dies umgekehrt tun (dhy/x
stattdessenx/y
), solange Sie für alle sechs Ausgänge konsistent sind! (Du darfst also nichty-x
undx/y
in derselben Antwort verwenden.) †- Wir werden nichts für die Division durch 0 Testfälle ausgeben (für die Divisions- und Modulo-Operationstabellen)
- Für den Edge-Case geben wir nichts aus
0^0
.
Ausgabe:
Geben Sie also Folgendes aus (Tabellenformat ist etwas flexibel (siehe unten): Die Zeilen sind also optional und werden hauptsächlich zur besseren Lesbarkeit der Testfälle hinzugefügt):
Zusatz:
+ | 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
Subtraktion:
- | 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
Multiplikation:
* | 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
Einteilung:
/ | 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
Potenzierung:
^ | 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
Herausforderungsregeln:
- Nachgestellte Zeilenumbrüche und Leerzeichen sind optional
- Die horizontalen und vertikalen Linien in den Testfällen sind optional. Ich habe sie nur zur besseren Lesbarkeit hinzugefügt. †
- Die Leerzeichen zwischen den einzelnen Ergebnissen sind NICHT optional.
- Das Symbol für die Arithmetik kann unterschiedlich sein, solange klar ist, um welches es sich handelt. Dh
×
oder·
statt*
zur Multiplikation;÷
statt/
zur Teilung; usw. †
Und solange es sich um ein einzelnes Zeichen handelt, tut es Python leid**
. - Das Eingabeformat ist flexibel. Sie können einen Index von 0-5 oder 1-6 für die entsprechenden sechs Tabellen auswählen. Sie könnten das Operandensymbol eingeben; usw. (Im Gegensatz zu dem, was Sie im Ergebnis anzeigen, können Sie vollständige Zeichenfolgen eingeben, oder
**
in Pythons Fall.)
Geben Sie einfach an, welches Eingabeformat Sie in Ihrer Antwort verwenden.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methode mit den richtigen Parametern und vollständige Programme verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
† Beispiel für eine gültige Ausgabe ohne horizontale und vertikale Linien ÷
als Symbol und mit y/x
anstelle von 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
, andere0
, andere etwas anderes für0^0
oder dividieren / mod 0, aber Sie müssen das umgehen. Zu Ihrer zweiten Frage: Ja, solange sich die Ziffern noch in denselben Spalten / Zeilen befinden, können Sie so viele Leerzeichen verwenden, wie Sie möchten.y-x
,y/x
,y^x
undy%x
stattx-y
,x/y
,x^y
undx%y
? Hmm, ich denke das könnte in Ordnung sein. Ich werde es in der Antwort bearbeiten; solange Sie für alle sechs von ihnen konsistent sind (also nichty-x
undx/y
in der gleichen Antwort).Antworten:
Japt , 45 Bytes
Zusammenarbeit mit @ETHproductions
Lass es online laufen!
Übernimmt Eingaben als:
"+"
zur ergänzung"-"
für die Subtraktion"*"
zur Multiplikation"/"
für die Teilung"p"
zur Potenzierung"%"
für moduloErläuterung (mit erweiterten Verknüpfungen):
quelle
JavaScript (ES7), 128 Byte
Sondergehäuse
0^0
kosten mich 8 Bytes.quelle
^
), aber danke!Operation Flashpoint- Skriptsprache,
343333303301 ByteRufen Sie an mit:
Ungolfed:
Ausgabe:
Operator +
Operator -
Operator *
Operator /
Betreiber ^
Operator %
quelle
Python 2 ,
240231226224203202200197 BytesProbieren Sie es online!
Übernimmt die Eingabe als "+", "-", "*", "/", "^" oder "%".
Bearbeitungen
-9-16 danke an @FelipeNardiBatista für einige großartige HinweiseRunter auf 221 mit mehr Hilfe von @FelipeNardiBatista und dann runter auf 203 durch Verlieren
and E(c)==int(E(c))
. Wenn wir überprüfen, ob inE(c)
istrange(10)
, wird es immer eine ganze Zahl sein, wenn es dort ist. Keine Notwendigkeit für die Duplikatprüfung.Dies muss unter 200 gehen, ohne zu Python 3 zu wechseln und zu deklarieren
P=print
. Irgendwelche Ideen? Ich freue mich immer zu lernen.Jaaa! Ich wusste, dass es möglich war. 197. Jetzt ist es Zeit fürs Bett. Ich habe genug Zeit damit verbracht. Vielen Dank für die interessante Herausforderung @KevinCruijssen.
quelle
('**',i)[i<'^']
und(i<'^'or x>0 or b>0)
speichert 4 Bytesa=i=input()
mitfor z in R:a+=' '+`z`
für einige zusätzliche Bytes gespeichert vsa=i+' 0 1 2 3 4 5 6 7 8 9'
1.
vs1.0
undE(c)in R
vs-1<E(c)<10
für 2 Bytesx+b>0
vsx>0 or b>0
und"b%s(x*1.)"%('**',i)[i<'^']
vs"b"+('**',i)[i<'^']+"(x*1.)"
(
,)
in dem für 223 Bytes beitretenMathematica, 150 Bytes
Definiert eine unäre Funktion,
±
die eines der Zeichen+-*/^%
als Eingabe verwendeti
(z. B.±"^"
) und ein zurückgibtGrid
Objekt zurückgibt, das genau wie die letzte Ausgabe im OP aussieht.<|Thread[Characters@"+-*/^%"->{Plus,#-#2&,1##&,#/#2&,Power,Mod}]|>
#-#2&,1##&,#/#2&
ordnet jedem möglichen Eingabezeichen die entsprechende (auflistbare) Binärfunktion zu (wobei Golf-Versionen vonSubtract,Times,Divide
);<|...|>[i][r,#]
berechnet daher die binäre Operation mit allen möglichen ersten Argumenten und#
als zweites Argument.If[0<=#<=9,#]/._@__->""&
konvertiert jedes Ergebnis in einNull
oder""
wenn es kein einstelliges Ergebnis ist (/._@__->""
ist notwendig, weil einige Ergebnisse wie1/0
durch die Ungleichungen nicht verarbeitet werden können0<=#<=9
). Schließlich stellen wir die verschiedenen Kopf- und Fußzeilen voran und zeigen die Antwort an.quelle
0^0
. " Gibt Mathematica für diesen Randfall standardmäßig nichts aus?0^0
zu ausIndeterminate
, was uns währendIf[0<=Indeterminate<=9, Indeterminate]
der Berechnung ein unglückliches, nicht bewertetes Ergebnis liefert . Es handelt sich jedoch/._@__->""
um eine Regel, die eine nicht bewertete Funktion und ihre Argumente in eine unsichtbare Zeichenfolge umwandelt.#^0=1
und0^#
= 0 'für auftreten0^0
. Gut bis jetzt und praktisch für diese Herausforderung. :) Übrigens, Ihr Link scheint nicht zu funktionieren. Ich erhalte einen Fehler, für den ich keine Zugriffsberechtigung habe.±"^"
.Python 3,
343335363362 BytesDas Traurigste daran ist, dass eine Java-Antwort mich schlägt ... Ich werde dies morgen noch mehr Golf spielen.
ReplIT
-8 Bytes durch Umschalten auf Listenverständnis anstelle einer Doppelschleife
+28 Bytes zur Vermeidung von Kantenfall
0 ^ 0
. -.--1 Byte durch Umstellung
==0
auf<1
dank @StewieGriffinquelle
0-9
. Übrigens, ähm ... Ich habe einen Fehler in Ihrem Repl bemerkt. Es wird derzeit**
anstatt^
zur Potenzierung ausgegeben. (Außerdem dürfen Sie**
es in die ErgebnistabelleJava 7,
312305 BytesVerwendet keine horizontalen / vertikalen Linien und die Zeichen entsprechen den Challenge-Beispielen (
+-*/^%
).Verwendet einen Index von
0-5
für die sechs mathematischen Operanden als Eingabe.-7 Bytes dank @Frozn .
Erläuterung:
Testcode:
Probieren Sie es hier aus.
quelle
b
als eindouble
zu übergebenp
und loswerden,r
indem Sie den Wert des verketteten Ternärs zu zuweisenb
.Haskell,
230199182 +534746 + 1 Byte Trennzeichen =284247232229 ByteDie Funktion nimmt
(zipWith y[(+),(-),(*),(!),(?),(&)]"+-*/^%"!!)
allein 53 Bytes ein, wobei 0 Addition ist, 1 Subtraktion ist, 2 Multiplikation ist, 3 Division ist, 4 Exponentiation ist und 5 Modulo ist.Probieren Sie es online!
Erläuterung
Kommen später (möglicherweise). . . . Vorerst ein paar kleine Leckerbissen:? ist der Potenzierungsoperator! ist der Divisionsoperator und & ist der Modifikationsoperator.
BEARBEITEN: Ein Teil der Masse könnte darin liegen, dass die meisten (?) Der anderen Antworten eval verwenden, was Haskell ohne langwierigen Import nicht hat.
EDIT2: Danke Ørjan Johansen für -31 Bytes (Wow!) Vom Code und -6 Bytes von der Funktion! Aus Konsistenzgründen wurden auch einige der 11er in 10er geändert. Probieren Sie die aktualisierte Version online aus!
EDIT3: Gleiche Person, siebzehn Bytes mehr! Probieren Sie die aktualisierte, aktualisierte Version online aus!
quelle
!
Tests:e<-a`div`b,e*b==a=e
oder(e,0)<-a`divMod`b=e
.(zipWith(#)"+-*/^%"[(+),(-),(*),(!),(?),(&)]!!)
last$f k:[' '|k<0||k>9]
. Schließlich ist (vielleicht)[0..9]
nur so lang, dass es sich auszahlt, ihn bei zweimaliger Verwendung als Namen zu definieren.k<-[o x y]
ist kürzer als alet
.Python 2 , 197 Bytes
Probieren Sie es online!
Eingabe: Python 2
'+'
Zusatz'-'
Sbtraktion'*'
Multiplikation'/'
Einteilung'**'
Potenzierung'%'
ModuloPython 3 , 200 Bytes
Probieren Sie es online!
Eingabe: Python 3
+
Zusatz-
Sbtraktion*
Multiplikation//
Einteilung**
Potenzierung%
ModuloErläuterung
Speichern
range(10)
in eine Variabler
, können wir die erste Zeile der Ausgabe des Formats erhaltenindem Sie jedes int in
r
einem String['0','1','2','3','4','5','6','7','8','9']
zuordnen und die String-Liste mit einem Leerzeichens
mit einemp
Operator verbindenDamit, für jeden
i
inr
(Bereich), für jedenj
evaluiereni
undj
mit Ihrem OperatorHier kann eine Ausnahme ausgelöst werden, wenn sie nicht behandelt wird - Division oder Modul durch 0. Um diesen Fall (
i and(j%i==0 and'/'==p or'%'==p)
) und das Ausgabeformat wie in der Problembeschreibung beschrieben zu behandeln (das Ergebnis für jede Auswertung sollte weder eine negative Zahl noch eine Zahl größer als sein 10 -eval("j"+p+"i")in r
),So drucken Sie die Arithmetik-Tabelle!
Viel Spaß beim Codieren!
quelle
APL (Dyalog) ,
6876 BytesBenötigt,
⎕IO←0
was auf vielen Systemen Standard ist. Fordert zur Eingabe auf und erwartet ein einzelnes Zeichen, das den Operanden darstellt.Probieren Sie es online!
Ein großer Teil des Codes ist zu umgehen , dass APL Ergebnisse für
÷0
und0*0
und entgegen zu wirken , dass APL Modulo (|
) hat seine Argumente zu den meisten anderen Sprachen verglichen umgekehrt. Wäre sonst nur 41 Bytes gewesen :Probieren Sie es online!
quelle
R ,
194177 Bytes-17 Bytes, die auf die Manipulation der Matrixausgabe umschalten
Probieren Sie es online!
Die Umstellung auf diesen Ansatz hat einige Nachteile, nämlich, dass er nicht mithilfe von optimiert werden kann
pryr
und ein wenig umständlich ist, um die ursprüngliche Matrix einzurichten, aber mit einigen nachgestellten Leerzeichen in der ersten Zeile perfekt ausgegeben werden kann.Ich muss den
substr
Trick wegen des%%
Mod-Operators noch anwenden. Wenn ich die Chance bekomme, werde ich das weiter kürzen. Es fühlt sich immer noch sehr klobig an, mit den Sonderfällen umzugehen.quelle
PHP, 191 Bytes
**
statt^
als Eingabe+ - / % * **
Online Version beider Versionen
PHP, 245 Bytes ohne Auswertung
Eingang
+ - / % * ^
Verwenden Sie
bcpowmod($c,1,$r)
stattdessen,bcmod($c,$r)
weil ich einen dritten Parameter in der Divisionseingabe benötige.$c**1%$r==$c%$r
BC Math Funktionen
quelle
05AB1E ,
5655 BytesAusgänge ohne Zeilen und mit umgekehrtem
x
undy
. Ein- / Ausgang verwenden+
,-
,*
,/
,m
,%
.Probieren Sie es online aus oder überprüfen Sie alle Tabellen .
21 Bytes werden zu fixieren Kanten Fälle verwendet
/0
,%0
und die0^0
, die in Folge0
,0
und die1
jeweils in 05AB1E .. Hier ohne dass ein Teil ( 34 Byte ):Probieren Sie es online aus oder probieren Sie alle Tabellen aus .
Erläuterung:
quelle