iOS 11 memiliki bug yang menjadikan hasil 1 + 2 + 3 menjadi 24 . Ini terkait dengan kecepatan animasi, tetapi bagaimanapun juga:
Tugasnya adalah membuat 1 + 2 + 3 == 24
. Tapi hanya itu saja. Jadi, Anda harus menyediakan fungsi yang secara benar menjumlahkan sebagian besar urutan tetapi kembali 24
ketika argumennya ada 1
, 2
dan 3
dalam urutan apa pun.
Input contoh:
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
Input dapat dalam format apa pun selama kode Anda menerima sejumlah argumen.
- Dukungan untuk bilangan negatif tidak diperlukan (semua bilangan non-negatif diharuskan untuk bekerja, itu termasuk 0)
- Kami menganggap input yang benar
Perbedaan dari pertanyaan serupa lainnya: "Apa yang Anda dapatkan ketika Anda mengalikan 6 dengan 9? (42)" :
- Dalam hal ini fungsi Anda diperlukan untuk menerima setiap jumlah argumen. Pertanyaan lama menentukan dengan tepat 2.
- Dalam hal ini pesanan tidak masalah, sedangkan pertanyaan lama menentukan bahwa pesanan
6 9
diperlukan dan9 6
harus dievaluasi dengan benar.
Jawaban:
MATL ,
1110 byteCobalah online! atau verifikasi semua kasus uji
Penjelasan
sumber
05AB1E , 9 byte
Penjelasan:
Cobalah online!
sumber
Java 8,
1091061019075747166 byte-12 byte terima kasih kepada @ OlivierGrégoire .
-31 byte berkat @Nevay .
Penjelasan:
Coba di sini.
(Tidak efisien) bukti bahwa hanya
[1,2,3]
(dalam urutan apapun) akan menjadi hasil yang mungkin saatp
ini0b1110
(p==14
) dan jumlahnya di bawah 6 atau lebih rendah (s<7
): Cobalah sini.Old 71 bytes menjawab:
Bukti bahwa untuk setiap tiga bilangan asli non-nol, hanya
[1,2,3]
(dalam urutan apa pun) akan memiliki jumlah yang sama dengan produknya (1+2+3 == 1*2*3
) (dengan jumlah positif):Ketika jumlah tersebut sama dengan produk oleh Leo Kurlandchik & Andrzej Nowicki
(Tidak efisien) bukti bahwa hanya
[1,2,3]
(dalam urutan apa pun) dan[0,0,0]
akan menjadi hasil yang mungkin dengan angka non-negatif dan panjang 3: Coba di sini.Jadi
s*4
akan menjadi6*4 = 24
untuk[1,2,3]
, dan0*4 = 0
untuk[0,0,0]
.sumber
Jelly , 8 byte
Cobalah online!
sumber
MATL , 13 byte
Cobalah online!
Ini dua byte lebih panjang dari jawaban MATL lainnya, tetapi menggunakan pendekatan yang sama sekali berbeda (dan IMO lebih menarik), jadi saya pikir itu layak posting.
Penjelasan:
Solusi ini menggunakan fakta bahwa:
Ini mengambil input, menghitung jumlah
s
, dan menggandakannyat
. Kemudian memeriksa apakah jumlahnya sama dengan produkGp=
. Kami mengalikan boolean1/0
dengan 18,,18*
dan memeriksa apakah ada nilai-nilai tidak identik dalam vektorda*
(sekali lagi, kalikan dengan booleanany(diff(x))
. Kami kemudian mengalikan keduanya menambahkan angka terakhir ke jumlah asli.Penjelasan langkah demi langkah:
Asumsikan inputnya adalah
[1, 2, 3]
:sumber
Python 2 , 39 byte
Cobalah online!
Menggunakan metode alternatif untuk menambahkan 18 jika input yang diurutkan adalah
[1, 2, 3]
untuk mengalahkan jawaban Python lainnya dengan byte.sumber
sorted(a)==[1,2,3]
dapat menjadiset(a)=={1,2,3}
menghemat 3 byte.[1, 2, 3, 3]
Haskell , 37 byte
Cobalah online!
Kami menggunakan pencocokan pola untuk menangkap kasus luar biasa.
Haskell tidak memiliki penyortiran bawaan. Kesetaraan
2^a+2^b+2^c==14
dipenuhi hanya dengan[a,b,c]
permutasi di[1,2,3]
antara bilangan bulat non-negatif. Yang lebih pendeka+b+c=a*b*c
hampir berfungsi, tetapi dipenuhi oleh[0,0,0]
, dan menambahkan cek,a>0
membuatnya 1 byte lebih lama.sumber
Oktaf , 34 byte
Cobalah online!
atau
Cobalah online!
atau
Ini lebih pendek dibandingkan dengan pendekatan lain penggunaan:
@(x){24,sum(x)}{2-isequal(sort(x),1:3)}
.Penjelasan:
Dibutuhkan jumlah vektor, dan menambahkan 18 jika vektor yang diurutkan sama dengan
1,2,3
. Ini akan memberikan6+18=24
jika vektor adalah permutasi1,2,3
, dan hanya jumlah vektor jika tidak.sumber
PHP, 116 byte
Ini adalah upaya pertama saya untuk tantangan golf, DAN itu PHP, sebuah bahasa yang tampaknya payah di golf karena saya jarang melihatnya di sini, jadi ... uhm, saya mencoba?
Catatan: Saya tidak memasukkan komentar ke dalam bytecount.
Tidak disatukan
Bukan apa-apa tbh istimewa:
Jika Anda ingin menguji ini dalam PHPFiddle dan bukan pada konsol, Anda dapat dengan jelas menggantinya
$i
dengan apa pun yang Anda inginkan.Terima kasih kepada Olivier Grégoire yang membuat saya menyadari kombinasi string
[0,3,3]
yang kembali 24 sebelumnya dan juga membantu saya menghemat beberapa karakter dengan menyimpanarray_sum
dan mengembalikannya alih-alih menjalankan fungsi lagi.sumber
[0, 3, 3]
? Juga, tidak bisakah Anda menyimpan hasilarray_sum($a)
dalam variabel dan menggunakannya kembali?R,
47 byte34 byte,36 byteCobalah online!
Jumlah input dan tambahkan 18 jika set input adalah 1: 3.
Terima kasih kepada @mlt untuk bermain golf 11 byte. Terima kasih kepada @ Ayb4btu untuk mengidentifikasi kesalahan dengan kode overgolfed
sumber
Javascript ES6, 39 byte
Terima kasih kepada @Herman Lauenstein
Jawaban sebelumnya
Javascript ES6, 66 byte
Cobalah
sumber
a=>(Array.sort(a).join()=="1,2,3"?24:a.reduce((x,y)=>x+y))
a.sort()=="1,2,3"
bekerja.a=>a.sort()=="1,2,3"?24:eval(a.joinBT+BT)
(ganti BT dengan backticks)Swift, 67 Bytes
Bisa mencapai 27 byte dengan ekstensi di [Int], tapi itu akan curang :(
sumber
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
karena fungsi anonim diizinkan oleh aturan standar kami. Anda dapat melihat cara kerjanya di sini .as
:)Mathematica, 28 byte
Cobalah online!
sumber
J, 17 byte
-6 byte berkat Frowny Frog
Jumlahkan semua angka
+/
dan gandakan hasilnya dengan (pseudocode)1 + 3*(is123 ? 1 : 0)
. Artinya, kembalikan hasilnya tidak berubah kecuali daftar yang diurutkan1 2 3
dalam hal ini kita kalikan hasilnya dengan 4.Cobalah online!
jawaban asli
Periksa apakah input yang diurutkan adalah
1 2 3
- jika ya, aktifkan fungsi konstan 24 (24"_
); jika tidak, kembalikan jumlahnya+/
Cobalah online!
sumber
1 2 3
→i.3
?i.3
menghasilkan0 1 2
, jadi Anda harus melakukan1+i.3
yang tidak menyimpan karakter tetapi kurang jelas.[:+/8"0^:(1 2 3-:/:~)
+/@,[*3*1 2 3-:/:~
C # (.NET Core) , 57 + 18 = 75 byte
Cobalah online!
+18 untuk
using System.Linq;
sumber
Lua ,
11681 byte-7 byte terima kasih kepada Jonathan
Mengambil input sebagai argumen baris perintah
Cobalah online!
Penjelasan:
Bekerja dengan membuat array jarang
S
dan menambahkan angka nol dalam indeks yang sesuai dengan nilai input. Jika parameter3, 4, 7
array jarang hanya akan memiliki angka di indeks tersebut. Dengan array itu, kita mendapatkan panjangnya dengan operator#
yang dihitung dari indeks1
hingga indeks yang lebih tinggi yang memiliki nilai di dalamnya, jika panjang ini tepat3
, itu berarti bahwa ada elemen dalam posisi1
,2
dan3
yang adalah apa yang kita mencari. Panjang array jarang akan selalu di antara0
dan diN
manaN
jumlah parameter. Jadi kita hanya perlu memeriksa apakah panjang array parameter dan array jarang3
.sumber
#args
di Lua agak terlalu byte? Dalam hal ini Anda dapat mengembalikan ke jawaban 90-byte Anda, saya kira .. :(R ,
55455449575448 byteMenyimpan banyak
byte dansolusi yang salah berkat Ayb4btu.Disimpan
39 byte berkat Giuseppe. Saya terus belajar cara-cara baru untuk menyalahgunakan fakta ituF==0
.Cobalah online!
Jawaban R lainnya menang pada akhirnya.
sumber
[0,0,0]
: mengembalikan,24
bukan0
.c(1,1,2,3)
mengembalikan28
bukan7
x=scan();s=sum(x);"if"(s-prod(x)|s-6|length(x)-3,s,24)
adalah 54 byte menukar kondisi dan menggunakan|
bukannya&
kita bisa mengurangi.C (gcc) ,
1361311259791 byteCobalah online!
sumber
Retina , 21 byte
Cobalah online!
Input dipisahkan dengan linefeed, tetapi test suite menggunakan pemisahan koma untuk kenyamanan.
Penjelasan
Sortir angka-angka (secara leksikografis, sebenarnya, tetapi kami hanya peduli pada kasus inputnya
1
,2
,3
dalam beberapa urutan, di mana itu tidak membuat perbedaan).Jika inputnya
1,2,3
(dalam urutan tertentu), ganti dengan 24.Ubah setiap nomor menjadi unary.
Hitung jumlah
1
s, yang menambahkan angka unary dan mengubahnya kembali menjadi desimal.sumber
1
dalam hal ini). Apakah Retina selalu melakukan ini untuk satu baris terakhir? Atau mungkinkah untuk menghitung semua1
s di suatu tempat di antara, dan kemudian setelah itu melanjutkan hasilnya untuk melakukan sesuatu yang lain (yang menggunakan dua baris lagi untuk tindakan ganti)? Juga, pertanyaan terkait lainnya: fungsi mana di Retina yang hanya membutuhkan satu baris? Sortasi (O`
) adalah salah satunya, dan fungsi lainnya juga; tapi yang lainnya? Hanya mencoba memahami Retina sedikit lagi. :)M`
. Hanya jika ada satu garis trailing tunggal yang Retina default untukM
mengganti bukannyaR
eplace.AGMTS
semua tahap single-line,R
adalah dua baris,O
danD
satu atau dua baris tergantung pada apakah$
opsi digunakan (yang mengubahnya menjadi sortir / tahap deduplicate- by ). Jangan ragu untuk menelepon saya di ruang obrolan Retina jika Anda memiliki pertanyaan lain: chat.stackexchange.com/rooms/41525/retinaHaskell , 44 byte
Cobalah online!
Permutasi
[1,2,3]
adalah satu-satunya partisi6
yang produknya6
, kecuali6
itu sendiri. (Ini mengasumsikan input non-negatif, yang tampaknya menjadi kasus untuk semua kasus uji ... Saya sudah bertanya OP tentang ini.)sumber
PL / SQL -
135123 BytesDengan asumsi saya sebagai input array integer dari berbagai ukuran:
sumber
C ++ 17,
5654 byteCobalah online!
Perhatikan bahwa objek fungsi yang dibuat dapat digunakan pada waktu kompilasi, sehingga pengujian dilakukan oleh kompiler tanpa harus menjalankan program.
Penjelasan:
Bukti bahwa satu-satunya nonnegatif
i...
yang(-i&...)
sama dengan -4 dan(~i*...)
sama dengan -24 adalah permutasi dari1, 2, 3
:Kami pertama-tama mengamati bahwa sejak
-0
=0
, jika adai
=0
maka(-i&...) = 0
, jadi kami menyimpulkan bahwa semuai
positif.Sekarang, perhatikan bahwa dalam komplemen 2,
-i
sama dengan~(i - 1)
, dan~i
setara dengan-(i + 1)
. Menerapkan aturan De Morgan, kami menemukan bahwa(-i & ...)
=~((i - 1) | ...)
=-(((i - 1) | ...) + 1)
, jadi((i - 1) | ...) = 3
; sama,,-1 ** n * ((i + 1) * ...) = -24
jadin
aneh dan((i + 1) * ...) = 24
.Faktor prima dari 24 adalah 2 ** 3 * 3, jadi
n
<= 4. Jikan
= 1, kita memilikii - 1 = 3
dani + 1 = 24
, jadin
= 3. Tuliskani
wlog sebagaia <= b <= c
, lalu jelaskana
1 sebagai sebaliknya(a + 1)(b + 1)(c + 1)
> = 27. Jugac
<= 4 sebagai kalau tidak(a - 1)|(b - 1)|(c - 1)
> = 4.c
tidak bisa 4 karena 5 bukan faktor 24, jadic
<= 3. Kemudian untuk memenuhi(a - 1)|(b - 1)|(c - 1) = 3
c = 3, b = 2 seperti yang disyaratkan.sumber
Sekam , 9 byte
Cobalah online!
Penjelasan
Solusi sebelumnya
Memberikan hasil yang salah kepada [2,2], dan mungkin juga input lain, tetapi lebih menarik.
Cobalah online!
sumber
Pushy , 12 byte
Cobalah online!
Ini bekerja dengan mengurutkan input dan, jika sama dengan
[1, 2, 3]
, menambahkan 18. Kemudian, jumlah dihitung dan dicetak, menghasilkan 24 adalah 18 ditambahkan, dan jawaban normal sebaliknya.sumber
Pyth , 9 byte
Verifikasi semua kasus uji.
sumber
Python 2 ,
4139 byte-1 byte terima kasih kepada caird
-1 berdasarkan inspirasi dari jawaban FlipTack
Cobalah online!
Alternatif solusi 39 byte
sumber
Jelly ,
109 byteCobalah online!
-1 byte terima kasih kepada Erik
Alternatif (oleh Mr. Xcoder ), juga untuk 9 byte:
Cobalah online!
Bagaimana itu bekerja
sumber
Ṣ24S⁼?3R¤
selama 9 byte.3R⁼Ṣ×18+S
untuk 9 byte juga.Pyth , 9 byte
Perbedaan pendekatan dari jawaban Pyth lainnya.
Penjelasan:
Sebuah port dari jawaban Python saya
Cobalah online!
sumber
PowerShell , 44 byte
Cobalah online!
Algoritma serupa dengan jawaban Python dan JavaScript. Mengambil input sebagai array literal
$a
. Kemudian segera menjumlahkan$a
bersama, yang membentuk operator kiri+
.Tangan kanan adalah
diff
(alias untukCompare-Object
) dari1,2,3
dan$a
- ini adalah array kosong jika sama, atau array tidak kosong dari item yang berbeda jika tidak sama - tertutup dalam Boolean-bukan. Jadi, jika mereka sama, itu membuat array kosong (nilai falsey) menjadi$true
.Itu kemudian dikalikan dengan
18
mana secara implisit dilemparkan$true
ke1
dan$false
ke0
. Jadi sisi kanan adalah18
jika arraynya sama, dan0
sebaliknya. Itu memberikan hasil yang benar24
jika array input1,2,3
dalam permutasi apa pun, dan penjumlahan dari array input sebaliknya.sumber
Kotlin ,
4644 byteCobalah online!
Suntingan
sumber
listOf(1,2,3)
untuk menyimpan 2 byte? Saya tidak tahu Kotlin, jadi saya tidak yakin.