System liczb porządkowych jest systemem o liczbach nieskończonych. Wiele nieskończonych liczb. Tak wiele nieskończonych liczb, że dosłownie nie ma nieskończoności reprezentującej swoją nieskończoność. Powyższy obraz pokazuje, jak działają. Liczba porządkowa ( konstrukcja von Neumanna ) jest zbiorem poprzednich rzędnych. Na przykład 0 to pusty zbiór, 1 to zbiór {0}, 2 to zbiór {0, 1} itd. Następnie dochodzimy do ω, czyli {0, 1, 2, 3 ...}. ω + 1 to {0, 1, 2, 3 ... ω}, ω razy dwa to {0, 1, 2 ... ω, ω + 1, ω + 2 ...} i po prostu dalej że.
Twój program wyświetli zestaw rzędnych, takich jak {0, 1, 4}. Twój wynik będzie wtedy najmniejszy porządek większy niż cały porządek w twoim zestawie. Dla {0, 1, 4} wynik wyniósłby 5. Dla {0, 1, 2 ...} wynik wyniósłby ω.
Jak wyprowadzasz swoje porządki, o które pytasz. Kod oczywiście. Mianowicie, twój program wyświetli potencjalnie nieskończoną listę innych programów, w cudzysłowach, po jednym w każdym wierszu (użyj literału „\ n” do przedstawienia nowych wierszy). Program odpowiada punktacji, jak wskazano powyżej. Na przykład, jeśli wyprowadzasz
"A"
"B"
"C"
gdzie A, B i C same są poprawnymi odpowiedziami i mają wyniki {0, 1, 4}, wynik twojego programu wynosiłby 5. Zauważ, że A, B i C muszą być pełnymi programami, a nie fragmentami.
W oparciu o powyższe zasady, program, który nic nie wypisuje, ma wynik 0 (najmniej porządkowa większa niż wszystkie {} to 0). Pamiętaj też, że zbiór nie może się zawierać, poprzez aksjomat podstaw . Mianowicie, każdy zestaw (a zatem porządek) ma ścieżkę do zera. Oznacza to, że pełny quine byłby nieprawidłowy, ponieważ nie jest zbiorem.
Ponadto żaden program nie ma dostępu do zasobów zewnętrznych (własnego pliku, Internetu itp.). Również, kiedy wymienić swój wynik, umieścić Cantor normalną formę partytury obok niego, jeśli nie jest w postaci normalnej kantora już, jeśli możesz (jeśli nie, ktoś inny).
Po uwzględnieniu wszystkich powyższych faktów rzeczywista odpowiedź, którą wysyłasz, musi być mniejsza niż 1 000 000 bajtów (nie licząc komentarzy). (Ta górna granica prawdopodobnie wejdzie w grę tylko w przypadku automatycznie generowanego kodu). Ponadto możesz zwiększyć swój wynik za każdy bajt, którego nie używasz (ponieważ mamy do czynienia z nieskończonościami, prawdopodobnie będzie to brane pod uwagę tylko wtedy, gdy porządki są bardzo bliskie lub takie same). Ponownie, ten akapit dotyczy tylko wysłanej odpowiedzi, a nie tych wygenerowanych lub wygenerowanych przez wygenerowane itd.
Ma to znak quine, ponieważ może być pomocne wygenerowanie co najmniej części własnego kodu źródłowego, do użycia przy tworzeniu dużych porządków. Nie jest to jednak w żaden sposób wymagane (na przykład zgłoszenie z wynikiem 5 prawdopodobnie nie potrzebowałoby własnego kodu źródłowego).
Aby zapoznać się z opracowanym i opatrzonym komentarzem przykładem, zobacz tutaj .
źródło
Odpowiedzi:
Haskell: ψ (Ω Ω ω ) + 999672 punktów
329 bajtów kodu z porządkowym ψ (Ω Ω ω ) + 1. Używa drzewiastej reprezentacji rzędnych odkrytych przez Jervell (2005) . Drzewo z dziećmi a , β , ..., γ oznaczamy
α :@ (β :@ (… :@ (γ :@ Z)…))
. Ta kolejność od lewej do prawej zgadza się z Jervellem, choć zauważ, że Madore odwraca ją od prawej do lewej.Haskell: Γ 0 + 999777 punktów
224 bajty kodu z porządkiem Γ 0 + 1. Jest to oparte na uogólnieniu robaka Beklemisheva na elementy o wartości porządkowej, które same są rekurencyjnie reprezentowane przez robaki.
Haskell: ε 0 + 999853 punktów
148 bajtów kodu z porządkowym ε 0 + 1. Jest to oparte na robaku Beklemisheva . Lista
oznacza liczbę porządkową (ω y + ⋯ + ω beta + ω a ) - 1. Tak wyjścia drugiego stopnia
[0]
,[1]
,[2]
,[3]
... reprezentują 1 ω, ω ω , ω ω ω , ..., wyjście pierwszego poziomu oznacza ε 0 , a program początkowy reprezentuje ε 0 + 1.Haskell: ε 0 + 999807 punktów
194 bajtów kodu z porządkowym ε 0 + 1.
Z
reprezentuje 0, i możemy udowodnić przez indukcję transfinitu na α , a następnie na β , żeα :@ β
≥ ω α + β . Są więc wyjścia drugiego poziomu co najmniej tak duże, jak każda wieża ω ω ⋰ ω , co oznacza, że wyjście pierwszego poziomu wynosi co najmniej ε 0, a program początkowy to co najmniej ε 0 + 1.źródło
Ruby, ψ 0 (ψ X (ψ M + 1 (Ω M + 1 Ω M + 1 )) (0)) + 999663 punktów
Zakładając, że dobrze rozumiem mój program, mój wynik to ψ 0 (ψ X (ψ M + 1 (Ω M + 1 Ω M + 1 )) (0)) + 999663 punktów, gdzie ψ jest funkcją zwijania porządkowego, X jest chi funkcja (funkcja zwijania Mahlo), a M jest pierwszą „porządkową” Mahlo.
Ten program jest rozszerzeniem tego, który napisałem na Golfie o liczbie większej niż TREE (3) i całkowicie wyprzedza wszystkie inne rozwiązania tutaj.
Wypróbuj online!
Rubin, ψ 0 (ψ I (I I )) + 999674 punktów
Wypróbuj online! (ostrzeżenie: nie zrobi wiele, ponieważ najwyraźniej
(0..1.0/0).map{...}
nie można go zakończyć. Tak też drukuję nieskończenie wiele programów.)Rubin, ψ 0 (ψ I (0)) + 999697 punktów
Wypróbuj online!
Bardziej rozsądny program testowy, który
(0..5).map{...}
zamiast tego implementuje :Wypróbuj online!
Niestety, nawet przy
(1..1).map{...}
tym program będzie wymagał dużej ilości pamięci. Mam na myśli, że długość wyjścia przekracza rzeczy takie jak SCG (13).Korzystając z prostszego programu, możemy rozważyć kilka wartości:
Wypróbuj online!
Zasadniczo drukuje wielokrotnie ten sam program, w formacie:
gdzie zainicjowany
x
zapisuje porządek, z którym związany jest program, i"..."
przechowuje programy pox
tym, jak został zmniejszony. Jeślix==0
, to drukujektóry jest programem, który niczego nie wypisuje z wynikiem zero
ma wynik 1 i
ma wynik 2 i
ma wynik 3 itd., a mój oryginalny program drukuje te programy w formacie
gdzie
...
są programy wymienione powyżej.Mój rzeczywisty program faktycznie drukuje te programy w formacie
Nieskończenie wiele razy i dla takich wartości jak
ω
robi coś podobnegoI tak wynik programu
jest
1+some_ordinal
, a wynikjest
1+some_ordinal+1
, a wynikjest
1+some_ordinal+2
.Objaśnienie porządków:
f[a,n,b]
zmniejsza porządeka
.Każda liczba naturalna zmniejsza się do liczby naturalnej poniżej.
[c,0,e]
jest następcąc
i zawsze sprowadza się doc
.[c,d,e]
jest wsteczną hiperoperacją asocjacyjną, zmniejsza się w następujący sposób:[0]
jest pierwszą nieskończoną liczbą porządkową (równoważną ω) i zmniejsza się w następujący sposób:[c]
jest cth omega porządkową i zmniejsza w następujący sposób:[c,d]
jest ψ d (c) i zmniejsza się w następujący sposób:[c,d,e,0]
jest w zasadzie taki sam jak[c,d,e]
, z tym wyjątkiem, że wylicza operację[c]
zamiast operacji następczej.źródło
I
jest to porządek, który odnosi się do pierwszego niedostępnego kardynała, podobnie jak ω odnosi się do aleph null.Java + Brainf ***, ω + 999180 punktów
Program Java, który produkuje nieskończenie wiele programów Brainf ***, z których każdy produkuje ostatni jako wynik.
Czemu? Bo mogę.
Wszelkie ulepszenia części generującej Brainf *** są zdecydowanie mile widziane.
źródło
*
jako znaku wieloznacznego, więc po prostu wpiszbrainf***
lubbrainf
. Wszystkie te odmiany pojawiają się w wynikach wyszukiwania. codegolf.stackexchange.com/help/searchingLiterate Haskell (GHC 7.10): ω² + 999686 punktów.
Będzie to służyć jako przykładowa odpowiedź. Ponieważ jest to przykład, sensowne jest jedynie stosowanie umiejętności czytania i pisania . Jednak nie zdobędzie gola. Ptaszki obniżą mój wynik, ale no cóż. Najpierw utwórzmy funkcje pomocnicze. Jeśli x jest liczbą porządkową, sx = x + 1, ale znajdujemy nieoczekiwane użycie s.
Funkcja show na szczęście wykonuje dla nas całą dezynfekcję łańcucha. Warto również zrobić 0. Zero nie jest następcą czegokolwiek, ale s „” będzie równy ”main = putStrLn„ ””, co równa się 0.
Teraz stworzymy funkcję, która przyjmuje n i zwraca ω * n.
Działa, tworząc ω * n przez {ω * (n-1), ω * (n-1) +1, ω * (n-1) +2, ...}. Co to jest q? Dlaczego to dlatego mamy quine tag. q to dotychczasowe funkcje pomocnicze.
Zauważ, że tylko na potrzeby q, nie ma żadnego z następców (s (o (n)), s (s (o (n))), ponieważ nie potrzebują one funkcji pomocniczych (z wyjątkiem pośrednio od o n.) Teraz musimy wyprowadzić wszystkie ω * n dla skończonego n.
No to jedziemy. ω ^ 2 Po użyciu tylko 314 znaków kodu, żądam ostatecznej premii 999686, co daje mi końcowy wynik ω ^ 2 + 999686, który jest już w normalnej formie kantora.
Pierwsze cztery wiersze wyniku (0, ω, ω * 2, ω * 3):
źródło
GolfScript, ε₀ + 1 + 999537 punktów
Prawdopodobnie może być lepiej, ale stałem się zbyt leniwy, aby debugować i sprawdzać większe porządki.
Mniejsze porządki
źródło
JavaScript (Nashorn), ω2 + 999807 punktów
Nashorn to silnik JavaScript wbudowany w Javę. Może to również działać w Rhino, ale jeszcze tego nie przetestowałem.
źródło