Return 1 - Kontes Popularitas [ditutup]


28

Tugas

Buat fungsi / subrutin yang mengembalikan 1. Anda dapat membuatnya rumit seperti yang Anda inginkan, asalkan mengembalikan 1.

Aturan

Entri dengan kemenangan paling banyak dipilih - sama seperti kontes popularitas lainnya. Semoga berhasil!


6
+1 empat downvotes tetapi 13 Jawaban ?, jika orang bersenang-senang dengan pertanyaan ini mengapa begitu banyak downvotes?
jsedano

13 jawaban, tetapi hanya dua dari mereka yang mendapatkan suara. Mungkin ini adalah versi kami dari pertanyaan emacs vs vi - pertanyaan dimana setiap orang memiliki jawaban tetapi tidak ada yang lebih baik dari yang lain.
kotak roti

5
@ Kanakata, karena empat (buat enam sekarang) orang berpikir bahwa ini adalah jenis pertanyaan yang menurut mereka lebih baik tidak diposting. Beberapa orang menentang kontes popularitas pada prinsipnya, dan ini menggores bagian bawah kategori itu.
Peter Taylor

1
Ini adalah salah satu tempat di mana codegolf cocok gelisah ke dalam format stackexchange. Bandingkan dugaan Collatz , yang juga sedang tren saat ini. Jawabannya semua biasa-biasa saja (jangan tersinggung), karena itu bukan masalah yang baik untuk bermain golf kreatif - pendekatan naif juga yang terpendek. Sedangkan dalam pertanyaan ini, kontes popularitas memungkinkan semua jenis jawaban menarik untuk tugas yang sangat sepele. Jauh lebih menyenangkan untuk dibaca - tetapi stackexchange seharusnya menghindari hal-hal terbuka seperti ini. Demikianlah downvotes.
kotak roti

@breadbox Titik diambil - Aku akan membuat tantangan saya lebih menarik dari sekarang:)
Doorknob

Jawaban:


37

Skrip Golf

1

Butuh waktu lama untuk mengoptimalkan kode ini ke bentuk yang paling murni, dan berani saya katakan - bentuk yang indah. Keanggunan bahasa seperti itu tidak datang tanpa latihan khusus selama bertahun-tahun. Program itu, tanpa Nol-Instruksi-Set-Komputer benar-benar tidak pernah dapat dikompresi lebih jauh. Seluruh karir golf kode saya telah mengarah ke saat ini.

Aku bebas. Saya hidup.

Saya melihat kode yang mendasari alam semesta.


3
Bisakah Anda menulis program yang hanya menggunakan bit tunggal?
Kevin - Reinstate Monica

@Kevin Only in Minecraft (Saya pernah melakukannya sebelumnya - membuat layar 3x5 px dan semuanya).
Timtech

1
without a Zero-Instruction-Set-Computer can literally never be compressed any further. Komputer kami saat ini dapat dengan mudah menangani 0 program instruksi. Yang Anda butuhkan adalah bahasa yang memiliki: "Program kosong mengembalikan 1" dalam spesifikasinya
Cruncher

36

C

Dua contoh, menggunakan fitur bahasa yang tidak jelas seperti "pengembalian kuat" ( return!) dan operator "pendekatan" ( -->):

int foo(void) {
    return! 0;
}
int bar(void) {
    int i=7;
    while (i --> 0);
    return-i;
}

12
Dan return-ikata kunci khusus : P
Doorknob

4
Bagi mereka yang ingin mempelajari lebih lanjut tentang '->' lihat ini stackoverflow.com/questions/1642028/…
Saurabh Rana

34

Brainfuck

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

Atau jika Anda tidak bersenang-senang di pesta:

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

2
Itu lebih mirip huruf kecil ldaripada a 1.
Joe Z.

26

APL

one ← {⍴⍴⍴⍵}

memberi Anda dimensi vektor. Dimensi itu selalu satu dimensi, jadi dimensi itu selalu satu. Atau:

"Rho, rho, rho dari X
Selalu sama dengan satu,
Rho adalah dimensi; rho rho, peringkat
APL itu menyenangkan!"

(Saya tidak menulis ayat itu, itu Stallman.)


2
Saya telah mempelajari Lagu Modern Mayor Jenderal, menyanyikan lagu Uang oleh Monty Python dan Still Alive dari Portal ... dan itu masih lagu paling aneh yang pernah terjebak di kepala saya. Bagus temukan marinus! Sebuah sajak yang bagus, Stallman!
lochok

Hal yang sama di J: # @: # @: #(Spasi adalah opsional)
ɐɔıʇǝɥʇuʎs

21

Jawa

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

Ini akan menyebut dirinya 2 1024 kali (jumlah ini dapat bervariasi pada platform yang berbeda) sebelum akhirnya kembali 1. Namun, jangan menahan nafas; itu akan dengan mudah memakan waktu lebih lama dari umur alam semesta.


3
"Ini akan menyebut dirinya 2 ^ 1024 kali" Kenapa? Saya pikir ini masalah tumpukan. Coba panggil diri Anda sampai Anda kehabisan tumpukan, lalu lakukan lagi, dan lagi?

@LegoStormtroopr ada beberapa percobaan akhirnya di sini yang membuat tumpukan rendah, tetapi masih memiliki banyak panggilan
Cruncher

2
@LegoStormtroopr Lihat ini .
arshajii

20

Ikan

x mengirimkan penghitung program dalam arah acak. # adalah dinding tempat penghitung program "terpental". Ini benar-benar akan berkeliaran tanpa tujuan sampai ia menemukan "^" dan kemudian mencetak 1 dan selesai.

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

+1 untuk melelahkan penerjemah dan membiarkan orang lain> <> buang air kecil di celana mereka. Lol.
tommeding

Sangat menyenangkan bagaimana ini mudah diterjemahkan ke Befunge 98; cukup ubah setiap xmenjadi ?, setiap #menjadi r, nke .dan ;ke @. Namun, program>> ini terlihat lebih baik daripada Befunge yang setara. Terjemahan ditampilkan di sini: ideone.com/ZyuSKk
Justin

Mungkin saya terlalu suka ini; inilah Befunge yang lain, tetapi yang ini membutuhkan ~ 4 juta operasi untuk menyelesaikannya. Saya membayangkan bahwa itu dapat langsung diterjemahkan ke dalam> <> dengan mengubah setiap ?menjadi xdan setiap #menjadi !(harus bekerja dengan baik ketika dibiarkan sama juga) dan (tentu saja) .ke ndan @ke ;. ideone.com/gfApjT
Justin

@ Quincunx sepertinya butuh sekitar 2 ^ 10 percobaan, dengan jumlah operasi yang diharapkan per 10, kira-kira 10. Ini memberi saya sekitar 2000 operasi. Apakah saya melewatkan sesuatu?
Cruncher

@ Quincunx Nevermind, ini 4 ^ 10. Oke. lol. FYI, saya cukup yakin bahwa kode dapat diminimalisir dan masih melakukan hal yang sama.
Cruncher

19

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

expr 0

Ini mencetak 0 tetapi mengembalikan 1, yang mungkin mengejutkan bagi programmer yang menggunakan bahasa lain. Anda dapat mematikan hasil cetak dan melihat kode pengembalian dengan menjalankan expr 0 >/dev/null; echo $?.


1
Saya sudah sedikit kesal dengan ini sebelumnya. Anda ingin tahu apakah ada proses? $(pidof progname) < 1
Tn. Llama

18

Jawa

Ini adalah salah satu pertanyaan spesifik Jawa favorit saya.

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

Saya tidak mengerti ...
The Guy with The Hat

5
Mencoba untuk kembali dalam satu tryblok secara instan akan memunculkan 1 finallyyang kembali sebelum returnpernyataan lain dapat berjalan.
PsHegger

Ah, baiklah. Terima kasih!
The Guy with The Hat

Kembali dalam blok akhirnya akan menghasilkan kesalahan kompilasi. Saya tidak bisa memikirkan kasus penggunaan yang sah untuk melakukannya.
Cruncher

Dalam C # itu tidak melakukan kesalahan kompilasi, tetapi di Jawa itu mungkin. Tentu saja itu tidak berarti itu berguna, saya juga tidak bisa memikirkan kasus penggunaan yang sah
PsHegger

16

JavaScript

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

Penjelasan:

  • pertama ![]dievaluasi menjadi false.
  • kemudian ~falsemenjadi -1karena falsepertama kali dicor ke 0, dan ~0 == -1.
  • akhirnya, --1dievaluasi menjadi 1.

Bergantian:

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

Alternatif gila (setiap baris persis 80 karakter):

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
- ~ {} + [] adalah pendekatan lain. {} + [] dievaluasi menjadi 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
Itu adalah kode yang kuat yang Anda dapatkan di sini.
mveroone

@ Kwaio Saya kehilangan itu membaca komentar Anda
Newbrict

OO == goodatau OO === good?
JoshWillik

3
@ Josh Willik: Ya. ;-)
Gagang pintu

12

Haskell & Gereja ADT

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

Ini mendefinisikan satu yang benar One. Ini Oneadalah kedua jenis yang menunjukkan keesaan , dan konstruktor One, yang itu sendiri fungsi nullary bahwa return yang satu benar, dan hanya satu nilai tipe One, yaitu, lihatlah, One.

Penggunaan dalam 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

Buku lengkap One sekarang online. Memuat itu membuat Anda berdua wasiat: Komputasi dan Aritmatika. Ini memungkinkan Anda untuk mengeksplorasi lebih banyak kebenaran:

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

Asyik

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

Tidak mengandung 4


Saya pikir saya telah melihat ini di xkcd.
mveroone

1
Ya, itulah idenya :)
Fels

8

Perl

sub ret1 { print $->$= }

(Meskipun terlihat, fungsi ini tidak mencetak apa pun.)

Saya tahu programmer Perl suka mengatakan TMTOWTDI, tapi ini adalah tugas yang T benar-benar MTOWTDI.


8

PHP

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

Edit:

Jika Anda lebih suka yang lebih panjang, inilah alternatifnya (tidak mencetak apa-apa):

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

Bagaimana Anda membuat ini?
Saurabh Rana

4
Ini adalah seri geometris 1/2 + 1/4 + 1/8 + ... = 1.
Casey Chu

2
dan loop 24 kali karena float memiliki 24 bit presisi
phuclv

7

Jawa Retoris

Anda tidak mengatakan itu harus bilangan bulat 1.

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

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


7

JavaScript (benar-benar ECMAScript)

function one() { return Number.length; }

Waktunya untuk beberapa spek porno.

Bagian 15.7.3 menyatakan bahwa lengthproperti Numberkonstruktor adalah 1(dan kita tahu bahwa konstruktor adalah objek fungsi seperti yang disebutkan dalam 4.3.4 ), dan itu karena bagian 15.3.5.1 mengatakan:

Nilai properti panjang adalah bilangan bulat yang menunjukkan jumlah argumen "tipikal" yang diharapkan oleh fungsi. Namun, bahasa memungkinkan fungsi dipanggil dengan sejumlah argumen lainnya.

... dan karena Numberjumlah tipikal konstruktor adalah 1, maka lengthdari Numberadalah 1. Jadi bisa dikatakan bahwa panjang angka dalam Javascript adalah 1.


6

Perl

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

Buka lebar dan katakan aaaaa.

Konsep kreatif adalah untuk kawat gigi bersarang di dalam kurung di dalam kawat gigi ... sedalam mungkin, sementara masih kembali hasil yang diinginkan, dan hanya menggunakan "satu" variabel ( $a, @a, %a, @$adan $#$atentu saja semua variabel yang berbeda).

Meskipun ini mengubah lingkungannya secara signifikan, itu akan selalu kembali 1pada panggilan berikutnya. Untuk memahami apa yang dilakukannya, Anda dapat mempertimbangkan menjalankan kode ini:

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

6

Tcl

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

Tidak berfungsi seperti yang mungkin Anda pikirkan.

(5+2-3)/4bukan perintah yang valid, jadi itu melempar kesalahan ( return -code 1), menangkap mengembalikan nomor ini.


6

MATEMATIKA

Menurut pendapat saya, cara matematika paling elegan untuk mengembalikan 1 menggunakan Mathematica:

-Exp[I Pi]

Identitas Euler.


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

Dapat disesuaikan untuk kembali sejumlah positif lainnya ndengan menambahkan metode printXuntuk Xdari 1 sampai n ke Splitter. Misalnya, memodifikasi Splitterke

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

Akan mengembalikan '2', tanpa perubahan apa pun yang diperlukan. Metode yang ditambahkan harus, terlepas dari namanya, menjadi duplikat yang tepat print1. Gunakan refleksi untuk mendapatkan sejumlah metode dalam splitter, dan panggil fungsi dengan nama itu.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.


5

C#

It should depend on hardware architecture:

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

WOW!


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

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]


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.


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.)


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

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.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.