Liczby naturalne, w tym 0, są formalnie zdefiniowane jako zbiory, w następujący sposób :
- Liczba 0 jest zdefiniowana jako pusty zestaw, {}
- Dla n ≥ 0 liczba n +1 jest zdefiniowana jako n ∪ { n }.
W konsekwencji n = {0, 1, ..., n -1}.
Pierwsze liczby zdefiniowane w tej procedurze to:
- 0 = {}
- 1 = {{}}
- 2 = {{}, {{}}}
- 3 = {{}, {{}}, {{}, {{}}}}
Wyzwanie
Biorąc pod uwagę n
, wypisz jego reprezentację jako zbiór.
Zasady
Wyjście może konsekwentnie używać wspornik charakteru takie jak {}
, []
, ()
lub <>
. Dowolne znaki (takie jak 01
) są niedozwolone.
Zamiast przecinka, jak powyżej, separatorem może być dowolny znak interpunkcyjny; lub może nie istnieć.
Spacje (nie nowe wiersze) mogą być wprowadzane arbitralnie i niekonsekwentnie.
Na przykład liczba 2 z nawiasami kwadratowymi i średnikiem jako separatorem jest [[]; [[]]]
lub jest równoważna [ [ ]; [ [ ] ] ]
lub nawet[ [ ] ;[ []]]
Kolejność w której elementy zestawu są określone nie ma znaczenia. Możesz więc użyć dowolnej kolejności w reprezentacji. Na przykład są to niektóre prawidłowe dane wyjściowe dla 3
:
{{},{{}},{{},{{}}}}
{{{}},{{},{{}}},{}}
{{{}},{{{}},{}},{}}
Możesz napisać program lub funkcję . Dane wyjściowe mogą być łańcuchem lub, jeśli używasz funkcji, możesz zwrócić zagnieżdżoną listę lub tablicę, których ciąg znaków jest zgodny z powyższym.
Przypadki testowe
0 -> {}
1 -> {{}}
2 -> {{},{{}}}
3 -> {{},{{}},{{},{{}}}}
4 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}
5 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}
6 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}
7 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}}
źródło
Odpowiedzi:
Galaretka , 3 bajty
To jest monadyczny link. Wypróbuj online!
Jak to działa
Każda liczba naturalna jest zbiorem wszystkich poprzednich liczb naturalnych, tj. N = {0,…, n-1} . Ponieważ nie ma liczb naturalnych poprzedzających 0 , mamy 0 = {} .
źródło
ḶL
nie ma operacji, mnemonik nie ma długości. Istnieją również pliki niebinarne, undecimal, unhalve, unsine, unarccosine itp.Python 2, 26 bajtów
Przetestuj na Ideone .
źródło
JavaScript (ES6), 32 bajty
Wystarczająco proste.
źródło
.map()
bez funkcji strzałki w środku :-).map(Number)
jest dość powszechnym przypadkiem..map(e=>+e)
jest krótszy, bajt.Perl 6 , 16 bajtów
Zwraca zagnieżdżoną strukturę danych.
Przykład:
Wyjaśnienie:
źródło
Ruby,
2721 bajtówJestem nowy w rubinowym golfie, ale tutaj nic nie idzie. Dzięki Jordanowi za oszczędność 6 bajtów!
Jest to funkcja rekurencyjna
f
(konkretnie proc) i wymaga argumentus
. To odwzorowuje procf
ciągu0...s
, który jest zasięg[0, s)
.źródło
map{|e|f[e]}
zmap &f
.Haskell,
3227 bajtówWypróbuj na Ideone.
źródło
CJam , 14 bajtów
Wypróbuj online!
Wyjaśnienie
W każdej iteracji blok buduje reprezentację liczby na podstawie liczby poprzedniej. Aby to zilustrować, rozważmy drugą iterację, w której reprezentacja liczby
2
jest zbudowana z tej1
, która jest łańcuchem"[[]]"
."[[]]"
_
(duplikacie) zawiera"[[]]"
:"[[]]"
)
(uncons) zawiera"[[]]"
,"[[]"
,"]"
@
(Obrót) zawiera"[[]"
,"]"
,"[[]]"
\
(swap) zawiera"[[]"
,"[[]]"
,"]"
]
(spakuj do tablicy) zawiera ona["[[]" "[[]]" "]"]
, która byłaby wyświetlana jako ciąg"[[][[]]]"
.źródło
Cheddar, 17 bajtów
Krótka rekurencja + Krótki zasięg + Krótka iteracja = Wyzwanie, w którym cheddar ma się bardzo dobrze
Nie konkuruje, 11 bajtów
=>
Operator został dodany po to wyzwanie został zwolniony dzięki czemu ta odpowiedź nie konkurują.Może to wyglądać na mylące, ale pozwolę sobie uprościć:
w zasadzie
n
jest wejściem if
samą funkcją.|>n
generuje [0, n) i=>
odwraca mapyf
.źródło
05AB1E ,
87 bajtówWyjaśnienie
Wypróbuj online!
Zaoszczędzono 1 bajt dzięki Adnanowi.
źródło
Pyth, 4 bajty
Zestaw testowy
L
: Zdefiniuj funkcję zay
pomocą wejściab
yMb
:y
odwzorowany w zakresie0, 1, ..., b-1
Na wejściu 0 mapa powraca
[]
. W przeciwnym razie zwracay
mapowane na wszystkie liczby dob
.źródło
MATL , 13 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Perl, 27 bajtów
Obejmuje +1 dla
-p
Wydaje się, że wiele różnych metod kończy się na 27 lub 28 bajtów. na przykład
Najlepsze, co mogłem znaleźć, to
ponieważ na starszych perlach możesz upuścić miejsce przed
for
i uzyskać 26 bajtówźródło
Mathematica, 14 bajtów
źródło
Mathematica, 31 bajtów
Prosto implementuje definicję jako listę zagnieżdżoną. Używa nienazwanej funkcji, która rekurencyjnie wywołuje się za pomocą
#0
.źródło
Union
zamiastJoin
:±0={};±n_:={t=±(n-1)}⋃t
... Jednak w tym przypadku jeszcze krótsze jest znalezienie rozwiązania iteracyjnego:Nest[{#}⋃#&,{},#]&
Siatkówka ,
2418 bajtówWypróbuj online! (Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
Wyjaśnienie
Konwertuje to dane wejściowe na jednoargumentowe i dołącza
<>
reprezentację0
.Tutaj
+
wskazuje, że to podstawienie powinno być uruchamiane w pętli, aż łańcuch przestanie się zmieniać. Łatwiej to wyjaśnić, przechodząc przez poszczególne etapy gry w golfa. Let's z tą wersją podstawienia:Jest to zgodne z ostatnią
1
jednostkową reprezentacją pozostałych danych wejściowych (aby je usunąć i zmniejszyć dane wejściowe), a także zawartością bieżącego zestawu na końcu. Jest on następnie zastępowany nowym zestawem zawierającym poprzedni oraz jego zawartość. Możemy jednak zauważyć, że$1
następuje to>
w obu przypadkach, a zatem możemy uwzględnić go w samym przechwytywaniu i pominąć we wzorcu podstawiania. To prowadzi do formyJednak teraz możemy zauważyć, że
(.*)
po prostu przechwytuje sufiks łańcucha po,1<
a nawet wstawiamy ten sufiks na końcu za pomocą$1
. Ponieważ składnia podstawienia daje nam możliwość odwołania się do części ciągu po dopasowaniu$'
, możemy po prostu pominąć obie te części i skończyć na wersji użytej w odpowiedzi:źródło
{}
, ale<>
to jedyna para, która nigdy nie potrzebuje ucieczki, więc pomyślałem, że pójdę z tym. ;)Niedociążenie , 14 bajtów
Wypróbuj online!
Pełne programy niedociążenia nie mogą pobierać danych wejściowych za pomocą żadnej z naszych zdefiniowanych metod, więc jest to funkcja, która pobiera dane wejściowe ze stosu jako liczby kościelnej (normalny sposób definiowania liczb całkowitych w programie Niedociążenie) i generuje dane wyjściowe do stosu jako ciąg .
Do
(…)
grupowania markery mają obowiązek dokonać tej funkcji (wielokrotnego użytku), a nie tylko użyteczny fragmencie (raz). Opakowanie w łączu TIO wywołuje tę funkcję destrukcyjnie przy użyciu^
, ale można ją ponownie wykorzystać, wykonując jej kopię i zużywając tylko jedną z kopii podczas wywoływania. Dostarcza również dane wejściowe do programu (tutaj(:*:*)
, tj. 4) i drukuje dane wyjściowe za pomocąS
.Wyjaśnienie
Niedociążenie zaskakująco nadaje się do tego zadania, gdy pojawiają się plandeki Turinga, mające takie przydatne prymitywy, jak „kopiuj” i „otaczaj nawiasami”. (W jakiś sposób niedociążenie, zwykle bardzo szczegółowy język, pokonuje Mathematica, zwykle język, który wygrywa dzięki posiadaniu ogromnego zestawu wbudowanych funkcji, dzięki bardziej odpowiednim wbudowanym funkcjom!) Oto, jak działa program:
Potęgowanie funkcji skutecznie powoduje, że kroki funkcji powtarzają się tyle razy, więc np
(:a*)
. Byłoby ³(:a*:a*:a*)
. Jest to idiomatyczny sposób napisania pętli, która powtarza określoną liczbę razy w trybie niedociążenia. (Możesz zauważyć, że~^
opisano to na dwa różne sposoby powyżej; to dlatego, że liczby całkowite w niedociążeniu są zdefiniowane jako potęgowanie funkcji specjalizowane dla tej liczby całkowitej, więc aby wykonać potęgowanie funkcji, po prostu spróbuj wykonać liczbę całkowitą tak, jakby była funkcją .)źródło
Pari / GP , 23 bajty
Wypróbuj online!
źródło
APL (NARS), 15 znaków, 30 bajtów
test:
Nie wiem, czy to zostanie zaakceptowane ... Zilde jest ⍬ tutaj reprezentuje zestaw pustek {}, jeśli chcę wydrukować element Zilde lub jeden element pełen Zilde, a Zilde załączyła wszystko, co się dzieje, to nie drukuj nic ... więc dla zobaczenia Zilde należy zdefiniować jedną funkcję, którą nazywam o (
o←⎕fmt
) Nie wstawiam do licznika, ponieważ element i jego struktura istnieją nawet, jeśli sys go nie wydrukuje ... Jest to możliwe, jeśli io wynosi 0rozwiązanie może mieć również 12 znaków ...
źródło
Brachylog , 14 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
GAP , 22 bajty
Na przykład:
źródło
Rakieta 119 bajtów
Nie golfowany:
Testowanie (w Racket {} jest takie samo jak (), a domyślnym wyjściem jest ()):
Aby wyraźnie zobaczyć każdą liczbę (od 0 do 3):
źródło
Partia, 74 bajty
Wykorzystuje fakt, że każda odpowiedź jest równa poprzedniej odpowiedzi wstawionej do siebie po prowadzeniu
{
. Pierwsze kilka wyników jest następujące:źródło