Scrivi una funzione matematica il cui risultato è "ciao mondo" [chiuso]


9

Scrivi una funzione matematica che si traduce in una rappresentazione intera di "ciao mondo"

Ad esempio "ciao mondo" in esadecimale è 68656c6c6f20776f726c64quindi l'obiettivo sarà quello di scrivere un programma matematico che dia come risultato un numero che rappresenta "ciao mondo".

Ecco un esempio di una possibile soluzione che utilizza python:

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

È possibile utilizzare qualsiasi tipo di equazione matematica, ad esempio: poteri, serie, fattoriali e altre operazioni matematiche.

Le regole:

  • Puoi selezionare il tuo modo di codificare / rappresentare "ciao mondo" come numero intero. Sono anche ammesse funzioni hash

  • Sono ammesse biblioteche matematiche (ad es. Numpy, GMP).

  • L'intenzione è quella di concentrarsi sulla parte matematica


1
La creatività non è oggettiva. Stai pensando al concorso di popolarità ?
Kendall Frey,

4
Qualsiasi numero intero può rappresentare "ciao mondo" se ti è permesso decidere la codifica. es. -1 = "ciao worlc", 0 = "ciao mondo", 1 = "ciao worle", ecc.
Kendall Frey,

1
@kylek Dato che non hai specificato gli esatti criteri vincenti al di là di "il più creativo / ingegnoso", mi sono preso la libertà di aggiungere il concorso di popolarità come criterio vincente.
Victor Stafusa,

2
(nel contesto di questo sito Web) tutti i dati e i programmi per computer possono essere banalmente rappresentati come numeri, perché è il modello utilizzato dagli inventori (Babbage, et al). Consentire qualsiasi codifica rende davvero solo questo un concorso per chi può scrivere il programma più creativo che produce un numero. C'è un'implicazione che il codice sorgente dovrebbe usare "operazioni matematiche", ma qualunque cosa faccia un programma può essere modellata come un'operazione matematica. Suggerisci di richiedere la codifica ASCII e quindi di contestare la sua rappresentazione come "numero speciale" Vedi: www2.stetson.edu/~efriedma/numbers.html
user2460798

1
Stai giocando in maniera estremamente veloce e libera con la tua terminologia matematica. Stai usando "equazione" e "funzione" apparentemente in modo intercambiabile. Penso che la parola che stavi cercando sia "espressione". Ma anche allora, la domanda non è ben posta. La codifica matematica per "ciao mondo" che scelgo per il mio è il codice sorgente originale di K&R ciao mondo. Oh, ehi, funziona!
Tim Seguine,

Risposte:


14

Python 2.7

Qualche abuso del generatore di numeri casuali, funziona su Python 2.7 ma non su Python 3.x poiché il generatore sembra aver cambiato l'algoritmo di seeding;

>>> 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

Questo mi ha fatto ridere forte alla mia scrivania. La gente mi sta fissando proprio ora: - /
jmiserez,

25

Farò meglio che stamparlo, lo stamperò all'infinito molte volte!

Il numero razionale

1767707668033969 / 3656158440062975

restituisce la seguente espansione base-36:

0.helloworldhelloworldhelloworldhelloworldhelloworld...

Provalo! (Wolfram Alpha)

Oppure, se desideri un messaggio più subliminale, prova:

2399843759207982499621172523113947162810942763812298565948669
/ 1357602166130257152481187563160405662935023615

Che ritorna (sempre nella base 36):

helloworld.helpimtrappedinanumberfactoryhelpimtrappedinanumberfactoryhelpimtrappedinanumberfactory...

Se il tuo programma funzionasse solo con numeri interi, non vedresti mai la parte frazionaria.


12

Python (non finito ... ancora!) Finito! : 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)

Output 126207244316550804821666916(equivalenti al tuo esempio 0x68656c6c6f20776f726c64)


Hai una buona comprensione di ciò che sto chiedendo.
Kyle k,

1
"I lama non sono gustosi " haha ​​+1
assylias

2
Questo dovrebbe vincere.
tomsmeding

8

Puoi selezionare il tuo modo di codificare / rappresentare "ciao mondo" come numero intero.

Bene allora...

PHP

<?=1?>

dove 1 rappresenta "ciao mondo" perché l'ho detto.


14
10in base- "ciao mondo"
Emil Vikström,

7

Carattere calcolatrice / FreePascal

Potrei avere problemi a pubblicare questo, ma lo farò comunque :-)

  1. Calcola 7734/100000. Cambia lo zero iniziale in blu e le altre cifre nel carattere della calcolatrice. Capovolgilo. La O blu rappresenta il mondo:

inserisci qui la descrizione dell'immagine

Se è troppo pigro, che ne dici di questo:

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.

inserisci qui la descrizione dell'immagine

cerchi numerati 0-5, colore determinato dagli addominali (2n-1). Una cifra esadecimale per cerchio, quadranti colorati dal bit più significativo verso il basso, in senso orario dal basso a destra. Dalle costanti mistiche 967EEF e EDF7E9 esadecimale.

Un ringraziamento speciale al seguente primitivo ea Borland per averlo inserito in TurboPascal in modo che FreePascal potesse clonarlo.

settore procedura (x: SmallInt; y: SmallInt; StAngle: Word; EndAngle: Word; XRadius: Word; YRadius: Word); Il settore disegna e riempie un settore di un'ellisse con centro (X, Y) e raggi XRadius e YRadius, iniziando dall'angolo Start e finendo all'angolo Stop.


Non ho mai pensato a questo metodo prima d'ora, buon pensiero fuori dagli schemi!
kyle k,

3

Ruby & Python

Usando la matematica di base 36, arriviamo abbastanza facilmente a una rappresentazione intera in Ruby & Python:


Rubino

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

risultato:

[29234652, 54903217]

o, espresso come una funzione generale:

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

esempio:

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

Pitone

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

esempio:

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

3

Alcuni PHP accuratamente realizzati:

$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);

Questa è una buona risposta, è il tipo di risposta che stavo cercando.
Kyle k,

1

Schema 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)))

Uscite # x68656c6c6f20776f726c64 (in decimale):

126207244316550804821666916

La mia implementazione originale era:

Racchetta (dialetto dello schema)

(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
);

Cosa sta succedendo?

Prendiamo questa stringa e applichiamo un po ' stringTheory()(in realtà è una trasmissione dal 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'

Per prima cosa lo dividiamo alla sua punteggiatura per formare parole. Quindi creiamo un insieme di numeri convertendo i caratteri nel loro codice ASCII decimale. Le lettere congiunte diventano numeri contigui (ad esempio aadiventa 9797).

I numeri vengono quindi sommati. Ciò che otteniamo è 191212222216169un numero assolutamente inutile, non ha alcun significato, proprio come i quadrilioni di rocce che galleggiano pigramente nello spazio. Cosa rende speciale questo mondo? Perché è la vita. Quindi, dando a questo numero il significato della vita, +=42 allora otteniamo 191212222216211;

Ma perché?

Cosa significa questo? Perché significa stringTheory("Hello world")ovviamente.


1

Pitone

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

Rubino

Qualsiasi stringa è mappata su un numero intero.

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

La funzione 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

Esempi:

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

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

0

C #

Un metodo per convertire qualsiasi stringa (ciao mondo o qualcos'altro) in stringa esadecimale

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

Un metodo per convertire una stringa esadecimale in stringa

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;
}

Ecco il programma completo C #

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");
        }
    }
}

Ed ecco l'output.

inserisci qui la descrizione dell'immagine


0

Pitone

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]))

Decompone ricorsivamente il numero target in somme al massimo di quattro quadrati. Il mio caso di base è <100. Ho usato http://www.alpertron.com.ar/FSQUARES.HTM per calcolare le decomposizioni.

(Forse un caso base di <= 1 sarebbe stato interessante ...)


0

Pitone

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'))

Il risultato è davvero un numero, lo giuro!


0

Solo un po 'di divertimento in C con i numeri, niente di speciale.

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);
}

dimostrazione


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.