Bazı ünlü bir liner veya iki liner programları ve denklemleri nelerdir? [kapalı]


22

Yeni bir platformla denemeler yapıyorum ve 60 karakterden uzun olmayan dizelerle ilgilenen bir program yazmaya çalışıyorum ve veri deposunu ünlü ya da tanınmış küçük kod parçalarıyla doldurmak istiyorum. denklemler, programlama ve matematikten beri yazılımımın teması ile birlikte gidiyor. Kod, toplamda 60 karakterden kısa olduğu sürece herhangi bir dilde ve herhangi bir matematik disiplindeki denklemlerde olabilir. İnsanların bunun için beyinlerinden ayrılacağından şüpheleniyorum .

Örneğin,

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

Tam olarak 60 karakter!

Bilgeliğin için çok teşekkürler!


22
Brainf k neden sansürlendi? Yetişkin olalım ve herkese okuyabileceklerini ve okuyamayacaklarını söyleyemez miyiz? Bu bağlamda brainf k bir müstehcenlik değildir.
ChaosPandion

2
Bu sorunun kapatılacağından şüpheleniyorum. Daha yapıcı olması için geliştirmeye çalışın. Bakınız: blog.stackoverflow.com/2010/09/good-subjective-bad-subjective
Maniero

8
@bigown: Bu iyi bir öznel ve yapıcı. Ünlü alıntıları istemekten farklı değil. Aslında, daha iyi, çünkü ünlü kod / denklem için “tırnak” istiyor. :-)
Macneil

@ Macneil: Aynı düşünüyorum, ancak soru zayıf, geliştirilebilir.
Maniero

3
@bigown: dürüst olmak gerekirse, bu sorunun nasıl daha yapıcı olabileceğini gerçekten göremiyorum. Senden şüphe etmemek, ama çok cidden sordum, @BeachRunnerJoe'ya bir iyileştirme önerebilir misin? Aslında cevapları çok beğendim ve onlardan çok şey öğrendim. Bu sorunun tekrar açılmasını görmek isterim.
Joris Meys

Yanıtlar:


34

Klasik C string kopya yordamı, bu günlerde daha az ve daha az insan tarafından bilinir:

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

3
evet, çok ünlü ... gazileri için!
BeachRunnerJoe

13
Ben "tarihsel" bir değere sahip olduğunu anlıyorum, korkunç bir kod, bu yüzden kullanılmayan düşüyor olması iyi bir şey =)
Thomas Bonini

9
AC ustaları hemen kalıbı tanıyacaktır. Bu aptalca C.
Barry Brown

6
Her zaman bunun inanılmaz derecede harika olduğunu düşündüm.
Maulrus

5
Söylemeliyim ki, @Kop ile aynı fikirdeyim. Sadece birkaç karakterde, standart kütüphanesinin ve anlambiliminin önemli kusurlarını gösterir. En saçma olan şeylerden biri, dizelerin uzunluk öneki yerine 0 ile sonlandırılmasıdır (bu daha güvenlidir ve bir dizenin uzunluğunu (O) belirler). İkincisi, C'nin gerçek boolean değerlerine sahip olmamasıdır ( if (alarm = red) launchNukes();-trap'i sabitler). Dijkstra bu kodu zararlılardan çok düşünür. Bir C programcısının en azından bu kodu anlaması zorunlu olduğuna katılıyorum, ancak daha iyi yapması için onun için daha önemli olduğunu düşünüyorum.
back2dos,

26

bir satır değil, ama Dünyanın Son C Böceği'nü sunuyorum:

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

2
Bu onlardan biri "Oh sh * t!" hatalar.
Kalay Adam

3
buLaunchNukes();
hasen

1
eğer şöyle yazılsaydı: eğer (GetRadarInfo () = 1) {...}, derlemediği için bu hatayı alamazdık. Bu yüzden her zaman ara değişken kullanmayın.
11:11

22

Conway'in APL'deki Hayat Oyununu çok gezdiğini gördüm:

Ek bir bonus, bunun unicode'u doğru kullandığınızdan emin olmanızdır.


2
Ha! kodunu gördüğümde ilk düşündüğüm şey buydu, güzel!
BeachRunnerJoe

Vay, bu etkileyici!
FinnNk


15
Ve Perl'in hat gürültüsü gibi göründüğünü düşündüm.
Kalay Adam,

1
@Greg, bekle, APL Roma ve Yunan alfabesinden daha fazla kullanıyor, çünkü zaten yeterli harf ve sembol yoktu; bazı karakterlerin diğer karakterlerin üzerine yazılması gerektiğinden, geri alma (daha doğru "overstrike" olarak da adlandırılır) da kullanılır. Bunlardan biri, bir matrisin ters çevrilmesini temsil eden bir karenin tepesinde bulunan bir bölme sembolüydü (eğer unary operatörü ise, veya bir binary operatörü olarak kullanılıyorsa ters matris ile çarpımı).
Tangurena

19

Ünlü bir Perl one-liner'in değiştirilmiş bir versiyonu:

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

Bu normal ifade, uzunluğu asal olan dizelerle eşleşir.

Orijinal versiyon:

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

hangi 1s asal sayıdan oluşan dizeleri eşleşir.


14

Hızlı sıralama:

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

Liste boşsa, sıralanan sonuç boş listedir.

Liste, x öğesiyle başlıyorsa ve listenin geri kalanı xs ise, sıralanan sonuç, tüm öğelerin sıralanan listesiyle birleştirilmiş x öğesiyle birleştirilmiş x'den küçük tüm öğelerden oluşan sıralanan listeden oluşan listedir. x'teki öğeler x'ten büyük.

(veya başka bir deyişle - hepsi x'den küçük ve x'ten büyük olan iki kümeye bölün, her ikisini de sıralayın ve kümeden küçük, öğeden ve öğeden büyük öğeden oluşan bir liste oluşturun).

C versiyonunun anlaşılabilirliğini oldukça kolay atar.


1
Bu Standart ML mi? Veya Haskell?
Barry Brown

3
Haskell. Dilin zihniyetini seviyorum.

Bölümleme alternatifini beğendimqsort (x:xs) = qsort lesser ++ equal ++ qsort greater where (lesser,equal,greater) = part x xs ([],[x],[])
Kendall Hopkins

1
Bunun, listenin başı yerine rastgele bir pivot kullanan bir sürümü var mı? Bu, CAR Hoare'in orijinaline daha yakın hale getirir.
Macneil

1
Hoare, “[pivot öğesi olarak] seçilen öğe her zaman ... bölümlenecek olan bölümün en yüksek adreslenmiş konumlarını kaplayan yer olmalıdır. rastgele seçilen öğe başlangıçta en çok adreslenmiş konumlara yerleştirilmelidir ". Bu yüzden Hoare'e sadık kalabilmek için ilk değil, son elemanla çalışmalıyız.


13

Çatal çatalını ilk bulduğumda, bunun gerçekten tatlı olduğunu düşündüm.

:(){ :|:& };:

Vay, bu sadece kötülük!
Macneil

Bütün ifadelere bak! Buna "Smiley bombası" diyebilirsin.
Mark C,


10

Denklemlerden bahsettiğiniz için, bu listenizde yer almaktadır:

e^{i\pi}+1=0

( Wolfram Alpha render : ei pi + 1 = 0)


Evet öyle! Aferin Euler, bir tane daha iyi!
BeachRunnerJoe

Bunu hatırlıyorume^{i/pi} = i^2
Josh K

@Josh K: Bu en çünkü i² == -1, eğer her iki taraftan birini çıkararak kaldırarak denklemi olabilir böylece +1ve değişen =0etmek -1veya
Daenyth

7

Çift sayılar nasıl belirlenir:

x % 2 == 0

3
Ya !(x%2)da akılcı dillerde.
Christian Mann

8
Veya !(x & 1)derleyici optimizasyonu olmayan dillerde.
jfs

1
@Hristiyan, sayılar boolean olmamalı - bir hata yapmak çok kolay.

7

import this Python'da.


Yorumlar satır sonları içeremediğinden EDIT: Kullanışlı bir Python yorumlayıcısı olmayanlar için bu, çıktıdır.

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!

Ben bir Python acemiyim. Bu ne başarırdı?
Richard

1
@Richard: Bunu Python etkileşimli tercümanına yazmayı deneyin :).
MAK,

Bu, pazar öğleden sonralarımı aydınlattı :)
Richard

@Richard Ciddi soru: Eğer bunu çalıştırırsanız, size yığın taşması veriyor mu?
Mark

6

2 satır değil ama bunun oldukça ünlü olduğunu söyleyebilirim:

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

Aslında bazı diller onu bir satırda tanımlayabilir. Lua akla geliyor ama dahası var.

x, y = y, x

kesinlikle ünlü!
BeachRunnerJoe

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

Sadece bunun nasıl uygulandığını merak ediyorum. geçici bir tablo oluşturuyor mu (y, x), ardından x'e 1. elemana ve y'ye 2. elemana atayın mı?
tactoth

Ayrıca, insanların gerçek yaşam programlamasında değerleri ne sıklıkta değiştirdiklerini merak ediyorum.
tactoth

1
@tactoth - Değiştirme, C ++ 'da kesinlikle istisnai durumlarda güvenli atamanın gerçekleştirilmesi için kullanılır.
Kaz Ejderha,

6

Favori lambda matematiği örneği Y birleştiricisidir:

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

6

K & R'deki bir alıştırmadan , burada verilen sayıda kaç bitin ayarlandığını döndüren bir işlev. 58 karakterde:

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

Ayarlanan bit sayısı ile orantılı olarak zaman alır. Burada "ah ha" kısmı bu

n = n & (n - 1)

En sağ ayarlanan biti kaldırır n.


Müthiş, güzel K & R referansı!
BeachRunnerJoe

6

Özyinelemeli Pascal'ın Tek Sıradaki Üçgeni (Haskell)

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

Elli iki karakter, zevkinize boşluk ekleyin. Yorumunda "Ephemient" izniyle burada .

Bunun J ve K'deki kriptik ama kısa çözümlerden daha iyi bir örnek olduğunu düşündüm (henüz Haskell kullanıcısı değilim).


6

Unix Ruleti (TEHLİKE!)

Bigown'un şaka konularındaki cevabının izniyle (ve yorumu):

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

(Bu 62 karakter uzunluğunda olduğundan, yorumu kaldırabilirsiniz (bu şekilde çalışır mı?) Veya bazı önemli olmayan alanlar.)


2
Lütfen bunu tehlikeli olarak işaretleyin.
Chinmay Kanchi,

Ben zsh kullanıyorum ve s / == / - eq / :-)
defhlt


4
DO 10 I=1.3

Bu tarihteki en pahalı böceklerden biri. Bu Fortran deyimi, 1.3 değişkenlik değerini adlandırılmış değişkene atar DO10I.

Doğru kod - döngünün başlığı ifadesi 10 etiketli ifadeye kadar tekrarlayan ifadeler ve döngü değişkeni I1, 2, 3 değerlerini kabul eder:

DO 10 I=1,3

1
Neden pahalı bir böcek?
Barry Brown

2
Bu hata, 1961 Mercury uzay uçuşu için yörünge yörüngelerini hesaplayan bir alt programdaydı. Ancak, piyasaya sürülmeden önce yakalandı ve düzeltildi ve bu nedenle pahalı bir hata değildi . Bir Mariner göreve benzer bir hata oluştu yaptığı görevin arıza nedeni olsa da,. (kaynak: Uzman C Programlama , sayfa 31-32.)
Darel

4

Duff'un Cihazı :

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

Tom Duff, dünyanın gördüğü en tuhaf C yapılarından birine bellek haritası çizilen bir port yazdığını gösterdi.


60 karaktere sığmaz, ancak def iyidir. Adının kredilerde geçtiğini ve bazı Pixar filmlerine bakarken ürpertici olduğunu hatırlıyorum.
Macneil

2

Akılda Merhaba Dünya ile ilgisi var. Birden fazla dili saklamayı planlıyorsanız, farklı varyasyonlarla gidebilirsiniz.

Daha önemsiz şeyler için, Fibbonacci var .


1
Fibbonacci, güzel olan! İşte kod ... eğer (k <2) k döndürür, aksi takdirde fib (k-1) + fib (k-2) döndürür;
BeachRunnerJoe

1
@BeachRunnerJoe: Bunu koşullu operatörle birleştirmek isteyebilirsiniz;)
back2dos

3
Evet kesinlikle! dönüş (k <2)? k: fib (k-1) + fib (k-2);
BeachRunnerJoe

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

Yukarıdaki Scala kodu satırı, kendi yaşlarına göre iki listeye ayrılır people(bir liste Person).

Java’da aynı şeyi yapmak için aşağıdaki kodun çoğunu alır:

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

Üçüncü bir değişken kullanmadan iki değişkenin değerlerini değiştirmek. Programlamamda bana söylenen ve düşündüğüm ilk şeylerden biri bu "Hmm ... bu harika"

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

Bunu XORs kullanarak yapabileceğinizi biliyorum , ama bu bugün için biraz nostalji oldu :)
Jonathon

XOR'un taşma sorunu yok. Bunu yapar?
İş

2

Kara Büyü'den John Carmack

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 Byte (Python) ile temsil edilebilecek en büyük sayı

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. Koşullu operatör :

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

  2. Yer değiştir

  3. her döngü için [Java]


1
Aslında, koşullu operatör doğru addır. Bir operatör üç argüman alırsa üçlüdür.
back2dos

@ back2dos - Aslında, hem C # hem de JavaScript buna koşullu işleç diyor.
ChaosPandion,

@ back2dos -: santral? does it üçlü operatör denir neden olan üç bağımsız değişken alır. Bu C'den itibaren doğru terminoloji olmuştur. (görünüşte
BCPL'den

@ grkvlt: Asla üç argüman almadığını söylemedim. Sadece !unary operatörünü veya +ikili operatörünü çağırmazsınız . Bu kesin değil.
back2dos,

1
@ back2dos - Bence bu bizim sorunumuz - Ben ediyorum bu durumda "meyve" olarak elma bakın, ama biz dil sözdizimi programlama değil, dilbilgisi savunarak düşünüyorum ve bunu doğru ?:koşullu operatörüdür;)
grkvlt

1

Bu Quine dan Jargon File C:

char * f = "char * f =% C% s% C,% C (;) {Printf (f, 34 f, 34,10)} Ana", ana () {Printf (f, 34 f, 34,10);}

Ayrıca bir LISP sürümü de var, ancak görüntüleyebildiğiniz herhangi bir dilde, etrafta dolaşan birçok kişi bulabilirsiniz ...


1

matematik evrendeki en güzel sayıları birbirine bağlayan euler kimliği: 1, 0, e, i ve π: e ^ i (π) + 1 = 0



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

Muhtemelen ünlü değil, favorilerimden biri. Çoğu için neden işe yaradığı hemen belli değil.


1

Bu, 60 karakterden biraz fazla ama gerçekten değişken isimlendirmeye bağlı (yani ben de dahil ediyorum!)

readLines (rdr: StreamReader) =
      seq {rdr.EndOfStream öğesinin
                verim vermemesini sağlar. rdr.ReadLine ()}

Bir dosyayı F # 'da satır satır sıralamak için küçük fonksiyon güzel.

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.