Davon inspiriert
In der verknüpften Abfrage werden wir aufgefordert, die Elemente des Originals und die Umkehrung des Eingabearrays zu ergänzen. In dieser Herausforderung werden wir es etwas schwieriger machen, indem wir die anderen grundlegenden mathematischen Operationen einführen.
Bei einem gegebenen Array von Ganzzahlen durchlaufen Sie +, *, -, //, %, ^
, wobei //
Ganzzahldivision und ^
Exponent sind, während Sie es auf die Rückseite des Arrays anwenden. Mit anderen Worten, wenden Sie eine der obigen Funktionen auf jedes Element eines Arrays an, wobei das zweite Argument die Umkehrung des Arrays ist und die Funktion die obige Liste durchläuft. Dies kann immer noch verwirrend sein, lassen Sie uns also ein Beispiel durcharbeiten.
Input: [1, 2, 3, 4, 5, 6, 7, 8, 9]
Reverse: [9, 8, 7, 6, 5, 4, 3, 2, 1]
[ 1, 2, 3, 4, 5, 6, 7, 8, 9]
Operand: + * - / % ^ + * -
[ 9, 8, 7, 6, 5, 4, 3, 2, 1]
Result: [10, 16, -4, 0, 0, 1296, 10, 16, 8]
so dass der Ausgang für [1, 2, 3, 4, 5, 6, 7, 8, 9]
wäre[10, 16, -4, 0, 0, 1296, 10, 16, 8]
Um die Eckfälle abzudecken, enthält die Eingabe niemals eine 0, sondern kann eine beliebige andere Ganzzahl im Bereich von negativer Unendlichkeit bis positiver Unendlichkeit enthalten. Sie können Eingaben als Liste von Zeichenfolgen annehmen, die Ziffern darstellen, wenn Sie möchten.
Testfälle
input => output
[1, 2, 3, 4, 5, 6, 7, 8, 9] => [10, 16, -4, 0, 0, 1296, 10, 16, 8]
[5, 3, 6, 1, 1] => [6, 3, 0, 0, 1]
[2, 1, 8] => [10, 1, 6]
[11, 4, -17, 15, 2, 361, 5, 28] => [39, 20, -378, 7, 2, 3.32948887119979e-44, 9, 308]
Dies ist ein Code-Golf, so dass der kürzeste Code (in Bytes) gewinnt!
quelle
Antworten:
Gelee, 10 Bytes ( Gabel )
Ich habe neulich gerade daran gearbeitet, ein Quick für dieses Problem zu implementieren. Es ist also ziemlich überraschend, so bald eine Verwendung dafür zu sehen. Es gibt es immer noch nur als Gabel, Sie können es also nicht online ausprobieren.
Beispielausgabe
Erläuterung
quelle
ƭ
Unterstützung von Nilads (Wert ersetzen) und Monaden (linkes Argument) erweitern2 1”q3ƭ€
für[7,4,9,0]
Retouren[2, 1, 'q', 2]
Schale , 16 Bytes
Diese Herausforderung bevorzugt Sprachen, mit denen sich unendlich viele Funktionen erstellen lassen.Vielleicht nicht,eval
FTWProbieren Sie es online!
Wie?
Alternative 17-Byte-Lösung:
quelle
ë+*-÷%^
? Warum dase
Notwendige tun ?ë
dauert 4 Argumente,e
dauert 2. Es gibt keine für 605AB1E , 18 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ig∍
wenn du den "newish" -Befehl verwenden wolltest (habe hier nicht viel gesehen∍
).Bash + GNU-Dienstprogramme, 53
Dieses Skript verwendet einen Dateinamen als Befehlszeilenparameter.
Probieren Sie es online aus .
Das Schöne dabei ist,
paste -d
dass eine Liste von Trennzeichen angegeben werden kann, die zyklisch verwendet werden. Der Rest ist es nur die Eingabe in das richtige Format zu bekommen, um dies zu tun.quelle
Gelee , 15 Bytes
Probieren Sie es online! oder sehen Sie sich die Testsuite an .
Wie?
quelle
ż“+×_:%*”;"ṚV
ż“+×_:%*”ṁ$;"ṚV
was auch 15 Bytes ist.Python 2 , 67 Bytes
-3 Bytes dank ovs.
Probieren Sie es online!
Python 2 , 95 Bytes
Probieren Sie es online!
eval
ist böse ... aber vielleicht mehr golfen. : Pquelle
JavaScript (ES7),
68 bis67 ByteCode-Snippet anzeigen
quelle
o
innerhalb der Klammern von verschieben.pop()
, um ein paar Bytes zu sparen.o
wird auch als Bedingung des ternären Operators verwendet. Das würde dieses Schema brechen.Perl 6 ,
6766 Bytes1 Byte dank @nwellnhof gespeichert.
Probieren Sie es online!
Sehr einfallslose (und wahrscheinlich schlechte) Lösung. Zippt das Argument mit sich selbst umgekehrt. Die resultierende Liste wird dann dem Block zugeordnet, der
EVAL
die Zeichenfolge ista (operator) b
. Der Operator wird aus der Liste der Zeichenfolgen<+ * - div % **>
mit der Variablen freestate
(denken Siestatic
an C - der Wert bleibt über die Aufrufe des Blocks hinweg erhalten) ausgewählt$
. Dies wird für jeden Block separat erstellt und auf 0 gesetzt. Sie können alles tun, was Sie wollen, aber Sie können nur einmal darauf verweisen (jedes Vorkommen von$
bezieht sich tatsächlich auf eine andere Variable). Ist$++%6
also tatsächlich 0 während des ersten Anrufs, 1 während des zweiten, ... 5 während des 6., 0 während des 7. und so weiter.Ich habe zunächst versucht, auf eine zu verzichten
EVAL
. Die Operatoren sind in der Tat nur Subs (= Funktionen), aber ihre Namen sind so extrem ungolfartig (&infix:<+>
und so weiter), dass ich auf diesen Ansatz verzichten musste.quelle
map {EVAL ".[0] ... .[1]"},zip $_,.reverse
ist 1 Byte kürzer.Haskell ,
74117105 BytesProbieren Sie es online!
12 Bytes dank @nimi gespeichert
Es gibt sicherlich einen besseren Weg, dies zu erreichen.
EDIT 1. Fester Exponent für ganze Zahlen; 2. Es gibt definitiv einen besseren Weg, siehe Kommentar unten:
9591 BytesProbieren Sie es online!
quelle
zipWith3($)(cycle[(+),(*),(-),div,mod,(^)])<*>reverse
Ist eine kürzere, jetzt gelöschte Version von dir.h
im Aufruf vono
:o a b
und ohne das kannst du inlineh
( TIO ).Python 2 , 71 Bytes
Probieren Sie es online!
2 Bytes gespart dank ovs!
quelle
J,
4442 Bytes44 durchgestrichen, yada yada ...
-2 Bytes dank @ ConorO'Brien
Probieren Sie es online!
So viele Parens und Inserts ... Sicher gibt es einen besseren Weg, dies zu tun (vielleicht mit Insert anstatt Infix?)
Erläuterung
Einige Notizen:
J hat keine Ganzzahldivision, daher komponieren wir -division
%
mit>.
-floor. Js mod (|
) macht die umgekehrte Reihenfolge wie erwartet, also müssen wir seine Reihenfolge mit~
-reflexive umkehren.Obwohl wir uns über Intervalle von 2 bewegen, müssen wir
/
-insert verwenden , um die Verben einzufügen, damit sie dyadisch verwendet werden, da\
-infix so funktioniert.quelle
()
und wiederholte/
- ich konnte es nicht herausfinden ..../
ein umgekehrtes Array (da es rückwärts arbeitet ...) mit Verben wie,(,+)`(,*)
aber das hilft nicht viel ... (auch es funktioniert nicht)+/`(*/)`...
Ruby ,
6357 BytesEigentlich nichts Besonderes. Iterieren Sie einfach auf dem Array, verwenden Sie einen Index als Reverse-Iterator, fügen Sie mit dem richtigen Operator einen String hinzu, bewerten, spülen und wiederholen Sie ihn.
Probieren Sie es online!
quelle
k , 40 Bytes
Probieren Sie es online!
quelle
MATL ,
2723 Bytes-4 Bytes dank @LuisMendo
Probieren Sie es online!
Erläuterung:
quelle
Perl 5 , 68 + 1 (-p) = 69 Bytes
Probieren Sie es online!
Nimmt die Eingabe als durch Leerzeichen getrennte Liste von Zahlen.
quelle
R 74 Bytes
Probieren Sie es online!
Dies ist die endgültige Antwort, die ich mir ausgedacht habe. Es wird eine Liste mit der Länge zurückgegeben,
length(l)
wobei jedes Element eine Liste ist, die das entsprechende Element enthält. Ein bisschen beschissen, aber sie sind alle da. Wenn dies nicht akzeptabel ist, kann eine der beidenMap
durchmapply
+3 Bytes ersetzt werden.Da R-Operatoren alle Funktionen sind (die Infix-Notation ist nur syntaktischer Zucker), habe ich versucht, eine aus einer Liste auszuwählen. Zum Beispiel die 94-Byte-Lösung unten.
Um zu versuchen, die Schleife loszuwerden, habe ich versucht
sapply
, aber das funktioniert nur mit einer einzigen Funktion und Eingabeliste. Dann erinnerte ich mich an die multivariate Form,mapply
die einen-ary
FunktionFUN
undn
nachfolgende Argumente annimmt undFUN
auf die ersten, zweiten, ... Elemente der einzelnen Argumente anwendet, um sie gegebenenfalls zu recyceln . Es gibt auch eine Wrapper-Funktionmapply
,Map
die "keinen Versuch macht, das Ergebnis zu vereinfachen" . Da es drei Bytes kürzer ist, ist es eine gute Gelegenheit zum Golfen.Also habe ich eine trinäre Funktion definiert (wie in der folgenden 80-Byte-Lösung), die eine Funktion als erstes Argument verwendet und auf die zweite und dritte anwendet. Mir wurde jedoch klar, dass dies
Map
eine Funktion ist, die eine Funktion als erstes Argument verwendet und auf nachfolgende anwendet. Ordentlich!Schließlich wird am Ende eine Teilmenge erstellt, um sicherzustellen, dass nur die ersten
length(l)
Werte zurückgegeben werden.R , 80 Bytes
Probieren Sie es online!
Dieser Befehl funktioniert nicht, da er 6 Werte für Listen mit weniger als 6 Elementen zurückgibt.
R , 94 Bytes
Probieren Sie es online!
Erklärung (mild ungolfed):
Da jede der Funktionen vektorisiert ist, können wir am Ende (
res[i]
) indizieren . Dies ist besser als dereval
Ansatz unten.R , 100 Bytes
Probieren Sie es online!
Dies ist der kürzeste
eval
Ansatz, den ich finden konnte. weil wir die Ergebnisse in ein Vektor zu sammeln, müssen wir zupaste
einemc( )
der Ausdrücke alle um, die eine Tonne unnötigen Bytes hinzuzufügtquelle
Casio-Basic, 108 Bytes
Das war schmerzhaft. Vor allem, weil es
mod(x,y)
zurückkommt,x
wenn es wirklich nicht sollte, was bedeutete, dass ich meine eigene Mod-Funktion erstellen musste: daher diex-int(x/y)y
.Schleifen
i
von 0 bislength(l)-1
, wobei aufeinanderfolgende Elemente in dieo
Liste aufgenommen undl[i]
fürx
undl[-i]
für beantragt werdeny
. (Negative Indizes funktionieren jedoch nicht. Stattdessen subtrahiere ichi
von der Länge der Liste und nehme diesen Index.)107 Bytes für die Funktion, +1 Byte zum Hinzufügen
l
im Parameterfeld.quelle
Java 8, 336 Bytes
Probieren Sie es hier aus.
Seufz ..
Eingabe als
int[]
, Ausgabe alsjava.math.BigInteger[]
.Ohne die Regel „ die Ecke Fälle abzudecken, wird der Eingang nie ein 0 enthalten, kann aber jede andere ganze Zahl im Bereich von minus unendlich bis plus unendlich enthalten. “, Ganze Zahlen im Bereich verwenden
-2147483648
zu2147483647
, wäre es 186 Bytes (Eingang asint[]
und keine Ausgabe, da dieses Eingabearray geändert wird, um Bytes zu sparen):Probieren Sie es hier aus.
Erläuterung:
quelle