Wprowadzenie:
Myślę, że wszyscy o tym słyszeliśmy, ale tutaj jest bardzo krótkie streszczenie: Noe zebrał dwa z każdego gatunku zwierząt na planecie, samiec i samicę, aby uratować w swojej Arce podczas wielkiej powodzi. Rzeczywisty cytat z Biblii brzmi:
Rodzaju 7: 2-3
Musisz zabrać ze sobą siedem każdego rodzaju czystego zwierzęcia, samca i jego partnera, dwa każdego rodzaju nieczystego zwierzęcia, samca i jego partnera, a także siedem każdego ptaka na niebie , płci męskiej i żeńskiej, aby zachować swoje potomstwo na powierzchni ziemi.
źródło
Ale ze względu na to wyzwanie zignorujemy część czystą / nieczystą i część, w której wziął siedem z każdego zwierzęcia. To wyzwanie dotyczy tylko tej części:
dwa z każdego rodzaju
nieczystegozwierzęcia, samiec i jego partner
Wyzwanie:
Wkład:
Otrzymujesz listę dodatnich liczb całkowitych (w losowej kolejności).
Wydajność:
Dwie odrębne wartości wskazujące, czy jest to „Lista Noego”, czy nie. Nie musi to być prawda / falsey , więc może to być 0
/ 1
w Javie / C # lub 'A'
/ 'B'
w dowolnym języku, aby podać kilka przykładów.
Kiedy lista jest „Listą Noego”? Gdy na liście są dokładnie dwie liczby całkowite.
Zasady konkursu:
- I / O jest elastyczny. Dane wejściowe mogą być listą / tablicą / strumieniem liczb całkowitych / liczb zmiennoprzecinkowych / ciągów lub odczytywane jeden po drugim ze STDIN. Dane wyjściowe mogą być dowolnymi dwiema odrębnymi wartościami, zwracanymi z funkcji lub danych wyjściowych do pliku STDOUT / a.
- Liczby całkowite na liście wejściowej są w kolejności losowej i są gwarantowane, że są dodatnie w zakresie .
- Lista wejściowa jest na pewno niepusta.
- Posiadanie liczby całkowitej wielokrotności dwa razy występującej powyżej 2 (tj. 4, 6, 8 itd.) Będzie falsey. Czyli
[6,4,4,6,4,7,4,7]
jest falsey, choć można jeszcze stworzyć równe par jak to:[[4,4],[4,4],[6,6],[7,7]]
.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Truthy:
[7,13,9,2,10,2,4,10,7,13,4,9]
[1,2,3,1,2,3]
[10,100,1000,1,100,10,1000,1]
[123,123]
[8,22,57189,492,22,57188,8,492,57188,57189,1,1]
Falsey:
[6,4,4,6,4,7,4,7]
[2,2,2,2,2,2]
[5,1,4,5,1,1,4]
[77,31,5,31,80,77,5,8,8]
[1,2,3,2,1]
[44,4,4]
[500,30,1]
[1,2,1,1]
[2,4,6,4,4,4]
[2,23,34,4]
[2,23,3,3,34,4]
źródło
Odpowiedzi:
Python 3 , 31 bajtów
Wypróbuj online!
Python 2 , 33 bajty
Wypróbuj online!
źródło
05AB1E , 4 bajty
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
¢2QP
, ale używanieΘ
jest również dobrą alternatywą. :){ιË
, ale oczywiście to się nie udaje, gdy liczby całkowite występują 4 razy.Brachylog , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
R , 20 bajtów
-6 bajtów dzięki digEmAll poprzez zmianę metody wprowadzania
Wypróbuj online!
Wyprowadza,
FALSE
jeśli jest to lista Noego iTRUE
inaczej. Działa dla każdego typu danych wejściowych, nie tylko liczb całkowitych.Oblicza liczbę każdej wartości na liście i sprawdza, czy którakolwiek z wartości jest inna niż 2.
źródło
APL (Dyalog Extended) , 5 bajtów SBCS
Wypróbuj online!
Czy to prawda, że…
2¨
dwa dla każdego elementu≡
jest identyczny z⍧⍨
odliczanie selfie (liczba własnych elementów w sobie)?
źródło
C # (interaktywny kompilator Visual C #) ,
39, 32 bajtyDzięki @Expired_Data
Wypróbuj online!
źródło
Haskell , 33 bajty
Wypróbuj online!
Dla każdego elementu danych wejściowych upewniamy się, że pojawia się dwukrotnie na liście danych wejściowych.
sum[1|b<-x,b==a]
jest po prostu bardziej golfową wersjąlength(filter(==a)x)
.źródło
Perl 6 , 18 bajtów
Wypróbuj online!
.Bag
konwertuje listę wejściową naBag
zbiór - wielokrotność.{*}
wyodrębnia wszystkie krotności..all
tworzy połączenie wielu krotności.== 2
skutkuje innym połączeniem booleanów, z których każdy jest prawdziwy, jeśli krotność wynosi 2.so
zwija skrzyżowanie do pojedynczego logicznego.źródło
J , 10 bajtów
Wypróbuj online!
źródło
[:*/2=1#.=
Naprawdę chcę usunąć tę czapkę, ale nie wiem, jak to zrobić.2*/@:=1#.=
, również 10 bajtów@:
tutaj też się przydaje.=
, tak dziwnie przydatne w niszowych scenariuszach golfowychMS SQL Server 2017 ,
152150146 bajtówWersja do odczytu:
Wypróbuj na SQL Fiddle !
-2 bajty dzięki Kevin Cruijssen
źródło
c
go usunąć poCOUNT(*)
?Haskell ,
6145 bajtówWypróbuj online!
Dzięki @KevinCruijssen za 12 bajtów i @nimi za kolejne 4.
Pierwsza odpowiedź Haskella, ale było to zaskakująco łatwe. Mogą
prawdopodobniebyć grałem dużo. Przykładem...źródło
all(True==).map(2==)
może byćall(2==)
. :)length
doall
:all((2==).length).group.sort
. Nie trzeba nadawać funkcji nazwy, tzn. Upuszczaćf=
.all(2==)
gdy testowałem w GHCi. Dzięki Kevin i Nimi, zaktualizuję odpowiedź.all(True==)
jestand
.JavaScript (ES6), 37 bajtów
Zwraca false dla Noego lub true dla nie-Noego.
Wypróbuj online!
Skomentował
źródło
APL (Dyalog Unicode) , 8 bajtów SBCS
Anonimowa ukryta funkcja prefiksu. Zwraca
0
/1
.Wypróbuj online!
…
⌸
Dla każdej wartości jako lewego argumentu i wskaźników występowania tej wartości jako prawego argumentu wywołaj:≢
oblicz prawy argument (wystąpienia),∘
a następnie⊢
zwróć go, ignorując lewy argument2=
Lista boolowska wskazująca, które wartości są 2∧/
ORAZ redukcja (tj. Czy wszystkie są prawdziwe?)źródło
PowerShell ,
663726 bajtów-11 bajtów dzięki mazzy
Wypróbuj online!
Grupuje
$l
i pobiera wszystkie liczby pasujących wartości. Następnie odfiltrowuje wszystkie liczby 2 z tej listy. Jeśli lista jest pusta, jest to liczba Noego; w przeciwnym razie zostanie wypełniona liczbą inną niż 2. Notowanie listy da wynik,True
jeśli będzie puste iFalse
zapełnioneźródło
group
byciu rzeczą, która istniejeEliksir , 52 bajty
Wypróbuj online!
Wypełnij Eliksir noob tutaj :-D.
źródło
PHP , 60 bajtów
Wypróbuj online!
PHP ma do tego świetne wbudowane
array_count_values()
funkcje , chociaż przy 20 znakach nie jest zbyt golfistą.źródło
Mathematica,
2524 bajtówWypróbuj online!
Tally
Funkcja zwraca listę postaci , które są następnie porównywane wzór, który sprawdza, czy wszystkie liczby są 2.{{element, count}, ...}
źródło
Attache , 16 bajtów
Wypróbuj online!
Wyjaśnienie
Alternatywy
17 bajtów:
{All&_!`=&2@`~&_}
18 bajtów:
{All[`=&2@`~&_,_]}
23 bajty:
Same@2&`'@Sum@Table[`=]
25 bajtów:
Same«2'Sum@Table[`=,_]»
25 bajtów:
Same<~2'Sum@Table[`=,_]~>
25 bajtów:
{Same[2'Sum@Table[`=,_]]}
35 bajtów:
{Commonest@_==Unique@_and _[0]~_=2}
źródło
TI-Basic, 47 bajtów
Jestem wielkim fanem TI-Basic. Nie jest to świetny język do naprawdę żadnego celu, ale lubię w nim programować (i grać w golfa).
Jak działa ten kod?
Najpierw sortuje listę.
Po drugie, używa funkcji △ Lista do wygenerowania kolejnej listy, która stanowi różnicę między elementami posortowanej listy. (Na przykład △ Lista ({1,3,7,8}) dałaby {2,4,1}). Nie dotyczy tej listy, która konwertuje każdy niezerowy element listy na zero i każde zero na jeden.
Następnie program sprawdza, czy wynikowa lista pasuje do wzorca
{1, 0, 1, 0, ...}
, co będzie prawdą tylko wtedy, gdy oryginalna lista jest listą Noego.Istnieje również dodatkowa kontrola, czy długość listy jest równa, aby uchwycić niektóre przypadki krawędzi.
Oto kilka zrzutów ekranu przypadków testowych:
źródło
Julia 1.0 , 32 bajty
Wypróbuj online!
Dzieli każdy element tablicy wejściowej
l
przez transpozycję,l'
dając macierz. Zsumowanie tej macierzy przy zastosowaniuisone
do każdego elementu daje dwukrotność długości,l
jeśli każdy element pojawia się dokładnie dwa razy.źródło
K (oK) , 9 bajtów
Rozwiązanie:
Wypróbuj online!
Wyjaśnienie:
źródło
Julia ,
30 znaków26 bajtówDziękuję H.PWiz za tę sztuczkę!
Wypróbuj online!
źródło
!a=all(x->2==sum(a.==x),a)
26 bajtów. NB. że zalecam liczenie w bajtach na tej stronie!
z funkcji anonimowychGalaretka , 5 bajtów
Wypróbuj online!
Monadyczny link, który pobiera listę liczb całkowitych i zwraca 1, jeśli lista Noego i 0, jeśli nie.
źródło
VDM-SL , 64 bajty
Wyjaśnienie
VDM działa głównie jak instrukcje logiczne drugiego rzędu.
Ponieważ nie możesz TIO VDM, oto dane wyjściowe z sesji debugowania
źródło
MATL , 6 bajtów
Wypróbuj online!
0 za prawdę, 1 za fałsz. Ports odpowiedź Robina Rydera .
MATL , 6 bajtów
Wypróbuj online!
1 za prawdę, 0 za fałsz. Ports odpowiada na odpowiedź Luisa Mendo .
źródło
Rubinowy , 29 bajtów
Wypróbuj online!
źródło
Kotlin ,
96776951 bajtówWypróbuj online!
źródło
Excel, 45 bajtów
Zakłada dane w kolumnie A, z tym wpisanym w dowolnej komórce innej niż jedna w kolumnie A. Zwraca wartość PRAWDA, jeśli istnieją pary, i FAŁSZ, jeśli nie pasują do nich pary
Próbowałem usunąć / 2 i dodać .5 do sumowania, ale to nie zadziałało.
Próbowałem zliczyć częstotliwości, które wynoszą <> 2, ale to nie zwróciło właściwej ilości.
źródło
Octave / MATLAB,
2221 bajtówAnonimowa funkcja, która wprowadza wektor numeryczny i wyprowadza,
0
jeśli wektor spełnia warunek lub w1
inny sposób.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Bash , 26 bajtów
Kod zakończenia jest niezerowy, jeśli lista zawiera Noe.
Wypróbuj online!
źródło