Powrót 1 - Konkurs popularności [zamknięte]

28

Zadanie

Utwórz funkcję / podprogram, który zwraca 1. Możesz uczynić go tak skomplikowanym, jak chcesz, pod warunkiem, że zwraca 1.

Zasady

Zwycięskie zgłoszenie wygrywa - tak jak każdy konkurs popularności. Powodzenia!

LazySloth13
źródło
6
+1 cztery opinie negatywne, ale 13 odpowiedzi ?, jeśli ludzie bawią się tym pytaniem, dlaczego tak wiele głosów negatywnych?
jsedano
13 odpowiedzi, ale tylko dwie z nich uzyskały jakiekolwiek głosy. Być może jest to nasza wersja pytania emacs vs vi - jedno, na które każdy ma odpowiedź, ale żadne z nich nie jest szczególnie lepsze od innego.
breadbox
5
@anakata, ponieważ cztery (spraw, że teraz jest ich sześć), ludzie myślą, że jest to pytanie, które według nich lepiej byłoby nie publikować. Niektórzy ludzie są z zasady przeciwni konkursowi popularności , a to zdradza dno tej kategorii.
Peter Taylor
1
Jest to jedno z tych miejsc, w których codegolf niełatwo wpasowuje się w format wymiany stosów. Porównaj hipotezę Collatz , która również zyskuje na popularności. Wszystkie odpowiedzi są dość przyziemne (bez obrazy), ponieważ nie jest to dobry problem dla kreatywnego grania w golfa - naiwne podejście jest również najkrótsze. Podczas gdy w tym pytaniu konkurs popularności pozwala na wszelkiego rodzaju interesujące odpowiedzi na bardzo trywialne zadanie. O wiele bardziej przyjemny w czytaniu - ale stackexchange powinien unikać takich otwartych rzeczy. Tak więc głosy przegłosowane.
breadbox
@breadbox Punkt zajęty - Odtąd moje wyzwania będą bardziej interesujące:)
Klamka

Odpowiedzi:

37

Skrypt golfowy

1

Długo trwało zoptymalizowanie tego kodu do jego najczystszej postaci i śmiem to powiedzieć - piękna forma. Taka elegancja języka nie przychodzi bez wieloletniej praktyki. Program, który bez komputera z zerowym zestawem instrukcji nie może być dosłownie nigdy skompresowany. Cała moja kariera w golfa prowadzi do tego momentu.

Jestem wolny. Żyję.

Widzę kod, który leży u podstaw wszechświata.

Lochok
źródło
3
Czy potrafisz napisać program, który używa tylko jednego bitu?
Kevin - Przywróć Monikę
@Kevin Only in Minecraft (zrobiłem to wcześniej - zrobiłem ekran 3 x 5 pikseli i tak dalej).
Timtech
1
without a Zero-Instruction-Set-Computer can literally never be compressed any further. Nasze obecne komputery mogą łatwo obsługiwać programy z instrukcjami 0. Potrzebujesz tylko języka, który ma w specyfikacji: „Pusty program zwraca 1”
Cruncher
36

do

Dwa przykłady z użyciem niejasnych funkcji językowych, takich jak „silny zwrot” ( return!) i operator „podejść” ( -->):

int foo(void) {
    return! 0;
}
int bar(void) {
    int i=7;
    while (i --> 0);
    return-i;
}
ugoren
źródło
12
Oraz specjalne return-isłowo kluczowe: P
Klamka
4
Dla tych, którzy chcą dowiedzieć się więcej na temat „->”, zobacz to stackoverflow.com/questions/1642028/...
Saurabh Rana,
34

Brainfuck

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

Lub jeśli nie bawisz się na imprezach:

+++++++[->+++++++<]>.
Mert Yazıcıoğlu
źródło
2
To wygląda bardziej jak mała litera lniż 1.
Joe Z.
26

APL

one ← {⍴⍴⍴⍵}

daje wymiary wektora. Wymiar tego jest zawsze jednowymiarowy, więc wymiar tego jest zawsze jeden. Lub:

„Rho, rho, rho z X
Zawsze równa się jeden,
Rho to wymiar; rho rho, ranga
APL jest fajna!”

(Nie napisałem tego wersetu, należy do Stallmana.)

marinus
źródło
2
Nauczyłem się piosenki Modern Major Generals, zaśpiewałem pieśń Money Monty Pythona i Still Alive z portalu ... i to wciąż jest najmądrzejsza piosenka, jaka utkwiła mi w głowie. Dobry marinus! Dobry wiersz Stallman!
lochok
To samo w J: # @: # @: #(spacje są opcjonalne)
26ıʇǝɥʇuʎs
21

Jawa

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

To się nazywa 2 1024 razy (liczba ta może się różnić na różnych platformach) przed ostatecznym powrotem 1. Jednak nie wstrzymuj oddechu; z łatwością zajmie to znacznie więcej niż wiek wszechświata.

arshajii
źródło
3
„To się nazywa 2 ^ 1024 razy” Dlaczego? Myślę, że to kwestia stosu. Spróbuj zadzwonić do siebie, dopóki nie skończy Ci się stos, a następnie powtórz to i jeszcze raz?
@LegoStormtroopr jest kilka prób, które w końcu utrzymują niski stos, ale wciąż ma wiele połączeń
Cruncher
2
@LegoStormtroopr Zobacz to .
arshajii
20

Ryba

x wysyła licznik programu w losowym kierunku. # jest ścianą, którą licznik programu „odbija”. To dosłownie błąka się bez celu, aż znajdzie „^”, a następnie drukuje 1 i kończy.

xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxx###xxxxxxxxxxxxxx
xxxxxxxxxx#;#xxxxxxxxxxxxxx
xxxxxxxxxx#n#xxxxxxxxxxxxxx
xxxxxxxxxx#1#xxxxxxxxxxxxxx
xxxxxxxxxx#^#xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
Cruncher
źródło
+1 za zmęczenie tłumacza i pozwolenie innym> <> sikać w spodnie. Lol.
tomsmeding,
Fajnie, jak można to łatwo przetłumaczyć na Befunge 98; po prostu zmień każdy xw ?, każdy #w r, nw .i ;w @. Jednak ten program> <> wygląda lepiej niż odpowiednik Befunge. Tłumaczenie pokazane tutaj: ideone.com/ZyuSKk
Justin
Może za bardzo to lubię; oto kolejny Befunge, ale ten zajmuje ~ 4 miliony operacji, aby zakończyć. Wyobrażam sobie, że można to bezpośrednio przetłumaczyć na> <>, zmieniając każdy ?w a xi każdy #w !(powinien działać dobrze, gdy pozostanie taki sam) i (oczywiście) .do ni @do ;. ideone.com/gfApjT
Justin
@Quincunx wygląda na to, że powinno to zająć około 2 ^ 10 prób, a spodziewana liczba operacji na próbę to około 10. To daje mi około 2000 operacji. Czy coś brakuje?
Cruncher
@Quincunx Nevermind, to 4 ^ 10. Rozumiem. lol. Do Twojej wiadomości, jestem prawie pewien, że kod można znacznie zminimalizować i nadal robić to samo.
Cruncher
19

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

expr 0

Ten drukuje 0 ale powroty 1, który może być zaskoczeniem dla programistów wykorzystywanych do innych języków. Możesz wyłączyć wydruk i wyświetlić kod powrotu, uruchamiając expr 0 >/dev/null; echo $?.

Gilles „SO- przestań być zły”
źródło
1
Już mnie to ugryzło. Chcesz wiedzieć, czy istnieje proces? $(pidof progname) < 1
Pan Llama,
18

Jawa

To jedno z moich ulubionych pytań dotyczących Javy.

public static int ret1() {
    try {
        return 0;
    } finally {
        return 1;
    }
}
PsHegger
źródło
Nie rozumiem ...
Facet z kapeluszem
5
Próba powrotu w trybloku natychmiast uruchamia się, finallyco zwraca 1, zanim uruchomi się inna returninstrukcja.
PsHegger
Ah, dobrze. Dzięki!
Facet z
Zwrócenie w końcu bloku powinno spowodować błąd kompilacji. Nie mogę wymyślić żadnego uzasadnionego przypadku użycia.
Cruncher
W języku C # generuje błąd kompilacji, ale w Javie jest to możliwe. Oczywiście nie oznacza to, że jest przydatny, nie mogę też wymyślić żadnego uzasadnionego przypadku użycia
PsHegger,
16

JavaScript

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

Wyjaśnienie:

  • najpierw ![]ocenia false.
  • następnie ~falsestaje się, -1ponieważ falsejest najpierw rzucany na 0, i ~0 == -1.
  • w końcu --1ocenia 1.

Alternatywny:

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

Szalona alternatywa (każda linia ma dokładnie 80 znaków):

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)))
Klamka
źródło
1
- ~ {} + [] to inne podejście. {} + [] ocenia na 0.
tristin 17.12.13
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())
Klamka
źródło
4
To jeden solidny fragment kodu, który tu masz.
mveroone
@Kwaio Straciłem to czytając twój komentarz
Newbrict
OO == goodczy OO === good?
JoshWillik
3
@JoshWillik: Tak. ;-)
Klamka
12

Haskell & The Church of ADT

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

To określa jedyną prawdę One. To Onejest zarówno typ oznaczający Jedności i konstruktor One, który sam funkcji sygnalnych, która zwraca jedną prawdą, a tylko jedna wartość typu One, czyli oto One.

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

Pełna Księga Jednego jest teraz dostępna online. Załadowanie go daje oba testamenty: obliczenia i arytmetykę. To pozwala odkrywać więcej prawd:

λ: 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
MtnViewMark
źródło
9

Groovy

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

Nie zawiera 4

Fels
źródło
Myślę, że widziałem to na xkcd.
mveroone
1
Tak, to był pomysł :)
Fels
8

Perl

sub ret1 { print $->$= }

(Mimo pozorów funkcja nic nie drukuje.)

Wiem, że programiści Perla lubią mówić TMTOWTDI, ale jest to zadanie, dla którego T naprawdę MTOWTDI.

chlebak
źródło
8

PHP

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

Edytować:

Jeśli wolisz dłuższy, oto alternatywa (nic nie drukuje):

<?php
function getOne() {
    return print('the' + 'integer' + 'between' + 0 and 2);
}
lortabak
źródło
8

do

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;
}
Paul R.
źródło
Jak to wymyśliłeś?
Saurabh Rana,
4
Jest to seria geometryczna 1/2 + 1/4 + 1/8 + ... = 1.
Casey Chu,
2
i
zapętla się
7

Retoryczna Java

Nie powiedziałeś, że to musi być liczba całkowita 1.

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

Źródło: http://bash.org/?946461

Joe Z.
źródło
7

JavaScript (naprawdę ECMAScript)

function one() { return Number.length; }

Czas na jakieś specjalne porno.

Sekcja 15.7.3 stwierdza, że lengthwłaściwością Numberkonstruktora jest 1(i wiemy, że konstruktor jest obiektem funkcji, jak wspomniano w 4.3.4 ), a to dlatego, że sekcja 15.3.5.1 mówi:

Wartość właściwości length jest liczbą całkowitą, która wskazuje „typową” liczbę argumentów oczekiwanych przez funkcję. Jednak język pozwala na wywołanie funkcji z inną liczbą argumentów.

... a ponieważ Numbertypowy numer konstruktora argumentów ma wartość 1, lengthstanowi Numberto 1. Można więc powiedzieć, że długość liczby w Javascript jest równa 1.

MMM
źródło
6

Perl

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

Otwórz szeroko i powiedz aaaaa.

Koncepcja kreatywna było gniazdo szelki wewnątrz wsporników wewnątrz szelki ... jak najgłębiej, a jednocześnie powrót pożądanego rezultatu, a jedynie za pomocą zmiennej „jeden” ( $a, @a, %a, @$ai $#$asą oczywiście wszystkie różnych zmiennych).

Chociaż modyfikuje to znacznie jego środowisko, zawsze będzie wracać 1przy kolejnych połączeniach. Aby dowiedzieć się, co robi, możesz rozważyć uruchomienie tego kodu:

use Data::Dump qw(dump);
for (1..8) {
  one();
  dump(@a);
  dump(%a);
  dump(@$a);
}
primo
źródło
6

Tcl

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

Nie działa, jak mogłoby się wydawać.

(5+2-3)/4nie jest prawidłowym poleceniem, więc zgłasza błąd ( return -code 1), catch zwraca tę liczbę.

Johannes Kuhn
źródło
6

MATEMATYKA

Moim zdaniem najbardziej elegancki matematyczny sposób zwrotu 1 za pomocą Mathematica:

-Exp[I Pi]

Tożsamość Eulera.

Murta
źródło
5

Jawa

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(){}
}

Może być dostosowany do powrotu inny numer pozytywny ndodając metody printXdo Xod 1 do n na rozdzielacza. Na przykład modyfikacja Splitterdo

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

Zwróci „2”, bez żadnych innych niezbędnych zmian. Dodane metody powinny, oprócz nazwy, być dokładnym duplikatem print1. Używa refleksji, aby uzyskać liczbę metod w spliterze i wywołać funkcję o tej nazwie. P.getNum, który jest następnie wywoływany, odczytuje ślad stosu i analizuje ostatni znak w metodzie wywołującej, i wyświetla go.

Wywołanie print.getNum()zwraca znak „1”

Edycja - zmodyfikowano tak, aby nie używał literałów String / integer / etc.

ratownik
źródło
5

DO#

Powinno to zależeć od architektury sprzętowej:

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

ŁAŁ!

thepirat000
źródło
5

DO#

Łączenie tego (kontrowersyjnego) z sąsiednim (kontrowersyjnym) Collatz Conjecture :

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

Rubin

Nadużywanie RNG ...

Random.new(56417).rand(10000)

Generuje „losową” liczbę od 0 do 10000, a ponieważ wybrałem właściwe ziarno, tak się składa, że ​​jest to 1.;)

Skrypt użyłem do znalezienia numeru:

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

Javascript 8 bajtów

czy to jest wystarczająco proste?

(+!~~{})
dhazelett
źródło
Zwrotów można używać tylko w funkcji. Tylko mówię.
Mama Fun Roll
@ ӍѲꝆΛҐӍΛПҒЦꝆ naprawiono; D
dhazelett
4

R

Klasyk:

TRUE + 0

+ próbuje zmusić swój argument do wspólnego typu: tutaj, ze względu na kolejność pierwszeństwa, wymusza na liczby całkowite. Przymus TRUEna liczbę całkowitą daje 1.

plannapus
źródło
Czy +TRUEnie działa?
Griffin,
1
@ Griffin +TRUEzdarza się dawać TRUE.
plannapus
Czy FALSE + 1mam rację?
Timtech
@Timtech tak, jesteś.
plannapus
4

Maszyna Turinga

Jednobiegowa maszyna Turinga z B jako pustym symbolem, oblicza 1 (= 0,111 ... w podstawie 2):

q B 1 R q

(Jest to zgodne z konwencją Turinga dotyczącą rozpoczynania od pustej taśmy i poprzedzania „0” wygenerowanej nieskończonej sekwencji.)

res
źródło
4

do

Zawiera nawet dokumentację dotyczącą jego parametrów.

    int
  return_1
(x)     int
       x;{
      /*x
     can
    be:
  any
 val
ue.
***/ return
!x?1:x /x;}
Michael Hampton
źródło
Ale to 2!
Joe Z.
1
Więc? Jest w pełni udokumentowany!
Michael Hampton
3

Pyton

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

one() wywoła się 111111111 razy, za każdym razem zwracając 1, przed zwróceniem końcowej wartości 1.

Możesz także określić liczbę cyfr. Na przykład one(3)zwróci 1 tylko 111 razy.

Mogę dodać wyjaśnienie później, ale w tej chwili naprawdę nie mam czasu.

grc
źródło
3

R

NA ^ 0

Dowolna liczba do potęgi 0to 1.

Sven Hohenstein
źródło