Trở về 1 - Cuộc thi phổ biến [đã đóng]


28

Nhiệm vụ

Tạo một hàm / chương trình con trả về 1. Bạn có thể làm cho nó phức tạp như bạn muốn, miễn là nó trả về 1.

Những quy định

Các mục có nhiều chiến thắng nhất - giống như bất kỳ cuộc thi phổ biến nào. Chúc may mắn!


6
+1 bốn downvote nhưng 13 câu trả lời?, Nếu mọi người đang vui vẻ với câu hỏi này tại sao rất nhiều downvote?
jsedano

13 câu trả lời, nhưng chỉ có hai trong số họ đã giành được bất kỳ phiếu bầu nào. Có lẽ đây là phiên bản của chúng tôi về câu hỏi emacs vs vi - một câu hỏi mà mọi người đều có câu trả lời nhưng không ai trong số họ đặc biệt tốt hơn câu hỏi khác.
hộp bánh mì

5
@anakata, bởi vì bốn (bây giờ là sáu) mọi người nghĩ rằng đây là loại câu hỏi mà họ nghĩ sẽ tốt hơn không được đăng. Một số người chống lại sự cạnh tranh về sự nổi tiếng trên nguyên tắc, và điều này đang làm xáo trộn phần dưới của thể loại đó.
Peter Taylor

1
Đây là một trong những nơi mà codegolf phù hợp một cách khó chịu với định dạng stackexchange. So sánh phỏng đoán Collatz , hiện đang là xu hướng. Các câu trả lời đều khá trần tục (không có ý xúc phạm), bởi vì đó không phải là vấn đề tốt đối với việc chơi golf sáng tạo - cách tiếp cận ngây thơ cũng là ngắn nhất. Trong khi trong câu hỏi này, cuộc thi phổ biến cho phép tất cả các loại câu trả lời thú vị cho một nhiệm vụ rất tầm thường. Thú vị hơn nhiều để đọc - nhưng stackexchange được cho là để tránh những thứ kết thúc mở như thế này. Do đó, downvote.
hộp bánh mì

@breadbox Điểm đã thực hiện - Tôi sẽ làm cho các thử thách của mình trở nên thú vị hơn từ bây giờ:)
Doorknob

Câu trả lời:


37

Tập lệnh Golf

1

Phải mất một thời gian dài để tối ưu hóa mã này thành thuần túy nhất, và tôi dám nói nó - hình thức đẹp. Sự thanh lịch như vậy của ngôn ngữ không đến nếu không có nhiều năm thực hành tận tâm. Chương trình mà không có Máy tính hướng dẫn bằng không có nghĩa đen có thể không bao giờ bị nén thêm nữa. Toàn bộ sự nghiệp golf mã của tôi đã được dẫn đến thời điểm này.

Tôi rảnh. Tôi còn sống.

Tôi thấy mã làm nền tảng cho vũ trụ.


3
Bạn có thể viết một chương trình chỉ sử dụng một bit không?
Kevin - Tái lập Monica

@Kevin Chỉ trong Minecraft (Tôi đã làm điều đó trước đây - tạo màn hình 3x5 px và mọi thứ).
TimTech

1
without a Zero-Instruction-Set-Computer can literally never be compressed any further. Máy tính hiện tại của chúng tôi có thể dễ dàng xử lý 0 chương trình hướng dẫn. Tất cả những gì bạn cần là một ngôn ngữ có: "Chương trình trống trả về 1" trong thông số kỹ thuật của nó
Cruncher

36

C

Hai ví dụ, sử dụng các tính năng ngôn ngữ tối nghĩa, chẳng hạn như trở lại mạnh mẽ ( return!) và cách tiếp cận của nhà điều hành ( -->):

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

12
return-itừ khóa đặc biệt : P
Doorknob

4
Đối với những người muốn tìm hiểu thêm về '->', hãy xem stackoverflow.com/questions/1642028/
dọa

34

Brainfuck

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

Hoặc nếu bạn không vui vẻ trong các bữa tiệc:

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

2
Điều đó trông giống như một chữ thường lhơn a 1.
Joe Z.

26

APL

one ← {⍴⍴⍴⍵}

cung cấp cho bạn các kích thước của một vector. Chiều của đó luôn luôn là một chiều, vì vậy chiều của đó luôn là một chiều. Hoặc là:

"Rho, rho, rho của X
Luôn bằng một,
Rho là thứ nguyên; rho rho, xếp hạng
APL rất vui!"

(Tôi đã không viết câu đó, đó là Stallman.)


2
Tôi đã học bài hát Thiếu tướng hiện đại, hát bài hát Money của Monty Python và Still Alive từ Portal ... và đó vẫn là bài hát hay nhất từng bị mắc kẹt trong đầu tôi. Tốt tìm bến! Một câu thơ hay Stallman!
lochok

Điều tương tự trong J: # @: # @: #(Không gian là tùy chọn)
Iuʎs

21

Java

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

Điều này sẽ tự gọi mình 2 1024 lần (con số này có thể thay đổi trên các nền tảng khác nhau) trước khi cuối cùng trở lại 1. Đừng nín thở, mặc dù; nó sẽ dễ dàng mất nhiều thời gian hơn so với tuổi của vũ trụ.


3
"Điều này sẽ tự gọi mình 2 ^ 1024 lần" Tại sao? Tôi nghĩ đó là một vấn đề ngăn xếp. Hãy thử gọi cho mình cho đến khi bạn hết stack, sau đó làm lại, và một lần nữa?

@LegoStormtroopr cuối cùng cũng có một số thứ cố gắng ở đây để giữ ngăn xếp ở mức thấp, nhưng vẫn có rất nhiều cuộc gọi
Cruncher

2
@LegoStormtroopr Xem này .
arshajii

20

x gửi bộ đếm chương trình theo hướng ngẫu nhiên. # là một bức tường mà bộ đếm chương trình "bật" ra. Điều này theo nghĩa đen sẽ đi lang thang xung quanh cho đến khi nó tìm thấy "^" và sau đó in 1 và kết thúc.

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

+1 cho cả người phiên dịch mệt mỏi và để người khác> <> tè ra quần. Lol.
tomsmeding

Thật tuyệt khi cách này dễ dàng được dịch sang Befunge 98; chỉ đơn giản là thay đổi mọi thứ xthành a ?, mỗi #thành a r, nthành .;thành @. Tuy nhiên, chương trình này> <> có vẻ tốt hơn Befunge tương đương. Bản dịch được hiển thị ở đây: ideone.com/ZyuSKk
Justin

Có lẽ tôi thích điều này quá nhiều; Đây là một Befunge khác, nhưng cái này phải mất ~ 4 triệu thao tác để hoàn thành. Tôi tưởng tượng rằng nó có thể được dịch trực tiếp thành> <> bằng cách thay đổi mọi thứ ?thành a xvà mọi thứ #thành một !(nên hoạt động tốt khi để nguyên như vậy) và (tất nhiên) .thành n@sang ;. ideone.com/gfApjT
Justin

@Quincunx có vẻ như sẽ mất khoảng 2 ^ 10 lần thử, với số lần thao tác dự kiến ​​cho mỗi lần thử vào khoảng 10. Điều này mang lại cho tôi khoảng 2000 hoạt động. Tui bỏ lỡ điều gì vậy?
Cruncher

@Quincunx Nevermind, đó là 4 ^ 10. Hiểu rồi. haha FYI, tôi khá chắc chắn rằng mã có thể được giảm thiểu rất nhiều và vẫn làm điều tương tự.
Cruncher

19

Unix Shell (Bourne, POSIX, bash, ksh, csh, cám)

expr 0

Điều này in 0 nhưng trả về 1, có thể gây ngạc nhiên cho các lập trình viên sử dụng các ngôn ngữ khác. Bạn có thể tắt đầu ra được in và xem mã trả về bằng cách chạy expr 0 >/dev/null; echo $?.


1
Tôi đã từng bị điều này trước đây. Bạn muốn biết nếu một quá trình tồn tại? $(pidof progname) < 1
Ông Llama

18

Java

Đây là một trong những câu hỏi cụ thể về Java yêu thích của tôi.

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

Tôi không hiểu ...
Chàng trai với chiếc mũ

5
Cố gắng quay trở lại trong một trykhối ngay lập tức kích hoạt finallytrả về 1 trước khi returncâu lệnh khác có thể chạy.
PsHegger

À được rồi. Cảm ơn!
Chàng trai với chiếc mũ

Trở lại trong một khối cuối cùng sẽ ném một lỗi biên dịch. Tôi không thể nghĩ ra bất kỳ trường hợp sử dụng hợp pháp nào để làm việc đó.
Cruncher

Trong C #, nó không đưa ra lỗi biên dịch, nhưng trong Java thì có thể. Tất nhiên điều đó không có nghĩa là nó hữu ích, tôi cũng không thể nghĩ ra bất kỳ trường hợp sử dụng hợp pháp nào
PsHegger

16

JavaScript

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

Giải trình:

  • đầu tiên ![]đánh giá false.
  • sau đó ~falsetrở thành -1bởi vì falselần đầu tiên được chọn 0, và ~0 == -1.
  • cuối cùng, --1đánh giá để 1.

Luân phiên:

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

Crazy thay thế (mỗi dòng dài chính xác là 80 ký tự):

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
- ~ {} + [] là một cách tiếp cận khác. {} + [] ước tính thành 0.
tristin 17/12/13

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
Đó là một đoạn mã mạnh mẽ mà bạn có ở đây.
mveroone

@Kwaio Tôi đã mất nó khi đọc bình luận của bạn
Newbrict

OO == goodhay OO === good?
JoshWillik

3
@JoshWillik: Vâng. ;-)
tay nắm cửa

12

Haskell & Nhà thờ của ADT

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

Điều này xác định một sự thật One. Đây Onelà cả hai loại biểu thị Oneness , và các nhà xây dựng One, mà là chính nó chức năng nullary mà trả về một sự thật, và chỉ có một giá trị của loại hình One, đó là kìa, One.

Cách sử dụng trong 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

Cuốn sách đầy đủ của One hiện đang trực tuyến. Tải nó sẽ giúp bạn có cả hai di chúc: Tính toán và Số học. Điều này cho phép bạn khám phá thêm sự thật:

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

Không chứa 4


Tôi nghĩ rằng tôi đã thấy điều này trên xkcd.
mveroone

1
Vâng, đó là ý tưởng :)
Fels

8

Perl

sub ret1 { print $->$= }

(Mặc dù xuất hiện, chức năng không in bất cứ điều gì.)

Tôi biết các lập trình viên Perl thích nói TMTOWTDI, nhưng đây là một nhiệm vụ mà T thực sự MTOWTDI.


8

PHP

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

Chỉnh sửa:

Nếu bạn thích cái dài hơn, đây là một lựa chọn thay thế (nó không in bất cứ thứ gì):

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

Làm thế nào bạn đến với điều này?
Saurabh Rana

4
Đó là loạt hình học 1/2 + 1/4 + 1/8 + ... = 1.
Casey Chu

2
và nó lặp lại 24 lần vì float có 24 bit chính xác
phuclv

7

Hùng biện Java

Bạn không nói nó phải là số nguyên 1.

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

Nguồn: http://bash.org/?946461


7

JavaScript (ECMAScript thực sự)

function one() { return Number.length; }

Thời gian cho một số spec khiêu dâm.

Mục 15.7.3 nói rằng thuộc lengthtính của hàm Numbertạo là 1(và chúng ta biết rằng hàm tạo là một đối tượng hàm như đã đề cập trong 4.3.4 ) và đó là vì phần 15.3.5.1 nói:

Giá trị của thuộc tính độ dài là một số nguyên biểu thị số lượng đối số điển hình của người dùng được mong đợi bởi hàm. Tuy nhiên, ngôn ngữ cho phép hàm được gọi với một số đối số khác.

... và kể từ khi Numbersố điển hình của nhà xây dựng của các đối số là 1, lengthcủa Number1. Vì vậy, người ta có thể nói rằng độ dài của một số trong Javascript là 1.


6

Perl

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

Mở to và nói aaaaa.

Khái niệm sáng tạo là niềng răng làm tổ bên trong dấu ngoặc bên trong niềng răng ... càng sâu càng tốt, trong khi vẫn trả lại kết quả mong muốn, và chỉ sử dụng một "một" biến ( $a, @a, %a, @$a$#$adĩ nhiên là tất cả các biến khác nhau).

Mặc dù điều này không thay đổi đáng kể môi trường của nó, nhưng nó sẽ luôn trả 1về các cuộc gọi tiếp theo. Để nắm bắt những gì nó đang làm, bạn có thể xem xét việc chạy mã này:

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

6

Tcl

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

Không hoạt động như bạn nghĩ.

(5+2-3)/4không phải là một lệnh hợp lệ, vì vậy nó đưa ra một lỗi ( return -code 1), bắt trả về số này.


6

TOÁN HỌC

Theo tôi, cách toán học thanh lịch nhất để trả về 1 bằng Mathicala:

-Exp[I Pi]

Bản sắc 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(){}
}

Có thể được điều chỉnh để trả lại bất kỳ số dương khác nbằng cách thêm các phương pháp printXcho Xtừ 1 đến n vào Splitter. Ví dụ: sửa đổi Splitterthành

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

Sẽ trả về '2', mà không có bất kỳ thay đổi nào khác cần thiết. Các phương thức được thêm vào, ngoài tên, phải là một bản sao chính xác print1. Sử dụng sự phản chiếu để có được số lượng phương thức trong bộ chia và gọi một hàm với tên đó. P.getNum, sau đó được gọi, đọc dấu vết ngăn xếp và phân tích ký tự cuối cùng trong phương thức gọi và hiển thị nó.

Gọi print.getNum()trả lại ký tự '1'

Chỉnh sửa - sửa đổi để sử dụng không có chuỗi ký tự / số nguyên / vv.


5

C #

Nó nên phụ thuộc vào kiến ​​trúc phần cứng:

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

Ôi!


5

C #

Hợp nhất cái này (gây tranh cãi) với phỏng đoán Collatz (gây tranh cãi) lân cận :

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

Hồng ngọc

Lạm dụng RNG ...

Random.new(56417).rand(10000)

Tạo số "ngẫu nhiên" trong khoảng từ 0 đến 10000 và vì tôi đã chọn đúng hạt giống nên nó chỉ xảy ra là 1 .;)

Script tôi đã sử dụng để tìm số:

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

Một cổ điển:

TRUE + 0

+ cố gắng ép buộc đối số của nó thành một loại phổ biến: ở đây, vì thứ tự ưu tiên, nó ép buộc các số nguyên. Sự ép buộc của TRUEmột số nguyên cho 1.


Sẽ +TRUEkhông làm việc?
Griffin

1
@Griffin +TRUExảy ra để cho TRUE.
plannapus

Ngoài ra FALSE + 1, tôi có đúng không?
TimTech

@Timtech đúng là bạn.
plannapus

4

Máy turing

Máy Turing đơn trạng thái với B là ký hiệu trống, tính 1 (= 0.111 ... trong cơ sở 2):

q B 1 R q

(Điều này tuân theo quy ước bắt đầu với một băng trống và tiền tố '0.' của Turing cho chuỗi vô hạn được tạo.)


4

C

Nó thậm chí bao gồm tài liệu về các tham số của nó.

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

Nhưng đó là số 2!
Joe Z.

1
Vì thế? Nó được ghi chép đầy đủ!
Michael Hampton

3

Con trăn

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

one() sẽ tự gọi 111.111.111 lần, mỗi lần trả về 1, trước khi trả về giá trị cuối cùng là 1.

Bạn cũng có thể chỉ định số chữ số. Ví dụ, one(3)sẽ trả lại 1 chỉ 111 lần.

Tôi có thể thêm một lời giải thích sau, nhưng tôi thực sự không có thời gian vào lúc này.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.