Ini adalah pertanyaan wawancara Google, lihat di sini untuk tautan youtube.
Tugas:
Temukan 2 bilangan bulat dari daftar tidak berurutan yang menjumlahkan bilangan bulat yang diberikan.
- Diberikan daftar bilangan bulat yang tidak berurutan, temukan 2 bilangan bulat yang menjumlahkan nilai yang diberikan, cetak 2 bilangan bulat ini, dan tunjukkan keberhasilan (keluar 0). Mereka tidak perlu angka tertentu (yaitu 2 bilangan bulat pertama yang menjumlahkan ke angka yang tepat), setiap pasangan yang menjumlahkan nilai akan bekerja.
- bilangan bulat positif dan lebih besar dari nol.
- daftar bilangan bulat dapat berada dalam struktur data apa pun termasuk file bilangan bulat - satu bilangan bulat per baris.
- jika tidak ada bilangan bulat yang ditemukan, tunjukkan kegagalan (keluar 1).
- dua bilangan bulat pada posisi berbeda dalam daftar harus dikembalikan. (yaitu Anda tidak dapat mengembalikan nomor yang sama dari posisi yang sama dua kali)
(Catatan: dalam video, ini bukan persyaratan. 'Pewawancara' mengubah beberapa kali.)
misalnya.
sum2 8 <<EOF
1
7
4
6
5
3
8
2
EOF
Mencetak 3
dan 5
keluar dari status adalah 0. Perhatikan bahwa ini 1,7
dan 2,6
juga akan diizinkan hasilnya.
sum2 8 <<EOF
1
2
3
4
Mengembalikan status keluar 1 karena tidak ada kombo yang mungkin. 4,4
tidak diizinkan, sesuai aturan 5.
code-golf
arithmetic
array-manipulation
philcolbourn
sumber
sumber
Jawaban:
Bash, 84 byte
Implementasi saya atas (kira-kira) solusi insinyur Google tetapi menggunakan bash dan aliran input - bukan solusi saya, jadi ini tidak masuk hitungan.
metode
sementara kita bisa membaca integer V dari input stream jika kurang dari target $ 1 maka jika sudah terlihat $ 1-V maka cetak $ 1-V dan V dan keluar 0 (selain itu) simpan kandidat untuk input $ 1-V keluar 1
sumber
Brachylog , 9 byte
Cobalah online!
Dengan asumsi saya memahami tantangan dengan benar ...
Penjelasan
sumber
Perl 6 , 59 byte
Cobalah
Cobalah tanpa hasil yang mungkin
Diperluas:
sumber
JavaScript ES6,
58 70 6864 byteMengembalikan sepasang angka dalam bentuk array jika ditemukan, jika tidak
undefined
, mengembalikan nilai falsy.sumber
3, 5
ini tapi output1, 7
...f([2,2] 4)
?includes
Trik yang bagus .JavaScript (ES6),
615756 byteMengambil array bilangan bulat
a
dan jumlah yang diharapkans
dalam sintaks currying(a)(s)
. Mengembalikan sepasang bilangan bulat yang cocok sebagai array, atauundefined
jika tidak ada pasangan seperti itu.Diformat dan dikomentari
Uji
Tampilkan cuplikan kode
sumber
Jelly , 14 byte
Cobalah online!
Ini adalah fungsi (bukan program lengkap) yang output ke output standar. (TIO link memiliki pembungkus yang menjalankan suatu fungsi dan mengabaikan nilai kembali.)
Program ini bisa lebih pendek 4 byte jika bukan karena persyaratan kode keluar; mengembalikan kode keluar 1 di Jelly cukup sulit. (Mungkin ada cara terser untuk melakukan ini yang saya lewatkan.)
Penjelasan
Kami dapat membagi dua setiap bilangan bulat dalam pasangan dengan baik, sehingga
o⁶H
tidak akan melakukan apa pun jika kami menemukan hasilnya, selain mengembalikan nilai pengembalian tidak berguna yang tidak relevan pula (metodeṄ
melayani sebagai byte tunggal yang mudah digunakan untuk menentukan fungsi pengembalian nilai awal, di bawah aturan PPCG). Namun, jika kami tidak menemukan hasil, kami akhirnya mencoba untuk membagi dua karakter antariksa, operasi yang sangat tidak berarti sehingga menyebabkan penerjemah Jelly mogok. Untungnya, kerusakan ini menghasilkan kode keluar 1.sumber
Perl 5 , 51 byte
46 byte kode + untuk 5 byte untuk
-pli
flag.Cobalah online!
Idenya adalah untuk beralih pada daftar input: pada angka
x
($_
), jika kita sebelumnya melihatn-x
($^I-$_
) maka kita menemukan apa yang kita cari, dan mengatur$\
ke dua nilai ini ("$_ $v"
). Pada akhirnya, jika$\
tidak disetel, maka kamiexit 1
, jika tidak maka akan dicetak secara implisit.sumber
^I
?Röda ,
6056 byteCobalah online!
Kode ini menimbulkan kesalahan jika tidak ada jawaban. Ini menghasilkan semua pasangan yang mungkin yang dapat membentuk jumlah
s
, yaitu.1, s-1
,2, s-2
,3, s-3
, ... Kemudian memeriksa jika kedua angka dalam arraya
dan jika demikian, mendorong mereka ke sungai.pull
membaca satu nilai dari aliran dan mengembalikannya. Jika tidak ada nilai di aliran, itu melempar kesalahan.a-x
mengembalikan arraya
denganx
dihapus.sumber
Python 2, 60 byte
Ini singkat, sampai aturan dengan keluar dengan kode 1 diklarifikasi. Sekarang keluar dengan kesalahan jika tidak ada yang ditemukan.
-5 byte terima kasih kepada @Peilonrayz
-4 byte terima kasih kepada @Rod
Cobalah online
sumber
input()
untuk mengurangi 4 byteeval(raw_input())
(saya pikir).C ++ 133 byte (dikompilasi dengan dentang 4 dan gcc 5.3 -std = c ++ 14)
C 108 byte
sumber
#include <set>
dan beberapa lagistd::set
. Meskipun Anda juga dapat menyimpan beberapa byte jika Anda menghapus kawat gigi di sekitarp.insert(v-i);
main
. Kami menganggap (kecuali dinyatakan sebaliknya dalam tantangan) bahwa suatu fungsi adalah pengiriman yang valid. (selamat datang di situs btw!)end
terlalu, tetapi kompilasi pada gcc tanpastd::
(dan set jika tidak tentu saja)Haskell , 34 byte
Cobalah online!
Untuk setiap elemen daftar, fungsi ini memeriksa apakah (elemen-penjumlahan) ada di bagian berikut dari daftar. Mengembalikan pasangan pertama yang ditemukannya. Jika fungsi mencapai akhir daftar itu melempar kesalahan "pola non-lengkap" dan keluar dengan kode 1.
sumber
[2,2]#4
.PowerShell,
10997 byteMengambil kesepakatan 12 byte yang ditawarkan AdmBorkBork
Penjelasan
Aturan saat ini mencari kode keluar yang berfungsi. Mereka dapat dihapus dan hanya memeriksa nomor yang dikembalikan dan palsu.
Contoh Penggunaan
Jika kode di atas disimpan sebagai fungsi
s
sumber
$c
dan memutar ke bawah -($a.count-1)..1|%{$f=$_;--$_..0|%{if...
R, 49 byte
Ini menemukan semua 2-kombinasi
x
dan mengembalikan matriks. Kemudian, jumlahkan dengan kolom dan temukan semua jumlah yang sama dengany
(jadi tanpa[,1]
bagian pada akhirnya akan mencetak semua kombinasi yang jumlahnya sama dengany
)sumber
Japt , 9 byte
Menyimpan banyak byte berkat produk @ETH
Cobalah online!
Penjelasan
Contoh
sumber
Javascript,
114968684 byteDisimpan 1 byte berkat @Cyoce dan 8 byte lainnya berkat @ETHProductions
Ini mengembalikan tupel dengan kombinasi elemen daftar pertama yang meringkaskan input yang diberikan, atau tidak sama sekali tanpa kecocokan. Saya telah menghapus
var
s dalam fungsi; REPL.itu macet tanpa mereka, tetapi Chrome Dev Console menangani ini dengan baik ...Cobalah online!
sumber
y=x+1
takes care of that.a=>b=>...
to save a bytefor(y=x;++y<b.length;){
. Also, you can remove all sets of braces except the outermost one, and you can remove the space afterreturn
Clojure, 77 bytes
Returns the first such pair or
nil
.sumber
Haskell, 62 bytes
I still don't know what's allowed by the challenge and what not. I'm going for a function that prints a pair of numbers and returns 0 if there's a solution and prints nothing and returns 1 if there's no solution. As printing is I/O, I have to lift the return values into the IO-Monad (via
return
) and the actual type of the function isNum a => IO a
.Usage example (with return value printed by the repl):
Try it online!.
If raising exceptions is allowed,
fail
will save some bytes (total 51):sumber
Jelly, 9 bytes
Jelly has no way of setting the exit code to arbitrary values, so this produces a TypeError for input without a valid solution that will cause the parent interpreter to exit with exit code 1.
Try it online!
How it works
sumber
Nova, 101 bytes
One nice thing about code golf is that it helps me find bugs in my language. e.g. the space required between
return
and[y,x-y]
.Once I add push/pop functions to Array.nova and fix return, would be 96 bytes:
Usage:
Edit: Also, there's this way at 73 bytes (69 using pop), too:
firstOrThrow will throw an Exception, which will be uncaught and therefore ultimately exiting the program with exit code 1. ;)
This way seems more readable too.
sumber
Pyth, 12 bytes
Explanation
sumber
PHP, 88 bytes
takes input from command line arguments, sum first. Run with
-nr
.Fortunately,
die
/exit
exits with0
when you give it a string as parameter.I tried to merge the loops to one; but it requires a longer initialization and test this time.
sumber
for($i=1;$a=$argv[$k=++$i];)for(;$b=$argv[++$k];)$a+$b!=$argv[1]?:die(!0);
and you should have a look on this codegolf.stackexchange.com/questions/120803/…Mathematica, 76 bytes
Fairly straightforward:
#~Subsets~{2}
gets all 2-element subsets of the list, thenCases[...,x_/;Tr@x==#2]
picks only the ones whose sum is the number we want. If there are none of these,If[l=={}, Message@f::e,First@l]
prints the error messagef::e : 1
that we defined earlier (since I have no idea what else "exit status 1" might mean for Mathematica); otherwise, it returns the first entry in the list of pairs that sum to the correct thing.If we're allowed to return a falsey value instead of doing that weird exit status thing, the following code has 58 bytes:
sumber
Scala,
5541 bytesReturns a list of the two numbers if they exist and throws an error otherwise. Uncaught, this error will result in an exit status of 1.
sumber
Ruby,
5348 bytesInput: a is the list, s is the expected sum.
If the 2 numbers are found, print them and return 0, otherwise return 1, as in the specification.
sumber
TI-Basic, 59 bytes
Explanation:
If the program did not exit gracefully, it will cause an error when there are not enough elements in the list for it to continue.
sumber
CJam, 23 bytes
Input is
sum numbers
. For example:6 [3 2 3]
. Leaves a positive number for truthy and an empty string or 0 for falsey.Explanation:
sumber