Повернення 1 - Конкурс популярності [закритий]


28

Завдання

Створіть функцію / підпрограму, яка повертається 1. Ви можете зробити її настільки складною, як вам завгодно, доки вона повертається 1.

Правила

Запис з найбільшою нагодою виграє - як і будь-який конкурс на популярність. Удачі!


6
+1 чотири голоси, але 13 відповідей ?, якщо люди цікавляться цим питанням, чому так багато голосів?
jsedano

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

5
@anakata, тому що чотири (зробіть це шість зараз) люди думають, що це питання, яке вони думають, було б краще не розміщувати. Деякі люди в принципі проти популярності-конкуренції , і це вискоблює дно цієї категорії.
Пітер Тейлор

1
Це одне з тих місць, де кодегольф неприємно вписується у формат stackexchange. Порівняйте Конлакту Коллаца , яка також зараз в тренді. Усі відповіді є досить приземленими (без образи), адже це не є гарною проблемою для творчого гольфу - наївний підхід також найкоротший. Тоді як у цьому питанні конкурс на популярність дозволяє отримати всілякі цікаві відповіді на дуже тривіальне завдання. Набагато приємніше читати - але stackexchange повинен уникати відкритих матеріалів, як це. Таким чином, голоси.
хлібниця

@breadbox Прийнято крапку - я зроблю свої виклики цікавішими від тепер:)
Doorknob

Відповіді:


37

Сценарій для гольфу

1

Минуло багато часу, щоб оптимізувати цей код до його найчистішого, і, смію сказати, - прекрасного вигляду. Така витонченість мови не обходиться без років відданої практики. Програму, яка без Zero-Instruction-Set-Computer не може бути буквально ніколи не стискатися. Уся моя кар'єра з гольф-кодом веде до цього моменту.

Я вільний. Я живий.

Я бачу код, який лежить в основі Всесвіту.


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

@Kevin Тільки в Minecraft (я це робив раніше - зробив екран 3x5 px і все).
Тімтех

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
Doorknob

4
Для тих, хто хоче дізнатися більше на темі
Саурабх Рана

34

Брейнфук

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

Або якщо вам не весело на вечірках:

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

2
Це більше схоже на малі регістри, lніж на 1.
Джо З.

26

APL

one ← {⍴⍴⍴⍵}

дає розміри вектора. Вимір цього завжди є одновимірним, тому розмірність цього завжди є одним. Або:

"Rho, rho, rho з X
Завжди дорівнює одиниці,
Rho - це розмірність; rho rho, rank
APL - це весело!"

(Я не писав цього вірша, це Сталман.)


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

Те ж саме в J: # @: # @: #(Пробіли необов’язкові)
ɐɔıʇǝɥʇuʎs

21

Java

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

Риба

x посилає лічильник програми у випадковому напрямку. # - стіна, яку лічильник програм "відскакує". Це буквально блукає безцільно, поки не знайде «^», а потім надрукує 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 як за стомлення перекладача, так і за те, щоб інші> <> мочилися в штани. Лол.
tomsmeding

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

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

@Quincunx виглядає так, що це повинно зайняти приблизно 2 ^ 10 спроб, очікувана кількість операцій за спробу - приблизно 10. Це дає мені близько 2000 операцій. Я щось пропускаю?
Cruncher

@Quincunx Nevermind, це 4 ^ 10. Зрозумів. Лол. FYI, я майже впевнений, що код можна значно скоротити і все одно робити те саме.
Cruncher

19

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

expr 0

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


1
Мене це кусало раніше. Ви хочете знати, чи існує процес? $(pidof progname) < 1
Містер Лама

18

Java

Це одне з моїх улюблених специфічних питань для Java.

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

Я не розумію ...
Хлопець із Шапкою

5
Намагаючись повернутися в tryблок, миттєво спрацьовує, finallyякий повертає 1, перш ніж інший returnоператор може працювати.
PsHegger

Ага, гаразд. Спасибі!
Хлопець із Шапкою

Повернення в остаточному блоці має призвести до помилки компіляції. Я не можу придумати жодного законного випадку використання для цього.
Cruncher

У C # він кидає помилку компіляції, але в Java це можливо. Звичайно, це не означає, що це корисно, і я не можу придумати будь-який законний випадок використання
PsHegger

16

JavaScript

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

Пояснення:

  • Перший ![]оцінює до false.
  • потім ~falseстає -1тому false, що спочатку кидається на 0, і ~0 == -1.
  • нарешті, --1оцінює до 1.

Чергуйте:

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 Я втратив його, читаючи ваш коментар
Новітня

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


7

Риторична Java

Ви не сказали, що це повинно бути цілим числом 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, то lengthз 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

МАТЕМАТИКА

На мою думку, найелегантніший математичний спосіб повернути 1 за допомогою Mathematica:

-Exp[I Pi]

Ідентичність Ейлера.


5

Java

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. Використовує відображення для отримання кількості методів у спліттері та викликає функцію з цим ім'ям. 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

Рубін

Зловживання RNG ...

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

R

Класичний:

TRUE + 0

+ намагається примусити свій аргумент до загального типу: тут, через порядок пріоритетності, він примушує до цілих чисел. Примус TRUEдо цілого числа дає 1.


Буде +TRUEне працює?
Гриффін

1
@Griffin +TRUEтрапляється давати TRUE.
планнапус

Також FALSE + 1я прав?
Тімтех

@Timtech так, ти є.
планнапус

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.