Pull to refresh

Comments 40

«Конкурс» на лучшую программную реализацию, выводящую число ‘‘сорок два’’

#Python v3.6.4 
print(42)

Я выиграл:
— Выполняет поставленную задачу
— Занимает 2 секунды чтобы написать
— Соответствует всем поставленным условиям (количество: 0)
— Имеет размер всего 9 байтов

<//sarcasm>

Ещё вариант, чтобы не повторяться:


import sys

sys.stdout.write('42')
Хорошее решение, ваш вариант тоже выполняет все заданные условия, хоть их количество и равно 0, но все же все условия выполнены!
echo 42
И кроссплатформенный, и питон не нужен, и короче (всего 7 байтов)
Я победил?)
это даже лучше, т.к. не зависит от версии Python (2 или 3). И даже, если память не изменяет, будет и в 1.6 работать.
UFO just landed and posted this here
А почему вы решили, что только Python?
(Добавил в статью ‘[на любом языке программирования]’.)

Спойлер не предотвращает немедленной загрузки изображений!

Настоящая программа, выводящая 42, должна:
— требовать непомерных ресурсов
— работать ооооооочень долго
— выводить исключительно «голосом» и только в ответ на «Главный вопрос жизни, вселенной и всего такого».
Именно эти требования заданы неявно.
Так что даже приведенный автором вариант не соответствует…
Дугласа Адамса «Автостопом по галактике»

Попахивает электроном. С ресурсами и скоростью там и так все хорошо (в смысле плохо, но хорошо для задачи), а для речи есть Web Spech API.


Как-то так
const question = "What is the meaning of life, the universe and everything?"

const recognition = new webkitSpeechRecognition();
recognition.lang = 'en-US';
recognition.interimResults = false;
recognition.maxAlternatives = 1;

recognition.onresult = (e) => { 
  if (e.results[0][0].transcript === question) {
    printAnswer();
  } 
}

function printAnswer() {
   let x, y = 0;
   for (let i = Number.MAX_SAFE_INTEGER; i >= 4; i--) {
     for (let j = Number.MAX_SAFE_INTEGER; j >= 2; j++) {
          x = i;
          y = j;
     }
   }
   speechSynthesis.speak(new SpeechSynthesisUtterance(`${x}${y}`))
} 

recognition.start();

В хроме сработает, но я бы рекомендовал перед запуском почистить функцию printAnswer

Вывод константы, серьезно?
Читайте и вдохновляйтесь, какими должны быть задачи на code golf:
codegolf.stackexchange.com
Вот только статей с конкурсами и плясками (кодэгольфами) на хабре как раз и не хватает /sarcasm.

Конкурс в кавычках, потому что это никакой не конкурс, я правильно понимаю? Или есть жюри и призы? Автору просто захотелось запостить свой код, возможно весьма крутой (не владею питоном), но это не делает его хоть чуточку полезнее.

Предыдущая статья тоже «ни о чем», впрочем там хоть какой-то смысл был, а здесь? 15 скриншотов это статья?

Жду с нетерпением следущую статью, боюсь даже предположить, о чем (и да /sarcasm).
Конкурс в кавычках, потому что это никакой не конкурс, я правильно понимаю?

Не совсем. Мне и правда интересно, вдруг число ‘сорок два’ таит ещё какие-то загадки, о которых мне неизвестно.


просто захотелось запостить свой код, возможно весьма крутой (не владею питоном)

Почти. Захотелось показать открытие, на которое я наткнулся совершенно случайно и оформил в форме представленного кода на Python.
И чтобы понять код, который я представил, знать Python совсем не обязательно — достаточно просто прочитать комментарии к коду.
Неужели неинтересно, какой хэш-алгоритм выиграл?

Так?
import java.util.OptionalInt;
import java.util.stream.IntStream;

final public class Printer42{
    public static void main(String[] args) {
        OptionalInt iAm42 = IntStream.range(Integer.MIN_VALUE, Integer.MAX_VALUE)
                .parallel()
                .filter(i -> i == 42)
                .findFirst();
        System.out.println(iAm42.orElse(42));
    }
}
Фабрик нет, внедрения зависимостей нет, каррирования нет. Незачёт.
using System;
using System.Linq.Expressions;

namespace Expressions42
{
    class Program
    {
        static void Main(string[] args)
        {
            const string February = "февраль";
            const string April = "апрель";

            var first = Expression.Constant(February.Length);
            var second = Expression.Constant(April.Length);
            var multiply = Expression.Multiply(first, second);
            var compiled = Expression.Lambda<Func<int>>(multiply).Compile();

            Console.WriteLine(compiled());
        }
    }
}
UFO just landed and posted this here
UFO just landed and posted this here
Навсегда запомнил число 42, когда в университете один преподаватель по системным технологиям на зачёте спросил «Что такое 42?». Пришлось читать книгу «Автостопом по галактике».
D lang:

import std.stdio, std.random;

void main()
{
  auto rnd = Random();
  while(uniform!uint(rnd) != 42){}
  "42".writeln;
}
}
.global _start 
_start: 
    mov $1, %rax 
    mov $1, %rdi 
    lea str, %rsi 
    mov $LEN, %rdx 
    syscall 
    mov $60, %rax 
    xor %rdi, %rdi 
    syscall 
str: 
    .ascii "42\n"
LEN = . - str
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls;

type
  TForm1 = class(TForm)
    procedure OnDocComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
    procedure FormActivate(Sender: TObject);
  private
    wb1:twebbrowser;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.OnDocComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var sl1:tstringlist;
    s1:string;
    i1,i2:integer;
begin

sl1:=tstringlist.Create;
sl1.Text:=twebbrowser(sender).OleObject.document.body.innerText;
while (i1<sl1.Count) and (s1='') do begin
 if pos('question about life universe and everything',sl1[i1])>0 then begin
  i2:=1;
  while (i2<length(sl1[i1])) and (s1='') do begin
   try s1:=inttostr(strtoint(sl1[i1][i2]+sl1[i1][i2+1])); except end;
   i2:=i2+1;
  end;
 end;
 i1:=i1+1;
end;

showmessage(s1);

end;

procedure TForm1.FormActivate(Sender: TObject);
begin

wb1:=twebbrowser.Create(self);
wb1.ParentWindow:=self.Handle;
wb1.Width:=0;
wb1.Height:=0;
wb1.OnDocumentComplete:=OnDocComplete;
wb1.Navigate('https://yandex.ru/search/?text=question%20about%20life%20universe%20and%20everything');

end;

end.
Запустил. Пока работает. Жду.

var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.()\";";
var expected = "console.log(\"42\");";
var generated = "";
var found = false;
while (!found) {
  generated = "";
  for (var i = 0; i < expected.length; i++) {
    generated += chars.charAt(Math.floor(Math.random() * chars.length));
  }
  found = generated == expected;
}
eval(generated);
Пять коротких вариантов

#!/usr/bin/env python3

# 1
print(sum(map(int, list(bin(4398046511103)[2:]))))

# 2  без использования 42 и явных мат. операций
print(int(oct(34)[-2:]))

# 3 без использования 4 и 2
print( int(hex(66).split('x')[1]) )
print(6*7)

# 4 без использования 4
print('Ч2')

# 5 без цифр вообще
print('XLII')

UFO just landed and posted this here
Этот код будет работать долго, прежде чем ответить)

let question = "The answer to life, the universe and everything";
def type FixedString <len(question) * size(char)> toString;
let check = False;
Start start{>openaccess(system.memory)<=>_hdrive
>math.calc
>TheBranch{.Set(Check) .Test}
}
Math math.oncalc>{for (FixedString)i in _hdrive:
if (whether i contains("The answer to life, the universe and everything")):
if i == 42: check = True;
}
Branch TheBranch{.ifTrue>text.display("42") .ifFalse>text.display("maybe 42, maybe not")}


# R
print((nchar("Конкурс на лучшую программную реализацию, выводящую число сорок два") - nchar("Главный вопрос жизни, вселенной и всего такого")) * 2)
Реализация с помощью Python\Asciimatics
42

Python3


import math
print("%d%d" % (math.ceil(math.pi), math.trunc(math.e)))
UFO just landed and posted this here
Этот факт навёл меня на мысль/идею о том, что стоит запретить использование числа 42 в документации к своим проектам. А так как просто хардкодить это число — неинтересно, возникла идея устроить такой вот «конкурс».
А Вы в курсе, что есть язык программирования o42a (статья на Хабре и сайт проекта)? Тогда придётся запретить сам язык из-за его имени. Уж коль пошла такая пьянка, приведу решение задачи на этом языке:
Use namespace 'Console'
@Main (
  Print "42" nl
)
О всемирном запрете речь не идёт, разумеется. Я говорил про свои проекты.
Насчёт языка o42a… посмотрел немного.
Не вижу красивых примеров (например, на сайте nemerle.org есть хоть что-то).
Sign up to leave a comment.

Articles