iOS 11 ma błąd, który powoduje, że wynikiem 1 + 2 + 3 jest 24 . Jest to związane z prędkością animacji, ale w każdym razie:
Zadanie polega na wykonaniu 1 + 2 + 3 == 24
. Ale tylko to. Powinieneś więc zapewnić funkcję, która poprawnie sumuje większość sekwencji, ale zwraca, 24
gdy argumenty są 1
, 2
i 3
w dowolnej kolejności.
Przykładowe dane wejściowe:
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
Dane wejściowe mogą mieć dowolny format, o ile kod akceptuje dowolną liczbę argumentów.
- Obsługa liczb ujemnych nie jest wymagana (wszystkie nieujemne liczby muszą działać, w tym 0)
- Zakładamy prawidłowe dane wejściowe
Różnice w stosunku do innego podobnego pytania: „Co otrzymujesz, mnożąc liczbę 6 przez 9? (42)” :
- W takim przypadku twoja funkcja musi zaakceptować dowolną liczbę argumentów. Stare pytanie określa dokładnie 2.
- W tym przypadku kolejność nie ma znaczenia, podczas gdy stare pytanie określało, że kolejność
6 9
jest wymagana i9 6
powinna być poprawnie oceniona.
Odpowiedzi:
MATL ,
1110 bajtówWypróbuj online! lub zweryfikuj wszystkie przypadki testowe
Wyjaśnienie
źródło
05AB1E , 9 bajtów
Wyjaśnienie:
Wypróbuj online!
źródło
Java 8,
1091061019075747166 bajtów-12 bajtów dzięki @ OlivierGrégoire .
-31 bajtów dzięki @Nevay .
Wyjaśnienie:
Wypróbuj tutaj.
(Niewystarczający) dowód, że tylko
[1,2,3]
(w dowolnej kolejności) możliwe wyniki będą, gdyp
jest0b1110
(p==14
), a suma jest mniejsza niż 6 lub niższa (s<7
): Wypróbuj tutaj.Stara 71 bajtów odpowiedź:
Dowód, że dla dowolnych trzech podanych niezerowych liczb naturalnych tylko
[1,2,3]
(w dowolnej kolejności) będzie miała sumę równą jej iloczynowi (1+2+3 == 1*2*3
) (z sumą dodatnią):Gdy suma jest równa iloczynowi Leo Kurlandchika i Andrzeja Nowickiego
(Nieefektywny) dowód, że tylko
[1,2,3]
(w dowolnej kolejności) i[0,0,0]
będą możliwe wyniki z liczbami nieujemnymi i długością 3: Wypróbuj tutaj.Tak
s*4
stanie się6*4 = 24
dla[1,2,3]
i0*4 = 0
dla[0,0,0]
.źródło
Galaretka , 8 bajtów
Wypróbuj online!
źródło
MATL , 13 bajtów
Wypróbuj online!
To dwa bajty dłuższe niż druga odpowiedź MATL, ale używa zupełnie innego (i bardziej interesującego IMO) podejścia, więc pomyślałem, że warto to opublikować.
Wyjaśnienie:
To rozwiązanie wykorzystuje fakt, że:
To pobiera dane wejściowe, oblicza sumę
s
i powiela jąt
. Następnie sprawdza, czy suma jest równa iloczynowiGp=
. Mnożymy wartość logiczną1/0
przez 1818*
i sprawdzamy, czy w wektorze nie ma identycznych wartościda*
(ponownie, mnożymy przez wartość logicznąany(diff(x))
. Następnie mnożymy te dwa, dodając ostatnią liczbę do oryginalnej sumy.Wyjaśnienie krok po kroku:
Załóżmy, że dane wejściowe to
[1, 2, 3]
:źródło
Python 2 , 39 bajtów
Wypróbuj online!
Używa alternatywnej metody dodawania 18, jeśli posortowane dane wejściowe
[1, 2, 3]
mają pokonać bajt drugiej odpowiedzi w języku Python .źródło
sorted(a)==[1,2,3]
możnaset(a)=={1,2,3}
zapisać 3 bajty.[1, 2, 3, 3]
Haskell , 37 bajtów
Wypróbuj online!
Używamy dopasowywania wzorów, aby uchwycić wyjątkowy przypadek.
Haskell nie ma wbudowanego sortowania. Równość
2^a+2^b+2^c==14
jest spełniona tylko przez[a,b,c]
permutację[1,2,3]
między liczbami całkowitymi nieujemnymi. Krótszya+b+c=a*b*c
prawie działa, ale jest spełniony[0,0,0]
, a dołączenie czeku,a>0
powoduje, że jest on o 1 bajt dłuższy.źródło
Oktawa , 34 bajty
Wypróbuj online!
lub
Wypróbuj online!
lub
Jest krótsza niż podejście inni korzystają:
@(x){24,sum(x)}{2-isequal(sort(x),1:3)}
.Wyjaśnienie:
Pobiera sumę wektora i dodaje 18, jeśli posortowany wektor jest równy
1,2,3
. To da,6+18=24
jeśli wektor jest permutacją1,2,3
, a tylko suma wektora, jeśli nie.źródło
PHP, 116 bajtów
To jest moja pierwsza próba gry w golfa, ORAZ to PHP, język, który najwyraźniej jest do bani w golfa, ponieważ rzadko go tu widzę, więc ... uhm, próbowałem?
Uwaga: Nie dodałem komentarza do bajtu.
Nie golfił
To nic specjalnego tbh:
Jeśli chcesz to przetestować w PHPFiddle, a nie na konsoli, możesz oczywiście zastąpić
$i
wszystko, co chcesz.Podziękowania dla Oliviera Grégoire'a, który uświadomił mi kombinację ciągów,
[0,3,3]
która zwróciła wcześniej 24, a także pomógł mi zaoszczędzić kilka znaków, przechowującarray_sum
i zwracając to zamiast ponownie uruchamiać funkcję.źródło
[0, 3, 3]
? Czy nie możesz zapisać wynikuarray_sum($a)
w zmiennej i użyć go ponownie?R,
47 bajtów34 bajty36 bajtówWypróbuj online!
Zsumuj dane wejściowe i dodaj 18, jeśli zestaw danych wejściowych to 1: 3.
Dzięki @mlt za grę w golfa z 11 bajtów. Dzięki @ Ayb4btu za zidentyfikowanie błędu w przerobionym kodzie
źródło
JavaScript ES6, 39 bajtów
Dzięki @Herman Lauenstein
Poprzednia odpowiedź
JavaScript ES6, 66 bajtów
Spróbuj
źródło
a=>(Array.sort(a).join()=="1,2,3"?24:a.reduce((x,y)=>x+y))
a.sort()=="1,2,3"
Pracuje.a=>a.sort()=="1,2,3"?24:eval(a.joinBT+BT)
(zamień BT na backtyki)Szybki, 67 bajtów
Mógłby dojść do 27 bajtów z rozszerzeniami na [Int], ale byłoby to oszustwo :(
źródło
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
ponieważ funkcje anonimowe są dozwolone przez nasze standardowe reguły. Można zobaczyć, jak to działa tutaj .as
:)Mathematica, 28 bajtów
Wypróbuj online!
źródło
J, 17 bajtów
-6 bajtów dzięki Frowny Frog
Zsumuj wszystkie liczby
+/
i pomnóż wynik przez (pseudokod)1 + 3*(is123 ? 1 : 0)
. Oznacza to, że zwracaj wyniki bez zmian, chyba że posortowana lista jest1 2 3
w takim przypadku mnożymy wynik przez 4.Wypróbuj online!
oryginalna odpowiedź
Sprawdź, czy posortowane dane wejściowe są
1 2 3
- jeśli tak, wywołaj funkcję stałą 24 (24"_
); jeśli nie, zwróć sumę+/
Wypróbuj online!
źródło
1 2 3
→i.3
?i.3
produkuje0 1 2
, więc musisz zrobić,1+i.3
co nie oszczędza znaków, ale jest mniej jasne.[:+/8"0^:(1 2 3-:/:~)
+/@,[*3*1 2 3-:/:~
C # (.NET Core) , 57 + 18 = 75 bajtów
Wypróbuj online!
+18 dla
using System.Linq;
źródło
Lua ,
11681 bajtów-7 bajtów dzięki Jonathanowi
Pobiera dane wejściowe jako argumenty wiersza poleceń
Wypróbuj online!
Wyjaśnienie:
Działa poprzez tworzenie rzadkiej tablicy
S
i dodawanie zer do indeksów odpowiadających wartościom wejściowym. Jeśli parametrami są3, 4, 7
rzadkie tablice, będą miały tylko liczby przy tych indeksach. Dzięki tej tablicy otrzymujemy jej długość wraz z operatorem,#
który zlicza od indeksu1
do wyższego indeksu, który ma w sobie wartość, jeśli ta długość jest dokładnie3
, oznacza to, że były pozycje w pozycji1
,2
i3
tym właśnie jesteśmy szukam. Długość rzadkiej tablicy będzie zawsze pomiędzy0
iN
gdzieN
jest liczba parametrów. Musimy więc tylko sprawdzić, czy długość zarówno tablicy parametrów, jak i tablicy rzadkiej wynosi3
.źródło
#args
wydaje mi się, że sprawdzenie długości w Lua jest trochę zbyt duże? W takim przypadku możesz cofnąć się do 90-R ,
55455449575448 bajtówZaoszczędzono wiele
bajtów iniepoprawne rozwiązania dzięki Ayb4btu.Zaoszczędzono
39 bajtów dzięki Giuseppe. Uczę się nowych sposobów na nadużywanie tego faktuF==0
.Wypróbuj online!
Druga odpowiedź R wygrała w końcu.
źródło
[0,0,0]
: zwraca24
zamiast0
.c(1,1,2,3)
zwraca28
zamiast7
x=scan();s=sum(x);"if"(s-prod(x)|s-6|length(x)-3,s,24)
54 bajty zamieniają warunek i używają|
zamiast,&
więc możemy odjąć.C (gcc) ,
1361311259791 bajtówWypróbuj online!
źródło
Retina , 21 bajtów
Wypróbuj online!
Dane wejściowe są oddzielone od linii, ale dla wygody zestaw testów używa separacji przecinków.
Wyjaśnienie
Sortowanie numerów (leksykograficznie, faktycznie, ale tylko dbają o sprawy, że wejścia są
1
,2
,3
w jakimś celu, a jeżeli nie ma znaczenia).Jeśli dane wejściowe są
1,2,3
(w określonej kolejności), zamień je na 24.Konwertuj każdą liczbę na jednoargumentową.
Policz liczbę
1
s, która dodaje liczby jednostkowe i konwertuje je z powrotem na dziesiętne.źródło
1
w tym przypadku wszystkie s). Czy Retina zawsze robi to dla pojedynczej linii końcowej? Czy też można policzyć wszystkie1
s gdzieś pomiędzy, a następnie kontynuować z rezultatem, aby zrobić coś innego (który ponownie używa dwóch linii do akcji replace)? Kolejne powiązane pytanie: które funkcje w Retina wymagają tylko jednej linii? Sorting (O`
) jest jedną z nich, a także innymi funkcjami; ale jakikolwiek inny? Próbuję tylko trochę zrozumieć Retinę. :)M`
. Tylko jeśli istnieje jedna linia końcowa, którą Retina domyślnieM
ustawia na atch zamiast na eplaceR
.AGMTS
są wszystkie etapy jednowierszoweR
, składają się z dwóch liniiO
iD
składają się z jednej lub dwóch linii w zależności od tego, czy$
użyto opcji (co powoduje, że są sortowane / deduplikowane według etapów). Jeśli masz więcej pytań, możesz pingowaćHaskell , 44 bajty
Wypróbuj online!
Permutacje
[1,2,3]
są jedynymi partycjami,6
których produktem jest6
, z wyjątkiem6
samego siebie. (Zakłada się, że dane wejściowe są nieujemne, co wydaje się dotyczyć wszystkich przypadków testowych… Zapytałem o to OP).źródło
PL / SQL -
135123 bajtówZakładając, że jako dane wejściowe tablicy liczb całkowitych o dowolnym rozmiarze:
źródło
C ++ 17,
5654 bajtyWypróbuj online!
Zauważ, że utworzony obiekt funkcji jest użyteczny w czasie kompilacji, więc testy są wykonywane przez kompilator bez konieczności uruchamiania programu.
Wyjaśnienie:
Dowodem na to, że jedynymi nieujemnymi,
i...
dla których(-i&...)
jest równa -4 i(~i*...)
jest równa -24, są permutacje1, 2, 3
:Najpierw obserwujemy, że skoro
-0
=0
, jeśli w ogólei
=0
wtedy(-i&...) = 0
, to dochodzimy do wniosku, że wszystkiei
są dodatnie.Teraz zauważ, że w uzupełnieniu 2
-i
jest równoważne~(i - 1)
i~i
równoważne-(i + 1)
. Stosując regułę De Morgana, stwierdzamy, że(-i & ...)
=~((i - 1) | ...)
=-(((i - 1) | ...) + 1)
, więc((i - 1) | ...) = 3
; Podobnie-1 ** n * ((i + 1) * ...) = -24
, więcn
jest nieparzysta i((i + 1) * ...) = 24
.Pierwszymi czynnikami 24 są 2 ** 3 * 3, więc
n
<= 4. Jeślin
= 1, mamyi - 1 = 3
ii + 1 = 24
, więcn
= 3. Napiszi
log jakoa <= b <= c
, a następnie wyraźniea
= 1 jak inaczej(a + 1)(b + 1)(c + 1)
> = 27. Równieżc
<= 4 jako w przeciwnym razie(a - 1)|(b - 1)|(c - 1)
> = 4.c
nie może być 4, ponieważ 5 nie jest współczynnikiem 24, więcc
<= 3. Następnie, aby spełnić(a - 1)|(b - 1)|(c - 1) = 3
c = 3, b = 2 zgodnie z wymaganiami.źródło
Łuska , 9 bajtów
Wypróbuj online!
Wyjaśnienie
Poprzednie rozwiązanie
Daje zły wynik [2,2] i prawdopodobnie również inne dane wejściowe, ale było to bardziej interesujące.
Wypróbuj online!
źródło
Pushy , 12 bajtów
Wypróbuj online!
Działa to poprzez sortowanie danych wejściowych i, jeśli jest ono równe
[1, 2, 3]
, dopisywanie 18. Następnie suma jest obliczana i drukowana, uzyskując 24 to 18, a normalna odpowiedź w przeciwnym razie.źródło
Pyth , 9 bajtów
Sprawdź wszystkie przypadki testowe.
źródło
Python 2 ,
4139 bajtów-1 bajt dzięki Cairnowi
-1 według inspiracji z odpowiedzi FlipTack
Wypróbuj online!
Alternatywne rozwiązanie 39 bajtów
źródło
Galaretka ,
109 bajtówWypróbuj online!
-1 bajt dzięki Erikowi
Alternatywa (autorstwa pana Xcodera ), również dla 9 bajtów:
Wypróbuj online!
Jak to działa
źródło
Ṣ24S⁼?3R¤
dla 9 bajtów.3R⁼Ṣ×18+S
dla 9 bajtów.Pyth , 9 bajtów
Inne podejście od drugiej odpowiedzi Pyth.
Wyjaśnienie:
Port z mojej odpowiedzi w Pythonie
Wypróbuj online!
źródło
PowerShell , 44 bajty
Wypróbuj online!
Algorytm podobny do odpowiedzi na Python i JavaScript. Pobiera dane wejściowe jako tablicę literalną
$a
. Następnie natychmiast sumuje się$a
razem, co tworzy lewy operator operatora+
.Prawa ręka to
diff
(pseudonimCompare-Object
)1,2,3
i$a
- jest to pusta tablica, jeśli są równe, lub niepusta tablica różnych elementów, jeśli nie są równe - ujęta w wartość logiczną. Jeśli więc są równe, to tworzy pustą tablicę (wartość falsey)$true
.To jest następnie mnożone przez
18
niejawnie przesyłane$true
do1
i$false
do0
. Więc prawa strona będzie,18
jeśli tablice są takie same i0
inaczej. To daje poprawny wynik,24
jeśli tablica wejściowa jest1,2,3
w dowolnej permutacji, a sumowanie tablicy wejściowej w przeciwnym razie.źródło
Kotlin ,
4644 bajtówWypróbuj online!
Edycje
źródło
listOf(1,2,3)
aby zapisać 2 bajty? Nie znam Kotlina, więc nie jestem pewien.