Dönüş 1 - Popülerlik Yarışması [kapalı]


28

Görev

1 döndüren bir işlev / alt yordam oluşturun. 1 döndürdüğü kadar, istediğiniz kadar ayrıntılı yapabilirsiniz.

Kurallar

En fazla oy alan giriş kazanır - tıpkı herhangi bir popülerlik yarışmasında olduğu gibi. İyi şanslar!


6
+1 dördüncü oy ancak 13 cevap ?, insanlar bu soru ile eğleniyorlarsa neden bu kadar çok oy kullandı?
jsedano

13 cevap var, ancak sadece ikisi oy kullandı. Belki de bu, emacs vs vi sorusu versiyonumuzdur - biri herkesin cevabı vardır fakat hiçbiri diğerinden daha iyi değildir.
breadbox

5
@ anakata, çünkü dördü (şimdi altı tane yap) insanlar bunun daha iyi olacağını düşündükleri türden bir soru olduğunu düşünüyor. Bazı insanlar prensip olarak popülerlik yarışmasına karşılar ve bu kategorinin altını çiziyor.
Peter Taylor

1
Burası codegolf'un stackexchange formatına rahatça uyduğu yerlerden biri. Şu anda trend olan Collatz Conjecture'u karşılaştırın . Cevaplar oldukça sıradan (suçsuz), çünkü yaratıcı golf oynamak için iyi bir sorun değil - naif yaklaşım aynı zamanda en kısa yol. Oysa bu soruya göre, popülerlik yarışması çok önemsiz bir göreve her türlü ilginç cevabı verir. Okumak için çok daha zevkli - ancak stackexchange'in bunun gibi açık uçlu şeylerden kaçınması gerekiyor. Böylece aşağı oylar.
breadbox

@breadbox Puan alındı ​​- Şimdiden zorluklarımı daha ilginç hale getireceğim:)
Doorknob

Yanıtlar:


37

Golf Komut Dosyası

1

Bu kodu en saf hale getirmek uzun zaman aldı ve bunu söylemeye cüret ediyorum - güzel formda. Dilin bu kadar zarafeti, yıllarca süren özel bir uygulama olmadan gelmez. Sıfır-Talimat-Set-Bilgisayar olmadan, kelimenin tam anlamıyla bir daha asla sıkıştırılamaz. Tüm kod golf kariyerim bu ana öncü olmuştur.

Boşum. Hayattayım.

Evrenin altında yatan kodu görüyorum.


3
Sadece bir bit kullanan bir program yazabilir misiniz?
Kevin - Monica

@Kevin Sadece Minecraft'ta (daha önce yaptım - 3x5 piksel ekran ve her şey yapıldı).
Timtech

1
without a Zero-Instruction-Set-Computer can literally never be compressed any further. Mevcut bilgisayarlarımız 0 talimat programını kolayca idare edebilir. Sahip olduğunuz bir dile ihtiyacınız var: "Boş program 1" döndürür
Spuncher

36

C

“Güçlü dönüş” ( return!) ve “yaklaşımlar” operatörü ( -->) gibi gizli dil özelliklerini kullanan iki örnek :

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

12
Ve özel return-ianahtar kelime: P
Doorknob

4
'->' hakkında daha fazla bilgi edinmek isteyenler için şu stackoverflow.com/questions/1642028/…
Saurabh Rana

34

brainfuck

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

Veya partilerde eğlenmiyorsanız:

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

2
Daha küçük harf gibi görünüyor O lbir daha 1.
Joe Z.

26

APL

one ← {⍴⍴⍴⍵}

size bir vektörün boyutlarını verir. Boyutu böylece boyutu, her zaman tek boyutlu olan bu her zaman biridir. Veya:

“Rho, rho, X'in rho
her zaman birdir,
Rho boyuttur; rho rho,
APL rütbe eğlencelidir!”

(Ben o ayeti yazmadım, bu Stallman's.)


2
Ben Modern Tümgeneral Şarkı öğrenilen Portalı'ndan Monty Python ve Still Alive Money şarkısını söylenen ... ve hala etmiştir Nerdiest şarkı var hiç kafamda takılıp olmuştur. Marinus'u bulmak iyi! İyi bir ayet Stallman!
lochok,

J’de aynı şey: # @: # @: #(Boşluklar isteğe bağlıdır)
14ıʇǝɥʇuʎ’lar

21

Java

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

Sonunda dönmeden önce bu kendini 1024 kez arayacak (bu sayı farklı platformlarda değişebilir) 1. Yine de nefesini tutma; evrenin yaşından çok daha uzun sürecek .


3
“Bu, kendisini 2 ^ 1024 kez arayacak” Neden? Bence bu bir yığın meselesi. Yığın bitene kadar kendinizi aramayı deneyin, sonra tekrar ve tekrar mı?

@LegoStormtroopr burada nihayet yığınını düşük tutan bazı şeyleri denemek var, ama yine de çok fazla görüşme var
Cruncher

2
Bkz @LegoStormtroopr bu .
arshajii

20

Balık

x program sayacını rastgele bir yöne gönderir. #, program sayacının "sıçradığı" kapalı bir duvardır. Bu kelimenin tam anlamıyla "^" 'yi bulana kadar amaçsızca dolaşır ve sonra 1'i basar ve bitirir.

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

Tercümanı yormak ve pantolonuna başka iş>>> almak için +1. Lol.
13'te

Bunun kolayca Befunge 98'e nasıl çevrileceği çok hoş; basitçe her xbirini bir ?, her #içine r, niçine .ve ;içine değiştirin @. Ancak, bu> <> programı eşdeğer Befunge'den daha iyi görünüyor. Burada gösterilen çeviri: ideone.com/ZyuSKk
Justin

Belki bunu çok seviyorum; işte bir başka Befunge, ama bu, bitirmek için ~ 4 milyon işlem alıyor. Ben doğrudan tercüme edilebilir hayal> <> her değiştirerek ?bir içine xve her #bir içine !(çok aynı terk ettiğinde cezası çalışması gerekir) ve (elbette) .için nve @için ;. ideone.com/gfApjT
Justin

@Quincunx, yaklaşık 10 ^ 'da 10'ar kişilik bir işlemle beklenen işlemle yaklaşık 2 ^ 10 denemeye ihtiyaç duyuyor gibi görünüyor. Bu bana yaklaşık 2000 işlem veriyor. Bir şey mi eksik?
Cruncher

@ Quincunx Nevermind, saat 4 ^ 10. Anladım. lol. Bilginize, kodun büyük ölçüde küçültülebildiğinden ve hala aynı şeyi yapabileceğinden eminim.
Cruncher

19

Unix Kabuğu (Bourne, POSIX, bash, ksh, csh,…)

expr 0

Bu, 0 basar ancak 1'i döndürür ; bu, diğer dillere kullanılan programcılara sürpriz olabilir. Yazdırılan çıktıyı kapatabilir ve iade kodunu çalıştırarak görebilirsiniz expr 0 >/dev/null; echo $?.


1
Bunu daha önce de ısırmıştım. Bir işlem olup olmadığını bilmek ister misiniz? $(pidof progname) < 1
Bay Llama

18

Java

Bu benim en sevdiğim Java özel sorumdan biri.

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

Anlamadım ...
Şapkalı Adam

5
Bir trybloğa geri dönmeye çalışmak finally, diğer returnifadenin çalışabilmesi için önce 1 değerini döndüren anında ateşlenir .
PsHegger

Ah tamam. Teşekkürler!
Şapkalı Adam

Bir nihayet bloğa geri dönmek derleme hatası vermelidir. Bunu yapmak için herhangi bir meşru kullanım vakası düşünemiyorum.
Cruncher

C # ile derleme hatası atıyor, fakat Java'da mümkün. Tabii ki yararlı olduğu anlamına da gelmiyor, ne de bir meşru kullanım vakası
düşünemiyorum

16

JavaScript

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

Açıklama:

  • ilk olarak ![]değerlendirir false.
  • Daha sonra ~falseolur -1çünkü falsebirinciye döküm edilir 0ve ~0 == -1.
  • Sonunda, --1değerlendirir 1.

Alternatif:

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

Çılgın alternatif (her satır tam 80 karakter uzunluğunda):

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
- ~ {} + [] başka bir yaklaşımdır. {} + [] 0 olarak değerlendirir
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
Buraya geldiğin sağlam bir kod parçası.
mveroone

@Kwaio Ben yorumunuzu
okudum

OO == goodya OO === good?
JoshWillik

3
@JoshWillik: Evet. ;-)
Doorknob

12

Haskell ve ADT Kilisesi

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

Bu doğru olanı tanımlar One. Bu Oneifade eden türü hem birliğini ve yapıcı Onebu döner kendisi nullary fonksiyonu olan, bir doğru ve türden yalnızca bir değer One, Hani olup, One.

ghciREPL'de kullanım :

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

Tam One Kitabı on-line şimdi. Yüklemek size hem vasiyetname kazandırır: Hesaplama hem de Aritmetik. Bu, daha fazla gerçeği keşfetmenizi sağlar:

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

harika

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

4 içermez


Sanırım bunu xkcd'de gördüm.
mveroone

1
Evet, bu fikir :)
Fels

8

Perl

sub ret1 { print $->$= }

(Görünüşe rağmen, işlev hiçbir şey yazdırmaz.)

Perl programcılarının TMTOWTDI demek istediklerini biliyorum, ancak bu T'nin gerçekten MTOWTDI olan bir görev .


8

PHP

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

Düzenle:

Daha uzun bir tane tercih ederseniz, işte bir alternatif (hiçbir şey yazdırmıyor)

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

Bununla nasıl başa çıktın?
Saurabh Rana

4
Geometrik seri 1/2 + 1/4 + 1/8 + ... = 1
Casey Chu

2
ve float 24 hassaslıkta olduğu için 24 kez
dönüyor

7

Retorik Java

Tamsayı 1 olması gerektiğini söylemedin.

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

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


7

JavaScript (gerçekten ECMAScript)

function one() { return Number.length; }

Bazı pornoların vakti geldi.

Bölüm 15.7.3 o devletler lengthmülkiyeti Numberyapıcı olduğunu 1(ve biz yapıcı belirtildiği gibi bir işlev nesnesi olduğunu biliyoruz 4.3.4 ) bölümünde, çünkü o en 15.3.5.1 diyor ki:

Length özelliğinin değeri, işlev tarafından beklenen "tipik" argüman sayısını belirten bir tamsayıdır. Bununla birlikte, dil, işlevin başka sayıda argümanla çağrılmasına izin verir.

… Ve kurucunun Numbertipik argüman sayısı 1 olduğu için length, ' Numberdir 1. Yani biri Javascript’teki bir sayının uzunluğunun 1 olduğunu söyleyebilir.


6

Perl

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

Geniş aç ve söyle aaaaa.

Hala istenilen sonucu dönen ve sadece "bir" değişkeni kullanarak (ederken yaratıcı konsept, hem derinden mümkün olduğunca ... parantez içindeki parantez içinde iç içe parantezler oldu $a, @a, %a, @$ave $#$atabii ki tüm farklı değişkenlerin vardır).

Bu, ortamını önemli ölçüde değiştirse de 1, sonraki çağrılara her zaman geri dönecektir . Ne yaptığını anlamak için bu kodu çalıştırmayı düşünebilirsiniz:

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

6

Tcl

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

Düşündüğünüz gibi çalışmıyor.

(5+2-3)/4geçerli bir komut değil, bu yüzden bir hata atar ( return -code 1), catch bu sayıyı döndürür.


6

MATHEMATICA

Bence, Mathematica'yı kullanarak 1'i döndürmenin en zarif yolu:

-Exp[I Pi]

Euler Kimliği.


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

Başka pozitif sayısını döndürmek için ayarlanabilir nyöntemleri ekleyerek printXiçin X1 ila n Splitter. Örneğin, modifiye Splitteriçin

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

Gerekli başka herhangi bir değişiklik yapmadan '2' döndürür. Eklenen yöntemler, adından ayrı olarak, tam bir kopyası olmalıdır print1. Ayırıcıdaki yöntem sayısını almak için yansıma kullanır ve bu ada sahip bir işlevi çağırın. P.getNumsonra çağrılır, yığın izini okur ve çağıran yöntemdeki son karakteri ayrıştırır ve görüntüler.

Arama print.getNum(), '1' karakterini döndürür

Düzenleme - String / integer / etc değişmezleri kullanmamak için değiştirildi.


5

C #

Donanım mimarisine bağlı olmalıdır:

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

VAOV!


5

C #

Bunu (tartışmalı) birini komşu (tartışmalı) Collatz Konjeksiyonu ile birleştirmek :

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

Yakut

RNG'yi kötüye kullanmak ...

Random.new(56417).rand(10000)

0 ile 10000 arasında "rasgele" bir sayı oluşturur ve doğru tohumu seçtiğim için 1 olur.

Script Sayıyı bulmak için kullandım:

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,

Bir klasik:

TRUE + 0

+ argümanını ortak bir türe zorlamaya çalışır: burada, öncelik sırası nedeniyle tam sayılara zorlanır. TRUEBir tamsayıya zorlama 1 verir.


Misiniz +TRUEçalışmıyor?
Griffin,

1
@Griffin +TRUEvermek olur TRUE.
plannapus

Ayrıca FALSE + 1haklı mıyım?
Timtech

@Timtech evet sizsiniz.
plannapus

4

Turing makinesi

Boş sembol olarak B ile tek durumlu Turing makinesi, 1 değerini hesaplar (temel 2'de = 0.111 ...):

q B 1 R q

(Bu, Turing'in boş bir kasetle başlamasına ve oluşturulan sonsuz diziye '0' ekine koyulmasını takip eder.)



3

piton

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

one() 1'in bir son değerini döndürmeden önce her seferinde 1'i döndüren 111.111.111 kez kendisini arayacaktır.

Ayrıca hane sayısını belirleyebilirsiniz. Örneğin, one(3)yalnızca 111 kez 1 döndürür.

Daha sonra bir açıklama ekleyebilirim, ancak şu anda gerçekten zamanım yok.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.