Return 1 - Beliebtheitswettbewerb [geschlossen]

28

Die Aufgabe

Erstellen Sie eine Funktion / Subroutine, die 1 zurückgibt. Sie können sie so ausführlich gestalten, wie Sie möchten, solange sie 1 zurückgibt.

Die Regeln

Der Beitrag mit der höchsten Punktzahl gewinnt - genau wie jeder Beliebtheitswettbewerb. Viel Glück!

LazySloth13
quelle
6
+1 vier downvotes aber 13 Answers ?, wenn die Leute Spaß an dieser Frage haben, warum so viele downvotes?
Jsedano
13 Antworten, aber nur zwei von ihnen haben Stimmen erhalten. Vielleicht ist dies unsere Version der Frage „Emacs vs. Vi“ - eine, auf die jeder eine Antwort hat, von denen jedoch keine besonders besser ist als die andere.
Brotkasten
5
@anakata, weil vier (machen das jetzt sechs) Leute denken, dass dies die Art von Frage ist, von der sie denken, dass sie besser nicht gepostet worden wären. Einige Leute sind aus Prinzip gegen einen Beliebtheitswettbewerb , und das kratzt am Ende dieser Kategorie.
Peter Taylor
1
Dies ist einer der Orte, an denen Codegolf unangenehm in das Stapelaustauschformat passt. Vergleichen Sie die Collatz-Vermutung , die derzeit ebenfalls im Trend liegt. Die Antworten sind alle ziemlich banal (keine Beleidigung), weil es kein gutes Problem für kreatives Golfen ist - der naive Ansatz ist auch der kürzeste. Während in dieser Frage der Beliebtheitswettbewerb allerlei interessante Antworten auf eine sehr triviale Aufgabe ermöglicht. Viel angenehmer zu lesen - aber Stackexchange soll solche offenen Sachen vermeiden. Also die Abstimmungen.
Brotkasten
@breadbox Punkt genommen - Ich werde meine Herausforderungen ab sofort interessanter machen:)
Türklinke

Antworten:

37

Golf-Skript

1

Es hat lange gedauert, diesen Code zu optimieren, und ich wage es zu sagen - schöne Form. Eine solche Eleganz der Sprache kommt nicht ohne jahrelange engagierte Praxis. Das Programm, das ohne einen Zero-Instruction-Set-Computer buchstäblich nie mehr weiter komprimiert werden kann. Meine gesamte Code-Golf-Karriere hat zu diesem Moment geführt.

Ich bin frei. Ich bin am Leben.

Ich sehe den Code, der dem Universum zugrunde liegt.

Lochok
quelle
3
Können Sie ein Programm schreiben, das nur ein einziges Bit verwendet?
Kevin - Reinstate Monica
@ Kevin Nur in Minecraft (ich habe es schon mal gemacht - einen 3x5 px Bildschirm und alles gemacht).
Timtech
1
without a Zero-Instruction-Set-Computer can literally never be compressed any further. Unsere aktuellen Computer können problemlos 0 Anweisungsprogramme verarbeiten. Alles was Sie brauchen eine Sprache, die hat: "Das leere Programm gibt 1" in seiner Spezifikation
Cruncher
36

C

Zwei Beispiele, die obskure Sprachmerkmale wie „starke Rendite“ ( return!) und den Operator „Ansätze“ ( -->) verwenden:

int foo(void) {
    return! 0;
}
int bar(void) {
    int i=7;
    while (i --> 0);
    return-i;
}
ugoren
quelle
12
Und das besondere return-iStichwort: P
Türklinke
4
Für diejenigen, die mehr über '->' erfahren möchten, siehe diese stackoverflow.com/questions/1642028/…
Saurabh Rana
34

Brainfuck

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

Oder wenn Sie auf Partys keinen Spaß haben:

+++++++[->+++++++<]>.
Mert Yazıcıoğlu
quelle
2
Das sieht eher nach Kleinbuchstaben aus lals nach einem 1.
Joe Z.
26

APL

one ← {⍴⍴⍴⍵}

gibt Ihnen die Dimensionen eines Vektors. Die Dimension ist , dass immer eindimensional, so die Dimension , dass immer ein. Oder:

"Rho, rho, rho von X
Immer gleich eins,
Rho ist Dimension; rho rho, Rang
APL macht Spaß!"

(Ich habe diesen Vers nicht geschrieben, es ist Stallmans.)

Marinus
quelle
2
Ich habe das Lied Modern Major Generals gelernt, das Geldlied von Monty Python und Still Alive von Portal gesungen ... und das ist immer noch das nerdigste Lied, das mir jemals in den Kopf gefallen ist . Gute Marinus finden! Ein guter Vers Stallman!
Lochok
Dasselbe in J: # @: # @: #(Leerzeichen sind optional)
ɐɔıɐɔuʇǝɥʇs
21

Java

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

Dies wird sich selbst 2 1024 Mal aufrufen (diese Nummer kann auf verschiedenen Plattformen variieren), bevor Sie endgültig zurückkehren 1. Halten Sie jedoch nicht den Atem an. es wird leicht viel länger dauern als das Alter des Universums.

arshajii
quelle
3
"Das nennt sich 2 ^ 1024 mal" Warum? Ich denke, es ist ein Stapelproblem. Versuchen Sie, sich selbst zu nennen, bis Ihnen der Stapel ausgeht, und wiederholen Sie dies dann immer wieder?
@LegoStormtroopr es gibt einige versuchen endlich Sachen hier, die den Stapel niedrig hält, aber immer noch viele Anrufe hat
Cruncher
2
@LegoStormtroopr Siehe dies .
Arshajii
20

Fisch

x sendet den Programmzähler in zufälliger Richtung. # ist eine Wand, von der der Programmzähler abprallt. Dies wird buchstäblich ziellos herumlaufen, bis es das "^" findet, und dann 1 drucken und beenden.

xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxx###xxxxxxxxxxxxxx
xxxxxxxxxx#;#xxxxxxxxxxxxxx
xxxxxxxxxx#n#xxxxxxxxxxxxxx
xxxxxxxxxx#1#xxxxxxxxxxxxxx
xxxxxxxxxx#^#xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
Cruncher
quelle
+1 für beide, die den Dolmetscher ermüden und andere> <> in die Hose pinkeln lassen. Lol.
Tomsmeding
Es ist schön, wie leicht dies in Befunge 98 übersetzt werden kann. verwandle einfach jedes xin ein ?, jedes #in ein r, nin .und ;in @. Dieses> <> Programm sieht jedoch besser aus als die entsprechende Befunge. Übersetzung hier gezeigt: ideone.com/ZyuSKk
Justin
Vielleicht mag ich das zu sehr. Hier ist noch eine Befunge, aber diese benötigt ~ 4 Millionen Operationen, um fertig zu werden. Ich stelle mir vor, dass es direkt in> <> übersetzt werden kann, indem man jedes ?in ein xund jedes #in ein !(sollte gut funktionieren, wenn es auch gleich bleibt) und (natürlich) .in nund @umwandelt ;. ideone.com/gfApjT
Justin
@Quincunx scheint ungefähr 2 ^ 10 Versuche zu dauern, mit einer erwarteten Anzahl von Operationen pro Versuch bei ungefähr 10. Dies gibt mir ungefähr 2000 Operationen. Vermisse ich etwas?
Cruncher
@ Quincunx Nevermind, es ist 4 ^ 10. Ich habs. lol. Zu Ihrer Information, ich bin mir ziemlich sicher, dass Code stark minimiert werden kann und immer noch das Gleiche tut.
Cruncher
19

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

expr 0

Dieser druckt 0 , aber kehrt 1, die in anderen Sprachen verwendet als eine Überraschung für Programmierer kommen können. Sie können die Druckausgabe ausschalten und den Rückkehrcode anzeigen, indem Sie ausführen expr 0 >/dev/null; echo $?.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Das habe ich schon mal erlebt. Sie möchten wissen, ob ein Prozess existiert? $(pidof progname) < 1
Mr. Llama
18

Java

Dies ist eine meiner bevorzugten Java-spezifischen Fragen.

public static int ret1() {
    try {
        return 0;
    } finally {
        return 1;
    }
}
PsHegger
quelle
Ich verstehe nicht ...
Der Kerl mit dem Hut
5
Der Versuch, in einem tryBlock zurückzukehren, wird sofort ausgelöst finallyund gibt 1 zurück, bevor die andere returnAnweisung ausgeführt werden kann.
PsHegger
Ah, okay. Vielen Dank!
Der Kerl mit dem Hut
Die Rückkehr in einen finally-Block sollte einen Kompilierungsfehler auslösen. Ich kann mir keinen legitimen Anwendungsfall dafür vorstellen.
Cruncher
In C # tritt ein Kompilierungsfehler auf, in Java ist dies jedoch möglich. Natürlich heißt das nicht, dass es nützlich ist, und ich kann mir auch keinen legitimen Anwendungsfall
vorstellen
16

JavaScript

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

Erläuterung:

  • zuerst ![]auswertet zu false.
  • dann ~falsewird -1da falseerst gegossen 0, und ~0 == -1.
  • schließlich --1wertet zu 1.

Wechseln:

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

Verrückte Alternative (jede Zeile ist genau 80 Zeichen lang):

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)))
Türknauf
quelle
1
- ~ {} + [] ist ein anderer Ansatz. {} + []
ergibt
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())
Türknauf
quelle
4
Das ist ein robuster Code, den Sie hier haben.
mveroone
@ Kwaio Ich habe es verloren, Ihren Kommentar zu lesen
Newbrict
OO == goododer OO === good?
JoshWillik
3
@ JoshWillik: Ja. ;-)
Türklinke
12

Haskell & Die Kirche des ADT

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

Dies definiert die eine wahre One. Dies Oneist sowohl die Art bezeichnet Einheit , und der Konstruktor One, der sich die nullary Funktion , dass die Renditen der ist ein wahr, und nur ein Wert vom Typ One, der ist, siehe, da One.

Verwendung in der 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

Das vollständige Book of One ist jetzt online. Wenn Sie es laden, erhalten Sie beide Testamente: Berechnung und Arithmetik. Auf diese Weise können Sie mehr Wahrheiten erkunden:

λ: 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
quelle
9

Groovy

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

Enthält nicht 4

Fels
quelle
Ich glaube, ich habe das auf xkcd gesehen.
mveroone
1
Ja, das war die Idee :)
Fels
8

Perl

sub ret1 { print $->$= }

(Trotz des Aussehens druckt die Funktion nichts.)

Ich weiß, dass Perl-Programmierer gerne TMTOWTDI sagen, aber das ist eine Aufgabe, für die T wirklich MTOWTDI.

Brot-Box
quelle
8

PHP

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

Bearbeiten:

Wenn Sie einen längeren bevorzugen, finden Sie hier eine Alternative (es wird nichts gedruckt):

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

C

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
quelle
Wie bist du darauf gekommen?
Saurabh Rana
4
Es ist die geometrische Reihe 1/2 + 1/4 + 1/8 + ... = 1.
Casey Chu
2
und es wird 24-mal
wiederholt,
7

Rhetorisches Java

Sie haben nicht gesagt, dass es eine ganze Zahl 1 sein muss.

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

Quelle: http://bash.org/?946461

Joe Z.
quelle
7

JavaScript (ECMAScript wirklich)

function one() { return Number.length; }

Zeit für einen speziellen Porno.

Abschnitt 15.7.3 besagt, dass die lengthEigenschaft des NumberKonstruktors ist 1(und wir wissen, dass ein Konstruktor ein Funktionsobjekt ist, wie in 4.3.4 erwähnt ), und das liegt daran, dass in Abschnitt 15.3.5.1 heißt:

Der Wert der Eigenschaft length ist eine Ganzzahl, die die "typische" Anzahl von Argumenten angibt, die von der Funktion erwartet werden. Die Sprache erlaubt es jedoch, die Funktion mit einer anderen Anzahl von Argumenten aufzurufen.

... und da der NumberKonstruktor typische Anzahl von Argumenten 1 ist, die lengthvon Numberist 1. Man könnte also sagen, dass die Länge einer Zahl in Javascript 1 ist.

MMM
quelle
6

Perl

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

Weit öffnen und sagen aaaaa.

Das kreative Konzept war zu nisten Klammern in Klammern in geschweiften Klammern ... so tief wie möglich, während immer noch das gewünschte Ergebnis zurückkehrt, und nur ein „Eins“ Variable ( $a, @a, %a, @$aund $#$asind natürlich alle verschiedenen Variablen).

Obwohl dies die Umgebung erheblich verändert, wird es 1bei nachfolgenden Aufrufen immer zurückgegeben . Um zu verstehen, was es tut, können Sie den folgenden Code ausführen:

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

Tcl

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

Funktioniert nicht so, wie Sie vielleicht denken.

(5+2-3)/4ist kein gültiger Befehl, daher wird ein error ( return -code 1) ausgelöst. catch gibt diese Zahl zurück.

Johannes Kuhn
quelle
6

MATHEMATICA

Meiner Meinung nach die eleganteste mathematische Methode, mit Mathematica 1 zurückzugeben:

-Exp[I Pi]

Die Euler-Identität.

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

Kann so angepasst werden, dass jede andere positive Zahl zurückgegeben nwird, indem die Methoden printXfür X1 bis n in Splitter hinzugefügt werden . Zum Beispiel ändern Splitterauf

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

Gibt "2" zurück, ohne dass weitere Änderungen erforderlich sind. Die hinzugefügten Methoden sollten, abgesehen vom Namen, ein genaues Duplikat von seinprint1 . Verwendet Reflection, um die Anzahl der Methoden im Splitter abzurufen und eine Funktion mit diesem Namen aufzurufen.P.getNum, der dann aufgerufen wird, liest den Stack-Trace, analysiert das letzte Zeichen in der aufrufenden Methode und zeigt es an.

Berufung print.getNum() return wird das Zeichen '1' zurückgegeben.

Bearbeiten - geändert, um keine String / Integer / etc-Literale zu verwenden.

Retter
quelle
5

C #

Es sollte von der Hardware-Architektur abhängen:

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

WOW!

thepirat000
quelle
5

C #

Verschmelzung dieser (kontroversen) mit der benachbarten (kontroversen) Collatz-Vermutung :

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

Rubin

Missbrauch des RNG ...

Random.new(56417).rand(10000)

Erzeugt eine "zufällige" Zahl zwischen 0 und 10000, und da ich den richtigen Startwert ausgewählt habe, ist er zufällig 1.;)

Skript, mit dem ich die Nummer gefunden habe:

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

Javascript 8 Bytes

ist das einfach genug

(+!~~{})
Dhazelett
quelle
Rückgaben können nur in einer Funktion verwendet werden. Ich sage es nur.
Mama Fun Roll
@ ӍѲꝆΛҐӍΛПӍѲꝆΛҐӍΛ behoben; D
dhazelett
4

R

Ein Klassiker:

TRUE + 0

+ versucht, sein Argument auf einen gemeinsamen Typus zu zwingen: hier zwingt es aufgrund der Rangfolge zu ganzen Zahlen. Das Erzwingen TRUEeiner ganzen Zahl ergibt 1.

Plannapus
quelle
Würde +TRUEnicht funktionieren
Griffin
1
@Griffin +TRUEpassiert zu geben TRUE.
Plannapus
Auch FALSE + 1bin ich richtig?
Timtech
@ Timtech ja du bist.
Plannapus
4

Turing Maschine

Single-State-Turing-Maschine mit dem Leerzeichen B berechnet 1 (= 0,111 ... in Basis 2):

q B 1 R q

(Dies folgt Turings Konvention, mit einem leeren Band zu beginnen und der generierten unendlichen Sequenz '0' voranzustellen.)

res
quelle
4

C

Es enthält sogar eine Dokumentation zu seinen Parametern.

    int
  return_1
(x)     int
       x;{
      /*x
     can
    be:
  any
 val
ue.
***/ return
!x?1:x /x;}
Michael Hampton
quelle
Aber das ist eine 2!
Joe Z.
1
So? Es ist vollständig dokumentiert!
Michael Hampton
3

Python

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

one() ruft sich selbst 111,111,111 Mal auf, wobei jedes Mal 1 zurückgegeben wird, bevor ein endgültiger Wert von 1 zurückgegeben wird.

Sie können auch die Anzahl der Stellen angeben. Beispielsweise,one(3) wird nur 111-mal 1 zurückgegeben.

Ich könnte später eine Erklärung hinzufügen, aber ich habe im Moment wirklich keine Zeit.

grc
quelle
3

R

NA ^ 0

Jede Zahl nach der Potenz von 0ist 1.

Sven Hohenstein
quelle