Einführung:
Werfen wir einen Blick auf einen Standardrechner in Windows:
Bei dieser Herausforderung werden nur die folgenden Schaltflächen betrachtet und alles andere ignoriert:
7 8 9 /
4 5 6 *
1 2 3 -
0 0 . +
Herausforderung:
Input:
Sie erhalten zwei Inputs:
- Eines ist etwas, um die Drehung in Schritten von 90 Grad anzuzeigen
- Die andere ist eine Liste von Koordinaten, die die auf dem gedrehten Rechner gedrückten Tasten darstellen.
Basierend auf der ersten Eingabe drehen wir das oben erwähnte Layout im Uhrzeigersinn in Schritten von 90 Grad. Wenn die Eingabe also ist 0 degrees
, bleibt sie wie sie ist. Ist 270 degrees
dies jedoch der Fall, wird der Eingang dreimal im Uhrzeigersinn (oder einmal gegen den Uhrzeigersinn) gedreht. Hier sind die vier möglichen Layouts:
Default / 0 degrees:
7 8 9 /
4 5 6 *
1 2 3 -
0 0 . +
90 degrees clockwise:
0 1 4 7
0 2 5 8
. 3 6 9
+ - * /
180 degrees:
+ . 0 0
- 3 2 1
* 6 5 4
/ 9 8 7
270 degrees clockwise / 90 degrees counterclockwise:
/ * - +
9 6 3 .
8 5 2 0
7 4 1 0
Die zweite Eingabe ist eine Liste von Koordinaten in jedem vernünftigen Format † . Zum Beispiel (0-Index 2D Integer-Array):
[[1,2],[2,3],[0,3],[1,0],[1,1]]
Ausgabe:
Wir geben sowohl die Summe als auch das Ergebnis (und ein Gleichheitszeichen =
) aus.
Beispiel:
Wenn also die Eingabe 270 degrees
und ist [[1,2],[2,3],[0,3],[1,0],[1,1]]
, wird die Ausgabe zu:
517*6=3102
Herausforderungsregeln:
- † Die Eingaben können in jedem vernünftigen Format erfolgen. Der erste Eingang kann sein
0-3
,1-4
,A-D
,0,90,180,270
etc. Der zweite Eingang ein 0-indiziert 2D - Array sein kann, 1-indiziert 2D - Array, ein String, Liste von Point-Objekten usw. Ihrem Anruf. Es ist sogar möglich, die x- und y-Koordinaten im Vergleich zu den angegebenen Beispieleingaben zu vertauschen. Bitte geben Sie an, welche Eingabeformate Sie in Ihrer Antwort verwendet haben! - Sie können Leerzeichen hinzufügen,
517 * 6 = 3102
wenn Sie möchten. - Sie dürfen nachfolgende Nullen nach dem Komma hinzufügen, zu einem Maximum von drei (dh
3102.0
/3102.00
/3102.000
anstelle von3102
oder0.430
statt0.43
). - Sie dürfen der Ausgabe keine Klammern hinzufügen, es
(((0.6+4)-0)/2)/4=0.575
handelt sich also nicht um eine gültige Ausgabe. - Sie dürfen andere Operandensymbole für Ihre Sprache verwenden. Also
×
oder·
statt*
; oder÷
statt/
; etc. - Da ein Taschenrechner bei der Eingabe eines Operanden automatisch rechnet, sollten Sie die Operator-Priorität ignorieren! Das
10+5*3
Ergebnis ist also45
((10+5)*3=45
), nicht25
(10+(5*3)=25
)
(dh10
→+
→5
→*
(es wird jetzt 15 im Display angezeigt) →3
→=
(es wird jetzt die Antwort angezeigt45
)). Beachten Sie dies, wenn Sieeval
und ähnliche Funktionen für die resultierende Summe verwenden. - Es gibt keine Testfälle für die Division durch 0.
- Es werden keine Testfälle mit mehr als drei Dezimalstellen als Ergebnis angezeigt, sodass das Ergebnis nicht gerundet werden muss.
- Es wird keine Testfälle geben, in denen mehrere Operanden aufeinander folgen oder zwei Punkte aufeinander folgen.
- Es wird keine Testfälle für negative Zahlen geben. Das Minuszeichen (
-
) wird nur als Operand verwendet, nicht als negativer. - Es werden keine Testfälle
.##
ohne vorangestellte Nummer vor dem Komma angezeigt (dh es2+.7
wird kein gültiger Testfall angezeigt, dies2+0.7
könnte aber der Fall sein).
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.
Testfälle:
Input: 270 degrees & [[1,2],[2,3],[0,3],[1,0],[1,1]]
Output: 517*6=3102
Input: 90 degrees & [[3,1],[0,0],[0,1],[3,3],[2,0],[0,3],[0,0],[0,2],[3,0],[2,1]]
Output: 800/4+0.75=200.75
Input: 0 degrees & [[0,0],[1,0],[2,0],[3,0],[1,2],[2,1],[2,2]]
Output: 789/263=3
Input: 180 degrees & [[3,0],[1,0],[1,2],[0,0],[3,2],[0,1],[2,0],[0,3],[2,1],[0,3],[3,2]]
Output: 0.6+4-0/2/4=0.575
quelle
1+-*/+-*/2
Will gibt0.5
auf Windows (10) Rechner.[1,3],
2+.7
?Antworten:
SOGL V0.12 ,
706967 BytesProbieren Sie es hier aus oder probieren Sie eine Version aus, die die in den Testfällen angegebenen Eingaben akzeptiert
Verwendet den SOGLs-
I
Operator, der das Array dreht. Liest dann eine Zeichenfolge als JavaScript-Array und setzt bei Verwendung einer Operation das vorherige Ergebnis in Klammern, wertet es als JavaScript aus und entfernt die Klammern.quelle
Dyalog APL,
94888685 BytesProbieren Sie es online!
Nimmt die Rotationen als linkes Argument
0-3
und die auf 1 basierenden Indizes als rechtes Argument als eine Liste vony x
Koordinaten(1 1)(2 3)(4 5)
usw.Dies wurde aufgrund der rechtshändigen Auswertung von Ausdrücken in APL ziemlich chaotisch.
quelle
C (gcc) , 282
294295296300304306 310BytesAlle Optimierungen müssen deaktiviert sein und funktionieren nur mit 32-Bit-GCC.
1 Byte danke an @Orion!
Probieren Sie es online!
Funktionsprototyp:
Eingabeformat (wie bei TIO):
Ungolfed-Version mit Kommentaren:
Der Code kann mit Fällen wie
1+.7
oder umgehen-8*4
.Sehr traurig, dass C kein
eval
😭 hat.quelle
3*-5
ungültig halten. Ich habe dies in den Regeln festgelegt.double
mitfloat
für ein freies Byte. Auch ist nichtputc()
identisch mitputchar()
? Ich könnte mich jedoch irren.putc
ein zweites Argument benötigt, um anzugeben, in welchen Stream Sie schreiben.JavaScript (ES6),
162160157 ByteNimmt Eingaben als Ausrichtung
o
und Array von (y, x) -Koordinatena
in der aktuellen Syntax an(o)(a)
.Die Orientierung ist eine ganze Zahl in [0..3] :
Testfälle
Code-Snippet anzeigen
quelle
Ruby ,
135 133132 BytesProbieren Sie es online!
Ausrichtung als Ganzzahl: 0 für 0 °, 1 für 90 ° und so weiter.
quelle
Python 3,
235234230 BytesEtwas hässlich, aber es funktioniert für alle Testfälle mit Ausnahme des ersten, der nicht mit dem Beispielrechner übereinstimmt. Ich nehme die Drehung als 0-3 (0-270) und multipliziere mit 16, um sie zu versetzen.
eval()
ist eine integrierte Funktion, die versucht, Zeichenfolgen als Code zu kompilieren und die Textsymbole in Operatoren umzuwandeln.Alternative Methode, es stellte sich ein bisschen länger heraus, aber ich mag diesen SO-Tipp zum Drehen des Arrays wirklich .
quelle
Java 10,
418380 BytesBeschlossen, meine eigene Frage zu beantworten. Ich bin sicher, dass man mit einem anderen Ansatz noch mehr Golf spielen kann.
Eingabe wie
int
(0-3
) undint[][]
(0-indiziert / wie in der Challenge-Beschreibung). Ausgabe wiefloat
mit führend,.0
wenn das Ergebnis eine Ganzzahl anstelle einer Dezimalzahl ist.Erläuterung:
Probieren Sie es hier aus.
quelle