Napisz funkcję matematyczną, której wynikiem jest „witaj świecie” [zamknięte]

9

Napisz funkcję matematyczną, która spowoduje całkowitą reprezentację „hello world”

Na przykład „witaj świecie” w kodzie szesnastkowym jest 68656c6c6f20776f726c64więc celem będzie napisanie programu matematycznego, którego wynikiem będzie liczba reprezentująca „witaj świecie”.

Oto przykład możliwego rozwiązania wykorzystującego Python:

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

Można użyć dowolnego rodzaju równań matematycznych, takich jak: potęgi, szeregi, silnia i inne operacje matematyczne.

Zasady:

  • Możesz wybrać własny sposób kodowania / reprezentowania „hello world” jako liczby całkowitej. Funkcje skrótu są również dozwolone

  • Biblioteki matematyczne (np. Numpy, GMP) są dozwolone.

  • Celem jest skupienie się na części matematycznej

Kyle K.
źródło
1
Kreatywność nie jest obiektywna. Czy myślisz o konkursie popularności ?
Kendall Frey
4
Każda liczba całkowita może reprezentować „witaj świecie”, jeśli możesz zdecydować o kodowaniu. np. -1 = „cześć worlc”, 0 = „cześć świat”, 1 = „cześć worle” itp.
Kendall Frey
1
@kylek Ponieważ nie określiłeś dokładnych kryteriów wygranej poza „najbardziej kreatywnymi / pomysłowymi”, mogłem dodać konkurs popularności jako kryterium wygranej.
Victor Stafusa
2
(w kontekście tej witryny) wszystkie dane i programy komputerowe mogą być w prosty sposób reprezentowane jako liczby - ponieważ jest to model, którego używali wynalazcy (Babbage i in.). Dopuszczenie dowolnego kodowania naprawdę sprawia, że ​​jest to konkurs, który może napisać najbardziej kreatywny program, który daje liczbę. Istnieje implikacja, że ​​kod źródłowy powinien używać „operacji matematycznych”, ale wszystko, co robi program, można modelować jako operację matematyczną. Zasugeruj, że potrzebujesz kodowania ASCII, a następnie weź
user2460798
1
Grasz terminologią matematyczną bardzo szybko i luźno. Pozornie zamiennie używasz „równania” i „funkcji”. Myślę, że słowo, którego szukałeś, to „wyrażenie”. Ale nawet wtedy pytanie nie jest dobrze postawione. Matematyczne kodowanie „hello world”, który wybrałem dla mojego, to oryginalny kod źródłowy K&R hello world. Och, hej, to działa!
Tim Seguine

Odpowiedzi:

14

Python 2.7

Pewne nadużycie generatora liczb losowych działa w Pythonie 2.7, ale nie w Pythonie 3.x, ponieważ wydaje się, że generator zmienił algorytm inicjujący;

>>> 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
Joachim Isaksson
źródło
To rozśmieszyło mnie głośno przy biurku. Ludzie się na mnie gapią: - /
jmiserez
25

Zrobię coś lepszego niż tylko wydrukowanie, wydrukuję go nieskończenie wiele razy!

Liczba wymierna

1767707668033969 / 3656158440062975

zwraca następujące rozszerzenie base-36:

0.helloworldhelloworldhelloworldhelloworldhelloworld...

Wypróbuj to! (Wolfram Alpha)

Lub, jeśli chcesz uzyskać bardziej podprogową wiadomość, spróbuj:

2399843759207982499621172523113947162810942763812298565948669
/ 1357602166130257152481187563160405662935023615

Który zwraca (ponownie w bazie 36):

helloworld.helpimtrappedinanumberfactoryhelpimtrappedinanumberfactoryhelpimtrappedinanumberfactory...

Jeśli twój program działał tylko z liczbami całkowitymi, nigdy nie zobaczysz części ułamkowej.

Joe Z.
źródło
12

Python (jeszcze nie ukończony ... jeszcze!) Zakończony! :RE

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)

Wyjścia 126207244316550804821666916(równoważne z twoim przykładem 0x68656c6c6f20776f726c64)

Klamka
źródło
Dobrze rozumiesz, o co proszę.
kyle k
1
Lamy nie są smaczne ” haha ​​+1
assylias
2
To powinno wygrać.
tomsmeding
8

Możesz wybrać własny sposób kodowania / reprezentowania „hello world” jako liczby całkowitej.

No więc...

PHP

<?=1?>

gdzie 1 oznacza „witaj świecie”, ponieważ tak powiedziałem.

Żółw
źródło
14
10w bazie - „witaj świecie”
Emil Vikström
7

Kalkulator Czcionki / FreePascal

Mogę mieć kłopoty z opublikowaniem tego, ale i tak to zrobię :-)

  1. Oblicz 7734/100000. Zmień początkowe zero na niebieskie, a pozostałe cyfry na czcionkę kalkulatora. Odwróć to do góry nogami. Niebieskie O reprezentuje świat:

wprowadź opis zdjęcia tutaj

Jeśli to jest zbyt leniwe, co powiesz na to:

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.

wprowadź opis zdjęcia tutaj

kółka ponumerowane 0-5, kolor określony abs (2n-1). Jedna cyfra szesnastkowa na koło, kwadraty zabarwione od najbardziej znaczącego bitu w dół, zgodnie z ruchem wskazówek zegara od dołu po prawej. Według stałych mistycznych 967EEF i EDF7E9 hex.

Specjalne podziękowania dla następującego prymitywu i dla Borlanda za umieszczenie go w TurboPascal, aby FreePascal mógł go sklonować.

Procedura Sektor (x: SmallInt; y: SmallInt; StAngle: Word; EndAngle: Word; XRadius: Word; YRadius: Word); Sektor rysuje i wypełnia sektor elipsy środkiem (X, Y) i promieniami XRadius i YRadius, zaczynając od kąta Początek, a kończąc na kącie Stop.

Level River St
źródło
Nie myślałem o tej metodzie wcześniej, dobre myślenie po wyjęciu z pudełka!
kyle k
3

Ruby i Python

Używając matematyki base 36, dość łatwo osiągamy reprezentację liczb całkowitych w Ruby & Python:


Rubin

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

wynik:

[29234652, 54903217]

lub, wyrażone jako funkcja ogólna:

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

przykład:

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

Pyton

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

przykład:

>>> f("hello world")
[29234652, 54903217]
Darren Stone
źródło
3

Niektóre starannie wykonane PHP:

$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);
nitro2k01
źródło
To dobra odpowiedź, to był rodzaj odpowiedzi, której szukałem.
kyle k
1

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

Wyjścia # x68656c6c6f20776f726c64 (w systemie dziesiętnym):

126207244316550804821666916

Moja oryginalna implementacja to:

Rakieta (dialekt schematu)

(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)))
Sylwester
źródło
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
);

Co się dzieje?

Bierzemy ten ciąg i stosujemy trochę stringTheory()(to właściwie transmisja z przyszłości):

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

Najpierw podzieliliśmy go na znak interpunkcyjny, tworząc słowa. Następnie tworzymy zestaw liczb, konwertując znaki na ich dziesiętny kod ASCII. Przylegające litery stają się przyległymi cyframi (np. aaStaje się9797 . ).

Liczby są następnie sumowane. To, co otrzymujemy, jest 191212222216169całkowicie bezużyteczną liczbą, nie ma znaczenia, podobnie jak kwadryliony skał, które bezczynnie unoszą się w przestrzeni. Co czyni ten świat wyjątkowym? Dlaczego to jest życie. Więc nadając tej liczbie sens życia +=42 , otrzymujemy191212222216211 ;

Ale dlaczego?

Co to znaczy? Dlaczego to stringTheory("Hello world")oczywiście znaczy .

George Reith
źródło
1

Pyton

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
KSFT
źródło
0

Rubin

Każdy ciąg jest mapowany na liczbę całkowitą.

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

Funkcja odwrotna:

# 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

Przykłady:

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

str_to_int("hello world")
=> 123720932638399026476644
int_to_str(123720932638399026476644)
=> "hello world"
Darren Stone
źródło
0

DO#

Metoda konwersji dowolnego ciągu znaków (hello world lub coś innego) na ciąg szesnastkowy

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

Metoda konwersji ciągu szesnastkowego na ciąg znaków

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

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

A oto wynik.

wprowadź opis zdjęcia tutaj

Merin Nakarmi
źródło
0

Pyton

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

Rekurencyjnie rozkłada liczbę docelową na sumy co najwyżej czterech kwadratów. Mój podstawowy przypadek to <100. Użyłem http://www.alpertron.com.ar/FSQUARES.HTM do obliczenia rozkładu.

(Być może podstawowy przypadek <= 1 byłby interesujący ...)

Keith Randall
źródło
0

Pyton

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

Wynik naprawdę jest liczbą, przysięgam!

UKŁUCIE
źródło
0

Tylko trochę zabawy z cyframi, nic specjalnego.

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

próbny

David
źródło
-2
(+ 110145154154157040127157162154144 0)
użytkownik13544
źródło
1
To jest Lisp, rozumiem?
Jwosty