Retorno 1 - Concurso de Popularidade [fechado]


28

A tarefa

Crie uma função / sub-rotina que retorne 1. Você pode torná-la tão elaborada quanto desejar, desde que retorne 1.

As regras

A entrada com mais vitórias positivas - como qualquer concurso de popularidade. Boa sorte!


6
+1 quatro votos negativos, mas 13 respostas ?, se as pessoas estão se divertindo com esta pergunta, por que tantos votos negativos?
Jsedano

13 respostas, mas apenas duas delas obtiveram votos. Talvez esta seja a nossa versão da pergunta emacs vs vi - uma em que todo mundo tem uma resposta, mas nenhuma delas é particularmente melhor que a outra.
breadbox

5
@anakata, porque quatro (que agora são seis) pensam que esse é o tipo de pergunta que seria melhor não postar. Algumas pessoas são contra o concurso de popularidade por princípio, e isso está arrastando a parte inferior dessa categoria.
Peter Taylor

1
Este é um daqueles lugares em que o codegolf se encaixa pouco no formato stackexchange. Compare a conjectura de Collatz , que também está em alta no momento. As respostas são bastante mundanas (sem ofensas), porque não é um bom problema para o golfe criativo - a abordagem ingênua também é a mais curta. Enquanto nesta pergunta, o concurso de popularidade permite todos os tipos de respostas interessantes para uma tarefa muito trivial. Muito mais agradável de ler - mas a troca de pilha deve evitar coisas abertas como essa. Assim, os votos negativos.
breadbox

@breadbox Ponto tomadas - Vou fazer meus desafios mais interessante a partir de agora:)
Doorknob

Respostas:


37

Script de golfe

1

Demorou muito tempo para otimizar esse código da forma mais pura e, ouso dizer, uma forma bonita. Essa elegância da língua não vem sem anos de prática dedicada. O programa que, sem um Zero-Instruction-Set-Computer, literalmente nunca mais poderá ser compactado. Toda a minha carreira no código de golfe está levando a esse momento.

Eu estou livre. Eu estou vivo.

Eu vejo o código subjacente ao universo.


3
Você pode escrever um programa que use apenas um bit?
Kevin - Restabelece Monica

@ Kevin Somente no Minecraft (eu já fiz isso antes - fiz uma tela de 3x5 px e tudo mais).
Timtech

1
without a Zero-Instruction-Set-Computer can literally never be compressed any further. Nossos computadores atuais podem lidar facilmente com programas com 0 instruções. Tudo que você precisa de uma linguagem que tem: "O programa retorna vazios 1" na sua especificação
Cruncher


34

Brainfuck

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

Ou se você não gosta de festas:

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

2
Parece mais uma letra minúscula do lque uma 1.
Joe Z.

26

APL

one ← {⍴⍴⍴⍵}

fornece as dimensões de um vetor. A dimensão disso é sempre unidimensional; portanto, a dimensão disso é sempre unidimensional . Ou:

"Rho, rho, rho de X
sempre é igual a um,
Rho é dimensão; rho rho, classificação
APL é divertido!"

(Eu não escrevi esse verso, é de Stallman.)


2
I have learned the Modern Major Generals Song, sung the Money song by Monty Python and Still Alive from Portal... and that is still the nerdiest song that has ever been stuck in my head. Good find marinus! A good verse Stallman!
lochok

A mesma coisa em J: # @: # @: #(espaços são opcionais)
ɐɔıʇǝɥʇuʎs

21

Java

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

Isso se chamará 2 1024 vezes (esse número pode variar em diferentes plataformas) antes de finalmente retornar 1. Não prenda a respiração, no entanto; facilmente levará muito mais tempo do que a idade do universo.


3
"Isso se chamará 2 ^ 1024 vezes" Por quê? Eu acho que é um problema de pilha. Tente se chamar até ficar sem pilha e faça isso de novo e de novo?

@LegoStormtroopr, finalmente, tente algumas coisas aqui que mantêm a pilha baixa, mas ainda tem muitas chamadas
Cruncher

2
@LegoStormtroopr Veja isso .
Arshajii

20

Peixe

x envia o contador de programa em uma direção aleatória. # é uma parede na qual o contador de programas "salta". Isso irá literalmente vagar sem rumo até encontrar o "^" e depois imprimir 1 e terminar.

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

+1 por cansar o intérprete e deixar outros xixi nas calças. Ri muito.
tomsmeding

É legal como isso é facilmente traduzido para o Befunge 98; simplesmente mude todo xpara um ?, todo #para um r, npara dentro .e ;para dentro @. No entanto, esse programa> <> parece melhor que o Befunge equivalente. Tradução mostrada aqui: ideone.com/ZyuSKk
Justin

Talvez eu goste muito disso; aqui está outro Befunge, mas este leva ~ 4 milhões de operações para terminar. Eu imagino que ele possa ser traduzido diretamente para> <> alterando todos ?para a xe todos #para a !(deve funcionar bem quando deixado o mesmo também) e (é claro) .para ne @para ;. ideone.com/gfApjT
Justin

Parece que o @Quincunx deve demorar cerca de 2 ^ 10 tentativas, com um número esperado de operações por tentativa em cerca de 10. Isso me dá cerca de 2000 operações. Estou esquecendo de algo?
Cruncher

@Quincunx Nevermind, é 4 ^ 10. Consegui. ri muito. Para sua informação, tenho certeza de que o código pode ser bastante minimizado e ainda fazer a mesma coisa.
Cruncher,

19

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

expr 0

Isso imprime 0, mas retorna 1, o que pode surpreender os programadores acostumados a outros idiomas. Você pode desligar a saída impressa e ver o código de retorno executando expr 0 >/dev/null; echo $?.


1
Eu já fui mordido por isso antes. Você quer saber se existe um processo? $(pidof progname) < 1
Llama

18

Java

Essa é uma das minhas perguntas específicas sobre Java preferidas.

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

Eu não entendi ...
O cara com o chapéu

5
Tentando retornar em um trybloco dispara instantaneamente, finallyretornando 1 antes que a outra returninstrução possa ser executada.
PsHegger

Ah ok. Obrigado!
O cara com o chapéu

Retornar em um bloco final deve gerar um erro de compilação. Não consigo pensar em nenhum caso de uso legítimo para fazê-lo.
Cruncher

Em C #, ele gera erro de compilação, mas em Java é possível. Claro que isso não significa que é útil, nem posso pensar em qualquer caso de uso legítimo
PsHegger

16

Javascript

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

Explicação:

  • primeiro ![]avalia como false.
  • então ~falsese torna -1porque falseé primeiro convertido em 0, e ~0 == -1.
  • finalmente, --1avalia como 1.

Alternar:

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

Alternativa maluca (cada linha tem exatamente 80 caracteres):

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
- ~ {} + [] é outra abordagem. {} + [] avalia para 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())

4
Esse é um pedaço robusto de código que você tem aqui.
mveroone

@Kwaio eu o perdi de ler o seu comentário
Newbrict

OO == goodou OO === good?
21714 JoshWillik

3
@ JoshWillik: Sim. ;-)
Maçaneta da porta

12

Haskell e a Igreja da ADT

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

Isso define aquele verdade One. Isto Oneé tanto o tipo denotando Oneness , e o construtor One, o que em si é a função nullary que retorna a um verdadeiro, e somente um valor do tipo One, que é eis One.

Uso no 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

O cheio Book of One já está online. Ao carregar, você obtém os dois testamentos: Computação e Aritmética. Isso permite que você explore mais 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

9

Groovy

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

Não contém 4


Eu acho que já vi isso no xkcd.
mveroone

1
Sim, essa era a idéia :)
Fels

8

Perl

sub ret1 { print $->$= }

(Apesar das aparências, a função não imprime nada.)

Eu sei que programadores Perl gostam de dizer TMTOWTDI, mas essa é uma tarefa para a qual realmente MTOWTDI.


8

PHP

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

Editar:

Se você preferir um mais longo, aqui está uma alternativa (não imprime nada):

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

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

Como você chegou a isso?
Saurabh Rana

4
É a série geométrica 1/2 + 1/4 + 1/8 + ... = 1.
Casey Chu

2
e ele faz um loop 24 vezes, porque flutuador tem 24 bits de precisão
phuclv

7

Java retórico

Você não disse que tinha que ser um número inteiro 1.

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

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


7

JavaScript (ECMAScript realmente)

function one() { return Number.length; }

Hora de um pornô especial.

A Seção 15.7.3 afirma que a lengthpropriedade do Numberconstrutor é 1(e sabemos que um construtor é um objeto de função, como mencionado em 4.3.4 ), e isso ocorre porque a seção 15.3.5.1 diz:

O valor da propriedade length é um número inteiro que indica o número "típico" de argumentos esperados pela função. No entanto, a linguagem permite que a função seja chamada com algum outro número de argumentos.

... e uma vez que o Numbernúmero típico de construtor de argumentos é 1, o lengthde Numberé 1. Então, pode-se dizer que o comprimento de um número em Javascript é 1.


6

Perl

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

Abra bem e diga aaaaa .

O conceito criativo foi para os aparelhos ninho dentro suportes dentro chaves ... tão profundamente quanto possível, enquanto ainda devolvendo o resultado desejado, e usando apenas um "um" variável ( $a, @a, %a, @$ae$#$a são, naturalmente, todas as variáveis diferentes).

Embora isso modifique seu ambiente significativamente, ele sempre retornará 1nas chamadas subseqüentes. Para entender o que está fazendo, considere executar este código:

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

6

Tcl

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

Não funciona como você imagina.

(5+2-3)/4não é um comando válido, portanto, gera um erro ( return -code 1), catch retorna esse número.


6

MATHEMATICA

Na minha opinião, a maneira matemática mais elegante de retornar 1 usando o Mathematica:

-Exp[I Pi]

A identidade de Euler.


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

Pode ser ajustado para devolver qualquer outro número positivo nadicionando os métodos printXpara Xde 1 a N em divisor. Por exemplo, modificando Splitterpara

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

Retornará '2', sem nenhuma outra alteração necessária. Os métodos adicionados devem, além do nome, ser uma duplicata exata de print1. Usa reflexão para obter o número de métodos no divisor e chama uma função com esse nome.P.getNum, que é então chamado, lê o rastreamento da pilha e analisa o último caractere no método de chamada e o exibe.

A chamada print.getNum()retorna o caractere '1'

Editar - modificado para não usar literais String / número inteiro / etc.


5

C #

Deve depender da arquitetura do hardware:

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

UAU!


5

C #

Mesclando este (controverso) com a vizinha (controversa) 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();
}

5

Rubi

Abusando do RNG ...

Random.new(56417).rand(10000)

Gera um número "aleatório" entre 0 e 10000, e porque eu escolhi a semente certa, por acaso é 1.;)

Script que usei para encontrar o número:

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 bytes

isso é simples o suficiente?

(+!~~{})

Os retornos só podem ser usados ​​em uma função. Apenas dizendo.
Mama Fun Roll

@ ӍѲꝆΛҐӍΛПҒЦꝆ fixed; D
dhazelett

4

R

Um clássico:

TRUE + 0

+ tenta coagir seu argumento a um tipo comum: aqui, por causa da ordem de precedência, ele força a números inteiros. A coerção de TRUEpara um número inteiro dá 1.


Será que +TRUEnão funciona?
Griffin

1
@ Griffin +TRUEpassa a dar TRUE.
plannapus

Além disso FALSE + 1, estou correto?
Timtech

@ Timtech sim, você é.
plannapus

4

Máquina de Turing

A máquina de Turing de estado único com B como símbolo em branco, calcula 1 (= 0,111 ... na base 2):

q B 1 R q

(Isso segue a convenção de Turing de começar com uma fita em branco e prefixar '0' à sequência infinita gerada.)


4

C

Inclusive inclui documentação sobre seus parâmetros.

    int
  return_1
(x)     int
       x;{
      /*x
     can
    be:
  any
 val
ue.
***/ return
!x?1:x /x;}

Mas isso é um 2!
Joe Z.

1
Tão? Está totalmente documentado!
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() se chamará 111.111.111 vezes, retornando sempre 1, antes de retornar o valor final 1.

Você também pode especificar o número de dígitos. Por exemplo,one(3) retornará 1 apenas 111 vezes.

Posso acrescentar uma explicação mais tarde, mas realmente não tenho tempo no momento.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.