web-dev-qa-db-ja.com

有名な1行または2行のプログラムと方程式は何ですか?

私は新しいプラットフォームを試していて、60文字以下の文字列を処理するプログラムを書こうとしています。データストアに、有名なまたはよく知られた小さなコードのチャンクをいくつか追加します。方程式とは、プログラミングと数学が私のソフトウェアのテーマに沿っているからです。コードの長さは、合計60文字未満であれば、どの言語でも、数学のあらゆる分野の方程式でもかまいません。私は人々がいくつかを壊すつもりだと思う brainfuck これのために。

例えば、

#include<stdio.h>
int main(){printf ("Hi World\n");return 0;}

まさに60文字!

あなたの知恵をどうもありがとう!

22
BeachRunnerJoe

古典的なC文字列コピールーチンは、最近ではあまり知られていません。

while (*d++ = *s++);
34
Macneil

1行ではありませんが、世界の最後のCバグを提示します。

    status = GetRadarInfo();
    if (status = 1)
      LaunchNukes();
26
Darel

私はAPLのConwayのGame of Lifeをたくさん見かけます:

追加のボーナスは、これにより、Unicodeを正しく処理していることを確認できることです。

有名なPerlワンライナーの修正バージョン:

/^.?$|^(..+?)\1+$/

この正規表現は、長さが素数の文字列に一致します。

元のバージョンは次のとおりです。

/^1?$|^(11+?)\1+$/

これは、1の素数で構成される文字列に一致します。

19
Barry Brown

クイックソート:

qsort []     = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)

リストが空の場合、ソートされた結果は空のリストになります。

リストが要素xで始まり、リストの残りがxsである場合、ソートされた結果は、x未満のxs内のすべての要素と、要素xがすべてのソートされたリストと連結されて連結されたリストから構成されるリストです。 xsの要素がxより大きい。

(または言い換えると、すべてxより小さく、すべてxより大きな2つの山に分割し、両方を並べ替えて、小なり山、要素x、および大なり山のリストを作成します)。

Cバージョンの理解を簡単に上回ります。

14
user1249

私が最初にbashフォークボムを見つけたとき、それは本当に甘いと思いました。

:(){ :|:& };:
13
Matt
  1. アッカーマン関数 。 Ackermann-Péterバージョンの実装は60文字に収まるはずです:)

  2. この素敵な16進定数:0x5f3759df。これは、私が今まで見た中で最もWTFingなコードの中心です 高速な逆平方根

  3. 有名な XORスワップ

  4. question = /(bb|[^b]{2})/

13
back2dos
print "hello world\n";

そしてその派生物は人気があるようです。 :-)

12
the Tin Man

あなたは方程式に言及しているので、これはあなたのリストに属しています:

e^{i\pi}+1=0

Wolfram Alphaレンダリング : e i pi + 1 = 0

10
Macneil

偶数を検出する方法:

x % 2 == 0
7
frogstarr78

import this Python。


コメントは改行を含むことができないため、編集:Python便利なインタープリターがない場合、これは出力です

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
7
MAK

Unixルーレット(危険!)

ジョークスレッドでのBigownの回答(およびコメント)の礼儀:

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo Click #Roulette

(これは62文字の長さなので、コメント(そのように機能しますか?)または必須でないスペースを削除できます。)

6
Mark C

パスカルの再帰的三角形の1行(Haskell)

  r n=take(n+1)$iterate(\a->zipWith(+)(0:a)$a++[0])[1]

52文字、スペースを追加して味わってください。コメントの「エフェミエント」の礼儀 ここ

これは、[〜#〜] j [〜#〜][〜#〜] k [〜#〜](まだHaskellのユーザーではありませんが)。

6
Mark C

2行ではありませんが、これは非常に有名です。

void swap(float* x, float* y)
{
    float t;
    t = *x;
    *x = *y;
    *y = t;
}

実際、一部の言語では1行で説明できます。 Luaが思い浮かびますが、まだまだあります。

x, y = y, x
6
ChaosPandion

私のお気に入りのラムダ計算の例は、Y Combinatorです。

Y = λf.(λx.f (x x)) (λx.f (x x))
6
Macneil

K&R、の演習から、指定した数に設定されているビット数を返す関数を次に示します。 58文字で:

int bits(int n){int b=0;while(n){n=n&(n-1);b++;}return b;}

設定したビット数に比例して時間がかかります。ここの「あはは」の部分は

n = n & (n - 1)

nから右端のセットビットを削除します。

6
Macneil

無限フィボナッチ数列(Haskell)

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
5
Kendall Hopkins
DO 10 I=1.3

これは、歴史上最も高価なバグの1つです。このFortranステートメントは、1.3の浮動小数点値をDO10Iという名前の変数に割り当てます。

正しいコード-10とラベル付けされたステートメントまでのループ繰り返しステートメントのヘッダーと、値1、2、3を受け入れるループ変数I

DO 10 I=1,3
4
azheglov

ダフのデバイス

void send(short *to, short *from, int count)
{
    int n = (count +7 ) / 8;

    switch (count % 8) {
    case 0: do {    *to = *from++;
    case 7:         *to = *from++;
    case 6:         *to = *from++;
    case 5:         *to = *from++;
    case 4:         *to = *from++;
    case 3:         *to = *from++;
    case 2:         *to = *from++;
    case 1:         *to = *from++;
        } while(--n > 0);
    }
}

トムダフは、メモリマップされたポートの書き込みを展開し、世界で最も奇妙なCコンストラクトの1つに書き込みました。

4
Jesse C. Slicer
val (minors, adults) = people.partition(_.age < 18)

上記のScalaコードパーティションpeoplePersonsのリスト)は、それぞれの年齢に基づいて2つのリストに分割されます。

Javaで同じことを行うには、次の多くのコードが必要です。

List<Person> minors = new ArrayList<Person>();
List<Person> adults = new ArrayList<Person>();
for(Person p : people) {
  if(p.age < 18) {
    minors.add(p);
  } else {
    adults.add(p);
  }
}
2
missingfaktor

3番目の変数を使用せずに2つの変数の値を交換する。これは、プログラミングで最初に言われたことの1つで、「うーん...それはかっこいい」

int a,b; 
b=a-b;
a=a-b;
b=a+b;
2
Jonathon

ブラックマジック ジョンカーマックから

float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                       // evil floating point bit level hacking
    i  = 0x5f3759df - ( i >> 1 );               // what the ****?
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
//  y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed

    return y;
}
2
Rohan Monga

8バイト(Python)で表すことができる最大数

print '\n'.join("%i Byte = %i Bit = largest number: %i" % (j, j*8, 256**j-1) for j in (1 << i for i in xrange(8)))
2
ykombinator

これは60文字を少し超えていますが、実際には変数の命名に依存しています(そのため、ここに含めます!)

readLines(rdr:StreamReader)=
seq {一方、rdr.EndOfStreamではありません
yield rdr.ReadLine()}

F#でファイルを1行ずつシーケンスに読み込むための素晴らしい関数。

1
Jetti

「x」軸の周りの回転を安価で高速かつ簡単に近似する場合:

d = 0.0001;
y = y + z * d;
z = z - Y * d;

これは概算ですが、エラーに気づくことはありません

1
Hounshell

無限フィボナッチ数列 Scalaの場合:

val fibs: Stream[BigInt] = 0 #:: 1 #:: { for((x, y) <- fibs.Zip(fibs.tail)) 
                                           yield x + y }
1
missingfaktor

これは QuineJargon File からC:

 char * f = "char * f =%c%s%c; main(){printf(f、34、f、34,10);}%c"; main(){printf(f 、34、f、34,10);} 

そこにもLISPバージョンもありますが、他の多くのが浮かんでいます。

1
grkvlt

数学の世界で最も美しい数字をリンクするオイラーのアイデンティティ:1、0、e、i、およびπ:e ^ i(π)+ 1 =

1
numan

Hello Worldに関することは何でも頭に浮かびます。複数の言語を保存する場合は、さまざまなバリエーションを使用できます。

もっと重要なものとして、 Fibbonacci があります。

1
Peach
  1. 条件演算子

    minVal =(a <b)? a:b;

  2. Switch case

  3. for-eachループ [Java]

1
Chankey Pathak

私は良いものを持っていて、それをマージンに書き留めました。

1
Tim
int gcd(int a, int b)
{
   while(b>0)
   {
      int t = a%b;
      a=b;
      b=t;
   }
   return a;
}

おそらく有名ではありませんが、私のお気に入りの1つです。ほとんどの場合、それが機能する理由はすぐにはわかりません。

1
Jeremiah Nunn

私はC#の新しい機能がnullではない値を返すのが好きです。

var notnull = userInputName ?? "Captain NEMO";

そしてそれらのラムダもかなり甘いです:

Func<int, int, int> addfn = (a, b) => a + b;
Func<int, int> addtwofn = (a) => addfn(a, 2);
var result = addtwofn(5); // returns 7
0
Genius

有名ではありませんが、nの平方根を計算する恐ろしい方法で、結果はnになります。

for(double r=1;r!=n;n=r==(r=0.5*(r+(n<0?-n:n)/r))?r:n);

そして、はい、負の数の処理は正しくありません。

0
Anon

再帰的に文字列を反転

 if ( str.length() <= 1)  { return str; // stopping case } 
 else { return reverse(str.substring(1)) + str.charAt(0); // recursion   } 
0
pramodc84