Escreva uma função matemática cujo resultado seja "olá mundo" [fechado]


9

Escreva uma função matemática que resulte em uma representação inteira de "olá mundo"

Por exemplo, "olá mundo" em hexadecimal é, 68656c6c6f20776f726c64portanto, o objetivo será escrever um programa matemático que resulte em um número representando "olá mundo".

Aqui está um exemplo de uma possível solução usando python:

print(2*2*3*59*61*97*416510539*72330832279)==int("68656c6c6f20776f726c64", 16)

Qualquer tipo de equação matemática pode ser usada, como: potências, séries, fatoriais e outras operações matemáticas.

As regras:

  • Você pode selecionar sua própria maneira de codificar / representar "olá mundo" como um número inteiro. Funções hash também são permitidas

  • Bibliotecas matemáticas (por exemplo, numpy, GMP) são permitidas.

  • A intenção é focar na parte da matemática


11
Criatividade não é objetiva. Você está pensando em concurso de popularidade ?
Kendall Frey

4
Qualquer número inteiro pode representar "olá mundo" se você tiver permissão para decidir a codificação. por exemplo -1 = "Olá worlc", 0 = "Olá mundo", 1 = "Olá Worle", etc
Kendall Frey

11
@kylek Como você não especificou os critérios de vencimento exatos além dos "mais criativos / engenhosos", tomei a liberdade de adicionar o concurso de popularidade como critério de vencimento.
Victor Stafusa

2
(no contexto deste site) todos os dados e programas de computador podem ser trivialmente representados como números - porque esse é o modelo usado pelos inventores (Babbage, et al). Também permitir que qualquer codificação realmente faça disso um concurso de quem pode escrever o programa mais criativo que gera um número. Há uma implicação de que o código fonte deve usar "operações matemáticas", mas qualquer coisa que um programa faça pode ser modelado como um op matemático. Sugiro que você exigem codificação ASCII e depois fazer o concurso sobre representando-o como um "número especial" See: www2.stetson.edu/~efriedma/numbers.html
user2460798

11
Você está jogando de maneira extremamente rápida e flexível com sua terminologia matemática. Você está usando "equação" e "função" aparentemente de forma intercambiável. Eu acho que a palavra que você estava procurando é "expressão". Mas, mesmo assim, a questão não está bem colocada. A codificação matemática para o "hello world" que escolhi para o meu é o código-fonte original da K&R hello world. Oh, ei, funciona!
Tim Seguine

Respostas:


14

Python 2.7

Alguns abusos do gerador de números aleatórios funcionam no Python 2.7, mas não no Python 3.x, pois o gerador parece ter alterado o algoritmo de propagação;

>>> import random
>>> n=[(15,30,15,25,15,0,-15,-25,-15,-30,-15),(107,35,34,26,22,0,71,188,94,64,81)]
>>> random.seed(4711)
>>> m = zip("MERRY CHRISTMAS",*n)
>>> print(''.join(map(lambda x:chr(ord(x[0])+random.randint(x[1],x[2])),m)))

hello world

Isso me fez rir alto na minha mesa. As pessoas estão me olhando agora: - /
jmiserez

25

Farei melhor do que apenas imprimi-lo, imprimi-lo infinitamente várias vezes!

O número racional

1767707668033969 / 3656158440062975

retorna a seguinte expansão base-36:

0.helloworldhelloworldhelloworldhelloworldhelloworld...

Experimente! (Wolfram Alpha)

Ou, se você quiser uma mensagem mais subliminar, tente:

2399843759207982499621172523113947162810942763812298565948669
/ 1357602166130257152481187563160405662935023615

Que retorna (novamente na base 36):

helloworld.helpimtrappedinanumberfactoryhelpimtrappedinanumberfactoryhelpimtrappedinanumberfactory...

Se seu programa funcionasse apenas com números inteiros, você nunca veria a parte fracionária.


12

Python (ainda não finalizado ... ainda!) Finalizado! : D

number = ((sum(b'This text will end up converting to the text "hello world" by a bunch of math.') *
sum(b'For example, multiplication will be used to increase the number so that it may reach the required result.') *
sum(b'Wow, double multiplication! The required result number is extremely big so I have to use lots of math to get there.') *
sum(b'TRIPLE multiplication?!?!?! Wow!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Did I put too many exclamation points?') *
sum(b'I think maybe I might have put too many exclamation points, oops. :(') *
sum(b'This is taking a long time...') *
sum(b'A very, very, very long time...')) // 2)

number -= (sum(b'Okay, the number is a bit too high. Blah. This is extremely hard.') *
sum(b'I need to reduce it. I will just keep multiplying again! Yay! That seems effective!') *
sum(b'I don\'t know what to write now... I used up all my creativity in the previous number.') *
sum(b'So. Uhhh, how has your day been? Was it good? I wonder how many people are still reading.') *
sum(b'Gah! There is nothing to type about anymore! I will just type randomness then.') *
sum(b'Do you like pie? I like pie. Refrigerator. The chicken ate the potato. Llamas are not tasty.'))

number -= (sum(b'Blah, I am still a tiny bit too high!') *
sum(b'This is very frustrating!') * sum(b'Argh!!!!!!!') *
sum(b'I have even less creative ideas now since I have written two paragraphs already.') *
sum(b'Well, I suppose they\'re not paragraphs. They\'re just blocks of code.') *
sum(b'The only reason I made that remark was to increase this number to subtract, so that I reach my target.'))

number -= (sum(b'I am an extremely miniscule amount over the target!!!') *
sum(b'I am so close!!! So close!!') *
sum(b'I must make it!!! I will!!!') *
sum(b'I shall NEVER give up!!!') *
sum(b'Okay, ummm... maybe not exactly "never"...') *
sum(b'I mean, this is REALLY hard...'))

number -= (sum(b'I am so close. This is just ridiculous.') *
sum(b'Just ridiculous. And that\'s awesome :D') *
sum(b'Why am I doing this?!?') *
sum(b'The answer\'s probably "becase I can."') *
sum(b'Notice how most of the text in this program is meaningless.'))

number -= (sum(b'How have I been above my target this whole time? That is very odd.') *
sum(b'I wonder how much time I could have saved if I removed a few characters in the first block.') *
sum(b'I wish I did that. That would have made it so much easier.... But oh well.') *
sum(b'Well, I am really really really really really really close now!'))

number -= (sum(b'I am so close!') *
sum(b'I will never give up now! Not after all this!') *
sum(b'I wonder if I will ever get exactly on the target. What if I do, and then discover a typo? :O') *
sum(b'So close!'))

number -= (sum(b'Wow; this is the eighth block. That\'s a lot of blocks!') *
sum(b'I only have a little more to go! I must finish! I will!') *
sum(b'It is starting to get harder thinking of things to type than it is getting to the target...'))

number -= (sum(b'These strings are short') *
sum(b'So the number to subtract is less') *
sum(b'Hi'))

number += (sum(b'Finally adding') *
sum(b'That\'s new') *
sum(b':D'))

number -= (sum(b'I am back to subtraction, and also longer strings.') *
sum(b'But this time I only get two strings!'))

number -= (sum(b'I have switched over to adding the strings, not multiplying them!') +
sum(b'I am really really close! So close that I can\'t even multiply two strings to subtract anymore!') +
sum(b'This is very exciting; I\'ve nearly made it! Only a few more strings to add...') +
sum(b'I ran out of ideas for what to type again... I will just type exactly what I am thinking, which is what I am doing now actually.') +
sum(b'But now the only thing I am thinking about is getting to the target, and there is not much about that to type...') +
sum(b'I am only a few thousand away!!!!!!!!!!!!'))

number += 8 # NOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

print(number)

Saídas 126207244316550804821666916(equivalente ao seu exemplo 0x68656c6c6f20776f726c64)


Você entende bem o que estou perguntando.
Kyle k

11
" Lhamas não são saborosas " haha ​​+1
assylias

2
Isso deve ganhar.
tomsmeding

8

Você pode selecionar sua própria maneira de codificar / representar "olá mundo" como um número inteiro.

Bem então...

PHP

<?=1?>

onde 1 representa "olá mundo" porque eu disse isso.


14
10em base- "olá mundo"
Emil Vikström

7

Fonte da Calculadora / FreePascal

Eu posso ter problemas por postar isso, mas farei assim mesmo :-)

  1. Calcule 7734/100000. Altere o zero inicial para azul e os outros dígitos para a fonte da calculadora. Vire de cabeça para baixo. O azul representa o mundo:

insira a descrição da imagem aqui

Se isso é muito preguiçoso, que tal isso:

uses graph;
var gd, gm : integer;
var n,m:integer;

begin
  gd := D4bit;
  gm := m640x480;
  initgraph(gd,gm,'');
  setcolor(black);

  For n:=0 to 5  do for m:=0 to 3 do begin;
    setfillstyle(solidfill,(abs(n*2-1)));

    if(($967EEF shr (20-n*4+m)) and 1) = 1
      then sector(50+n*80,100,90*m,90*(m+1),40,60);

    if(($EDF7E9 shr (20-n*4+m)) and 1) = 1
      then sector(50+n*80,300,90*m,90*(m+1),40,60);
    end;

  readln;
  closegraph;
end.

insira a descrição da imagem aqui

círculos numerados de 0 a 5, cor determinada por abs (2n-1). Um dígito hexadecimal por círculo, quadrantes coloridos da parte mais significativa para baixo, no sentido horário, no canto inferior direito. Pelas constantes místicas 967EEF e EDF7E9 hex.

Agradecimentos especiais à primitiva a seguir e à Borland por colocá-la no TurboPascal para que o FreePascal pudesse cloná-la.

procedimento Setor (x: SmallInt; y: SmallInt; StAngle: Word; EndAngle: Word; XRadius: Word; YRadius: Word); Setor desenha e preenche um setor de uma elipse com centro (X, Y) e raios XRadius e YRadius, começando no ângulo Start e terminando no ângulo Stop.


Eu nunca pensei sobre esse método antes, bom pensar fora da caixa!
Kyle k

3

Ruby e Python

Usando a matemática da base 36, chegamos a uma representação inteira com bastante facilidade no Ruby & Python:


Rubi

%w(hello world).map{|n|n.to_i(36)}

resultado:

[29234652, 54903217]

ou, expresso como uma função geral:

def f(words); words.split.map{|n|n.to_i(36)}; end

exemplo:

f("hello world")
=> [29234652, 54903217]

Pitão

def f(words): return map(lambda n: int(n,36), words.split())

exemplo:

>>> f("hello world")
[29234652, 54903217]

3

Alguns PHP cuidadosamente criados:

$x=18306744;
$w=($z=($y=30)/3)/2;
echo base_convert($x, $z, $y+$z/$w),chr($y+$z/$w).base_convert($x*($y/$z)-$w*41*83,$z,$y+$y/$w);

Esta é uma boa resposta, é o tipo de resposta que eu estava procurando.
Kyle k

1

Esquema R6RS

#!r6rs
(import (rnrs))
(define (hello-world)
  (bitwise-xor (fold-left (lambda (acc d) 
                        (+ (* acc 256) 
                           (+ (bitwise-and 255 acc) d)))
                      104
                      '(-3 7 0 3 8 0 -8 3 -6 -8))
               (bitwise-arithmetic-shift 87 40)))

Saídas # x68656c6c6f20776f726c64 (em decemal):

126207244316550804821666916

Minha implementação original foi:

Raquete (esquema de dialeto)

(define (hello-world)
  (bitwise-xor (foldl (lambda (d acc) 
                        (+ (* acc 256) 
                           (+ (bitwise-and 255 acc) d)))
                      104
                      '(-3 7 0 3 8 0 -8 3 -6 -8))
               (arithmetic-shift 87 40)))

1

Javascript

function stringTheory(theory) {
  var proof = 0;
  var principles = theory.split(/[ ,.'-]/);
  for (var i = 0; i < principles.length; i++) {
      var formula = '';
      for (var j = 0; j < principles[i].length; j++) {
        formula += principles[i].charCodeAt(j).toString(10);
      }
      proof += +formula;
  }
  return proof;
}

console.log(
/* \2 and \3 are start of text and end of text characters */ 
stringTheory('\2 Yo it\'s 4327 - Go to space, look back, and see the dot of a small blue rock you once sat on amid the vast empty void - KA-BOOM - you are in awe of it. "Ah" - so tiny in this vast space yet you are even more so. A mere atom in an ocean of stars, the earth a speck of dust to the sun\'s ping-pong ball. One day you shall go back and as your toes touch the soft soil once more, the cool wind in your hair as you cast your gaze upon the moon, a mere rock just like this one, and bask in it\'s warm glow - Ah. Only then can you know the scale of it all, what luck you have to call this place home.  And with this new ken, a love you\'ve kept for all of time but had not seen - for it is clear to you now. You lay open your arms and fill the air with your song - (aah) ~o Good-bye space and ... o? \3') + 42
);

O que está acontecendo?

Pegamos essa string e aplicamos um pouco stringTheory()(na verdade, é uma transmissão do futuro):

'\2 Yo it\'s 4327 - Go to space, look back, and see the dot of a small blue rock you once sat on amid the vast empty void - KA-BOOM - you are in awe of it. "Ah" - so tiny in this vast space yet you are even more so. A mere atom in an ocean of stars, the earth a speck of dust to the sun\'s ping-pong ball. One day you shall go back and as your toes touch the soft soil once more, the cool wind in your hair as you cast your gaze upon the moon, a mere rock just like this one, and bask in it\'s warm glow - Ah. Only then can you know the scale of it all, what luck you have to call this place home. And with this new ken, a love you\'ve kept for all of time but had not seen - for it is clear to you now. You lay open your arms and fill the air with your song - (aah) ~o Good-bye space and ... o? \3'

Primeiro, dividimos na pontuação para formar palavras. Em seguida, criamos um conjunto de números convertendo os caracteres em seu código ASCII decimal. As letras anexas tornam-se números adjacentes (por exemplo, aatornam-se 9797).

Os números são então somados. O que recuperamos é 191212222216169um número totalmente inútil, que não tem significado, como os quatrilhões de rochas que flutuam ociosamente no espaço. O que torna este mundo especial? Por que isso é vida? Então, dando a esse número o significado da vida, +=42 então obtemos 191212222216211;

Mas por que?

O que isto significa? Por que isso significa, é stringTheory("Hello world")claro.


1

Pitão

from math import fsum
c=[104.,-4412.705557362921,12008.518259002305,-13041.051140948179,7566.060243625142,-2619.91695720304,567.427662301322,-77.52280096313,6.48776455347,-0.303552138602,0.006079144624]
def f(x):
    return fsum([c[i]*x**i for i in range(len(c))])
s=""
for i in range(11):
    s+=chr(int(round(f(i))))
print s

0

Rubi

Qualquer sequência é mapeada para um número inteiro.

# encode string to integer
def str_to_int(s)
  i = 0
  s.chars.each do |c|
    i = i << 7 | c.ord
  end
  i
end

A função inversa:

# decode integer to string
def int_to_str(i)
  s = ''
  while i > 0 do 
    s = (i & 0x7f).chr + s
    i = i >> 7
  end
  s
end

Exemplos:

str_to_int("ABC")
=> 1073475
int_to_str(1073475)
=> "ABC"

str_to_int("hello world")
=> 123720932638399026476644
int_to_str(123720932638399026476644)
=> "hello world"

0

C #

Um método para converter qualquer sequência (olá mundo ou outra coisa) em sequência hexadecimal

string Encode(string text)
{
   string hexValue = String.Empty;
   foreach(char c in text)
      hexValue += String.Format("{0:X}", (int)c);
   return hexValue;
}

Um método para converter cadeia hexadecimal em cadeia

string Decode(string hexValue)
{
   string text = String.Empty;
   for (int i = 0; i < hexValue.Length; i += 2)
   {
     int value = Convert.ToInt32(hexValue.Substring(i, 2), 16);
     text += (char)value;
   }
   return text;
}

Aqui está o programa C # completo

using System;

namespace ConsoleApplication1
{
    class Program
    {       

        static string Encode(string text)
        {
            string hexValue = String.Empty;
            foreach(char c in text)
                hexValue += String.Format("{0:X}", (int)c);
            return hexValue;
        }

        static string Decode(string hexValue)
        {
            string text = String.Empty;

            for (int i = 0; i < hexValue.Length; i += 2)
            {
                int value = Convert.ToInt32(hexValue.Substring(i, 2), 16);
                text += (char)value;
            }

            return text;
        }

        static void Main(string[] args)
        {  
            string Text1 = "Hello World!";
            Console.WriteLine("Before Encoding: " + Text1 + "\n");

            string Hex = Encode(Text1);
            Console.WriteLine("After endoding: " + Hex + "\n");

            string Text2 = Decode(Hex);
            Console.WriteLine("After decoding: " + Text2 + "\n");
        }
    }
}

E aqui está a saída.

insira a descrição da imagem aqui


0

Pitão

def D(A):
    try:
        return sum(D(x)**2 for x in A)
    except TypeError:
        return A
print hex(D([[[[33,22,3,1],[20,13,2],5],[[31,19,1],[11,5,3],1]],[[[26,13],[18,14,6,4],1],[[12,10],[10,3,1],2],4],28]))

Recursivamente decompõe o número de destino em somas no máximo quatro quadrados. Meu caso base é <100. Eu usei http://www.alpertron.com.ar/FSQUARES.HTM para calcular as decomposições.

(Talvez um caso base <= 1 teria sido interessante ...)


0

Pitão

def church(i):
    if i > 0:
        return 'f(' + church(i-1) + ')'
    else:
        return 'x'

def church_string(bs):
    import base64
    return church(int(base64.b16encode(bs), 16))

print(church_string(b'hello world'))

O resultado é realmente um número, eu juro!


0

Apenas um pouco de diversão com números, nada de especial.

int main()
{
    int a , b, c;
    double i = 0, f = 0;

    for (; i < 1; i += .00000012785666)
        f += cos(i);
    c = f;
    a = f * 276.393089;
    b = a + f * 7.4358109;

    printf("%.4s%.4s%.4s\n", &a, &b, &c);
}

demonstração


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.