Zadanie
Biorąc pod uwagę listę liczb całkowitych rozdzielanych spacjami jako dane wejściowe, wypisz wszystkie unikalne niepuste podzbiory tych liczb, które każdy podzbiór sumuje na 0.
Przypadek testowy
Wejście: 8 −7 5 −3 −2
Wyjście:-3 -2 5
Zwycięskie kryterium
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
3 3 -3 -3
?Odpowiedzi:
GolfScript, 41 znaków
Jeśli nie zależy ci na konkretnym formacie wyjściowym, możesz skrócić kod do 33 znaków.
Przykład (patrz online ):
źródło
Brachylog (2), 9 znaków
Wypróbuj online!
źródło
Python, 119 znaków
Zlicza rekurencyjnie wszystkie podzbiory 2 ^ n i sprawdza każdy z nich.
źródło
Python, 120
Jestem postacią gorszą niż rozwiązanie Keitha. Ale ... to zbyt blisko, aby nie publikować. Jedną z moich ulubionych cech golfa kodowego jest to, jak różne mogą być rozwiązania o podobnej długości.
źródło
Python (
128 137136)Cholera
itertools.permutations
, za tak długie imię!Rozwiązanie brutalnej siły. Dziwi mnie, że to nie jest najkrótsze: ale chyba
itertools
zrujnuje to rozwiązanie.Nie golfowany:
Gra w golfa (brzydka moc wyjściowa):
Gra w golfa (ładna produkcja) (183):
import itertools as i
: importowanie modułu itertools i wywoływanie goi
x=map(int,input().split())
: rozdziela dane wejściowe spacjami, a następnie zamienia wynikowe elementy list na liczby całkowite (2 3 -5
->[2, 3, -5]
)set (
sorted(j)
dla zakresu in (1, len (x) +1) dla jw i.permutations (x, a) if sum (j) == 0):Zwraca listę wszystkich podzbiorów w
x
, posortowane, gdzie suma wynosi 0, a następnie otrzymuje tylko unikalne elementy(
set(...)
)Groby (`) wokół
sorted(j)
są skrótem Pythonrepr(sorted(j))
. Powodem tego jest to, że zestawy w Pythonie nie mogą obsługiwać list, więc następną najlepszą rzeczą jest użycie ciągów z listą jako tekstem.źródło
split()
tworzy listę ciągów, ale później wywołujeszsum
podzbiory tego podziału.from itertools import*
repr()
C # - 384 znaków
OK, programowanie w stylu funkcjonalnym w C # nie jest takie krótkie , ale uwielbiam to! (Używając tylko wyliczenia brutalnej siły, nic lepszego.)
Sformatowane i skomentowane dla większej czytelności:
źródło
SWI-Prolog 84
Ta wersja drukuje listę, zamiast próbować znaleźć odpowiednie powiązanie dla terminu w predykacie.
Metoda wprowadzania
Dla przypomnienia jest to wersja, która znajduje powiązanie spełniające predykat:
Metoda wprowadzania
Poprzednia wersja zawiera niepełne rozwiązanie, któremu nie udało się usunąć pustego zestawu.
źródło
Mathematica
62 5738Kod
Wejście wprowadzone jako liczby całkowite w tablicy
x
.Wynik
Wyjaśnienie
x[[1, 1]]
konwertuje dane wejściowe na listę liczb całkowitych.Subsets
generuje wszystkie podzbiory z liczb całkowitych.Select....Tr@# == 0
daje wszystkie te podzbiory, których suma równa się 0.Grid
formatuje wybrane podzbiory jako liczby całkowite rozdzielone spacjami.źródło
Galaretka , 6 bajtów
Wypróbuj online!
Tylko dla kompletności. Podobnie jak Brachylog, Galaretka również postdatuje wyzwanie, ale do tej pory nowsze języki konkurują normalnie.
źródło
05AB1E , 5 bajtów
Wypróbuj online!
Jeśli dane wejściowe muszą być rozdzielane spacjami, przejście
#
do tej odpowiedzi jest jedyną wymaganą zmianą.źródło
J,
57535149 znakówStosowanie:
źródło
(<@":@(#~0=+/)@#"1 _~2#:@i.@^#)
oszczędza 4 znaki.Stax , 8 bajtów CP437
Uruchom i debuguj online!
Wyjaśnienie
Używa do rozpakowania wersji (9 bajtów).
źródło
Given a list of space-delimited integers as input
; jednak bierzesz listę jako dane wejściowe.J , 34 bajty
Wypróbuj online!
w jaki sposób
".
konwertuje dane wejściowe na listę. następnie:źródło
Perl 6 , 51 bajtów
Wypróbuj online!
Zwraca listę unikatowych toreb, których suma wynosi 0. Torba jest zestawem ważonym.
Wyjaśnienie:
źródło
Rubin, 110 bajtów
Link TIO doda później.
Pobiera dane wejściowe ze standardowego wejścia jako listę liczb, np
8 −7 5 −3 −2
Jak to działa: Konwertuje dane wejściowe na tablicę liczb. Pobiera wszystkie permutacje długości od 1 do długości tablicy. Dodaje je do tablicy wyjściowej, jeśli sumuje się do 0. Wyświetla tablicę bez duplikatów.
Dane wyjściowe dla przykładowego wejścia:
[[-3, -2, 5]]
źródło