Terapkan Kalkulator iOS 11

43

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 24ketika argumennya ada 1, 2dan 3dalam 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 9diperlukan dan 9 6harus dievaluasi dengan benar.
Hauleth
sumber
23
Juga, iOS 11 tidak berfungsi seperti itu. Seharusnya seperti ini . ( penjelasan kode )
user202729
3
@ user202729 Pertanyaannya mungkin terinspirasi oleh iOS 11. Saya tidak berpikir OP meminta Anda untuk mereplikasi sepenuhnya.
Okx
2
@Okx tepatnya. Ini untuk bersenang-senang, bukan untuk mengimplementasikannya 1 banding 1. Tentu saja ini bisa diubah menjadi proposal user202729, tetapi jika dia mau, dia bisa membuat tantangan baru dengan tugas seperti itu.
Hauleth
3
Apakah bilangan bulat input?
xnor
9
Salah satu alasan ini adalah tantangan yang indah adalah karena properti yang terhubung dengan tempat kombinasi angka ini sangat istimewa. Alasan lain mengapa ini merupakan tantangan yang indah adalah karena ia membuat Apple senang karena memprioritaskan (gagasan mereka) tentang fungsionalitas UX.
NH.

Jawaban:

11

MATL , 11 10 byte

St3:X=6*+s

Cobalah online! atau verifikasi semua kasus uji

Penjelasan

        % implicit input [3,1,2]
S       % sort
        % STACK: [1,2,3]
t       % duplicate elements
3:      % push range 1..3
        % STACK: [1,2,3], [1,2,3], [1,2,3]
X=      % true if arrays are numerically equal
        % STACK: [1,2,3], 1
6*+     % multiply result of comparison by 6 and add to the original array
        % STACK: [7,8,9]
s       % sum
        % (implicit) convert to string and display
Cinaski
sumber
11

05AB1E , 9 byte

Os{3LQi4*

Penjelasan:

Os{         Get the sum of the input, and then get the sorted input list
     Qi     If it is equal to...
   3L       [1, 2, 3]
       4*   Then multiply the sum by four.

Cobalah online!

Okx
sumber
11

Java 8, 109 106 101 90 75 74 71 66 byte

a->{int s=0,p=0;for(int i:a){s+=i;p|=1<<i;}return s<7&p==14?24:s;}

-12 byte terima kasih kepada @ OlivierGrégoire .
-31 byte berkat @Nevay .

Penjelasan:

Coba di sini.

a->{                  // Method with integer-array parameter and boolean return-type
  int s=0,            //  Sum-integer, starting at 0
      p=1;            //  Product-integer, starting at 1
  for(int i:a){       //  Loop over the input-array
    s+=i;             //   Add current item to sum
    p|=1<<i;          //   Take 1 bitwise left-shifted with `i`, and bitwise-OR it with `p`
  }                   //  End of loop
  return p==14        //  If `p` is now exactly 14 (`0b1110`)
    &s<7?             //  and the sum is 6 or lower:
     24               //   Return 24
    :                 //  Else:
     s;               //   Return the sum
}                     // End of method

(Tidak efisien) bukti bahwa hanya [1,2,3](dalam urutan apapun) akan menjadi hasil yang mungkin saat pini 0b1110( p==14) dan jumlahnya di bawah 6 atau lebih rendah ( s<7): Cobalah sini.

p==14( 0b1110) mengevaluasi true jika nilai input modulo 32 menutupi nilai 1, 2dan 3dan tidak mengandung nilai lain ( p|=1<<i) (setiap nilai harus terjadi 1+ kali). Jumlah input yang cocok p==14akan lebih besar daripada 6input apa pun kecuali 1,2,3( s=a*1+b*2+c*3+u*32dengan a>0,b>0,c>0,u>=0).
@Nay


Old 71 bytes menjawab:

a->{int s=0,p=1;for(int i:a){s+=i;p*=i;}return a.length==3&p==s?s*4:s;}

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*4akan menjadi 6*4 = 24untuk [1,2,3], dan 0*4 = 0untuk [0,0,0].

Kevin Cruijssen
sumber
7

MATL , 13 byte

stGp=18*Gda*+

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:

Jumlah dan produk array dengan tiga elemen hanya sama jika array adalah permutasi 1,2,3.

Ini mengambil input, menghitung jumlah s, dan menggandakannya t. Kemudian memeriksa apakah jumlahnya sama dengan produk Gp=. Kami mengalikan boolean 1/0dengan 18,, 18*dan memeriksa apakah ada nilai-nilai tidak identik dalam vektor da*(sekali lagi, kalikan dengan boolean any(diff(x)). Kami kemudian mengalikan keduanya menambahkan angka terakhir ke jumlah asli.

Penjelasan langkah demi langkah:

Asumsikan inputnya adalah [1, 2, 3]:

s                              % Implicit input, calculate the sum
                               % 6
 t                             % Duplicate the sum:
                               % 6, 6
  G                            % Grab input
                               % 6, 6, [1,2,3]
   p                           % Calculate the product
                               % 6, 6, 6
    =                          % Check if the last two elements are equal
                               % 6, 1 (true)
     18*                       % Push 18, multiply by the last number
                               % 6, 18
        G                      % Grab input
                               % 6, 18, [1,2,3]
         d                     % Calculate the difference between each element
                               % 6, 18, [1,1]
          a                    % any non zero elements?
                               % 6, 18, 1 (true)
           *                   % Multiply last two numbers
                               % 6, 18
            +                  % Add numbers. Result: 24
Stewie Griffin
sumber
6

Python 2 , 39 byte

lambda*a:sum(a)+18*(sorted(a)==[1,2,3])

Cobalah online!

Menggunakan metode alternatif untuk menambahkan 18 jika input yang diurutkan adalah [1, 2, 3]untuk mengalahkan jawaban Python lainnya dengan byte.

FlipTack
sumber
sorted(a)==[1,2,3]dapat menjadi set(a)=={1,2,3}menghemat 3 byte.
mypetlion
1
@mypetlion Sayangnya itu akan menghasilkan true untuk daftar dengan duplikat seperti[1, 2, 3, 3]
FlipTack
Aduh. Saya pikir kami dibatasi hanya 3 input.
mypetlion
6

Haskell , 37 byte

f[a,b,c]|2^a+2^b+2^c==14=24
f l=sum l

Cobalah online!

Kami menggunakan pencocokan pola untuk menangkap kasus luar biasa.

Haskell tidak memiliki penyortiran bawaan. Kesetaraan 2^a+2^b+2^c==14dipenuhi hanya dengan [a,b,c]permutasi di [1,2,3]antara bilangan bulat non-negatif. Yang lebih pendek a+b+c=a*b*champir berfungsi, tetapi dipenuhi oleh [0,0,0], dan menambahkan cek ,a>0membuatnya 1 byte lebih lama.

Tidak
sumber
4

Oktaf , 34 byte

@(x)sum(x)+isequal(sort(x),1:3)*18

Cobalah online!

atau

@(x)(s=sum(x))+18*~(s-6|prod(x)-6)

Cobalah online!

atau

@(x)(s=sum(x))+18*~(s-prod(x)|s-6)

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 memberikan 6+18=24jika vektor adalah permutasi 1,2,3, dan hanya jumlah vektor jika tidak.

Stewie Griffin
sumber
4

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?

<?php
//call as var/www/html/cg_ios.php --'1 2 3 4 5'
$i=$argv[1];$a=(explode(' ',$i));echo((($b=array_sum($a))==6&&count($a)==3&&in_array(3,$a)&&!in_array(0,$a)?24:$b));

Catatan: Saya tidak memasukkan komentar ke dalam bytecount.

Tidak disatukan

Bukan apa-apa tbh istimewa:

$i=$argv[1];             //Read the input from the command line
$a=array_filter($c=explode(' ',$i)) //Split the input string into an array, use Whitespace as delimiter
                         //also, remove all 0 from the array, since they are not important at all
echo(                    //print the result
    ($b=array_sum($a) == 6  //If The SUM of the Array is 6 ...
        &&               //... AND ...
    (count($c) == 3)     //... the array has exactly 3 values ...
        &&               //... AND ...
    in_array(3,$a)       // ... the array contains the value 3 ...
        &&               // ... AND ...  
    !in_array(0,$a)      //... the array contains no zeros
        ?
    24                   //print 24
        :
    $b));     //print the sum of the array values we saved earlier

Jika Anda ingin menguji ini dalam PHPFiddle dan bukan pada konsol, Anda dapat dengan jelas menggantinya $idengan 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 menyimpan array_sumdan mengembalikannya alih-alih menjalankan fungsi lagi.

ANDA TIDAK BEKERJA
sumber
Selamat datang di situs ini, dan posting pertama yang bagus!
caird coinheringaahing
Bagaimana dengan nilai input [0, 3, 3]? Juga, tidak bisakah Anda menyimpan hasil array_sum($a)dalam variabel dan menggunakannya kembali?
Olivier Grégoire
@ OlivierGrégoire Itu sudah diperbaiki juga sekarang, saya jelas melewatkan kasus itu. Saya mungkin bisa memikirkan solusi yang lebih baik, ini - bahkan untuk standar saya - benar-benar ... berantakan.
ANDA TIDAK BEKERJA
Kode golf tidak ada $ pada argv [1]
manassehkatz-Reinstate Monica
4

R, 47 byte 34 byte, 36 byte

x=scan();all(sort(x)==1:3)*18+sum(x)

Cobalah 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

Menandai
sumber
3

Javascript ES6, 39 byte

Terima kasih kepada @Herman Lauenstein

a=>a.sort()=="1,2,3"?24:eval(a.join`+`)

f=a=>a.sort()=="1,2,3"?24:eval(a.join`+`)

console.log(f([1,2,3]));
console.log(f([1,2,3,4]));

Jawaban sebelumnya

Javascript ES6, 66 byte

a=>(n=[1,2,3],a.every(_=>n.includes(_))?24:a.reduce((x,y)=>x+y,0))

Cobalah

f=a=>(n=[1,2,3],a.every(_=>n.includes(_))?24:a.reduce((x,y)=>x+y,0))

console.log(f([1,2,3]));
console.log(f([1,3,2]));
console.log(f([1,2,3,4]));

Weedoze
sumber
58 byte:a=>(Array.sort(a).join()=="1,2,3"?24:a.reduce((x,y)=>x+y))
Okx
a.sort()=="1,2,3"bekerja.
Neil
39 byte: a=>a.sort()=="1,2,3"?24:eval(a.joinBT+BT)(ganti BT dengan backticks)
Herman L
3

Swift, 67 Bytes

func z(i: [Int])->Int{return i.sorted()==[1,2,3] ?24:i.reduce(0,+)}

Bisa mencapai 27 byte dengan ekstensi di [Int], tapi itu akan curang :(

Dominik Bucher
sumber
1
Selamat datang di situs ini! Ini adalah kompetisi golf kode, tolong beri Anda golf sebanyak mungkin, seperti dengan menghapus spasi. Juga, saya tidak tahu Swift, tetapi jika saya benar, ini menyimpan input dalam variabel, yang tidak diizinkan. Namun Anda diizinkan untuk mengubahnya menjadi fungsi.
caird coinheringaahing
1
Golfed bawah sedikit a: func z(i:[Int]){print(i.sorted()==[1,2,3] ?24:i.reduce(0,+))}.
Tn. Xcoder
1
Atau 55 byte (-12):, {$0.sorted()==[1,2,3] ?24:$0.reduce(0,+)}as([Int])->Intkarena fungsi anonim diizinkan oleh aturan standar kami. Anda dapat melihat cara kerjanya di sini .
Tn. Xcoder
@ Mr.Xcoder Anda dapat menghilangkan casting dan menambahkannya ke konstanta f yang Anda nyatakan. atau letakkan tipenya di dalam penutupan dan Anda singkirkan as:)
Dominik Bucher
2
+1 untuk Swift. Apakah ini kode sumber asli kalkulator iOS?
GB
2

J, 17 byte

-6 byte berkat Frowny Frog

+/*1+3*1 2 3-:/:~

Jumlahkan semua angka +/dan gandakan hasilnya dengan (pseudocode) 1 + 3*(is123 ? 1 : 0). Artinya, kembalikan hasilnya tidak berubah kecuali daftar yang diurutkan 1 2 3dalam hal ini kita kalikan hasilnya dengan 4.

Cobalah online!

jawaban asli

+/`(24"_)@.(1 2 3-:/:~)

Periksa apakah input yang diurutkan adalah 1 2 3- jika ya, aktifkan fungsi konstan 24 ( 24"_); jika tidak, kembalikan jumlahnya+/

Cobalah online!

Jonah
sumber
Saya tidak benar-benar mengenal J, tetapi dapatkah 1 2 3i.3?
Uriel
@Uriel, i.3menghasilkan 0 1 2, jadi Anda harus melakukan 1+i.3yang tidak menyimpan karakter tetapi kurang jelas.
Jonah
benar, saya lupa J diindeks 0
Uriel
[:+/8"0^:(1 2 3-:/:~)
FrownyFrog
+/@,[*3*1 2 3-:/:~
FrownyFrog
2

Lua , 116 81 byte

-7 byte terima kasih kepada Jonathan

Mengambil input sebagai argumen baris perintah

Z=0S={}for i=1,#arg do
j=arg[i]+0S[j]=0Z=Z+j
end
print(#S>2 and#arg<4 and 24or Z)

Cobalah online!

Penjelasan:

Bekerja dengan membuat array jarang Sdan menambahkan angka nol dalam indeks yang sesuai dengan nilai input. Jika parameter 3, 4, 7array jarang hanya akan memiliki angka di indeks tersebut. Dengan array itu, kita mendapatkan panjangnya dengan operator #yang dihitung dari indeks 1hingga indeks yang lebih tinggi yang memiliki nilai di dalamnya, jika panjang ini tepat 3, itu berarti bahwa ada elemen dalam posisi 1, 2dan 3yang adalah apa yang kita mencari. Panjang array jarang akan selalu di antara 0dan di Nmana Njumlah parameter. Jadi kita hanya perlu memeriksa apakah panjang array parameter dan array jarang 3.

Felipe Nardi Batista
sumber
1
80 byte
Kevin Cruijssen
Anda tidak melihat apa-apa (saya mengedit komentar saya, karena itu belum setelah 5 menit.; P)
Kevin Cruijssen
Ya, baru saja menemukan kesalahan yang sama dalam jawaban saya sendiri .. Saya memperbaikinya dengan menggunakan array-length == 3 AND A == S AND S> 0. Tapi saya kira memeriksa panjang #argsdi Lua agak terlalu byte? Dalam hal ini Anda dapat mengembalikan ke jawaban 90-byte Anda, saya kira .. :(
Kevin Cruijssen
83 byte
Jonathan S.
@ JonathanS. nice one
Felipe Nardi Batista
2

R , 55 45 54 49 57 54 48 byte

Menyimpan banyak byte dan solusi yang salah berkat Ayb4btu.

Disimpan 3 9 byte berkat Giuseppe. Saya terus belajar cara-cara baru untuk menyalahgunakan fakta itu F==0.

"if"((s=sum(x<-scan()))-prod(x)|sum(x|1)-3,s,24)

Cobalah online!

Jawaban R lainnya menang pada akhirnya.

BLT
sumber
Gagal untuk [0,0,0]: mengembalikan, 24bukan 0.
Olivier Grégoire
Saya tampaknya melewatkan 'non-negatif' dan 'dapat menjadi nomor tunggal' dalam spesifikasi. Tahan.
BLT
c(1,1,2,3)mengembalikan 28bukan7
Ayb4btu
@ Ayb4btu Terima kasih, tangkapan yang bagus.
BLT
1
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.
Giuseppe
2

C (gcc) , 136 131 125 97 91 byte

i,r,t;main(c,v)char**v;{for(;c-->1;)i=atoi(v[c]),r+=i,t|=1<<i;printf("%d",r<7&t==14?24:r);}

Cobalah online!

Cleblanc
sumber
1

Retina , 21 byte

O`
^1¶2¶3$
24
.+
$*
1

Cobalah online!

Input dipisahkan dengan linefeed, tetapi test suite menggunakan pemisahan koma untuk kenyamanan.

Penjelasan

O`

Sortir angka-angka (secara leksikografis, sebenarnya, tetapi kami hanya peduli pada kasus inputnya 1 , 2, 3dalam beberapa urutan, di mana itu tidak membuat perbedaan).

^1¶2¶3$
24

Jika inputnya 1,2,3(dalam urutan tertentu), ganti dengan 24.

.+
$*

Ubah setiap nomor menjadi unary.

1

Hitung jumlah 1s, yang menambahkan angka unary dan mengubahnya kembali menjadi desimal.

Martin Ender
sumber
Karena penasaran, berdasarkan penjelasan Anda, saya memahami garis akhir menghitung semua kejadian pertandingan (semua 1dalam hal ini). Apakah Retina selalu melakukan ini untuk satu baris terakhir? Atau mungkinkah untuk menghitung semua 1s 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. :)
Kevin Cruijssen
1
@KevinCruijssen Ya Anda dapat menggunakan tahap pertandingan (menghitung) di suatu tempat di tengah, tetapi Anda harus secara eksplisit menandainya sebagai tahap pertandingan dengan M`. Hanya jika ada satu garis trailing tunggal yang Retina default untuk Mmengganti bukannya Replace. AGMTSsemua tahap single-line, Radalah dua baris, Odan Dsatu 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/retina
Martin Ender
1

Haskell , 44 byte

f a|sum a==6,product a==6,a<[6]=24|1<2=sum a

Cobalah online!

Permutasi [1,2,3]adalah satu-satunya partisi 6yang produknya 6, kecuali 6itu sendiri. (Ini mengasumsikan input non-negatif, yang tampaknya menjadi kasus untuk semua kasus uji ... Saya sudah bertanya OP tentang ini.)

Lynn
sumber
43 byte
totallyhuman
1

PL / SQL - 135 123 Bytes

Dengan asumsi saya sebagai input array integer dari berbagai ukuran:

if (select sum(s) = exp(sum(ln(s))) from unnest(i) s) then
    return 24;
else
    return (select sum(s) from unnest(i) s);
end if;
Leo Vesque
sumber
Selamat datang di PPCG! Bisakah Anda mencoba golf dengan menghapus semua ruang ekstra, meskipun itu membuat jawabannya tidak dapat dibaca (asalkan dikompilasi)?
Olivier Grégoire
1

C ++ 17, 56 54 byte

[](auto...i){return(-i&...)+4|(~i*...)+24?(i+...):24;}

Cobalah online!

Perhatikan bahwa objek fungsi yang dibuat dapat digunakan pada waktu kompilasi, sehingga pengujian dilakukan oleh kompiler tanpa harus menjalankan program.

Penjelasan:

[]             // Callable object with empty closure,
(auto...i)     // deduced argument types,
{              // and deduced return type
  return       //
      (-i&...) //   If the fold over the bitwise AND of the negation of each argument
    +4|        // is unequal to -4, or
      (~i*...) //   if the product of the bitwise complements of the arguments
    +24?       // is unequal to -24, then
      (i+...): //   return the sum of the arguments, otherwise
      24;}     //   return 24.

Bukti bahwa satu-satunya nonnegatif i...yang (-i&...)sama dengan -4 dan (~i*...)sama dengan -24 adalah permutasi dari 1, 2, 3:

Kami pertama-tama mengamati bahwa sejak -0= 0, jika ada i= 0maka (-i&...) = 0, jadi kami menyimpulkan bahwa semua ipositif.

Sekarang, perhatikan bahwa dalam komplemen 2, -isama dengan ~(i - 1), dan ~isetara 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) * ...) = -24jadi naneh dan ((i + 1) * ...) = 24.

Faktor prima dari 24 adalah 2 ** 3 * 3, jadi n<= 4. Jika n= 1, kita memiliki i - 1 = 3dan i + 1 = 24, jadi n= 3. Tuliskan iwlog sebagai a <= b <= c, lalu jelaskan a1 sebagai sebaliknya (a + 1)(b + 1)(c + 1)> = 27. Juga c<= 4 sebagai kalau tidak (a - 1)|(b - 1)|(c - 1)> = 4. ctidak bisa 4 karena 5 bukan faktor 24, jadi c<= 3. Kemudian untuk memenuhi (a - 1)|(b - 1)|(c - 1) = 3c = 3, b = 2 seperti yang disyaratkan.

ecatmur
sumber
1

Sekam , 9 byte

?K24Σ=ḣ3O

Cobalah online!

Penjelasan

?K24Σ=ḣ3O
        O    Sort the input
?    =ḣ3     If it is equal to [1,2,3]:
 K24           Return 24
             Else:
    Σ          Return the sum of the input

Solusi sebelumnya

Memberikan hasil yang salah kepada [2,2], dan mungkin juga input lain, tetapi lebih menarik.

?ṁD→E§eΠΣ
     §eΠΣ    Build a two-element list with the product and sum of the input
?   E        If the two elements are equal:
             (true for any permutation of [1,2,3] and the list [0,0,0]
 ṁD            Double both elements and sum them
               (This is 4 times the sum: 24 for permutations of [1,2,3], 0 for [0,0,0])
             Else:
   →          Return the last element (the sum)

Cobalah online!

Leo
sumber
Ini memberi 24 untuk 2,2
rekursif
@recursive sebenarnya memberi 16, tetapi Anda benar. Dan mungkin ini memberikan hasil yang salah untuk beberapa array yang lebih lama juga ... Sial, saya perlu beralih ke solusi yang membosankan
Leo
0

Pushy , 12 byte

gF3RFx?18;S#

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.

         \ Implicit: Input on stack.
g        \ Sort input ascendingly
F3RF     \ On auxiliary stack, push range(3) -> [1, 2, 3]
x?       \ If the stacks are equal:
  18     \    Append 18 to the input
;
S#       \ Print sum of input.
FlipTack
sumber
0

Python 2 , 41 39 byte

-1 byte terima kasih kepada caird

-1 berdasarkan inspirasi dari jawaban FlipTack

lambda*a:sum(a)*4**(sorted(a)==[1,2,3])

Cobalah online!

Alternatif solusi 39 byte

lambda*a:sum(a)<<2*(sorted(a)==[1,2,3])
Felipe Nardi Batista
sumber
1
40 byte
caird coinheringaahing
0

Jelly , 10 9 byte

Ṣ24S⁼?3R¤

Cobalah online!

-1 byte terima kasih kepada Erik

Alternatif (oleh Mr. Xcoder ), juga untuk 9 byte:

3R⁼Ṣ×18+S

Cobalah online!

Bagaimana itu bekerja

Ṣ24S⁼?3R¤ - Main link. Argument: l (list)

Ṣ         - Sort
     ?    - Ternary if statement
    ⁼     -  Condition: Is l equal to...
      3R¤ -    [1, 2, 3]
 24       -  If condition: Return 24          
   S      -  Else: Return the sum of the list
caird coinheringaahing
sumber
Anda dapat melakukannya Ṣ24S⁼?3R¤selama 9 byte.
Erik the Outgolfer
Atau 3R⁼Ṣ×18+Suntuk 9 byte juga.
Tn. Xcoder
0

Pyth , 9 byte

Perbedaan pendekatan dari jawaban Pyth lainnya.

*sQ^4qS3S

Penjelasan:

Sebuah port dari jawaban Python saya

*sQ^4qS3SQ  # Full program (Q at the end is implicit and represents the input)

*           # A * B where A and B are the next two lines
  sQ        # Sum elements of input
  ^4        # 4 to the power of:
    qS3SQ   # Compares sorted input to [1, 2, 3] and returns 0 or 1

Cobalah online!

Felipe Nardi Batista
sumber
0

PowerShell , 44 byte

param($a)($a-join'+'|iex)+18*!(diff(1..3)$a)

Cobalah online!

Algoritma serupa dengan jawaban Python dan JavaScript. Mengambil input sebagai array literal $a. Kemudian segera menjumlahkan $abersama, yang membentuk operator kiri +.

Tangan kanan adalah diff(alias untuk Compare-Object) dari 1,2,3dan $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 18mana secara implisit dilemparkan $trueke 1dan $falseke 0. Jadi sisi kanan adalah 18jika arraynya sama, dan 0sebaliknya. Itu memberikan hasil yang benar 24jika array input 1,2,3dalam permutasi apa pun, dan penjumlahan dari array input sebaliknya.

AdmBorkBork
sumber
0

Kotlin , 46 44 byte

if(i.sorted()==listOf(1,2,3))24 else i.sum()

Cobalah online!

Suntingan

jrtapsell
sumber
Bisakah Anda menggunakan listOf(1,2,3)untuk menyimpan 2 byte? Saya tidak tahu Kotlin, jadi saya tidak yakin.
Tn. Xcoder