Tugas
Diberikan daftar bilangan bulat batas-ruang sebagai input, output semua himpunan bagian non-kosong unik dari angka-angka ini yang masing-masing subset berjumlah 0.
Kasus cobaan
Input: 8 −7 5 −3 −2
Keluaran:-3 -2 5
Kriteria Kemenangan
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
3 3 -3 -3
?Jawaban:
GolfScript, 41 karakter
Jika Anda tidak peduli dengan format output spesifik Anda dapat mempersingkat kode menjadi 33 karakter.
Contoh (lihat online ):
sumber
Brachylog (2), 9 karakter
Cobalah online!
sumber
Python, 119 karakter
Menghitung semua himpunan bagian secara rekursif dan memeriksa masing-masing.
sumber
Python, 120
Saya seorang karakter yang lebih buruk daripada solusi Keith. Tapi ... ini terlalu dekat untuk tidak diposkan. Salah satu fitur favorit saya dari kode-golf adalah bagaimana solusi yang sama panjangnya bisa berbeda.
sumber
Python (
128 137)136)Kurang ajar kau,
itertools.permutations
karena memiliki nama yang begitu panjang!Solusi brute force. Saya terkejut itu bukan yang terpendek: tapi saya kira
itertools
reruntuhan solusinya.Tidak Disatukan:
Golf (output jelek):
Golf (keluaran cantik) (183):
import itertools as i
: mengimpor modul itertools dan memanggilnyai
x=map(int,input().split())
: memisahkan input dengan spasi, lalu mengubah item daftar yang dihasilkan menjadi bilangan bulat (2 3 -5
->[2, 3, -5]
)set (
sorted(j)
for a in range (1, len (x) +1) untuk j di i.permutations (x, a) jika jumlah (j) == 0):Mengembalikan daftar semua himpunan bagian dalam
x
, disortir, di mana jumlahnya adalah 0, dan kemudian hanya mendapatkan item unik(
set(...)
)Kuburan (`) di sekitar
sorted(j)
adalah singkatan Pythonrepr(sorted(j))
. Alasan mengapa ini ada di sini adalah karena set di Python tidak dapat menangani daftar, jadi hal terbaik berikutnya adalah menggunakan string dengan daftar sebagai teks.sumber
split()
membuat daftar string, tetapi kemudian Anda memanggilsum
subset dari pemisahan itu.from itertools import*
repr()
C # - 384 karakter
OK, pemrograman bergaya fungsional dalam C # tidak sesingkat itu , tapi saya menyukainya ! (Hanya menggunakan enumerasi kasar, tidak ada yang lebih baik.)
Diformat dan dikomentari agar lebih mudah dibaca:
sumber
SWI-Prolog 84
Versi ini mencetak daftar, alih-alih mencoba menemukan ikatan yang sesuai untuk suatu istilah dalam predikat.
Metode input
Sebagai catatan, ini adalah versi yang menemukan ikatan untuk memenuhi predikat:
Metode input
Revisi sebelumnya berisi solusi tidak lengkap yang tidak berhasil menghapus set kosong.
sumber
Mathematica
62 5738Kode
Input dimasukkan sebagai bilangan bulat dalam array
x
,.Keluaran
Penjelasan
x[[1, 1]]
mengonversi input ke daftar bilangan bulat.Subsets
menghasilkan semua himpunan bagian dari bilangan bulat.Select....Tr@# == 0
memberikan semua himpunan bagian yang memiliki total sama dengan 0.Grid
memformat himpunan bagian yang dipilih sebagai bilangan bulat yang dipisahkan ruang.sumber
Jelly , 6 byte
Cobalah online!
Hanya untuk kelengkapan. Mirip dengan Brachylog, Jelly juga memposting tantangan, tetapi sekarang, bahasa yang lebih baru bersaing secara normal.
sumber
05AB1E , 5 byte
Cobalah online!
Jika input harus dibatasi ruang, menambahkan
#
jawaban ini adalah satu-satunya perubahan yang diperlukan.sumber
J,
57535149 karakterPemakaian:
sumber
(<@":@(#~0=+/)@#"1 _~2#:@i.@^#)
menyimpan 4 karakter.Stax , 8 byte CP437
Jalankan dan debug online!
Penjelasan
Menggunakan versi yang belum dibongkar (9 byte) untuk menjelaskan.
sumber
Given a list of space-delimited integers as input
; Anda - namun - mengambil daftar sebagai input.J , 34 byte
Cobalah online!
bagaimana
".
mengonversi input ke daftar. kemudian:sumber
Perl 6 , 51 byte
Cobalah online!
Mengembalikan daftar Tas unik dengan jumlah 0. Tas adalah Set yang berbobot.
Penjelasan:
sumber
Ruby, 110 byte
Akan menambahkan tautan TIO nanti.
Mengambil input dari stdin sebagai daftar angka, mis
8 −7 5 −3 −2
Cara kerjanya: Mengkonversi input menjadi array angka. Mendapat semua permutasi dari panjang dari 1 hingga panjang array. Itu menambahkan mereka ke array output jika mereka menjumlahkan ke 0. Ini menampilkan array tanpa duplikat.
Output untuk input sampel:
[[-3, -2, 5]]
sumber