Возвращение 1 - Конкурс популярности [закрыт]


28

Задание

Создайте функцию / подпрограмму, которая возвращает 1. Вы можете сделать ее настолько сложной, насколько захотите, если она возвращает 1.

Правила

Участник с наибольшим количеством побед выигрывает - как и любой конкурс популярности. Удачи!


6
+1 четыре отрицательных голоса, но 13 ответов ?, если людям нравится этот вопрос, почему так много отрицательных голосов?
Jsedano

13 ответов, но только два из них получили какие-либо голоса. Возможно, это наша версия вопроса emacs vs vi, где у каждого есть ответ, но ни один из них не лучше, чем другой.
хлебница

5
@anakata, потому что четверо (теперь уже шесть) считают, что такой вопрос, по их мнению, лучше не публиковать. Некоторые люди принципиально против популярности-конкуренции , и это скребет дно этой категории.
Питер Тейлор

1
Это одно из тех мест, где Codegolf нелегко вписывается в формат стека обмена. Сравните гипотезу Коллатца , которая также сейчас в тренде. Все ответы довольно обыденные (без обид), потому что это не очень хорошая проблема для творческого гольфа - наивный подход также самый короткий. Принимая во внимание, что в этом вопросе конкурс популярности позволяет получить самые разные интересные ответы на очень тривиальные задачи. Гораздо приятнее читать - но предполагается, что stackexchange избегает таких открытых вещей, как эта. Таким образом, отрицательные стороны.
хлебница

@breadbox Принято во внимание - с этого :)
момента

Ответы:


37

Гольф Скрипт

1

Потребовалось много времени, чтобы оптимизировать этот код до самого чистого, и, смею сказать, красивого вида. Такая элегантность языка не обходится без многолетней преданной практики. Программа, которая без Zero-Instruction-Set-Computer буквально никогда больше не будет сжата. Вся моя карьера в гольф-коде ведет к этому моменту

Я свободен. Я жив.

Я вижу код, который лежит в основе вселенной.


3
Можете ли вы написать программу, которая использует только один бит?
Кевин - Восстановить Монику

@Kevin Только в Minecraft (я делал это раньше - сделал экран 3х5 пикселей и все).
Timtech

1
without a Zero-Instruction-Set-Computer can literally never be compressed any further, Наши современные компьютеры могут легко обрабатывать 0 программ инструкций. Все, что вам нужно для языка, который имеет: «Пустая программа возвращает 1» в своей спецификации
Cruncher

36

С

Два примера, использующие неясные функции языка, такие как «сильный возврат» ( return!) и оператор «подходы» ( -->):

int foo(void) {
    return! 0;
}
int bar(void) {
    int i=7;
    while (i --> 0);
    return-i;
}

12
И специальное return-iключевое слово: P
дверная ручка

4
Для тех, кто хочет узнать больше о «->», смотрите этот stackoverflow.com/questions/1642028/…
Saurabh Rana

34

Brainfuck

+++++++
+++++++
    +++
    +++
    +++
    +++
    +++
++++++++++
++++++++++.

Или если вы не веселитесь на вечеринках:

+++++++[->+++++++<]>.

2
Это больше похоже на строчную букву, lчем 1.
Джо З.

26

APL

one ← {⍴⍴⍴⍵}

дает вам размеры вектора. Размерность этого всегда одномерна, поэтому размерность этого всегда одна. Или:

«Ро, Ро, Ро из X
Всегда равно единице,
Ро - это измерение; Ро-Ро, ранг
APL - это весело!»

(Я не писал этот стих, это Столлман.)


2
Я выучил «Песню современных генерал-майоров», спел песню Монти Пайтона «Деньги» и «Все еще жив» с портала ... и это все еще самая занудная песня, которая когда-либо застряла в моей голове. Хорошо найти Маринус! Хороший стих Столлмана!
lochok

То же самое в J: # @: # @: #(пробелы не являются обязательными)
ɐɔıʇǝɥʇuʎs

21

Джава

public static int funWithOne() {
    try {
        try {
            return funWithOne();
        } finally {
            return funWithOne();
        }
    } catch (Throwable _) {
        return 1;
    }
}

Это вызовет себя 2 1024 раза (этот номер может отличаться на разных платформах) перед окончательным возвратом 1. Не задерживайте дыхание, хотя; это легко займет намного больше времени, чем возраст вселенной.


3
«Это будет называть себя 2 ^ 1024 раза». Почему? Я думаю, что это проблема стека. Попробуйте называть себя до тех пор, пока у вас не закончится стек, затем повторите это снова и снова?

@LegoStormtroopr, здесь есть кое-что, что можно попробовать, что удерживает стек на низком уровне, но все еще имеет много вызовов
Cruncher

2
@LegoStormtroopr Посмотри на это .
Аршаджи

20

Рыбы

х отправляет счетчик программы в случайном направлении. # - стена, от которой «отскакивает» счетчик программы. Это будет буквально бесцельно бродить, пока не найдет «^», а затем вывести 1 и закончить.

xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxx###xxxxxxxxxxxxxx
xxxxxxxxxx#;#xxxxxxxxxxxxxx
xxxxxxxxxx#n#xxxxxxxxxxxxxx
xxxxxxxxxx#1#xxxxxxxxxxxxxx
xxxxxxxxxx#^#xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx

+1 за то, что утомил переводчика и позволил другим> <> мочиться в штаны. Смешно.
Томсминг

Приятно, что это легко перевести на Befunge 98; просто измените каждый xв ?, каждый #в r, nв .и ;в @. Однако эта> <> программа выглядит лучше, чем эквивалентная Befunge. Перевод показан здесь: ideone.com/ZyuSKk
Джастин

Может быть, мне это слишком нравится; Вот еще один Befunge, но на это уходит ~ 4 миллиона операций. Я полагаю, что он может быть непосредственно переведен в> <> путем ?преобразования каждого в a xи каждого #в a !(должно работать нормально, если оставить то же самое) и (конечно) .в nи @в ;. ideone.com/gfApjT
Джастин

@Quincunx, похоже, должно занять около 2 ^ 10 попыток с ожидаемым числом операций на попытку около 10. Это дает мне около 2000 операций. Я что-то пропустил?
Cruncher

@Quincunx Неважно, это 4 ^ 10. Понял. смешно. К вашему сведению, я почти уверен, что код можно значительно уменьшить, и при этом делать то же самое.
Cruncher

19

Unix Shell (Bourne, POSIX, bash, ksh, csh,…)

expr 0

Это печатает 0, но возвращает 1, что может удивить программистов, привыкших к другим языкам. Вы можете отключить вывод на печать и увидеть код возврата, запустив expr 0 >/dev/null; echo $?.


1
Я был немного об этом раньше. Вы хотите знать, существует ли процесс? $(pidof progname) < 1
Мистер Лама,

18

Джава

Это один из моих любимых специфичных для Java вопросов.

public static int ret1() {
    try {
        return 0;
    } finally {
        return 1;
    }
}

Я не понимаю ...
Парень со шляпой

5
Попытка возврата в tryблок приводит к немедленному срабатыванию, finallyкоторое возвращает 1, прежде чем returnможет выполняться другой оператор.
PsHegger

Ах хорошо. Благодарность!
Парень со шляпой

Возврат в блоке finally должен вызвать ошибку компиляции. Я не могу придумать ни одного законного варианта использования для этого.
Cruncher

В C # он вызывает ошибку компиляции, но в Java это возможно. Конечно, это не значит, что это полезно, и я не могу придумать ни одного законного
варианта

16

JavaScript

function getOne() {
    return -~![];
}

Объяснение:

  • сначала ![]оценивает false.
  • затем ~falseстановится, -1потому что falseсначала приводится 0, и ~0 == -1.
  • наконец, --1оценивает 1.

Alternate:

return +!([][~~{}])

Сумасшедшая альтернатива (каждая строка ровно 80 символов):

this[693741..toString(36)]('acnuftiao nobcbdaterbaurn +abeba!!be'.replace(/b./g,
function(b){return '{}()'.split('')['aecd'.split('').indexOf(b.charAt(1))]})[''+
'replace'](new RegExp('a'+Array(5).join('(.)'),'g'),(a='$')+'4321'.split([]+[]).
join(a)))

1
- ~ {} + [] это другой подход. {} + [] оценивается в 0.
Тристин

16

JavaScript

// we all know that OOP == good
function OneManager() {
    // constants == good too
    this.values = {
        ERROR: -1, // value on error
        ONE: 1 // desired value
    }
    this.value = this.values.ERROR // set the value to ERROR
    this.setValue = function(num) {
        if (typeof num !== "number") throw new Error('cannot set value to non-number')
        if (!this.value) this.value = this.values.ERROR // oh noes
        else this.value = num
    }
}
// initialize the one
OneManager.prototype.initializeOne = function() {
    this.setValue(this.values.ONE) // set the value to ONE
    return true // return true for success
}
// get the value
OneManager.prototype.getValue = function() {
    if (this.value == this.values.ERROR) { // if the value is ERROR
        throw new Error('value not initialized')
    } else return this.value // return the value
}

function getOne() {
    var m = new OneManager() // make a OneManager
    var success = m.initializeOne() // initialize the value
    if (success) return m.getValue() // return the value
    else  {
        // there was an error in the initialization
        var retVal = m.values.ERROR // we will return an error
        delete m // maybe it's corrupted
        return retVal // return an error
    }
}

alert(getOne())

4
Это один надежный кусок кода, который вы получили здесь.
mveroone

@Kwaio Я потерял его, читая ваш комментарий
Newbrict

OO == goodили OO === good?
JoshWillik

3
@JoshWillik: Да. ;-)
Дверная ручка

12

Haskell & Церковь ADT

data One = One deriving (Eq, Ord, Bounded, Enum, Show, Read)

Это определяет одно истинное One. Это Oneявляется и типом обозначая Единство , и конструктор One, который сам по себе является нульарной функцией , которая возвращает один истинные, и только одно значение типа One, который, вот, One.

Использование в ghciREPL:

λ: One                  -- One returns the one true One
One
λ: One == One           -- One is equal to itself, as no others are 
True
λ: One < One            -- One is no less than itself
False
λ: minBound :: One      -- One is the least One there is, yet it is all you need
One
λ: maxBound :: One      -- One is as big as the universe of One, it is omnipotent
One
λ: [ One .. One ]       -- One is the beginning, and ending, of all that is One
[One]
λ: show One             -- The textual gospel of One
"One"
λ: read "One" :: One    -- To read the word of One, is to become one with One
One

Полная Книга Одного теперь онлайн. При загрузке вы получаете оба завета: вычисление и арифметика. Это позволяет вам исследовать больше истин:

λ: One + One            -- One can only add to its magnificence
One
λ: negate One
*** Exception: One cannot be negated, mortal fool!

λ: One `div` One        -- One is indivisible
One
λ: One `mod` One
*** Exception: Nothing can modulate the power of One

λ: toRational One       -- Ye shall know One as both Numerator and Denominator
1 % 1
λ: toInteger One * 42   -- One multiplies all to wholeness
42
λ: toRational One / 2   -- Even divided, One is on top
1 % 2

9

Groovy

-"""
int getRandomNumber()
{
    return 4;   //chosen by fair dice roll.
                //guaranteed to be random.
}
""".indexOf(4)

Не содержит 4


Я думаю, что я видел это на xkcd.
mveroone

1
Да, это была идея :)
Fels

8

Perl

sub ret1 { print $->$= }

(Несмотря на видимость, функция ничего не печатает.)

Я знаю, что программисты на Perl любят говорить TMTOWTDI, но это задача, для которой T действительно MTOWTDI.


8

PHP

<?php
function getOne() {
  return 0 + "one" == 0;
}

Редактировать:

Если вы предпочитаете более длинный, вот альтернатива (ничего не печатается):

<?php
function getOne() {
    return print('the' + 'integer' + 'between' + 0 and 2);
}

8

С

float one(void)
{
    const int n = 24; // magic number
    float x = 0.5f;
    float y = x;
    int i;

    for (i = 0; i < n; ++i)
    {
        x *= 0.5f;
        y += x;
    }
    return y;
}

Как ты это придумал?
Саурабх Рана

4
Это геометрический ряд 1/2 + 1/4 + 1/8 + ... = 1.
Кейси Чу

2
и он зацикливается 24 раза, потому что у float 24 бита точности
phuclv

7

Риторическая Ява

Вы не сказали, что это должно быть целое число 1.

float one_F(){
    return FloatFactoryFactory.getInstance(FloatFactoryFactory.
    defaultInstanceDescriptionString).getFactory(Locale.getLocale
    ("en-US")).createBuilder().setString("1.0").getResult();
}

Источник: http://bash.org/?946461


7

JavaScript (действительно ECMAScript)

function one() { return Number.length; }

Время для спецификации порно.

В разделе 15.7.3 говорится, что lengthсвойство Numberконструктора равно 1(и мы знаем, что конструктор является функциональным объектом, как упомянуто в 4.3.4 ), и это потому, что в разделе 15.3.5.1 говорится:

Значением свойства length является целое число, которое указывает «типичное» количество аргументов, ожидаемых функцией. Однако язык позволяет вызывать функцию с другим количеством аргументов.

… И поскольку Numberтипичное число аргументов конструктора равно 1, значение lengthof Numberравно 1. Таким образом, можно сказать, что длина числа в Javascript равна 1.


6

Perl

sub one{ $a[@a{@a[%a=map{@$a[@a{$a++=>$a}]+++$#$a+$a=>$a}$a]++}+$a] }

Открой широко и скажи aaaaa.

Креативная концепция заключалась в фигурные скобки гнезда внутри скобок внутри скобок ... так глубоко , как это возможно, в тот же время возвращения желаемого результата, и только с помощью «один» переменного ( $a, @a, %a, @$aи $#$a, конечно , являются всеми различными переменными).

Хотя это значительно изменяет его среду, он всегда будет возвращаться 1при последующих вызовах. Чтобы понять, что он делает, вы можете запустить этот код:

use Data::Dump qw(dump);
for (1..8) {
  one();
  dump(@a);
  dump(%a);
  dump(@$a);
}

6

Tcl

proc return1 {} {
    catch {(5+2-3)/4}
}

Не работает, как вы думаете.

(5+2-3)/4не является допустимой командой, поэтому она выдает ошибку ( return -code 1), catch возвращает это число.


6

MATHEMATICA

На мой взгляд, самый элегантный математический способ вернуть 1 с помощью Mathematica:

-Exp[I Pi]

Идентичность Эйлера.


5

Джава

public class print {
    public static char getNum() throws Exception{
        String method = print.class.getSimpleName()+Splitter.class.getDeclaredMethods().length;
        return (char)Splitter.class.getMethod(method).invoke(null);
    }
}
class Splitter{
    public static char print1(){
        return P.getNum();
    }
}
class P{
    public static char getNum(){
        String s = Thread.currentThread().getStackTrace()[P.class.getDeclaredMethods().length].getMethodName();
        return s.charAt(s.length()-P.class.getSimpleName().length());
    }
    public void doNothing(){}
}

Может быть скорректирована , чтобы вернуться в любое другое положительное число n, добавляя методы printXдля Xот 1 до п в Splitter. Например, модификации Splitterв

class Splitter{
    public static char print1(){
        return P.getNum();
    }
    public static char print2(){
        return P.getNum();
    }
}

Вернет '2', без каких-либо других необходимых изменений. Добавленные методы должны, кроме имени, быть точной копией print1. Использует отражение, чтобы получить количество методов в splitter, и вызвать функцию с этим именем. P.getNum, который затем вызывается, читает трассировку стека и анализирует последний символ в вызывающем методе и отображает его.

Вызов print.getNum()вернет символ '1'

Редактировать - изменено, чтобы не использовать литералы String / integer / etc.


5

C #

Это должно зависеть от аппаратной архитектуры:

return IntPtr.Size / (Environment.Is64BitOperatingSystem ? 8 : 4);

ВОТ ЭТО ДА!


5

C #

Слияние это (спорный) один с соседним (спорной) Коллатцем гипотезой :

public int CollatzOne()
{
    var current = new BigInteger(new Random().Next(1, Int32.MaxValue));
    var history = new[] { new BigInteger(-1), new BigInteger(-1), new BigInteger(-1) };
    do
    {
        history[0] = history[1];
        history[1] = history[2];
        history[2] = current;
        if (current.IsEven)
            current /= 2;
        else
            current = current * 3 + 1;
    } while (current != history[0]);
    return (int)history.Min();
}

5

Рубин

Злоупотребление ГСЧ ...

Random.new(56417).rand(10000)

Генерирует «случайное» число от 0 до 10000, и, поскольку я выбрал правильное начальное число, так и получилось 1.;)

Сценарий, который я использовал, чтобы найти номер:

irb(main):001:0> (1..100000).select{|x|Random.new(x).rand(10000) == 1}
=> [14033, 25845, 35101, 36955, 45334, 56417, 87438, 87460, 99178, 99451]

5

JavaScript 8 байтов

это достаточно просто?

(+!~~{})

Возврат может быть использован только в функции. Просто говорю.
Mama Fun Roll

@ ӍѲꝆΛҐӍΛПҒЦꝆ исправлено; D
dhazelett

4

р

Классика:

TRUE + 0

+ пытается привести свой аргумент к общему типу: здесь, из-за порядка приоритета, он приводит к целым числам. Приведение TRUEк целому числу дает 1.


Не +TRUEбудет работать?
Гриффин

1
@ Гриффин, +TRUEслучается, дает TRUE.
plannapus

Кроме того FALSE + 1, я прав?
Timtech

@ Тимтех да, ты.
plannapus

4

Машина Тьюринга

Машина Тьюринга, состоящая из одного состояния, с символом B в качестве пустого символа, вычисляет 1 (= 0,111 ... в базе 2):

q B 1 R q

(Это следует соглашению Тьюринга, начиная с пустой ленты и добавляя префикс «0» к сгенерированной бесконечной последовательности.)



3

питон

one = lambda zero = 0o11: zero > 1 and all(one(zero-1) for l in '1111111111') and 1 or one and zero or one()

one() будет вызывать себя 111 111 111 раз, каждый раз возвращая 1, прежде чем вернуть окончательное значение 1.

Вы также можете указать количество цифр. Например, one(3)вернет 1 только 111 раз.

Я мог бы добавить объяснение позже, но у меня действительно нет времени в настоящее время.


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