Regreso 1 - Concurso de popularidad [cerrado]

28

La tarea

Cree una función / subrutina que devuelva 1. Puede hacerlo tan elaborado como desee, siempre que devuelva 1.

Las normas

La entrada con más votos positivos gana, al igual que cualquier concurso de popularidad. ¡Buena suerte!

LazySloth13
fuente
66
¿+1 cuatro votos negativos pero 13 respuestas ?, si la gente se divierte con esta pregunta, ¿por qué tantos votos negativos?
jsedano
13 respuestas, pero solo dos de ellas obtuvieron votos. Quizás esta es nuestra versión de la pregunta emacs vs vi, una en la que todos tienen una respuesta, pero ninguna de ellas es particularmente mejor que otra.
breadbox
55
@anakata, porque cuatro personas (que sean seis ahora) piensan que este es el tipo de pregunta que creen que sería mejor no publicar. Algunas personas están en contra del concurso de popularidad por principio, y esto está rascando el fondo de esa categoría.
Peter Taylor
1
Este es uno de esos lugares donde codegolf encaja incómodamente en el formato stackexchange. Compare la Conjetura de Collatz , que también está en tendencia en este momento. Todas las respuestas son bastante mundanas (sin ofender), porque no es un buen problema para el golf creativo: el enfoque ingenuo también es el más corto. Mientras que en esta pregunta, el concurso de popularidad permite todo tipo de respuestas interesantes a una tarea muy trivial. Mucho más agradable de leer, pero se supone que stackexchange evita cosas abiertas como esta. Así los votos negativos.
breadbox el
@breadbox Punto tomado - Haré mis desafíos más interesantes a partir de ahora:)
Doorknob

Respuestas:

37

Guión de golf

1

Tomó mucho tiempo optimizar este código en su forma más pura, y me atrevo a decirlo: una forma hermosa. Tal elegancia del lenguaje no viene sin años de práctica dedicada. El programa que, sin una Computadora de Conjunto de Instrucción Cero, literalmente nunca puede ser comprimido más. Toda mi carrera en el código de golf me ha llevado a este momento.

Soy libre. Estoy vivo.

Veo el código que subyace al universo.

lochok
fuente
3
¿Puedes escribir un programa que solo use un bit?
Kevin - Restablece a Mónica el
@Kevin Solo en Minecraft (lo he hecho antes, hice una pantalla de 3x5 px y todo).
Timtech
1
without a Zero-Instruction-Set-Computer can literally never be compressed any further. Nuestras computadoras actuales pueden manejar fácilmente 0 programas de instrucciones. Todo lo que necesita es un lenguaje que tenga: "El programa vacío devuelve 1" en su especificación
Cruncher
36

do

Dos ejemplos, utilizando características de lenguaje oscuro como "retorno fuerte" ( return!) y el operador "enfoques" ( -->):

int foo(void) {
    return! 0;
}
int bar(void) {
    int i=7;
    while (i --> 0);
    return-i;
}
Ugoren
fuente
12
Y la return-ipalabra clave especial : P
Pomo de la puerta
44
Para aquellos que quieran obtener más información sobre '->', consulte este stackoverflow.com/questions/1642028/…
Saurabh Rana
34

Brainfuck

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

O si no eres divertido en las fiestas:

+++++++[->+++++++<]>.
Mert Yazıcıoğlu
fuente
2
Eso se parece más a una minúscula lque a 1.
Joe Z.
26

APL

one ← {⍴⍴⍴⍵}

te da las dimensiones de un vector. La dimensión de eso siempre es unidimensional, por lo que la dimensión de eso siempre es una. O:

"Rho, rho, rho de X
Siempre es igual a uno,
Rho es dimensión; rho rho, ¡el rango
APL es divertido!"

(No escribí ese verso, es de Stallman).

marinus
fuente
2
Aprendí la canción Modern Major Generals Song, canté la canción Money de Monty Python y Still Alive de Portal ... y esa sigue siendo la canción más nerd que se me ha metido en la cabeza. Buen hallazgo marinus! Un buen verso Stallman!
lochok
Lo mismo en J: # @: # @: #(Los espacios son opcionales)
26ıʇǝɥʇuʎs
21

Java

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

Esto se llamará a sí mismo 2 1024 veces (este número puede variar en diferentes plataformas) antes de regresar finalmente 1. Sin embargo, no aguantes la respiración; fácilmente tomará mucho más tiempo que la edad del universo.

arshajii
fuente
3
"Esto se llamará a sí mismo 2 ^ 1024 veces" ¿Por qué? Creo que es un problema de pila. Intenta llamarte hasta que te quedes sin pila, luego hazlo una y otra vez
@LegoStormtroopr hay algunas cosas de prueba que finalmente mantienen la pila baja, pero aún tiene muchas llamadas
Cruncher
2
@LegoStormtroopr Mira esto .
arshajii
20

Pez

x envía el contador del programa en una dirección aleatoria. # es un muro que el contador del programa "rebota". Esto literalmente vagará sin rumbo hasta que encuentre el "^" y luego imprima 1 y termine.

xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxx###xxxxxxxxxxxxxx
xxxxxxxxxx#;#xxxxxxxxxxxxxx
xxxxxxxxxx#n#xxxxxxxxxxxxxx
xxxxxxxxxx#1#xxxxxxxxxxxxxx
xxxxxxxxxx#^#xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
Cruncher
fuente
+1 por cansar tanto al intérprete y dejar que otros> <> orinen en sus pantalones. Jajaja
tomsmeding
Es agradable cómo esto se traduce fácilmente en Befunge 98; simplemente cambie cada xen a ?, cada #en a r, ndentro .y ;dentro @. Sin embargo, este programa> <> se ve mejor que el Befunge equivalente. Traducción que se muestra aquí: ideone.com/ZyuSKk
Justin
Tal vez me gusta demasiado esto; Aquí hay otro Befunge, pero este requiere ~ 4 millones de operaciones para terminar. Me imagino que se puede traducir directamente a> <> cambiando cada ?en a xy cada #en a !(debería funcionar bien cuando se deja lo mismo también) y (por supuesto) .to nand @to ;. ideone.com/gfApjT
Justin
Parece que @Quincunx debería tomar alrededor de 2 ^ 10 intentos, con un número esperado de operaciones por intento en aproximadamente 10. Esto me da alrededor de 2000 operaciones. ¿Me estoy perdiendo de algo?
Cruncher
@Quincunx Nevermind, son 4 ^ 10. Lo tengo. jajaja Para su información, estoy bastante seguro de que el código se puede minimizar en gran medida y seguir haciendo lo mismo.
Cruncher
19

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

expr 0

Esto imprime 0 pero devuelve 1, lo que puede sorprender a los programadores acostumbrados a otros idiomas. Puede desactivar la salida impresa y ver el código de retorno ejecutando expr 0 >/dev/null; echo $?.

Gilles 'SO- deja de ser malvado'
fuente
1
He sido mordido por esto antes. ¿Quieres saber si existe un proceso? $(pidof progname) < 1
Sr. Llama
18

Java

Esta es una de mis preguntas específicas favoritas de Java.

public static int ret1() {
    try {
        return 0;
    } finally {
        return 1;
    }
}
PsHegger
fuente
No lo entiendo ...
The Guy with The Hat
55
Intentar regresar en un trybloque se dispara instantáneamente, lo finallyque devuelve 1 antes de returnque se ejecute la otra instrucción.
PsHegger
Ah bien. ¡Gracias!
The Guy with The Hat
Regresar en un bloque finalmente debería arrojar un error de compilación. No puedo pensar en ningún caso de uso legítimo para hacerlo.
Cruncher
En C # arroja un error de compilación, pero en Java es posible. Por supuesto, no significa que sea útil, tampoco puedo pensar en ningún caso de uso legítimo
PsHegger
16

JavaScript

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

Explicación:

  • primero ![]evalúa a false.
  • luego se ~falseconvierte en -1porque falsese lanza primero a 0, y ~0 == -1.
  • finalmente, --1evalúa a 1.

Alterno:

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

Alternativa loca (cada línea tiene exactamente 80 caracteres de longitud):

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)))
Pomo de la puerta
fuente
1
- ~ {} + [] es otro enfoque. {} + [] se evalúa a 0.
tristin
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())
Pomo de la puerta
fuente
44
Ese es un código robusto que tienes aquí.
mveroone
@Kwaio Lo perdí leyendo tu comentario
Newbrict
OO == goodo OO === good?
JoshWillik
3
@JoshWillik: Sí. ;-)
Pomo de la puerta
12

Haskell y la Iglesia de la ADT

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

Esto define el uno verdadero One. Este Onees tanto el tipo que denota Oneness como el constructor One, que es en sí mismo la función nular que devuelve el único verdadero, y solo un valor de tipo One, que es, he aquí,One .

Uso en el 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

El Libro de uno completo ahora está en línea. Al cargarlo obtienes ambos testamentos: Computación y Aritmética. Esto le permite explorar más verdades:

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

Maravilloso

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

No contiene 4

Fels
fuente
Creo que he visto esto en xkcd.
mveroone
1
Sí, esa fue la idea :)
siente el
8

Perl

sub ret1 { print $->$= }

(A pesar de las apariencias, la función no imprime nada).

Sé que a los programadores de Perl les gusta decir TMTOWTDI, pero esta es una tarea para la que T realmente MTOWTDI.

caja de pan
fuente
8

PHP

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

Editar:

Si prefiere uno más largo, aquí hay una alternativa (no imprime nada):

<?php
function getOne() {
    return print('the' + 'integer' + 'between' + 0 and 2);
}
lortabac
fuente
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
fuente
¿Cómo se te ocurrió esto?
Saurabh Rana
44
Es la serie geométrica 1/2 + 1/4 + 1/8 + ... = 1.
Casey Chu
2
y se realiza un bucle 24 veces porque flotador tiene 24 bits de precisión
phuclv
7

Java retórica

No dijiste que tenía que ser un número entero 1.

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

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

Joe Z.
fuente
7

JavaScript (ECMAScript realmente)

function one() { return Number.length; }

Tiempo para algunas especificaciones porno.

La Sección 15.7.3 establece que la lengthpropiedad del Numberconstructor es 1(y sabemos que un constructor es un objeto de función como se menciona en 4.3.4 ), y eso se debe a que la sección 15.3.5.1 dice:

El valor de la propiedad de longitud es un número entero que indica el número "típico" de argumentos esperados por la función. Sin embargo, el lenguaje permite invocar la función con algún otro número de argumentos.

... y dado que el Numbernúmero típico de argumentos del constructor es 1, el lengthde Numberes 1. Entonces se podría decir que la longitud de un número en Javascript es 1.

MMM
fuente
6

Perl

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

Abrir de par en par y decir aaaaa.

El concepto creativo fue a los aparatos de nido dentro de los paréntesis dentro de llaves ... lo más profundamente posible, sin dejar de devolver el resultado deseado, y sólo con un "uno" variable ( $a, @a, %a, @$ay $#$a, por supuesto, todas las variables diferentes).

Aunque esto modifica significativamente su entorno, siempre regresará 1en llamadas posteriores. Para tener una idea de lo que está haciendo, puede considerar ejecutar este código:

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

Tcl

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

No funciona como podrías pensar.

(5+2-3)/4no es un comando válido, por lo que arroja un error ( return -code 1), catch devuelve este número.

Johannes Kuhn
fuente
6

MATEMÁTICA

En mi opinión, la forma matemática más elegante para devolver 1 usando Mathematica:

-Exp[I Pi]

La identidad de Euler.

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

Puede ser ajustado para devolver cualquier otro número positivo nmediante la adición de los métodos printXpara Xde 1 a n en Splitter. Por ejemplo, modificando Splittera

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

Will return '2', without any other changes necessary. The added methods should, apart from the name, be an exact duplicate of print1. Uses reflection to get the number of methods in splitter, and call a function with that name. P.getNum, which is then called, reads the stack trace and parses out the last character in the calling method, and displays it.

Calling print.getNum() return the character '1'

Edit - modified to use no String/integer/etc literals.

resueman
fuente
5

C#

It should depend on hardware architecture:

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

WOW!

thepirat000
fuente
5

C#

Merging this (controversial) one with the neighboring (controversial) 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
fuente
5

Ruby

Abusing the RNG...

Random.new(56417).rand(10000)

Generates a "random" number between 0 and 10000, and because I picked the right seed it just so happens to be 1. ;)

Script I used to find the number:

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

Javascript 8 bytes

is this simple enough?

(+!~~{})
dhazelett
fuente
Returns can only be used in a function. Just saying.
Mama Fun Roll
@ӍѲꝆΛҐӍΛПҒЦꝆ fixed ;D
dhazelett
4

R

A classic:

TRUE + 0

+ tries to coerce its argument to a common type: here, because of the order of precedence, it coerces to integers. The coercion of TRUE to an integer gives 1.

plannapus
fuente
Would +TRUE not work?
Griffin
1
@Griffin +TRUE happens to give TRUE.
plannapus
Also FALSE + 1, am I correct?
Timtech
@Timtech yes you are.
plannapus
4

Turing Machine

Single-state Turing machine with B as the blank symbol, computes 1 (= 0.111... in base 2):

q B 1 R q

(This follows Turing's convention of starting with a blank tape, and prefixing '0.' to the generated infinite sequence.)

r.e.s.
fuente
4

C

It even includes documentation on its parameters.

    int
  return_1
(x)     int
       x;{
      /*x
     can
    be:
  any
 val
ue.
***/ return
!x?1:x /x;}
Michael Hampton
fuente
But that's a 2!
Joe Z.
1
So? It's fully documented!
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() will call itself 111,111,111 times, each time returning 1, before returning a final value of 1.

You can also specify the number of digits. For example, one(3) will return 1 only 111 times.

I might add an explanation later, but I really don't have time at the moment.

grc
fuente
3

R

NA ^ 0

Any number to the power of 0 is 1.

Sven Hohenstein
fuente