iOS 11 hat einen Fehler , der das Ergebnis von 1 + 2 + 3 zu 24 macht . Dies hängt mit der Animationsgeschwindigkeit zusammen, aber trotzdem:
Die Aufgabe ist es zu machen 1 + 2 + 3 == 24
. Aber nur das. So sollten Sie eine Funktion zur Verfügung stellen , die korrekt summiert die meisten Sequenzen kehrt aber 24
wenn die Argumente sind 1
, 2
und 3
in beliebiger Reihenfolge.
Beispieleingaben:
1 2 => 3
3 4 => 7
1 2 3 4 5 6 7 8 9 => 45
3 2 1 => 24
2 1 3 => 24
1 1 => 2
1 2 3 => 24
40 2 => 42
1 2 2 4 => 9
1 2 3 4 1 2 3 => 16
1 => 1
1 23 => 24
0 1 2 => 3
3 2 3 => 8
Die Eingabe kann in einem beliebigen Format erfolgen, solange Ihr Code eine beliebige Anzahl von Argumenten akzeptiert.
- Unterstützung für negative Zahlen ist nicht erforderlich (alle nicht negativen Zahlen müssen funktionieren, einschließlich 0)
- Wir gehen von einer korrekten Eingabe aus
Unterschiede zu einer ähnlichen Frage: "Was bekommen Sie, wenn Sie 6 mit 9 multiplizieren? (42)" :
- In diesem Fall muss Ihre Funktion eine beliebige Anzahl von Argumenten akzeptieren . Die alte Frage gibt genau 2 an.
- In diesem Fall spielt die Reihenfolge keine Rolle, während die alte Frage angibt, dass die Reihenfolge
6 9
erforderlich ist und9 6
korrekt ausgewertet werden sollte.
Antworten:
MATL ,
1110 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle
Erläuterung
quelle
05AB1E , 9 Bytes
Erläuterung:
Probieren Sie es online!
quelle
Java 8,
1091061019075747166 Bytes-12 Bytes dank @ OlivierGrégoire .
-31 Bytes dank @Nevay .
Erläuterung:
Probieren Sie es hier aus.
(Ineffiziente) den Nachweis dafür , dass nur
[1,2,3]
(in beliebiger Reihenfolge) werden die möglichen Ergebnisse, wennp
ist0b1110
(p==14
) und die Summe unter 6 oder niedriger (s<7
): es hier probieren.Alte 71 Bytes Antwort:
Beweis, dass für alle drei gegebenen natürlichen Zahlen ungleich Null nur
[1,2,3]
(in beliebiger Reihenfolge) eine Summe gleich ihrem Produkt (1+2+3 == 1*2*3
) (mit einer positiven Summe) vorliegt :Wenn die Summe gleich dem Produkt von Leo Kurlandchik & Andrzej Nowicki ist
(Ineffizienter) Beweis, dass nur
[1,2,3]
(in beliebiger Reihenfolge) und[0,0,0]
die möglichen Ergebnisse mit nicht negativen Zahlen und einer Länge von 3: Versuchen Sie es hier.So
s*4
wird Wille6*4 = 24
für[1,2,3]
und0*4 = 0
für[0,0,0]
.quelle
Gelee , 8 Bytes
Probieren Sie es online!
quelle
MATL , 13 Bytes
Probieren Sie es online!
Es ist zwei Bytes länger als die andere MATL-Antwort, aber es verwendet einen völlig anderen (und IMO interessanteren) Ansatz, so dass ich dachte, dass es sich lohnt, etwas zu posten.
Erläuterung:
Diese Lösung nutzt die Tatsache, dass:
Dies nimmt die Eingabe, berechnet die Summe
s
und dupliziert siet
. Anschließend wird geprüft, ob die Summe mit dem Produkt übereinstimmtGp=
. Wir multiplizieren den Booleschen Wert1/0
mit 1818*
und prüfen, ob der Vektor nicht identische Werte enthältda*
(multiplizieren Sie erneut mit einem Booleschen Wertany(diff(x))
. Dann multiplizieren wir die beiden , indem wir die letzte Zahl zur ursprünglichen Summe addieren.Eine schrittweise Erklärung:
Angenommen, die Eingabe lautet
[1, 2, 3]
:quelle
Python 2 , 39 Bytes
Probieren Sie es online!
Verwendet eine alternative Methode zum Hinzufügen von 18, wenn die sortierte Eingabe
[1, 2, 3]
die andere Python-Antwort um ein Byte schlagen soll .quelle
sorted(a)==[1,2,3]
kann werdenset(a)=={1,2,3}
, um 3 Bytes zu sparen.[1, 2, 3, 3]
Haskell , 37 Bytes
Probieren Sie es online!
Wir verwenden Pattern Matching, um den Ausnahmefall einzufangen.
In Haskell ist keine Sortierung integriert. Die Gleichheit
2^a+2^b+2^c==14
wird nur durch[a,b,c]
eine Permutation von[1,2,3]
nicht negativen ganzen Zahlen erfüllt . Ein kürzerera+b+c=a*b*c
Wert funktioniert fast, ist aber zufrieden[0,0,0]
, und das Anhängen des Schecks verlängert,a>0
ihn um 1 Byte.quelle
Oktave , 34 Bytes
Probieren Sie es online!
oder
Probieren Sie es online!
oder
Dies ist kürzer als der Ansatz andere Verwendung:
@(x){24,sum(x)}{2-isequal(sort(x),1:3)}
.Erläuterung:
Es nimmt die Summe des Vektors und addiert 18, wenn der sortierte Vektor gleich ist
1,2,3
. Dies gibt an,6+18=24
ob der Vektor eine Permutation von ist1,2,3
, und wenn nicht, nur die Summe des Vektors.quelle
PHP, 116 Bytes
Dies ist mein erster Versuch, eine Golf-Herausforderung zu meistern, UND es ist PHP, eine Sprache, die anscheinend schlecht fürs Golfen ist, da ich sie hier selten sehe. Also ... ähm, ich habe es versucht?
Hinweis: Ich habe den Kommentar nicht in den bytecount aufgenommen.
Ungolfed
Es ist nichts Besonderes.
Wenn Sie dies in PHPFiddle und nicht auf der Konsole testen möchten, können Sie es natürlich durch
$i
alles ersetzen, was Sie möchten .Vielen Dank an Olivier Grégoire, der mich auf die zuvor zurückgegebene String-Kombination aufmerksam gemacht hat
[0,3,3]
und mir dabei geholfen hat, ein paar Zeichen zu sparen, indem er die gespeichertarray_sum
und zurückgegeben hat, anstatt die Funktion erneut auszuführen .quelle
[0, 3, 3]
? Können Sie das Ergebnis von auch nichtarray_sum($a)
in einer Variablen speichern und wiederverwenden?R,
47 Bytes34 Bytes36 BytesProbieren Sie es online!
Summieren Sie die Eingabe und addieren Sie 18, wenn der Eingabesatz 1: 3 ist.
Vielen Dank an @mlt für das Golfen mit 11 Bytes. Vielen Dank an @ Ayb4btu für die Identifizierung eines Fehlers mit dem überladenen Code
quelle
Javascript ES6, 39 Bytes
Danke an @Herman Lauenstein
Vorherige Antwort
Javascript ES6, 66 Bytes
Versuch es
quelle
a=>(Array.sort(a).join()=="1,2,3"?24:a.reduce((x,y)=>x+y))
a.sort()=="1,2,3"
funktioniert.a=>a.sort()=="1,2,3"?24:eval(a.joinBT+BT)
(BT durch Backticks ersetzen)Schnell, 67 Bytes
Könnte es auf 27 Bytes mit Erweiterungen auf [Int] schaffen, aber das wäre Betrug :(
quelle
func z(i:[Int]){print(i.sorted()==[1,2,3] ?24:i.reduce(0,+))}
.{$0.sorted()==[1,2,3] ?24:$0.reduce(0,+)}as([Int])->Int
da anonyme Funktionen nach unseren Standardregeln zulässig sind. Sie können sehen , wie es funktioniert hier .as
:)Mathematica, 28 Bytes
Probieren Sie es online!
quelle
J, 17 Bytes
-6 Bytes dank Frowny Frog
Summiere alle Zahlen
+/
und multipliziere das Ergebnis mit (Pseudocode)1 + 3*(is123 ? 1 : 0)
. Das heißt, die Ergebnisse werden unverändert zurückgegeben, es sei denn, die sortierte Liste ist.1 2 3
In diesem Fall multiplizieren wir das Ergebnis mit 4.Probieren Sie es online!
ursprüngliche Antwort
Überprüfen Sie, ob die sortierte Eingabe lautet.
1 2 3
Wenn ja, rufen Sie die Konstantenfunktion 24 (24"_
) auf. Wenn nicht, geben Sie die Summe zurück+/
Probieren Sie es online!
quelle
1 2 3
→i.3
?i.3
produziert0 1 2
, also müsstest du tun,1+i.3
was keine Zeichen spart, aber weniger klar ist.[:+/8"0^:(1 2 3-:/:~)
+/@,[*3*1 2 3-:/:~
C # (.NET Core) , 57 + 18 = 75 Byte
Probieren Sie es online!
+18 für
using System.Linq;
quelle
Lua ,
11681 Bytes-7 Bytes dank Jonathan
Übernimmt Eingaben als Befehlszeilenargumente
Probieren Sie es online!
Erläuterung:
Erstellt ein Array
S
mit geringer Dichte und fügt den Indizes, die den Eingabewerten entsprechen, Nullen hinzu. Wenn die Parameter3, 4, 7
dünn sind, enthält das Array nur Zahlen an diesen Indizes. Mit diesem Array, bekommen wir es Länge mit dem Betreiber#
, der zählt vom Index1
bis zu dem höheren Index, der einen Wert in sich hat, wenn diese Länge genau ist3
, bedeutet dies , dass es Elemente in der Lage1
,2
und3
weicht ist , was wir sind Auf der Suche nach. Die Länge des dünnen Arrays liegt immer zwischen0
undN
woN
ist die Anzahl der Parameter. Wir müssen also nur prüfen, ob die Länge des Parameter-Arrays und des Sparse-Arrays gleich ist3
.quelle
#args
in Lua zu überprüfen, ist ein bisschen zu byte-schwer? In diesem Fall können Sie auf Ihre 90-Byte-AntwortR ,
55455449575448 BytesDank Ayb4btu konnten viele
Bytes undfalsche Lösungen eingespart werden.39 Bytes dank Giuseppe gespeichert . Ich lerne immer wieder neue Wege, um diese Tatsache zu missbrauchenF==0
.Probieren Sie es online!
Die andere R-Antwort hat am Ende gewonnen.
quelle
[0,0,0]
: return24
statt0
.c(1,1,2,3)
kehrt zurück28
statt7
x=scan();s=sum(x);"if"(s-prod(x)|s-6|length(x)-3,s,24)
ist 54 Bytes, die die Bedingung vertauschen und|
stattdessen verwenden,&
damit wir subtrahieren können.C (gcc) ,
1361311259791 BytesProbieren Sie es online!
quelle
Netzhaut , 21 Bytes
Probieren Sie es online!
Die Eingabe erfolgt durch Zeilenvorschub getrennt, die Testsuite verwendet jedoch aus Bequemlichkeitsgründen die Kommatrennung.
Erläuterung
Ordnen Sie die Zahlen (lexikographisch, eigentlich, aber wir kümmern uns nur um den Fall , dass die Eingänge sind
1
,2
,3
in einer bestimmten Reihenfolge, sofern dies keinen Unterschied macht).Wenn die Eingabe
1,2,3
(in einer bestimmten Reihenfolge) ist, ersetzen Sie sie durch 24.Wandle jede Zahl in eine unäre um.
Zählen Sie die Anzahl von
1
s, wodurch die unären Zahlen addiert und in Dezimalzahlen umgewandelt werden.quelle
1
in diesem Fall alle s) zählt. Tut Retina dies immer für eine einzelne letzte Linie? Oder ist es auch möglich, alle1
s irgendwo dazwischen zu zählen und danach mit dem Ergebnis fortzufahren, um etwas anderes zu tun (was wiederum zwei Zeilen für Ersetzungsaktionen verwendet)? Auch eine andere verwandte Frage: Welche Funktionen in Retina erfordern nur eine einzige Zeile? Die Sortierung (O`
) ist eine davon, und die andere funktioniert ebenfalls. aber irgendein anderes? Ich versuche nur, Retina ein bisschen besser zu verstehen. :)M`
. Es ist nur, wenn es eine einzelneM
abschließende Linie gibt, die Retina standardmäßig anstelle vonR
Eplace zu atchen.AGMTS
sind alle einzeiligen Stufen,R
sind zwei ZeilenO
undD
sind eine oder zwei Zeilen, abhängig davon, ob die$
Option verwendet wird (wodurch sie in Stufen zum Sortieren / Deduplizieren umgewandelt werden ). Wenn Sie weitere Fragen haben, können Sie mich gerneHaskell , 44 Bytes
Probieren Sie es online!
Die Permutationen
[1,2,3]
sind die einzigen Partitionen ,6
deren Produkt6
, abgesehen von6
selbst. (Dies setzt voraus, dass die Eingaben nicht negativ sind, was für alle Testfälle der Fall zu sein scheint. Ich habe das OP danach gefragt.)quelle
PL / SQL -
135123 BytesAngenommen, i ist ein Integer-Array-Eingang beliebiger Größe:
quelle
C ++ 17,
5654 BytesProbieren Sie es online!
Beachten Sie, dass das erstellte Funktionsobjekt zur Kompilierungszeit verwendet werden kann, sodass die Tests vom Compiler ausgeführt werden, ohne dass ein Programm ausgeführt werden muss.
Erläuterung:
Beweis, dass der einzige Nichtnegativ,
i...
für den(-i&...)
-4 und(~i*...)
-24 gleich sind, die Permutationen von1, 2, 3
:Wir beobachten dies zuerst seit
-0
=0
, wenn überhaupti
=0
dann(-i&...) = 0
, und schließen daraus, dass allei
positiv sind.Beachten Sie nun, dass in 2's Komplement,
-i
äquivalent zu~(i - 1)
und~i
äquivalent zu ist-(i + 1)
. Wenn wir die Regel von De Morgan anwenden, finden wir, dass(-i & ...)
=~((i - 1) | ...)
=-(((i - 1) | ...) + 1)
, also((i - 1) | ...) = 3
; ähnlich,-1 ** n * ((i + 1) * ...) = -24
son
ist ungerade und((i + 1) * ...) = 24
.Die Primfaktoren von 24 sind 2 ** 3 * 3, also
n
<= 4. Wennn
= 1, haben wiri - 1 = 3
undi + 1 = 24
, alson
= 3. Schreiben Sie dasi
wlog alsa <= b <= c
, dann klara
= 1 als sonst(a + 1)(b + 1)(c + 1)
> = 27. Auchc
<= 4 als andernfalls ist(a - 1)|(b - 1)|(c - 1)
> = 4.c
kann nicht 4 sein, da 5 kein Faktor von 24 ist, alsoc
<= 3.(a - 1)|(b - 1)|(c - 1) = 3
Um dann c = 3 zu erfüllen , ist b = 2, wie erforderlich.quelle
Schale , 9 Bytes
Probieren Sie es online!
Erläuterung
Vorherige Lösung
Gibt das falsche Ergebnis an [2,2] und wahrscheinlich auch an andere Eingaben, aber es war interessanter.
Probieren Sie es online!
quelle
Aufdringlich , 12 Bytes
Probieren Sie es online!
Dies funktioniert, indem die Eingabe sortiert und, wenn sie gleich
[1, 2, 3]
ist, an 18 angehängt wird. Dann wird die Summe berechnet und gedruckt, wobei 24 an 18 angehängt wird und ansonsten die normale Antwort.quelle
Pyth , 9 Bytes
Überprüfen Sie alle Testfälle.
quelle
Python 2 ,
4139 Bytes-1 Byte dank caird
-1 durch Inspiration von FlipTacks Antwort
Probieren Sie es online!
Alternative 39-Byte-Lösung
quelle
Gelee ,
109 BytesProbieren Sie es online!
-1 Byte danke an Erik
Alternative (von Mr. Xcoder ), auch für 9 Bytes:
Probieren Sie es online!
Wie es funktioniert
quelle
Ṣ24S⁼?3R¤
für 9 Bytes tun .3R⁼Ṣ×18+S
für 9 Bytes.Pyth , 9 Bytes
Anderer Ansatz als die andere Pyth-Antwort.
Erläuterung:
Ein Port aus meiner Python-Antwort
Probieren Sie es online!
quelle
PowerShell , 44 Byte
Probieren Sie es online!
Ähnlicher Algorithmus wie bei den Python- und JavaScript-Antworten. Übernimmt die Eingabe als Literal-Array
$a
. Dann summieren sich sofort die Zahlen$a
, die der linke Operator des+
.Die rechte Hand ist der
diff
(Alias fürCompare-Object
) von1,2,3
und$a
- dies ist entweder ein leeres Array, wenn sie gleich sind, oder ein nicht leeres Array der verschiedenen Elemente, wenn sie nicht gleich sind - eingeschlossen in ein Boolesches-Nicht. Wenn sie also gleich sind, wird das leere Array (ein falscher Wert) zu$true
.Das wird dann multipliziert,
18
womit implizit$true
nach1
und$false
nach geworfen wird0
. Die rechte Seite ist also,18
wenn die Arrays identisch sind, und0
ansonsten. Dies ergibt das korrekte Ergebnis,24
wenn sich das Eingabearray1,2,3
in irgendeiner Permutation befindet, und ansonsten die Summation des Eingabearrays.quelle
Kotlin ,
4644 BytesProbieren Sie es online!
Bearbeitungen
quelle
listOf(1,2,3)
2 Bytes speichern? Ich kenne Kotlin nicht, also bin ich mir nicht sicher.