To jest pytanie do wywiadu Google, patrz link do youtube tutaj.
Zadanie:
Znajdź 2 liczby całkowite z nieuporządkowanej listy, które sumują się do danej liczby całkowitej.
- Biorąc pod uwagę nieuporządkowaną listę liczb całkowitych, znajdź 2 liczby całkowite, które sumują się do danej wartości, wydrukuj te 2 liczby całkowite i wskaż sukces (wyjście 0). Nie muszą to być żadne konkretne liczby (tj. Pierwsze 2 liczby całkowite sumujące się do właściwej liczby), każda para sumująca się do wartości będzie działać.
- liczba całkowita jest dodatnia i większa od zera.
- lista liczb całkowitych może mieć dowolną strukturę danych, w tym plik liczb całkowitych - jedna liczba całkowita na linię.
- jeśli nie można znaleźć liczb całkowitych, wskazać awarię (wyjście 1).
- dwie liczby całkowite na różnych pozycjach na liście muszą zostać zwrócone. (tzn. nie możesz zwrócić tej samej liczby dwa razy z tej samej pozycji)
(Uwaga: w filmie nie są to dokładnie wymagania. „Ankieter” wielokrotnie się zmieniał).
na przykład.
sum2 8 <<EOF
1
7
4
6
5
3
8
2
EOF
Stan wydruków 3
i 5
wyjścia wynosi 0. Zauważ, że w tym 1,7
i 2,6
również będą dozwolone wyniki.
sum2 8 <<EOF
1
2
3
4
Zwraca status wyjścia 1, ponieważ nie ma możliwej kombinacji. 4,4
nie jest dozwolone, zgodnie z regułą 5.
code-golf
arithmetic
array-manipulation
philcolbourn
źródło
źródło
Odpowiedzi:
Bash, 84 bajtów
Moja implementacja (z grubsza) rozwiązania inżynierskiego Google, ale używając bash i strumienia wejściowego - nie moje rozwiązanie, więc to się nie liczy.
metoda
podczas gdy możemy odczytać liczbę całkowitą V ze strumienia wejściowego, jeśli jest mniejsza niż docelowy 1 $, to jeśli już widzieliśmy 1-V $, to wypisz 1-V i V i wyjdź 0 (w przeciwnym razie) zapisz kandydata na wejście 1-V wyjście 1
źródło
Brachylog , 9 bajtów
Wypróbuj online!
Zakładając, że poprawnie zrozumiałem wyzwanie…
Wyjaśnienie
źródło
Perl 6 , 59 bajtów
Wypróbuj
Wypróbuj bez możliwych rezultatów
Rozszerzony:
źródło
JavaScript ES6,
58 70 6864 bajtówZwraca parę liczb w postaci tablicy, jeśli zostanie znaleziona, w przeciwnym razie zwraca
undefined
wartość fałszowania.źródło
3, 5
ale to wychodzi1, 7
...f([2,2] 4)
?includes
sztuczka.JavaScript (ES6),
615756 bajtówPobiera tablicę liczb całkowitych
a
i oczekiwaną sumęs
w składni curry(a)(s)
. Zwraca parę pasujących liczb całkowitych jako tablicę lubundefined
jeśli taka para nie istnieje.Sformatowane i skomentowane
Test
Pokaż fragment kodu
źródło
Galaretka , 14 bajtów
Wypróbuj online!
Jest to funkcja (nie pełny program), która przekazuje dane na standardowe wyjście. (Łącze TIO ma opakowanie, które uruchamia funkcję i ignoruje jej wartość zwracaną.)
Ten program mógłby być o 4 bajty krótszy, gdyby nie wymaganie kodu wyjścia; zwrócenie kodu wyjścia 1 w Jelly jest dość trudne. (Możliwe, że jest jeszcze szybszy sposób na zrobienie tego, za czym tęskniłem.)
Wyjaśnienie
Możemy całkowicie zmniejszyć o połowę każdą liczbę całkowitą w parze, więc
o⁶H
nic nie zrobi, jeśli znajdziemy wynik, poza zwrotem bezużytecznej wartości zwrotnej, która i tak nie jest istotna (Ṅ
służy jako wygodna metoda jednobajtowa do określenia zwrotu funkcji wartość wcześnie, zgodnie z zasadami PPCG). Jeśli jednak nie znaleźliśmy wyniku, próbujemy zmniejszyć o połowę znak spacji, operacja tak bezsensowna, że powoduje awarię interpretera Jelly. Na szczęście ta awaria generuje kod wyjścia 1.źródło
Perl 5 , 51 bajtów
46 bajtów kodu + na 5 bajtów dla
-pli
flag.Wypróbuj online!
Chodzi o iterację na liście danych wejściowych: na liczbie
x
($_
), jeśli wcześniej widzieliśmyn-x
($^I-$_
), to znaleźliśmy to, czego szukaliśmy, i ustawiliśmy$\
te dwie wartości ("$_ $v"
). Na koniec, jeśli$\
nie jest ustawiony, to myexit 1
, w przeciwnym razie zostanie to domyślnie wydrukowane.źródło
^I
?Röda ,
6056 bajtówWypróbuj online!
Ten kod zgłasza błąd, jeśli nie ma odpowiedzi. Generuje wszystkie możliwe pary, które mogą tworzyć sumę
s
, tj.1, s-1
,2, s-2
,3, s-3
, ... Następnie sprawdza, czy oba numery są w tablicya
, a jeśli tak, to popycha je do strumienia.pull
odczytuje jedną wartość ze strumienia i zwraca ją. Jeśli w strumieniu nie ma żadnych wartości, generuje błąd.a-x
zwraca tablicęa
pox
usunięciu.źródło
Python 2, 60 bajtów
To krótkie, dopóki zasady z wyjściem z kodem 1 nie zostaną wyjaśnione. Teraz kończy się z błędem, jeśli nic nie zostanie znalezione.
-5 bajtów dzięki @Peilonrayz
-4 bajty dzięki @Rod
Wypróbuj online
źródło
input()
celu zmniejszenia 4 bajtóweval(raw_input())
(myślę).C ++ 133 bajty (skompilowane z clang 4 i gcc 5.3 -std = c ++ 14)
C 108 bajtów
źródło
#include <set>
i jeszcze kilka dlastd::set
. Chociaż możesz także zaoszczędzić trochę bajtów, jeśli usuniesz nawiasy klamrowep.insert(v-i);
main
. Uważamy (o ile wyzwanie nie stanowi inaczej), że funkcja jest prawidłowym przesłaniem. (witamy na stronie btw!)end
, ale kompiluje się na gcc bezstd::
(i ustaw, jeśli oczywiście nie)Haskell , 34 bajty
Wypróbuj online!
Dla każdego elementu listy ta funkcja sprawdza, czy (element sum) znajduje się w następnej części listy. Zwraca pierwszą znalezioną parę. Jeśli funkcja osiągnie koniec listy, zgłasza błąd „niewyczerpujące wzorce” i kończy działanie z kodem 1.
źródło
[2,2]#4
.PowerShell,
10997 bajtówPodjęto 12-bajtową ofertę, którą zaoferował AdmBorkBork
Wyjaśnienie
Obecne reguły szukają kodu wyjścia, który to robi. Można je usunąć i po prostu sprawdzić, czy zwracane są liczby i fałsz.
Przykładowe użycie
Jeśli powyższy kod został zapisany jako funkcja
s
źródło
$c
i zapętlając w dół -($a.count-1)..1|%{$f=$_;--$_..0|%{if...
R, 49 bajtów
Znajduje wszystkie 2 kombinacje
x
i zwraca macierz. Następnie sumuje według kolumny i znajduje wszystkie sumy równey
(więc bez[,1]
części na końcu wypisze wszystkie kombinacje, których sumy są równey
)źródło
Japt , 9 bajtów
Zaoszczędzono wiele bajtów dzięki produktom @ETH
Wypróbuj online!
Wyjaśnienie
Przykład
źródło
JavaScript,
114968684 bajtówZapisano 1 bajt dzięki @Cyoce i kolejne 8 bajtów dzięki @ETHProductions
Zwraca krotkę z pierwszą kombinacją elementów listy, które sumują się do podanych danych wejściowych lub nic w przypadku braku dopasowania. Usunąłem
var
s w funkcji; REPL.it ulega awarii bez nich, ale konsola Chrome Dev radzi sobie z tym dobrze ...Wypróbuj online!
źródło
y=x+1
zajmuje się tym.a=>b=>...
do zapisania bajtufor(y=x;++y<b.length;){
. Możesz także usunąć wszystkie zestawyreturn
Clojure, 77 bajtów
Zwraca pierwszą taką parę lub
nil
.źródło
Haskell, 62 bajty
Nadal nie wiem, na co pozwala wyzwanie, a co nie. Idę na funkcję, która wypisuje parę liczb i zwraca 0, jeśli istnieje rozwiązanie, i nie drukuje nic i zwraca 1, jeśli nie ma rozwiązania. Ponieważ druk jest we / wy, muszę podnieść zwracane wartości do IO-Monad (via
return
), a faktyczny typ funkcji toNum a => IO a
.Przykład użycia (z wartością zwrotną wydrukowaną przez replikę):
Wypróbuj online! .
Jeśli dozwolone jest zgłaszanie wyjątków,
fail
zapisze niektóre bajty (łącznie 51):źródło
Galaretka , 9 bajtów
Jelly nie ma możliwości ustawienia kodu wyjścia na dowolne wartości, więc powoduje to błąd TypeError dla danych wejściowych bez prawidłowego rozwiązania, które spowoduje, że interpreter nadrzędny zakończy działanie z kodem wyjścia 1 .
Wypróbuj online!
Jak to działa
źródło
Nova , 101 bajtów
Jedną fajną rzeczą w Code Golf jest to, że pomaga mi znaleźć błędy w moim języku. np. wymagana przestrzeń między
return
i[y,x-y]
.Gdy dodam funkcje push / pop do Array.nova i naprawię return, będzie to 96 bajtów:
Stosowanie:
Edycja: Jest też ten sposób na 73 bajtach (69 przy użyciu pop):
firstOrThrow zgłosi wyjątek, który nie zostanie przechwycony, a tym samym ostatecznie wyjdzie z programu z kodem wyjścia 1.;)
Ten sposób również wydaje się bardziej czytelny.
źródło
Pyth, 12 bajtów
Wyjaśnienie
źródło
PHP, 88 bajtów
pobiera dane wejściowe z argumentów wiersza poleceń, najpierw sumuj. Uruchom z
-nr
.Na szczęście
die
/exit
kończy działanie,0
gdy podasz mu ciąg jako parametr.Próbowałem połączyć pętle w jedną; ale tym razem wymaga dłuższej inicjalizacji i przetestowania.
źródło
for($i=1;$a=$argv[$k=++$i];)for(;$b=$argv[++$k];)$a+$b!=$argv[1]?:die(!0);
i powinieneś rzucićMathematica, 76 bajtów
Całkiem proste:
#~Subsets~{2}
pobiera wszystkie 2-elementowe podzbiory listy, a następnieCases[...,x_/;Tr@x==#2]
wybiera tylko te, których suma jest liczbą, której chcemy. Jeśli nie ma żadnego z nich,If[l=={}, Message@f::e,First@l]
wyświetla komunikat o błędzief::e : 1
, który zdefiniowaliśmy wcześniej (ponieważ nie mam pojęcia, co jeszcze może oznaczać „status wyjścia 1” dla Mathematica); w przeciwnym razie zwraca pierwszy wpis na liście par, które sumują się do poprawnej rzeczy.Jeśli wolno nam zwrócić wartość falsey zamiast robić ten dziwny status wyjścia, poniższy kod ma 58 bajtów:
źródło
Scala,
5541 bajtówZwraca listę dwóch liczb, jeśli istnieją, i w przeciwnym razie zgłasza błąd. Nieprzechwycony, ten błąd spowoduje status wyjścia 1.
źródło
Rubin,
5348 bajtówDane wejściowe: a to lista, s to oczekiwana suma.
Jeśli 2 liczby zostaną znalezione, wydrukuj je i zwróć 0, w przeciwnym razie zwróć 1, jak w specyfikacji.
źródło
TI-Basic, 59 bajtów
Wyjaśnienie:
Jeśli program nie zamknął się płynnie, spowoduje błąd, gdy na liście nie będzie wystarczającej liczby elementów, aby kontynuować.
źródło
CJam, 23 bajty
Dane wejściowe to
sum numbers
. Na przykład:6 [3 2 3]
. Pozostawia liczbę dodatnią dla prawdy i pusty ciąg znaków lub 0 dla falsey.Wyjaśnienie:
źródło