Teoretycznie zadanej liczby naturalne są zwykle kodowane jako czyste zestawy , czyli zestawy zawierające tylko pusty zestaw lub inne zestawy, które są czyste. Jednak nie wszystkie czyste zbiory reprezentują liczby naturalne. Wyzwanie polega na podjęciu decyzji, czy dany czysty zestaw reprezentuje kodowanie liczby naturalnej, czy nie.
Kodowanie liczb naturalnych działa w następujący sposób 1 :
- Zero to pusty zbiór:
- Dla liczby :
Tak więc kodowanie pierwszych kilku liczb naturalnych jest
Zadanie
- Biorąc pod uwagę ciąg reprezentujący czysty zestaw, określ, czy ten zestaw koduje liczbę naturalną zgodnie z powyższą konstrukcją.
- Pamiętaj jednak, że elementy zestawu nie są uporządkowane, więc nie jest jedyną prawidłową reprezentacją np. reprezentuje ten sam zestaw.
- Można użyć
[]
,()
lub<>
zamiast{}
. - Możesz założyć, że zestawy są podane bez
,
separatora. - Można założyć, że nie będzie żadnych zduplikowanych elementów w wejściu, na przykład
{{},{}}
nie jest poprawnym wejście, a wejście jest dobrze uformowane, na przykład brak{{},
,{,{}}
lub podobny.
Przypadki testowe
Prawdziwe:
{}
{{}}
{{},{{}}}
{{{}},{}}
{{},{{}},{{},{{}}}}
{{{},{{}}},{},{{}}}
{{{{}},{}},{{}},{}}
{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}
{{{{{}},{}},{{}},{}},{{}},{},{{},{{}}}}
{{},{{}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{{}},{}},{{},{{}},{{},{{}}}}}
{{{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}}
Fałszywe:
{{{}}}
{{{{}}}}
{{{{}},{}}}
{{},{{}},{{{}}}}
{{{},{{}}},{{}}}
{{{{{}}},{}},{{}},{}}
{{},{{}},{{},{{}}},{{},{{}},{{{}}}}}
{{{{{}},{}},{{{}}},{}},{{}},{},{{},{{}}}}
{{{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}}
Powiązane: Konstrukcja naturalna (Wyjście kodowania zestawu podanej liczby naturalnej.)
1 Patrz https://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers
code-golf
decision-problem
set-theory
Laikoni
źródło
źródło
Odpowiedzi:
JavaScript (Node.js) ,
534844 bajtówWypróbuj online! Przypadki testowe w większości bezwstydnie skradzione z odpowiedzi @ Arnauld. Objaśnienie: Jeśli zbiór reprezentuje liczbę naturalną, wówczas liczba naturalna, którą reprezentuje, musi być równa wielkości zbioru, a (biorąc pod uwagę, że elementy są gwarantowane odrębne), elementy muszą być reprezentacjami liczb naturalnych mniejszych od niego, i dlatego muszą mieć krótsze długości. Jest to oczywiście prawda dotycząca pustego zestawu. Edycja: Zapisano 5 bajtów dzięki @Arnauld. Zaoszczędź 4 bajty dzięki @Cowsquack.
źródło
!e[a.length-1]
powinien zapisać 3 bajtya[e.length]&&
za 5 bajtów!g=(A,a=eval(A))=>a.every(e=>a[e.length]&&g(e))
zadziała?Python 3 ,
695844 bajtów11 bajtów dzięki Erikowi Outgolfer.
14 bajtów dzięki Mr. Xcoder.
Wypróbuj online!
źródło
Wolfram Language (Mathematica) ,
6059 bajtówWypróbuj online!
Rdzeniem tego rozwiązania jest funkcja
która konwertuje listę formularza
{0,1,2,...,n-1}
w dowolnej kolejności na wynikn
(w szczególności konwertuje{}
na0
) i konwertuje cokolwiek innego na liczbę rzeczywistąE
.Wywołaj tę funkcję
f
. Biorąc pod uwagę dane wejściowe takie jak"{{{}},{}}"
, wykonujemy następujące czynności:f
na każdym poziomie, otrzymującf[{f[{f[{}]}], f[{}]}]
.f
spowoduje utworzenie liczby naturalnej dla reprezentującego ją wkładu. Na przykładf[{f[{f[{}]}], f[{}]}]
=f[{f[{0}], 0}]
=f[{1, 0}]
=2
. Wszystko inne będzie produkowaćE
.E
.źródło
Brachylog (v2), 9 bajtów
Wypróbuj online!
Jak zwykle w przypadku problemu decyzyjnego , jest to pełny program. Wprowadzanie ze standardowego wejścia za pomocą nawiasów kwadratowych. Wyjście na standardowe wyjście w
true.
porównaniu dofalse.
.Wyjaśnienie
Chociaż powiedziałem powyżej, że jest to pełny program, jest tak naprawdę bardziej interesujący; to zarówno pełny program, jak i funkcja. Gdy jest używany jako pełny program, drukuje,
true.
jeśli zestaw jest liczbą naturalną, lubfalse.
nie. Gdy jest używany jako funkcja, „normalizuje” liczbę naturalną (tj. Normalizuje wszystkie jej elementy i sortuje je w kolejności według wartości; ten program używa list wewnętrznie, a nie ustawia), lub „zgłasza wyjątek” (w rzeczywistości awarię, ponieważ to Prolog), jeśli dane wejściowe nie są liczbą naturalną.Pełne zachowanie programu jest wystarczająco łatwe do wyjaśnienia: jest ono całkowicie ukryte w traktowaniu przez Brachylog pełnych programów, które nie zawierają instrukcji We / Wy. Zachowanie, o którym mowa, to „uruchom funkcję, pobierając dane wejściowe ze standardowego wejścia i upewniając się, że dane wyjściowe są zgodne z opisem podanym w pierwszym argumencie wiersza poleceń; jeśli asercja nie powiedzie się lub program zgłosi wyjątek, wydrukuj
false.
, w przeciwnym razie wydrukujtrue.
” . W takim przypadku brakuje argumentu wiersza polecenia (tzn. „Wszystko idzie”), więc zachowanie funkcji wyjątek / brak wyjątku daje wynik.Jeśli chodzi o zachowanie funkcji:
Liczba naturalna jest zdefiniowana jako zawierająca dwie części: elementy liczby naturalnej poniżej, zjednoczone z samą liczbą. Zatem wszystkie jego elementy są również liczbami naturalnymi. Możemy rozpoznać liczbę naturalną poprzez a) sprawdzenie, czy wszystkie jej elementy są liczbami naturalnymi, b) sprawdzenie, czy największy element zbioru jest identyczny z zestawem bez jego największego elementu.
Kiedy używamy list zamiast zestawów (a więc nawiasów kwadratowych), musimy uporządkować je w spójnej kolejności, aby porównania równości działały (w tym przypadku posortowane według „wartości”). Domyślna kolejność sortowania Brachylog posortuje prefiks listy przed samą listą, co dogodnie oznacza, że posortuje liczby naturalne według wartości liczbowej. Możemy więc po prostu rekurencyjnie sortować wszystkie nasze liczby, aby uzyskać spójną kolejność. W rzeczywistości za pomocą funkcji, którą definiujemy rekurencyjnie, możemy osiągnąć oba wyniki jednocześnie: rekurencyjne sortowanie elementów liczby i sprawdzanie, czy jest to liczba naturalna.
Funkcja składa się zatem z czterech głównych części.
↰ᵐ
to wywołanie rekurencyjne, zapewniające, że każdy element jest liczbą naturalną, i przekształcające go w każdy znormalizowany formularz.o
normalizuje samą liczbę (jej elementy są już znormalizowane, więc wszystko, co musimy zrobić, to ją posortować). Następnie.t~k|
upewnia się, że mamy pożądaną strukturę, sprawdzając, czy największy element i inne elementy są takie same. Pusta lista (tj. 0) nie ma ostatniego elementu, więc wystąpi błąd asercji za pomocąt
;|Ė
obsługuje ten przypadek, poprzez dając wyraźny krok wstecz w przypadku, gdy lista wejściowy jest pusty.źródło
K (ngn / k) ,
262427 bajtówWypróbuj online!
input to parsowany ciąg json
`j@
(składnia specyficzna dla ngn / k){
}
jest funkcją rekurencyjną z argumentemx
. zwraca liczbę naturalną reprezentowaną przez zestawx
lub null (0N
), jeśli nie reprezentuje żadnej.$[
;
;
]
jest jeśli-to-jeszcze. 0 oznacza falsey, inne liczby całkowite są zgodne z prawdą!#x
liczby całkowite od 0 (włącznie) do długościx
(wyłączne)^
bezo'x
recursion (o
) na każdym ('
) elemenciex
#
długość^
jest zerowy?~
nie@
działa jako manekina ostatniej czasownika, tak że~
i^
się składa ze{
}
zamiast do niego stosowaćźródło
Galareta , 10 bajtów
Wypróbuj online!
źródło
Japt , 9 bajtów
Rozwiązanie JS Port of Neil . Głosuj za tym, jeśli to głosujesz.
Wypróbuj lub uruchom wszystkie przypadki testowe
źródło
Czerwony , 81 bajtów
Wypróbuj online!
Podobne do odpowiedzi Python 3 Leaky Nun
źródło
Galaretka , 8 bajtów
Ponieważ dane wejściowe muszą być ciągiem, przesyłanie jest ważne tylko jako pełny program.
Wypróbuj online! lubzweryfikuj wszystkie przypadki testowe
Jak to działa
Daje to kanoniczną reprezentację danych wejściowych, składającą się wyłącznie z posortowanych tablic.
źródło
Galaretka , 7 bajtów
To jest port odpowiedzi Pythona Dziurawej Zakonnicy .
Ponieważ dane wejściowe muszą być ciągiem, przesyłanie jest ważne tylko jako pełny program.
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe
Jak to działa
źródło
Wolfram Language (Mathematica) , 52 bajty
Wypróbuj online!
źródło