有名な1ライナーまたは2ライナーのプログラムと方程式は何ですか?[閉まっている]


22

私は新しいプラットフォームで実験しており、60文字以下の文字列を扱うプログラムを作成しようとしています。有名なまたはよく知られた小さなコードの塊をデータストアに追加したいと思います。プログラミングと数学は私のソフトウェアのテーマに沿っているので、方程式。コードは、長さが合計60文字未満である限り、任意の言語および数学の専門分野の方程式を使用できます。私は人々がこの1 つのためにいくつかの頭痛をするつもりだと思う。

例えば、

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

正確に60文字!

あなたの知恵に感謝します!


22
なぜbrainf kは検閲されたのですか?私たちは大人になり、誰に読むことができ、何が読めないのかを教えてはいけませんか この文脈では、brainf kはわいせつではありません。
ChaosPandion

2
この質問は終了するでしょう。より建設的になるように改善してみてください。参照:blog.stackoverflow.com/2010/09/good-subjective-bad-subjective
Maniero

8
@bigown:これは良い主観的なもので、建設的です。それは有名な引用を求めることと同じです。実際、有名なコード/式の「引用符」を要求しているので、より良いです。:
マクニール

@Macneil:同じように思うが、問題は貧弱で、改善できる。
マニエロ

3
@bigown:正直なところ、この質問がどのように建設的なものになるのか、本当にわかりません。疑う余地はありませんが、@ BeachRunnerJoeの改善を提案してもらえますか?私は実際に答えをとても楽しんで、それらから多くを学びました。この質問が再開されるのを楽しみにしています。
ジョリスMeys

回答:


34

古典的なC文字列コピールーチンは、最近ではますます少数の人々に知られています。

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

3
はい、非常に有名です...退役軍人に!
BeachRunnerJoe

13
私はそれが「歴史的」価値を持っていることを理解していますが、それはひどいひどいコードですので、使われなくなっているという事実は良いことです=)
トーマス・ボニーニ

9
ACのベテランはすぐにパターンを認識します。それはC.慣用的だ
バリー・ブラウン

6
これは信じられないほどクールだといつも思っていました。
マウルス

5
@Kopに同意します。ほんの数文字で、標準ライブラリとセマンティクスの重大な欠陥を示しています。最も不合理なことの1つは、長さの接頭辞ではなく0で終わる文字列です(これはより安全で、文字列の長さを決定しますO(1))。2つ目は、Cには実際のブール値がないことです(if (alarm = red) launchNukes();-trap を修正します)。ダイクストラは、このコードを有害であると考えています。Cプログラマーが少なくともこのコードを理解することが不可欠であることには同意しますが、より良い方法を知ることは彼にとってより重要だと思います。
back2dos

26

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

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

2
それはそれらの1つです。エラー。
ティンマン

3
それはLaunchNukes();
ハッセン

1
if(GetRadarInfo()= 1){...}のように記述されている場合、コンパイルされないため、このバグは発生しません。そのため、常に中間変数を導入しないでください。
タクト

22

私はAPLのConwayのGame of Lifeがたくさん浮かんでいるのを見ます:

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


2
ハ!それはあなたのコードを見たときに私が最初に考えたものです、素晴らしい!
-BeachRunnerJoe

うわー、それは印象的です!
-FinnNk

4
v

15
そして、私はPerlがラインノイズのように見えると思った。
ティンマン

1
@Greg、ちょっと待ってください。APLはローマ字とギリシャ語のアルファベットよりも多くを使用しています。これは、文字と記号がまだ十分ではないためです。一部の文字は他の文字の上に入力する必要があるため、backspace(より適切には "overstrike"と呼ばれます)も使用されます。そのようなものの1つは、行列反転(単項演算子の場合、または逆行列が2項演算子として使用された場合の乗算)を表す、正方形の上の分割記号でした。
タングレナ

19

有名なPerlワンライナーの修正版:

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

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

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

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

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


14

クイックソート:

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

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

リストが要素xで始まり、リストの残りがxsである場合、並べ替えられた結果は、すべての並べ替えられたリストと連結された要素xと連結されたxより小さいxsのすべての要素で構成される並べ替えられたリストで構成されますxより大きいxsの要素。

(言い換えれば、すべてxより小さく、すべてxよりも大きい2つのパイルに分割し、両方をソートして、より小さいパイル、要素x、およびより大きいパイルのリストを作成します)。

Cバージョンの理解度を非常に簡単に破ります。


1
これは標準MLですか?またはHaskell?
バリーブラウン

3
ハスケル。私は言語の考え方が好きです。

パーティションの代替が好きですqsort (x:xs) = qsort lesser ++ equal ++ qsort greater where (lesser,equal,greater) = part x xs ([],[x],[])
ケンダルホプキンス

1
リストの先頭の代わりにランダムピボットを使用するこのバージョンはありますか?それはCAR Hoareのオリジナルに近づくでしょう。
マクニール

1
Hoareは、「(ピボット要素として)選択されるアイテムは、常に、分割されるセグメントの最も高いアドレスの場所を占めるものでなければなりません。これが有害な非ランダムな結果をもたらすことが懸念される場合、ランダムに選択されたアイテムは、最初に最もアドレスの高い場所に配置する必要があります。したがって、Hoareに忠実であるためには、最初ではなく最後の要素を使用する必要があります。


13

最初にバッシュフォークボムを見つけたとき、本当に甘いと思いました。

:(){ :|:& };:

うわー、それはただの悪です!
マクニール

すべてのスマイリーを見てください!これを「The Smiley bomb!」と呼ぶことができます。
マークC


10

方程式に言及しているため、これはリストに含まれます。

e^{i\pi}+1=0

ウルフラムアルファは、レンダリングei pi + 1 = 0


はい、そうです!グッド・オール・オイラー、もう一つの良いもの!
BeachRunnerJoe

これを覚えているe^{i/pi} = i^2
ジョシュK

@Josh K:それだからi² == -1、あなたは、両側から1を減算除去することによって式のバランスをとることができるように+1、変化=0する-1または
Daenyth

7

偶数を検出する方法:

x % 2 == 0

3
または!(x%2)健全な言語で。
クリスチャンマン

8
または!(x & 1)、コンパイラを最適化しない言語で。
jfs

1
@クリスチャン、数字はブール値であってはなりません-間違いを犯しやすいです。

7

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!

私はPython初心者です。これは何を達成しますか?
リチャード

1
@Richard:Pythonインタラクティブインタープリターでこれを書いてみてください:)。
MAK

これは私の日曜日の午後を明るくしました:)
リチャード

@Richard深刻な質問:これを実行すると、スタックオーバーフローが発生しますか?
マークC

6

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

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

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

x, y = y, x

間違いなく有名!
BeachRunnerJoe

7
ints:a ^ = b ^ = a ^ = b;
JulioC

私はこれがどのように実装されているのか興味がありますか?一時テーブル(y、x)を作成してから、xに1番目の要素、yに2番目の要素を割り当てますか?
タクト

また、私は実際のプログラミングで人々がどのくらいの頻度で価値観を交換するのか疑問に思っています。
タクト

1
@tactoth-スワップは、C ++で強力な例外安全割り当てを実装するために一般的に使用されます。
カズドラゴン

6

私のお気に入りのラムダ計算の例は、Yコンビネーターです。

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

6

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

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

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

n = n & (n - 1)

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


素晴らしい、素敵なK&Rリファレンス!
-BeachRunnerJoe

6

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

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

52文字、テイストにスペースを追加します。ここのコメントの「Ephemient」の礼儀

これはJKの不可解で短いソリューションよりも良い例だと思いました(まだHaskellのユーザーではありませんが)。


6

Unixルーレット(危険!)

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

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

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


2
これを危険としてマークしてください。
チンメイカンチ

私はzshを使用していますが、s / == /
-eq


4
DO 10 I=1.3

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

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

DO 10 I=1,3

1
なぜそれは高価なバグですか?
バリーブラウン

2
このバグは、1961年の水星宇宙飛行の軌道軌道を計算するサブルーチンにありました。ただし、起動前に検出および修正されたため、コストのかかるバグではありませんでした。マリナーミッションにも同様のバグがありましたしなかったものの、ミッションの原因故障が。(情報源:エキスパートCプログラミング、31〜32ページ)
ダレル

4

ダフのデバイス

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つに展開しました。


60文字には収まりませんが、defはクールです。ピクサー映画のクレジットで彼の名前が過去にスクロールしたのを見て悪寒になったことを覚えています。
マクニール

2

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

もっと些細なもののために、フィボナッチがあります。


1
フィボナッチ、いいね!コードは次のとおりです... if(k <2)return k; else return fib(k-1)+ fib(k-2);
BeachRunnerJoe

1
@BeachRunnerJoe:それを条件演算子と組み合わせたいと思うかもしれません;)
back2dos

3
はい、確かに!return(k <2)?k:fib(k-1)+ fib(k-2);
BeachRunnerJoe

2
val (minors, adults) = people.partition(_.age < 18)

上記のScalaコードパーティションの行people(リストPerson sのリスト)は、それぞれの年齢に基づいて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

3番目の変数を使用せずに2つの変数の値を交換します。これは、プログラミングで最初に言われ、「うーん、それはクールだ」と考えられたものの1つです。

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

XORs を使用してこれを行うことができることは知っていますが、これは今日の私の懐かしさでした:)
Jonathon

XORにはオーバーフローの問題はありません。これは?
ジョブ

2

ジョン・カーマックの黒魔術

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

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

1
  1. 条件演算子

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

  2. スイッチケース

  3. for-eachループ [Java]


1
実際、条件演算子は正しい名前です。3つの引数を取る場合、演算子は3項です。
back2dos

@ back2dos-実際、C#とJavaScriptの両方はこれを条件演算子と呼びます。
ChaosPandion

@ back2dos-?:演算子 3つの引数を取るため、3項演算子と呼ばれます。これは、C以降の正しい用語です。(明らかにウィキペディアによると、BCPLから始まる...)
grkvlt

@grkvlt:3つの引数をとらないと言ったことはありません。!単項演算子または+二項演算子を呼び出さないということです。単に正確ではありません。
back2dos

1
@ back2dos -私が思うに、これは私たちの問題である-私は考えている状況で、「フルーツ」としてリンゴを参照してください、私たちは言語構文をプログラミングではない、文法を主張していると思うし、あなたがその正しい?:条件演算子です。)
grkvlt

1

C の専門用語ファイルからのこのQuine

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

LISPバージョンもありますが、他にも多くの言語があり、イメージング可能なあらゆる言語で見られます...


1

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



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

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


1

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

readlines(rdr:StreamReader)=
      seq { rdr.EndOfStreamでは なく
                rdr.ReadLine()を生成します}

F#で1行ずつファイルをシーケンスに読み込む小さな機能。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.