Напишите математическую функцию, результатом которой будет «привет мир» [закрыто]


9

Напишите математическую функцию, которая приводит к целочисленному представлению «hello world»

Например, «hello world» в шестнадцатеричном 68656c6c6f20776f726c64формате, поэтому цель состоит в том, чтобы написать математическую программу, результатом которой будет число, представляющее «hello world».

Вот пример возможного решения с использованием Python:

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

Можно использовать математические уравнения любого типа, такие как: степени, ряды, факториалы и другие математические операции.

Правила:

  • Вы можете выбрать свой собственный способ кодирования / представления "hello world" в виде целого числа. Хеш-функции также разрешены

  • Математические библиотеки (например, numpy, GMP) разрешены.

  • Намерение состоит в том, чтобы сосредоточиться на части математики


1
Творчество не объективно. Вы думаете о конкурсе популярности ?
Кендалл Фрей

4
Любое целое число может представлять «привет мир», если вам разрешено выбирать кодировку. например, -1 = "hello worlc", 0 = "hello world", 1 = "hello worle" и т. д.
Кендалл Фрей

1
@kylek Так как вы не указали точные критерии выигрыша, кроме «самого креативного / изобретательного», я позволил себе добавить конкурс популярности в качестве критерия выигрыша.
Виктор Стафуса

2
(в контексте этого веб-сайта) все компьютерные данные и программы могут быть тривиально представлены в виде чисел - потому что именно эту модель использовали изобретатели (Babbage, et al). Кроме того, разрешение любой кодировки действительно превращает это в борьбу за то, кто может написать самую креативную программу, которая дает число. Существует предположение, что исходный код должен использовать «математические операции», но все, что делает программа, может быть смоделировано как математическая операция. Предположим, вам требуется кодировка ASCII, а затем проведите
user2460798

1
Вы играете очень быстро и свободно со своей математической терминологией. Вы используете «уравнение» и «функция», казалось бы, взаимозаменяемо. Я думаю, что слово, которое вы искали, это «выражение». Но даже тогда вопрос не очень хорошо поставлен. Я выбрал для себя математическую кодировку «hello world» - это исходный исходный код K & R hello world. О, эй, это работает!
Тим Сегин

Ответы:


14

Python 2.7

Некоторое злоупотребление генератором случайных чисел работает на Python 2.7, но не на Python 3.x, так как генератор, похоже, изменил алгоритм заполнения;

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

Это заставило меня громко смеяться за столом. Люди смотрят на меня прямо сейчас: - /
jmiserez

25

Я сделаю лучше, чем просто напечатать это, я буду печатать это бесконечно много раз!

Рациональное число

1767707668033969 / 3656158440062975

возвращает следующее расширение base-36:

0.helloworldhelloworldhelloworldhelloworldhelloworld...

Попробуйте! (Вольфрам Альфа)

Или, если вы хотите более подсознательное сообщение, попробуйте:

2399843759207982499621172523113947162810942763812298565948669
/ 1357602166130257152481187563160405662935023615

Который возвращает (снова в базе 36):

helloworld.helpimtrappedinanumberfactoryhelpimtrappedinanumberfactoryhelpimtrappedinanumberfactory...

Если бы ваша программа работала только с целыми числами, вы бы никогда не увидели дробную часть.


12

Python (не закончен ... пока!) Закончен! : 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)

Выходы 126207244316550804821666916(эквивалент вашего примера 0x68656c6c6f20776f726c64)


Вы хорошо понимаете, о чем я спрашиваю.
Кайл К

1
" Ламы не вкусные " хаха +1
Ассилиас

2
Это должно победить.
Томсминг

8

Вы можете выбрать свой собственный способ кодирования / представления "hello world" в виде целого числа.

Ну тогда...

PHP

<?=1?>

где 1 представляет «привет мир», потому что я так сказал.


14
10в базе - "Привет, мир"
Эмиль Викстрем

7

Калькулятор Шрифт / FreePascal

У меня могут быть проблемы с публикацией этого сообщения, но я все равно это сделаю :-)

  1. Рассчитайте 7734/100000. Измените начальный ноль на синий, а остальные цифры на шрифт калькулятора. Переверните его с ног на голову. Синий О представляет мир:

введите описание изображения здесь

Если это слишком лениво, как насчет этого:

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.

введите описание изображения здесь

круги пронумерованы 0-5, цвет определяется по abs (2n-1). Одна шестнадцатеричная цифра на круг, квадранты окрашены от наиболее значимого бита вниз, по часовой стрелке от нижнего правого. По мистическим константам 967EEF и EDF7E9 hex.

Отдельное спасибо следующему примитиву и Borland за то, что он поместил его в TurboPascal, чтобы FreePascal мог его клонировать.

Сектор процедуры (x: SmallInt; y: SmallInt; StAngle: Word; EndAngle: Word; XRadius: Word; YRadius: Word); Сектор рисует и заполняет сектор эллипса с центром (X, Y) и радиусами XRadius и YRadius, начиная с угла Start и заканчивая углом Stop.


Я не думал об этом методе раньше, Хорошо думать из коробки!
Кайл К

3

Рубин и Питон

Используя математику 36, мы довольно легко получаем целочисленное представление в Ruby & Python:


Рубин

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

результат:

[29234652, 54903217]

или, выраженная как общая функция:

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

пример:

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

питон

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

пример:

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

3

Некоторые тщательно разработанные 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);

Это хороший ответ, это тот ответ, который я искал.
Кайл К

1

Схема 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)))

Выходы # x68656c6c6f20776f726c64 (в формате decemal):

126207244316550804821666916

Моя оригинальная реализация была:

Ракетка (Схема диалекта)

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

Что здесь происходит?

Мы берем эту строку и применяем немного 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'

Сначала мы разбиваем его по пунктуации, чтобы сформировать слова. Затем мы создаем набор чисел путем преобразования символов в их десятичный код ASCII. Прикрепленные буквы становятся присоединенными числами (например, aaстановятся 9797).

Числа затем суммируются. То, что мы получаем, - 191212222216169это совершенно бесполезное число, оно не имеет смысла, как квадриллионы камней, которые лениво плавают в космосе. Что делает этот мир особенным? Почему это жизнь. Итак, придав этому числу смысл жизни, +=42 мы получим 191212222216211;

Но почему?

Что это значит? Почему это означает, stringTheory("Hello world")конечно.


1

питон

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

Рубин

Любая строка отображается в целое число.

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

Обратная функция:

# 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

Примеры:

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

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

0

C #

Метод для преобразования любой строки (привет мир или что-то еще) в шестнадцатеричную строку

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

Метод преобразования шестнадцатеричной строки в строку

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

Здесь идет полная программа 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");
        }
    }
}

И вот выход.

введите описание изображения здесь


0

питон

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

Рекурсивно разлагает целевое число на суммы не более четырех квадратов. Мой базовый случай <100. Я использовал http://www.alpertron.com.ar/FSQUARES.HTM для расчета разложений.

(Может быть, базовый случай <= 1 был бы интересным ...)


0

питон

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

Результатом действительно является число, я клянусь!


0

Просто немного веселья с цифрами, ничего особенного.

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

демонстрация


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.