O sistema numérico ordinal é um sistema com números infinitos. Muitos números infinitos. Tantos números infinitos que literalmente não tem um infinito para representar sua própria infinitude. A imagem acima fornece uma pequena idéia de como eles funcionam. Um número ordinal ( construção de Von Neumann ) é um conjunto de ordinais anteriores. Por exemplo, 0 é o conjunto vazio, 1 é o conjunto {0}, 2 é o conjunto {0, 1} e etc. Então chegamos a ω, que é {0, 1, 2, 3 ...}. ω + 1 é {0, 1, 2, 3 ... ω}, ω duas vezes é {0, 1, 2 ... ω, ω + 1, ω + 2 ...} e você continua assim aquele.
Seu programa produzirá um conjunto de ordinais, como {0, 1, 4}. Sua pontuação será o menos ordinal mais do que o ordinal do seu conjunto. Para {0, 1, 4} a pontuação seria 5. Para {0, 1, 2 ...}, a pontuação seria ω.
Como você produz seus ordinais, você pergunta. Código de curso. Ou seja, seu programa produzirá uma lista potencialmente infinita de outros programas, entre aspas, um em cada linha (use a string literal "\ n" para representar novas linhas). Um programa corresponde à sua pontuação, conforme indicado acima. Por exemplo, se você gerar
"A"
"B"
"C"
onde A, B e C são respostas válidas e têm pontuações {0, 1, 4}, a pontuação do seu programa seria 5. Observe que A, B e C devem ser programas completos, não fragmentos.
Com base nas regras acima, um programa que não produz nada tem uma pontuação de 0 (o menos ordinal maior que todos {} é 0). Além disso, lembre-se de que um conjunto não pode se conter, através do axioma da fundação . Ou seja, todo conjunto (e, portanto, ordinal) tem um caminho até zero. Isso significa que um quine completo seria inválido, pois não é um conjunto.
Além disso, nenhum programa tem permissão para acessar recursos externos (seu próprio arquivo, a internet etc ...). Além disso, quando você listar sua partitura, coloque a forma normal do cantor ao lado dela, se ela ainda não estiver na forma normal do cantor, se você puder (se não, outra pessoa pode).
Depois de levar tudo em consideração, a resposta real que você postar deve ser inferior a 1.000.000 bytes (sem contar os comentários). (Esse limite superior provavelmente só entrará em ação no código gerado automaticamente). Além disso, você aumenta sua pontuação para cada byte que não usa (já que estamos lidando com infinitos, isso provavelmente só será considerado quando os ordinais estiverem muito próximos ou iguais). Novamente, este parágrafo se aplica apenas à resposta postada, não às geradas, ou às geradas, e assim por diante.
Isso possui a tag quine, porque pode ser útil gerar pelo menos parte do código do próprio código-fonte, para uso na criação de ordinais grandes. Porém, isso não é necessário (por exemplo, um envio com pontuação 5 provavelmente não precisaria de seu próprio código-fonte).
Para um exemplo elaborado e anotado, veja aqui .
fonte
Respostas:
Haskell: ψ (Ω Ω ω ) + 999672 pontos
329 bytes de código com ordinal ψ (Ω Ω ω ) + 1. Usa uma representação em árvore de ordinais descobertos por Jervell (2005) . A árvore com filhos α , β ,…, γ é denotada
α :@ (β :@ (… :@ (γ :@ Z)…))
. Essa ordem da esquerda para a direita concorda com Jervell, embora observe que Madore a vira da direita para a esquerda.Haskell: Γ 0 + 999777 pontos
224 bytes de código com ordinal Γ 0 + 1. Isso é baseado em uma generalização do Worm de Beklemishev para elementos com valor ordinal, que são representados recursivamente por worms.
Haskell: ε 0 + 999853 pontos
148 bytes de código com ordinal ε 0 + 1. Isso é baseado no Worm de Beklemishev . A lista
representa o ordinal (ω y + ⋯ + ω p + ω ct ) - 1. Assim, as saídas de segundo nível
[0]
,[1]
,[2]
,[3]
, ... representam 1, ω, ω ω , ω ω ω , ..., a saída do primeiro nível representa ε 0 e o programa inicial representa ε 0 + 1.Haskell: ε 0 + 999807 pontos
194 bytes de código com ordinal ε 0 + 1.
Z
representa 0, e podemos provar por indução transfinita em α , depois em β , queα :@ β
≥ ω α + β . Portanto, existem saídas de segundo nível pelo menos tão grandes quanto qualquer torre ω ω ⋰ ω , o que significa que a saída de primeiro nível é pelo menos ε 0 e o programa inicial é pelo menos ε 0 + 1.fonte
Ruby, ψ 0 (ψ X (ψ M + 1 (Ω M + 1 Ω M + 1 )) (0)) + 999663 pontos
Supondo que eu entenda meu programa corretamente, minha pontuação é ψ 0 (ψ X (ψ M + 1 (Ω M + 1 Ω M + 1 )) (0)) + 999663 pontos em que ψ é uma função ordinal em colapso, X é o chi (função de colapso do Mahlo) e M é o primeiro 'ordinal' do Mahlo.
Este programa é uma extensão do que eu escrevi no Golf um número maior que o TREE (3) e supera totalmente todas as outras soluções aqui por enquanto.
Experimente online!
Ruby, ψ 0 (ψ I (I I )) + 999674 pontos
Experimente online! (aviso: não fará muito, pois claramente
(0..1.0/0).map{...}
não pode terminar. É assim que eu imprimo infinitamente muitos programas também.)Ruby, ψ 0 (ψ I (0)) + 999697 pontos
Experimente online!
Um programa de teste mais razoável que implementa
(0..5).map{...}
:Experimente online!
Infelizmente, mesmo com
(1..1).map{...}
, você encontrará este programa extremamente intensivo em memória. Quero dizer, o comprimento da saída excede coisas como SCG (13).Usando o programa mais simples, podemos considerar alguns valores:
Experimente online!
Basicamente, imprime o mesmo programa repetidamente, no formato de:
onde os
x
registros inicializados estão relacionados ao ordinal ao programa e"..."
mantêm os programas após ax
redução. Sex==0
, então, imprimeque é um programa que imprime nada com pontuação zero, portanto
tem uma pontuação de 1 e
tem uma pontuação de 2 e
tem uma pontuação de 3, etc., e meu programa original imprime esses programas no formato
onde
...
estão os programas listados acima.Meu programa atual realmente imprime esses programas no formato
Infinitamente, muitas vezes, e para valores como
ω
, ele faz algo semelhante aE assim, a pontuação do programa
é
1+some_ordinal
e a pontuação deé
1+some_ordinal+1
e a pontuação deé
1+some_ordinal+2
.Explicação dos ordinais:
f[a,n,b]
reduz um ordinala
.Todo número natural se reduz ao número natural abaixo dele.
[c,0,e]
é o sucessor dec
, e sempre se reduz ac
.[c,d,e]
é uma hiperoperação associativa para trás, reduz-se da seguinte forma:[0]
é o primeiro ordinal infinito (equivalente a ω) e reduz da seguinte forma:[c]
é o césimo ordinal ômega e reduz da seguinte forma:[c,d]
é ψ d (c) e reduz o seguinte:[c,d,e,0]
é basicamente o mesmo que[c,d,e]
, exceto que enumera a operação em[c]
vez da operação sucessora.fonte
I
é o ordinal que se relaciona com o primeiro cardeal inacessível, assim como ω se refere a aleph null.Java + Brainf ***, ω + 999180 pontos
Um programa java que produz infinitos programas Brainf ***, dos quais cada um produz o último como saída.
Por quê? Porque eu posso.
Quaisquer melhorias na parte da geração Brainf *** são definitivamente bem-vindas.
fonte
*
como caractere curinga; basta digitarbrainf***
, oubrainf
. Todas essas variações aparecem nos resultados da pesquisa. codegolf.stackexchange.com/help/searchingHaskell alfabetizado (GHC 7.10): ω² + 999686 pontos.
Isso servirá como exemplo de resposta. Desde que é um exemplo, só faz sentido usar a programação alfabetizada . Não vai marcar bem embora. Os passarinhos diminuirão minha pontuação, mas tudo bem. Primeiro, vamos fazer uma função auxiliar s. Se x é um ordinal, sx = x + 1, mas encontramos usos inesperados de s.
Felizmente, a função show faz toda a limpeza das cordas para nós. Também vale a pena fazer 0. Zero não é o sucessor de nada, mas s "" será igual a "main = putStrLn" "", que é igual a 0.
Agora criaremos uma função que recebe n e retorna ω * n.
Funciona criando ω * n por {ω * (n-1), ω * (n-1) +1, ω * (n-1) +2, ...}. O que é isso q? Por que, é a razão pela qual temos uma tag quine . q são as funções auxiliares acima até agora.
Observe que somente nas necessidades q, nenhum de seus sucessores (s (o (n)), s (s (o (n)))), pois eles não precisam das funções auxiliares (exceto indiretamente de on). Agora, temos apenas que produzir todos os ω * n para n finito.
Aqui vamos nós. ω ^ 2 Tendo usado apenas 314 caracteres de código, reivindico um bônus final de 999686, dando-me uma pontuação final de ω ^ 2 + 999686, que já está na forma normal de cantor.
Primeiras quatro linhas de saída (0, ω, ω * 2, ω * 3):
fonte
GolfScript, ε₀ + 1 + 999537 pontos
Provavelmente pode ser melhor, mas fiquei com preguiça de depurar e provar ordinais maiores.
Ordinais menores
fonte
Javascript (Nashorn), ω2 + 999807 pontos
Nashorn é o mecanismo Javascript incorporado ao Java. Isso também pode funcionar no Rhino, mas ainda não o testei.
fonte