Como grande fã da série de TV Lost , sempre me intrigava com a sequência de números que aparece repetidamente nos episódios. Esses números são:
(A104101)
Usando qualquer linguagem de programação, escreva um código que produz esses números.
Pontuação:
Menor resposta ganha
A saída não deve conter outros números ou letras. Você pode usar qualquer outro caractere como separador, ou mesmo nenhum separador.
Você não pode separar dígitos do mesmo número. é uma resposta válida, mas não é.
Você deve respeitar o pedido.
Se o seu código não contiver nenhum número da sequência, reduza sua pontuação em 30%. Esta regra permite que você insira os dígitos separadamente. Por exemplo:
abcde1fg5h
É um candidato válido porque a resposta não contém o número , apenas seus dígitos. No entanto, qualquer ou invalidará o bônus.
Se o código não contiver nenhum dígito, reduza sua pontuação em 50%. Outros personagens como , ou ainda são válidos para esse bônus.
fonte
restricted-source
tag que poderia ter sido usada aqui: embora a maioria das respostas evite soluções óbvias, acho que o desafio teria sido um pouco mais interessante se o uso de dígitos fosse totalmente proibido.Respostas:
Perdido ,
2927/2 = 13,5 bytesExperimente online! ou verifique se é determinístico
Parecia o idioma certo para usar.
Explicação:
Lost é uma linguagem 2D onde o ponteiro começa em qualquer lugar , indo em qualquer direção. Isso geralmente leva a muita verificação dupla de que o ponteiro não entrou em uma seção cedo.
fonte
Geléia , 7/2 = 3,5 bytes
Imprime os números sem separador, ou seja, o número inteiro4815162342 .
Experimente online!
Como funciona
“ƲÞIȥ’
é literal inteiro bijetivo base-250.Ʋ
,Þ
,I
, Eȥ
ter (1-based) índicesFinalmente,2⋅2407581171=4815162342 .
Ḥ
(unhalve) duplica o número inteiro, dando origem aÉ necessário dobrar, porque a codificação da saída leva diretamente a
“¡9)Ƙ[’
, que contém um dígito.fonte
Neim ,
65 bytes,32,5 pontosExplicação:
Experimente online!
fonte
05AB1E , pontuação:
1097 bytes / 2 = 3,5Experimente online.
Ou alternativa de 7 bytes :
Experimente online.
Ambos emitindo o número inteiro
4815162342
.Explicação:
Veja esta minha dica 05AB1E (seção Como comprimir números inteiros grandes? ) Para entender por que
•‘o]Ê•
é2407581171
e•’µ[%•
é2432615184
.Resposta antiga de 9 bytes que gera a lista
[4,8,15,16,23,42]
:-1 byte (e, portanto, pontuação -0,5) graças a @Emigna .
Mais longo que a outra resposta 05AB1E , mas isso gera a lista em
[4,8,15,16,23,42]
vez do número inteiro4815162342
.Experimente online.
Explicação:
Consulte esta dica 05AB1E (seções Como compactar números inteiros grandes? E Como compactar listas inteiras? ) Para entender por que
•ΓƒÇ²•
é1301916192
e•ΓƒÇ²•50в
é[4,8,15,16,23,42]
.fonte
•ΓƒÇ²•т;в
para 4,5 como números de pós-scripts estão bem para o bônus.JavaScript (ES7), 34/2 = 17 bytes
Experimente online!
Isso decodifica e avalia a expressão
"65058101+41**6"
, que não contém nenhum dígito uma vez codificado na base-64.JavaScript (ES6), 13 bytes
Solução óbvia chata.
Experimente online!
fonte
Python 3 , 25 bytes, 12,5 pontos
Experimente online!
) (髒, ⿰ 馬 葬), 𧨦 (謚, ⿰ 言 ⿱⿵ 八一 皿 custam 4 bytes, mas U + 0657 custam apenas 2 bytes ...
Python 3 , 29 bytes, 14,5 pontos
Experimente online!
𩦦 (⿰ 馬 葬) é o caractere variante de 髒, que significa "sujo". 湡 é o nome de um rio. E eles não são nada relacionados a esta questão, como eu sabia.
fonte
4815 162342
válido. Assim,print(*map(ord,'ዏ𧨦'))
economiza 1,5 pontos :) (print(*map(ord,'밗'))
economizaria 2 pontos, mas foi especificado como inválido).Brain-Flak , 52/2 == 26 bytes
Experimente online!
fonte
Java 8, pontuação:
1211.9 (70% de 17 bytes)-0,1 pontos graças a @RickHitchcock .
Experimente online.
Explicação:
Resposta antiga com uma pontuação de: 12 (50% de 24 bytes):
Contém um caractere não imprimível
0x1B
.Experimente online.
Explicação:
Em Java, os caracteres podem ser autoboxados para números inteiros que mantêm seu valor unicode. Infelizmente, o unicode máximo suportado para caracteres é
65,535
, portanto, não posso usar apenas dois caracteres para multiplicar (já que os dois maiores números que dividem o esperado4,815,162,342
são56,802
e84,771
, onde84,771
infelizmente excede o máximo65,535
.Além disso, como o tamanho máximo de um
int
é 32 2 -1 (2,147,483,647
) e o resultado4,815,162,342
é maior que isso, uma conversão explícita paralong
, que pode conter até 64 2 -1 (9,223,372,036,854,775,807
), é necessária.Resposta chata teria sido 14 bytes sem nenhum bônus:
Experimente online.
fonte
long
e não suporte caracteres unicode muito grandes. Se não fosse pelas duas restrições mencionadas, apenasv->'𩦦'*'湡'
(15 bytes, pontuação 7,5) teria sido suficiente. Mas ainda é muito curto mesmo. :) Embora o Java possua muitas e muitas fraquezas em termos de codegolfing (duhh ..), calcular com caracteres porque não podemos usar dígitos é um dos seus pontos fortes. Também foi bastante útil nesta minha resposta bastante semelhante .v->767*6277917L+3
R, 18x0,7 = 12,6 pontos
Bastante auto-explicativo, apenas faz alguma aritmética evitando os números em questão.
fonte
7 , 10 bytes, 27 caracteres
Experimente online!
A representação empacotada deste programa no disco é (
xxd
formato):Explicação
Já vimos essa sequência de números antes, em Automatize Saving the World , que tratava de imprimir os números em intervalos regulares, tornando-o interessante ao exigir o uso de um idioma muito antigo. Muitos idiomas mais novos podem ter suas próprias reviravoltas que tornam esse desafio interessante. (Sim, este parágrafo e, de fato, a razão pela qual comecei a escrever esta resposta, é efetivamente apenas uma maneira de fazer com que todos os desafios relacionados apareçam juntos na barra lateral; normalmente as pessoas fazem isso usando comentários, mas eu não tenho representantes suficientes. .)
A primeira coisa a observar é que 7 é feito inteiramente de dígitos, portanto, é improvável que os bônus aqui funcionem (embora se você visualizar o programa como uma sequência de octetos, nenhum deles corresponda às representações ASCII de qualquer um dos números originais , para que você possa reivindicar o bônus nesse sentido). A próxima coisa a ser observada é que 7 possui comandos para recriar a sequência de comandos que provavelmente produziu um dado específico; então poderíamos interpretar os números perdidos
4815162342
como uma seção do próprio programa 7?A resposta é "não exatamente". A parte mais problemática é esse segundo número,
8
,. 7 programas são escritos em octal; não existe um número igual a 8. Portanto, o início da string terá que ser impresso de maneira diferente.A base do programa é, portanto, baseada no programa 7 "Hello world":
com o literal escapado em um idioma específico do domínio, interpretado da seguinte maneira:
Depois disso, vem um extra
3
, que gera o elemento restante da pilha (e sai devido à pilha restante insuficiente). Esse elemento é especificado no início do programa e, para evitar o incomparável6
(que funciona um pouco como um colchete de fechamento), nós o geramos usando código, em vez de gravá-lo diretamente como dados. (Observe que existem dois7
caracteres implícitos no início do programa, o que é relevante aqui):Isso produz o seguinte literal:
que é impresso.
fonte
:(
05AB1E , 6 * 0,7 = 4,2 bytes
Experimente online!
Imprime o número não compactado da base-255
fonte
Origem do conjunto MASM 8088, (93 bytes - 50%) = 46,5 bytes
Não usando números ou a sequência na fonte:
Resultado:
fonte
Carvão vegetal , 13 bytes / 2 = 6,5
Experimente online! Link é a versão detalhada do código. Funciona subtraindo os códigos ASCII da string
TPIHA.
de 88 e convertendo em string.fonte
Aheui (esótopo) , 45 bytes (15 caracteres) * 0,5 = 22,5 pontos
Experimente online!
Explicação:
Veja isto também; Aheui Referência ( Inglês )
Observe que ㅁ (instrução de impressão) move o cursor na direção inversa se a pilha (ou fila) estiver vazia.
fonte
Perl 5 , 16 bytes - 30% = 11,2
Experimente online!
fonte
PowerShell , 12 bytes * 0,7 = 8,4
Experimente online!
"Porta" da resposta de Xcali para obter uma resposta melhor do PowerShell.
fonte
JavaScript, 143 bytes (não sabe como pontuar)
Experimente online!
Comece com seis
4
, multiplique, adicione, subtraia por, de,4
para derivar a saída.fonte
4
, com adição, subtração, multiplicação e o índice do número4
dentro de uma string (ou matriz) pode ser usado para derivar os números necessários.143*0.7=100.1
PHP, 35/2 = 17,5
uma abordagem digital: 40 * .7 = 28
sem dígitos, sem strings: 68/2 = 34
Experimente online .
fonte
<?=4815162342;
4815162342
. Ou<?=~
+ 10 não imprimíveis -> 15/2 = 7,5JavaScript (SpiderMonkey),
67 bytes / 2 = 33,560 bytes / 2 = 3058 bytes / 2 = 2948 bytes / 2 = 24-7 bytes / 3,5 , -2 bytes / 1 cortesia de @JoKing, -10 bytes / 5 cortesia de @tsh
Experimente online!
fonte
print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)
print(4815162342)
17 bytesAPL (Dyalog Unicode), 18/2 = 9 bytes
Apenas entediante multiplicação de caracteres antigos.
Experimente online!
fonte
JavaScript (ES6), 16 * 0,7 = 11,2 bytes
Produz os dígitos sem delimitadores.
Experimente Online!
fonte
Espaço em branco , pontuação:
4941 bytes / 2 = 20,5Letras
S
(espaço),T
(tabulação) eN
(nova linha) adicionadas apenas como destaque.[..._some_action]
adicionado apenas como explicação.Experimente online (apenas com espaços brutos, guias e novas linhas).
Pseudo-código:
Explicação:
Em espaço em branco, um número é enviado da seguinte maneira:
S
: Ativar manipulação de pilhaS
: Número de envioS
/T
: Positivo / negativo, respectivamenteT
/S
seguidos por um únicoN
: decimal como binário, ondeT
é 1 eS
é 0Depois disso, é simplesmente impresso com
TNST
:TN
: Ativar E / SS
: Saída na parte superior da pilhaT
: Como númerofonte
F #, 45 bytes = 22,5 pontos
Apenas um
for
loop comum que imprime os dígitos:O acima é um programa completo que pode ser compilado em um executável.
Em um REPL (loop de leitura e avaliação), por exemplo, FSI (F # Interactive), a seguinte versão mais curta funcionará, pois o REPL emitirá uma representação da expressão avaliada; tem 35 bytes = 17,5 pontos:
fonte
Pyke , 3 pontos
Experimente aqui!
O primeiro byte sinaliza para ler na base 128 até que um byte sem o bit alto seja definido.
Finalmente, 32 é subtraído do resultado (por razões históricas).
Isso permite a geração de grandes números em quantidades muito pequenas de espaço
fonte
MathGolf , 7 bytes * 0,5 = 3,5
Experimente online!
Explicação
Observe que esse código ainda não funciona no TIO. Fiz algumas alterações recentemente no MathGolf, incluindo a adição do
$
operador. Depois que ele for puxado para o TIO, você poderá executá-lo lá, então farei uma atualização para esta resposta. Funciona perfeitamente no terminalUtilizo o fato de que o MathGolf possui literais de 1 byte para criar seqüências de caracteres até o comprimento 4. Se eu quisesse converter o número inteiro de uma string de base 256, eu precisaria usar dois
"
, e a string seria 5 personagens. Dessa forma, economizo 2 bytes, mas perco um byte ao finalizar o operador de duplicação.fonte
Python 3 34 Pontos
fonte
Python 3 ,
44381918,5 bytes-6 bytes graças a @Jo King
-50% bytes graças a @ouflak por apontar o bônus de 50%
-1 byte graças a @Dennis
Experimente online!
fonte
Japonês,
109 bytes / 2 = 4,5Teste-o
fonte
Befunge-98 (FBBI) , 15 bytes / 2 = 7,5 pontos
Experimente online!
Explicação:
Primeiro, empurre os valores ASCII dos caracteres '* + H /! K- (42, 72, 47, 33, 107, 45) nesta ordem para a pilha. Então calcule4815 = 45 ⋅ 107 e 1623 = 33 ⋅ 47 + 72 e saída.
fonte
Encantos Rúnicos, 15/2 = 7,5
Experimente online!
Simplesmente codifica os valores no menor número de bytes possível.
42
,16
,15
,8
, E4
, coage-los com os valores numéricos, e imprime-los em ordem inversa.4 8 15 16 42
sem espaços, como48151642
era um formato de saída aceitável.4
e8
não pôde ser combinado (48
), pois é numérico0
e não foi permitido o uso. É possível combinar os 15, 16 e 42 em 2 caracteres (em vez de 3)ʂ
às custas de +1 byte, o que não valeu a pena.fonte