有哪些看似簡單其實非常精妙的代碼?

c c++ java python object-c java script Visual Basic PHP 彙編

MATLAB。。。。。

racket ml haskell coq idris agda wolfram (想要看似簡單其實精妙的代碼,怎麼能不用這些語言呢?


TCBE「如何用 100 行 hs 寫強類型函數式語言的解釋和 TC」,而且因為用了 HOAS,因此實現了 Substitution-free,速度極快……

https://github.com/AndrasKovacs/tcbe/blob/master/Minimal.hs

module Minimal where

import Prelude hiding (pi)
import Control.Monad
import Data.Either

import Data.HashMap.Strict (HashMap, (!))
import qualified Data.HashMap.Strict as HM

import Syntax (RawTerm)
import qualified Syntax as S

import Debug.Trace

data Term = Var !Int
| App Term Term
| Lam Term Term
| Pi Term Term
| Star
deriving (Eq)

data Val
= VVar !Int
| VApp Val Val
| VLam Type (Val -&> Val)
| VPi Type (Val -&> Val)
| VStar

data Infer
= Ok Type
| IPi Type (Val -&> TM Infer)

type Type = Val
type Cxt = ([Val], [Type], Int)
type TM = Either String

cxt0 :: Cxt
cxt0 = ([], [], 0)

(&<:) :: (Val, Type) -&> Cxt -&> Cxt
(&<:) (v, t) (vs, ts, d) = (v:vs, t:ts, d + 1) (&<::) :: Type -&> Cxt -&> Cxt
(&<::) t (vs, ts, d) = (VVar d:vs, t:ts, d + 1) vapp :: Val -&> Val -&> Val
vapp (VLam _ f) x = f x
vapp f x = VApp f x

quoteInfer :: Int -&> Infer -&> TM Term
quoteInfer d = case
Ok ty -&> pure $ quote d ty
IPi a b -&> Pi (quote d a) &<$&> (quoteInfer (d + 1) =&<&< b (VVar d)) evaluate :: [Val] -&> Int -&> Term -&> Val
evaluate vs d = case
Var i -&> vs !! (d - i - 1)
App f x -&> evaluate vs d f `vapp` evaluate vs d x
Lam a t -&> VLam (evaluate vs d a) $ v -&> evaluate (v:vs) (d + 1) t
Pi a b -&> VPi (evaluate vs d a) $ v -&> evaluate (v:vs) (d + 1) b
Star -&> VStar

quote :: Int -&> Val -&> Term
quote d = case
VVar i -&> Var i
VApp f x -&> App (quote d f) (quote d x)
VLam a t -&> Lam (quote d a) (quote (d + 1) (t (VVar d)))
VPi a b -&> Pi (quote d a) (quote (d + 1) (b (VVar d)))
VStar -&> Star

check :: Cxt -&> Term -&> Term -&> TM ()
check cxt@(_, _, d) t expect = do
tt &<- quoteInfer d =&<&< infer cxt t unless (tt == expect) $ Left "type mismatch" infer :: Cxt -&> Term -&> TM Infer
infer cxt@(vs, ts, d) = case
Var i -&> pure $ Ok (ts !! (d - i - 1))
Star -&> pure $ Ok VStar
Lam a t -&> do
check cxt a Star
let a" = evaluate vs d a
pure $ IPi a" $ v -&> infer ((v, a") &<: cxt) t Pi a b -&> do
check cxt a Star
check (evaluate vs d a &<:: cxt) b Star pure $ Ok VStar App f x -&>
infer cxt f &>&>= case
IPi a b -&> do
check cxt x (quote d a)
b (evaluate vs d x)
Ok (VPi a b) -&> do
check cxt x (quote d a)
pure $ Ok $ b (evaluate vs d x)
_ -&> Left "Can"t apply non-function"


#define ture true


在知乎上看到的,但已經找不到了原答案了:

return a==b ?a:b

翻譯:如果我和女票的意見統一時聽我的,否則的話,就聽女票的→_→


答這道題的基本都是程序員吧?我這個學生物的湊個熱鬧~

我不會碼代碼,不過我看過一些絕妙的代碼,它們大概長這樣:

這是一些叫做「小鼠肝炎病毒」的RNA序列片段,這種病毒(以及許多其他病毒)的遺傳序列有一個特性:

正著編譯是一種蛋白,反過來編譯是另一種蛋白

就好比你的代碼寫成機器碼是0100110001010,那麼正著編譯出來是一個意思,反過來0101000110010則是另一個意思……

病毒的遺傳序列就是精簡到了如此變態的地步……

各位程序員們,要不要嘗試著編一段正反意思不同、且都有意義的編碼呢?

以上

Reference:

Zhang X, Liao C, Lai M M, et al. Coronavirus leader RNA regulates and initiates subgenomic mRNA transcription both in trans and in cis.[J]. Journal of Virology, 1994, 68(8): 4738-4746.

------------

輪子哥在評論里貼了個鏈接,是他寫的代碼,各位可以去圍觀一下


雖然可能已經被說爛了,可初見確實驚艷啊。心想怎麼會有這麼好看的代碼~【花痴臉

快速排序:

qsort [] = []
qsort (x: xs) = qsort l ++ [x] ++ qsort r
where (l, r) = partition (&< x) xs

斐波那契數列:

fib = 1: 1: zipWith (+) fib (tail fib)

來自評論區更短的斐波那契數列:

fib = 1: scanl (+) 1 fib

查了一下 wiki 這兩個實現都是 O(n) 噠~ @vczh

The Fibonacci sequence

篩法求素數:

sieve (p: xs) = p: sieve [x | x &<- xs, mod x p /= 0] primes = sieve [2..]


評論知友以及樓下有答案提到了《 hacker"s delight 》這本書,裡面有大量這樣的底層優化

以及謝謝評論指出a - b有可能會溢出,所這段代碼普適性確實比較差.. 一般是都是正數或者ICPC題目中比較常見的|a| &<= 10^9 這種

-----------------------------------------------

(b (a - b &>&> 31) | a ~(a - b &>&> 31))

相當於求max(a, b),僅適用於有符號32位int, 但同理可以改成16位,64位,等等

優點是彙編代碼中完全避免了跳轉語句,在分支檢測效果不好的情況下是巨大的常數優化

如果想測速一下的話,最好是關掉優化測(複雜代碼中開著優化一般也會變快,但是簡單的測試代碼基本上都會被優化掉)


不知道多少年前從 @葉蔚 的QQ空間上看來的:

#define 趁還 while
#define 那個啥 int
#define 總的來說 main
#define 買 cin
#define 賣 cout
#define 進 &>&>
#define 出 &<&< #define 拜拜了 return #define 去掉 -= #define 等於 = #define 屁 100e4 #define 我說 ( #define 是吧 ) #define 啊 a #define 那麼就 { #define 得了 } #define 呀 ; #include &
using namespace std;
那個啥 總的來說 我說 那個啥 啊 是吧
那麼就 那個啥 有錢 等於 屁 呀
趁還 我說 有錢 是吧 那麼就
那個啥 多少 呀 買 進 多少 呀 賣 出 多少 呀 有錢 去掉 多少 呀
賣 出 多少 呀 得了
拜拜了 啊 呀 得了


int lowbit(int x)
{
return x-x;
}

樹狀數組裡的這個,太精妙了,樹狀數組使區間求和複雜度降低到了log(n),發明這段代碼的人一定是個天才,而這個lowbit恰恰是最精妙的一部分,可以準確的找到我們需要加的部分,巧妙的利用了計算機的位運算


被離職程序員拿走不謝

#define TRUE (_LINE_ % 13 != 0)

#define &>= &>


曾經在某著名blog上看到有人吹lisp。然後拿python舉例,python本身夠靈活了吧?lisp和python相比怎麼樣呢?然後lisp方給出的例子是一個累加器生成器f:

調用 f(k) 產生返回一個初始值為k的累加器 g,然後每次調用 g(m),都會在先前基礎上加上m並返回結果。

python,特別是2.x的版本由於對閉包local等機制支持不太完整很難寫出很漂亮的解決方案。但是lisp可以。然後blog結論當然是lisp吼啦。

評論區下面一堆人拿各類語言寫,試圖孬lisp。其中最短一個幾乎肯定吊打lisp:

f=n=&>i=&>n+=i

對這是 ECMAScript6。對於這個問題幾乎不可能有更短的答案了(12個字元長)。

這個答案基本相當於:

var f = function(n) {
return function(i) {
n = n + i;
return n;
}
}

應該到這裡就結束了。但是我們應該反思一下,為什麼ECMAScript6在這裡可以寫這麼短。我想原因主要有:

  1. javascript全局變數不用聲明類型,前面也不需要加auto/var/let,這樣一來(其他不變時)相比靜態類型的肯定更短
  2. javascript允許單行後面不帶分號,至少少一個字元
  3. javascript繼承了部分C的表達式均有值的概念,因此累加結果n+=i直接可以返回,python等做不到
  4. javascript天然的相對完善雖然略奇怪的閉包支持。沒閉包或者不完整的做這項工作很頭疼
  5. javascript中函數很接近first-class,不需要像c++/python等特地搞lambda範式的聲明,或者有非常顯式的內聯函數
  6. ecmascript6箭頭運算符的引入大大簡化匿名函數,並且可以輕鬆級聯

----------------------------

由於和問題無關,我也不吹不黑問題以外的lisp, js, python到底如何。

???寫記敘文都可以引戰,在下不奉陪。


long long ago
double kill


……


//從0到n-1中隨機等概率輸出m個不同的數

//假設輸入的n遠大於m
void knuth(int n, int m)
{
for (int i = 0; i &< n; i++) { if (rand() % (n - i)&

證明:

1.輸出不同的m個值:

由這個for循環循環n次,且在滿足條件時才輸出i,可知,輸出不同值的要求已滿足,因為每次輸出的都是i值,而i值每次都是不一樣的,m--保證了程序在輸出了m個值後就不再輸出i。


2.等概率:

在i=0時,rand()%(n-i)的取值範圍為0到n-1,共n個數,此時要輸出0隻需要rand()%(n-i)小於m,故i=0被輸出的概率為m/n;

在i=1時,rand()%(n-i)的取值範圍為0到n-2,共n-1個數,若i=0沒有被輸出,則m--未被執行,此時i=1被輸出的概率為m/(n-1),若i=0已經被輸出了,則m變為m-1,此時i=1被輸出的概率為(m-1)/(n-1);由概率論的知識,可知此時i=1被輸出的概率為

P=(1-m/n)*(m/(n-1))+m/n*((m-1)/(n-1))=m/n;

以此類推,可知每個數被輸出的概率都為m/n。


這次要說的是一段HTML代碼,同時也是知乎的一個頁面,很簡單,如下圖:

我相信,學過一段時間的HTML CSS,很快就能實現這樣一個頁面。

這也是一個網站標配的提示頁面,如果用戶的瀏覽器版本比較舊,就提示用戶升級,以免影響正常的瀏覽。

當然,如果你是比較現代的瀏覽器,那就不會看到這個頁面了,可以使用下面的方式看到這個頁面:

這本沒什麼,精妙的地方來了,右鍵,審查元素「直接進入知乎」——

目光不要移開:

感受到了來自知乎的「善意」了么?

斷句後: Get in zhihu because I am stupid.

如果你曾經用舊瀏覽器訪問過知乎,並且還「直接進入知乎」了,那……


補一個簡單的代碼片段,希望還沒有人提到:

大家都知道,替換兩個變數的值,一般需要引入第三個變數,下面的代碼就不需要,但是,這個方法了解一下就好,別在項目中使用,具體見評論區:

假設這兩個變數是a , b

a = a^b

b = a^b

a = a^b

基本上c系的語言都支持,打開瀏覽器的console也可以一試。


沉睡排序法(sleep sort),複雜度O(wtf)

補充:

箭頭函數有人看不太明白,翻譯一下

/*-----------------------------------------*/

var numbers = [...]
numbers.forEach(
function(num){
setTimeout(function(){
console.log(num)
},num);
});


補充一個

[].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1&<&<24))).toString(16)})

顯示頁面元素邊框
據說來自某谷歌工程師,膜拜。


轉載,侵刪:原貼地址 http://blog.chinaunix.net/uid-233938-id-162628.html 一段列印自己的小程序

#include &
#include &

extern char * _binary_test_c_start;
int main()
{
printf("%s", (char *)_binary_test_c_start);
}


Makefile

SRC = test.c
TAR = t
ALL:test.c
objcopy -I binary -O elf32-i386 -B i386 test.c test.bin
gcc -o t test.c test.bin

一段代碼列印自己,但是這樣寫還是有一些隱患的,不過確實很有意思


再深入看這個問題,發現很有意思:The Quine Page (self-reproducing code)


while(1)
{
printf("a");
}

試過的都知道

作為一個在上課時試過的人,說多了全是淚


書名《演算法競賽:入門經典》劉汝佳

4.27更新

之前寫 判斷是否相等並返回


if(a==b)
return 1;
else
return 0;

直到今天看《演算法》


return a==b;

突然感覺到自己思維的局限


# P is the list of coordinates of vertices of the polygon
def polygon_area(P):
n = len(P)
P.append(P[0])
S = 0
for i in range(0, n):
x1,y1 = P[i]
x2,y2 = P[i + 1]
S = S + (x1 + x2) * (y2 - y1)
return 0.5 * abs(S)

P是多邊形端點坐標的列表。給定端點坐標,該函數可以計算任意簡單多邊形的面積,也就是說三角形、四邊行、六邊行以及各種奇形怪狀的多邊形都有統一的計算方法。


推薦閱讀:

TAG:遊戲 | 軟體 | 編程 | C(編程語言) | C / C++ |