Desafio
Sua tarefa é escrever um trecho de código que produz outro trecho de código. Esse código deve, por sua vez, gerar outro código até o código final gerar o número inteiro 1 . A cadeia termina na primeira vez que 1 é gerado.
Nenhum de seus programas pode compartilhar caracteres (há uma exceção na seção Regras).
O envio vencedor será o envio com a cadeia mais longa. O desempatador terá o menor comprimento total do código.
Regras:
- Você pode usar funções, programas e trechos. Você pode assumir um ambiente REPL.
- Todas as funções devem ser escritas no mesmo idioma
- Os idiomas independentes de símbolos não são permitidos. Isso inclui idiomas parcialmente independentes de símbolos, como Headsecks.
- A formatação de saída padrão pode, opcionalmente, ser desconsiderada na saída de uma função. Isso inclui novas linhas à direita,
ans =
etc. - Você pode reutilizar o caractere de espaço (ponto de código ASCII 32), mas observe o seguinte:
- Você pode usar quantos caracteres de espaço desejar em uma das funções, mas restringi-lo ao máximo 5 em todas as outras funções.
- Você não pode reutilizar nenhum caractere se o ponto de código 32 não estiver no seu idioma.
Nenhum dos programas pode receber informações
A cadeia deve ter pelo menos dois programas.
Exemplo:
Seu código inicial é abc+cab+bac
. Isso gera:, foofoo*123
que por sua vez gera disp(~0)
, que gera 1
. Esta é uma cadeia de 3 programas, com um comprimento combinado de 29 (desempatador).
code-challenge
code-generation
Stewie Griffin
fonte
fonte
2^3
, o que seria apenas avaliado1
ou teria que serlambda:2^3
, por exemploprint(2^3)
, etc.?1
ser um programa e a saída desse programa ou a cadeia termina quando1
é a saída?Respostas:
05AB1E , 5 cadeias: 236 + 29 + 13 + 3 + 1 = 282 bytes
Experimente online!
que imprime o programa
Experimente online!
que imprime o programa
Experimente online!
que imprime o programa
Experimente online!
que imprime o programa
Experimente online!
que imprime
1
fonte
8784>žxB
e eu provavelmente sou nocauteado. A falta de números para a conversão de base é um crapshoot total, a menos que você o calcule. O objetivo, se você quiser vencer o emigna, é usar a menor quantidade de números exclusivos por iteração. Sua resposta reina suprema por causa dos 88 na penúltima iteração. Verdadeiramente uma ótima resposta.10
e criar algo em binário. Mas não sei se podemos gerar o primeiro programa a partir do binário externoB
.Java 8, cadeia de 2 funções,
90 + 1037 + 428 + 4 = 32 bytesO que equivale a:
-57 bytes graças a @ OlivierGrégoire .
Experimente online.
O que retorna a String:
Experimente online.
Que retorna o número inteiro:
fonte
\u0076\u002D\u003E\u0022\u0076\u002D\u003E\u0022+(3\u002D2)
(59 bytes + 4 bytes). As regras dizem "Nenhum dos seus programas pode compartilhar caracteres", portanto,v->1
é válido porque a final1
não é um programa.v->1
retornar 1 é válido, mas na minha resposta original\u0031
conteria 1 ev->1
, em seguida, conteria 1 também. Boa combinação de Java unicode e Java regular, no entanto. E joguei mais 2 mudando(2/2)
para2/2
. (PS: Já existe uma resposta Java da cadeia 3 de Jakob .)"\44\55\76"
vez de"\u0076\u002D\u003E"
R , 3 cadeias 198 + 44 + 3 bytes
Experimente online!
Devoluções:
Experimente online!
Devoluções:
Experimente online!
Devoluções
1
Explicação:
O primeiro programa é quase totalmente escrito em representação octal, onde cada caractere é escrito como
\xxx
ondexxx
está o código ASCII no modo octal. Em forma legível por humanos seria:Aqui, para evitar o uso de colchetes, redefinimos o operador de prefixo
+
igual acat
função, depois usamos isso para imprimir a próxima string. Mesmo depois de atribuircat
a+
, este último ainda mantém seu prefixo operador "status" e só vai tomar qualquer segue como seu primeiro parâmetro.O segundo programa, simplesmente imprime os caracteres que os
F^F
obtêm do ASCII decimal:70,94,70
Como no primeiro programa usamos a representação octal, apenas números
8
e9
são livres para serem usados; portanto, obtemos70
e94
com algumas diferenças entre números com apenas8's
e9's
.Finalmente, o último programa
F^F
, explora o^
função (poder) que coageFALSE
a0
e computa0^0
o retorno1
Créditos para :
+
para evitar colchetesVersão anterior :
R , 2 cadeias
27 + 324 + 2 bytesExperimente online!
Devoluções:
Experimente online!
Retorna
1
.fonte
cat
obrigatório?"wri\164e"(function args)
para evitar umt
ou outras codificações semelhantescat(intToUtf8(c(49,76)))
funcionaria e é um pouco menor. Não expande a cadeia embora.Python 2 , 2 cadeias, 7 + 44 = 51 bytes
e
Experimente online!
O código base 16 é convertido em
print 1
, retornado pela função anônima.fonte
Perl 5, 3 cadeias,
151139 caracteres (114 + 20 + 5)A feiúra dentro do
&{ }
avaliada comoCORE::syswrite
e, portanto, a sequência de escape hexadecimal é impressa na saída padrão como:Observe que o ^ C e ^ R acima representam caracteres de controle literais. (E não deve ser confundido com o
^
cursor literal que ocorre entre as duas cadeias.)Este programa, por sua vez, produz:
fonte
Oitava , 3 programas, Comprimento 42 bytes
Saídas:
[[63 24]*2 '']
. Experimente online!Saídas:
~0
. Experimente online!Saídas:
1
. Experimente online!fonte
Cjam, 4 cadeias, 28 + 20 + 3 + 1 = 52 bytes
Snippet 1:
Snippet 2:
Snippet 3:
Snippet 4:
Que então imprime 1.
Experimente online!
Nota:
Como o Cjam não possui interpretação para caracteres de escape, os do snippet 1 estão disponíveis apenas para uma melhor visualização da web. Você precisa usar os caracteres reais correspondentes para executar o snippet.
Se não conseguir cortar mais caracteres, bom trabalho para @Emigna para obter a
05AB1E
resposta!fonte
1
usado no trecho 1Excel, Cadeia 2, 27 + 3 bytes
Não tenho certeza se está tudo bem ...
fonte
CHAR(61)&
no início, bem como haver uma cadeia de 2?CHAR
tornar-seCAR
, 3 bytes salvos), não tenho certeza se outro idioma reduzi-lo mais--1
em uma célula e pressione Enter, seria apenas mostrar1
na tela ...=
implicitamente se você digitar--1
.=
marca para+1
(mas sim--1
), por isso não vou considerá-la como uma expressão. E não tenho certeza se simplesmente escrever um1
na célula e chamá-lo de "saída 1" é válido. É por isso que--1
é usado.bytecode x86, cadeia 2, 10 + 4 bytes
(Montado com FASM, formato PE)
ÇA.Ï?¿<÷Y.
produz1À@Ã
no endereço próximo a ele e o executa, que retorna1
em eax (conforme chamada rápida). Em ambos os casos, o.
realmente representaA
ou LF.Em hexadecimal:
C7 41 0A CF 3F BF 3C F7 59 0A
e31 C0 40 C3
.Desmontado:
produz
Este (ab?) Usa o fato de que o ponto de entrada do programa é armazenado em ecx e, em seguida, grava o inverso do código a ser executado no endereço de 10 bytes e o nega.
Pode ou não quebrar, se montado com algo que não seja fasm, com nada além de um PE ou com um ponto de entrada diferente.
fonte
JavaScript REPL, muitos bytes, 4 iterações
Com preguiça de otimizar o código JSFUCK
JavaScript REPL, 164 bytes, 3 iteração
pode ser capaz de expandir
Experimente online!
fonte
1
em outros profissionais, então a primeira1
é o programa eo 2º é resultado{}
?CJam, 7 cadeias, 92365 + 1819 + 79 + 14 + 9 + 3 + 1 bytes
Este programa de 92365 bytes imprime
que imprime
que imprime
que imprime
que imprime
que imprime
que imprime
1
.fonte
MATL , 5 programas, 404 + 159 + 35 + 4 + 1 = 603 bytes
Chegar a 4 programas foi difícil. 5 programas foi muito difícil!
Experimente online!
Experimente online!
Este pode ser o meu programa favorito que escrevi no PPCG:
Experimente online!
Experimente online!
Experimente online!
Explicação:
Tendo usado horas neste programa, não vou escrever a explicação inteira agora! Eu escreverei depois!
Pequeno resumo:
Para converter isso em uma string em vez de códigos de caracteres, precisamos concatená-lo com uma string usando
h
. Para obter uma string, sem usar aspas ou modificadores XY, fazemos a conversão básica e convertemos um número inteiro em espaço em branco.fonte
CJam, 10 programas, 5.751.122.990 bytes
Eu estava com preguiça de jogar golfe ... Mas, aparentemente, não preciso jogar golfe para ser competitivo. Mas sem jogar golfe, é um pouco difícil postar a solução em uma resposta.
Deve funcionar em intérprete JavaScript em teoria, mas o programa é muito longo para ser testado em um navegador. Ele deve produzir o mesmo no interpretador Java, exceto no último programa. Mas também pode ficar sem memória no interpretador Java para os primeiros programas.
Estatisticas
Primeiros bytes
\n
é nova linha no segundo programa.Gerador
fonte
APL (Dyalog) , 2 cadeias, 15 + 2 = 17 bytes
Experimente online!
Mostra o programa
Isso gera
fonte
JavaScript (ES6), 2 funções, 31 + 4 = 35 bytes
retorna
_=>1
, que retorna1
Mostrar snippet de código
fonte
Gelatina ,
38 37 3635 bytes, Cadeia de 4Experimente online! ( 18 bytes)
Experimente online! ( 13 bytes)
Experimente online! ( 3 bytes)
Experimente online! ( 1 byte)
18 + 13 + 3 + 1 = 35 bytes
Quão?
fonte
Python 2 , 3 trechos, 68 + 12 + 3 = 83 bytes
que produz a sequência de literais octais:
que produz:
O que finalmente produz
1
.Experimente online!
fonte
Java 8, 3 programas, 431 bytes
Programa 1, 332 bytes
Um lambda de um parâmetro (vazio) de qualquer tipo para
String
.Este é apenas um lambda com os caracteres de seta com escape por Unicode, retornando o texto do segundo programa codificado com seqüências de escape octais.
Experimente Online
Programa 2, 93 bytes
Snippet produzindo a
String
.Experimente Online (com retorno adicionado)
Programa 3, 6 bytes
Um lambda de um parâmetro (vazio) de qualquer tipo para
int
.Experimente Online
fonte
\166
para\44
para -1 byte, uma vez que$
também é um nome de variável válido. Experimente on-line , resultando em$->9-8
( Experimente on-line ) .\uXXXX
no primeiro código para evitar->
. Então você precisa tantoreturn
(função) ouSystem.out
(trecho ou função), ambos contêm umu
que você já utilizado em\uXXXX
. Então, eu pessoalmente acho que esta entrada é inválida e a votei com a mesma nota.System.console().printf
pode ser usado para impedir o uso deu
. Algo semelhante é feito nesta resposta e eu também o usei nessas duas respostas minhas .x->"\146\157\162\50\143\150\141\162\40\44\72\156\145\167\40\143\150\141\162\133\135\173\47\171\47\54\47\54\47\54\47\75\47\54\47\70\47\54\47\56\47\54\47\70\47\175\51\123\171\163\164\145\155\56\143\157\156\163\157\154\145\50\51\56\160\162\151\156\164\146\50\53\53\44\53\156\145\167\40\123\164\162\151\156\147\50\51\51\73"
(319 bytes) se transforma emfor(char $:new char[]{'y',',','=','8','.','8'})System.out.printf(++$+new String());
(89 bytes) se transforma emz->9/9
(6 bytes). Total: 404 bytes.System.console()
para o segundo programa, que é corretamente 89 bytes (enquanto oSystem.out
torna 83 bytes).SmileBASIC, cadeia 3, 375 bytes
Saídas:
Saídas:
Saídas:
fonte
PHP 7.0, 2 cadeias, 35 + 8 = 43 bytes
Enquanto escrevia minha resposta inicial, percebi que podia usar o código base64 como segundo eco. Ele cortou 11 bytes, então aqui está. Você pode encontrar minha ideia original abaixo também.
Execute usando php -r:
Isso gera:
Que então obviamente imprime:
Saída:
Meu código quando executado em um terminal. O && eco anexado é apenas para facilitar a leitura.
Comentários:
Na verdade, não há muito. Muito simples quando você conhece "?>" Agindo implicitamente como ";". A parte "complicada" era descobrir o que codificar:
Como alternativa, também podemos usar "echO" e "ECHo" (36 + 7 = 43 bytes).
Também podemos mudar o; e?> por aí usando isso. Funciona igualmente bem e tem o mesmo comprimento.
Minha solução inicial:
PHP 7.0, 2 cadeias, 44 + 10 = 54 bytes
Este é o melhor que eu pude pensar no começo. Entendi que "caracteres únicos" significava "eco" não é igual a "ECHO". Espero que eu entendi direito!
Execute usando php -r:
Isso gera:
O que, por sua vez, nos dá o nosso número:
Saída:
Meu código quando executado em um terminal. O && eco anexado é apenas para facilitar a leitura.
Alguns comentários:
Obrigado pelo desafio, eu aprendi algo hoje!
fonte
Lua, 2 cadeias, 83 + 8 = 91 bytes
Saídas
Quais saídas
fonte
Carvão, 2 programas, 10 + 2 = 12 bytes
Experimente online! Saídas
Experimente online! Quais saídas 1.
fonte
Braingolf , 2 cadeias, 9 + 2 = 11 bytes
Experimente online!
Isso gera
Experimente online!
(Além de alguma saída padrão que pode ser ignorada pelas regras do OP)
Isso, por sua vez, gera
fonte
Röda , 2 cadeias, 31 + 3 = 34 bytes
Snippet 1:
Experimente online!
Snippet 2:
Experimente online!
Eles são trechos, porque todo programa Röda válido deve incluir
main{...}
inchaço. Eles também são programas válidos Röda REPL.fonte
dc , 3 programas, 48 bytes
Primeiro:
Rende o segundo:
Rende o terceiro:
Rende
1
.Experimente online!(possui algum código de limpeza de pilha e impressão de nova linha para fazer com que os três bits sejam executados de uma só vez).
Talvez seja melhor começar no programa três
KZn
. Existem apenas algumas maneiras de imprimir as coisasdc
, e eu percebi que, nesta fase, eu provavelmente ficaria preso a ump
ou an
ambos, que estão nos 100s em ASCII decimal. Isso significa que eu certamente teria que gerar 1 em vez de apenas usar o programa1n
.K
empurra a precisão atual (padrão: 0) para a pilha eZ
empurra o número de dígitos da parte superior da pilha, o que nos dá o 1 para imprimir.O segundo programa é bem direto.
P
imprime o caractere com o valor ASCII fornecido, então imprimimos75
(K
)90
(Z
) e finalmente110
(n
), o que funciona maravilhosamente. Isso também significa que, além do 1 mencionado acima, não posso usar os dígitos 5, 7, 9 ou 0 em outro lugar. Eu também preciso de um método diferenteP
para transformar números em caracteres.O primeiro programa, portanto, precisa criar quatro números sem usar os dígitos 1, 5, 7, 9 ou 0. Ele precisa criar
80
(valor ASCII deP
)82 2-
:;75
:AA
(110)I-
(subtrair a raiz de entrada padrão, 10)I2/
(so, 5)2^
(so, 5 ^ 2, 25)-
(75);90
:AA
(110)I2*
(duas vezes a raiz de entrada padrão de 10, então 20)-
(90); e110
: bem, é sóAA
. Depois de fazer80
, usamosa
para converter um número em uma string. Existem alguns comandos inversosr
ed
uplicados para colocar osP
s nos pontos certos e, finalmente, imprimimos a pilha inteira comf
.Tenho certeza de que não estraguei tudo, mas fiquei com a cabeça girando um pouco ...
fonte
05AB1E , 5 + 3 = 8 bytes
Experimente online!
que logo de cara retorna
Estou tomando a saída 1.0 como não igual a 1, então eu executo esse código:
Experimente online!
que retorna
E lá vai você!
Número de programas =
2
fonte
h
(converter para hexadecimal). Og
(obtém comprimento, padrão 0) comt
(raiz quadrada) já fornece um decimal0.0
. Com<
(diminuir em 1), ele se torna-1.0
e, em seguida,n
(quadrado) muda isso para1.0
. Você também pode substituir o<n
por>
(aumento de 1). ;) Então, no total, são 3 bytes (gt>
). Como alternativa, você pode usarXt
(1
e raiz quadrada). PS: Eu não tenho certeza se1.0
a1
é uma parte válida da cadeia. Pedi ao OP para verificar. Bem-vindo ao PPCG e aproveite a sua estadia.Ruby, 2 cadeias, 24 + 3 = 27 bytes
Saída é
fonte