유명한 한 줄짜리 또는 두 줄짜리 프로그램과 방정식은 무엇입니까? [닫은]


22

새로운 플랫폼을 실험 중이며 60 자 이하의 문자열을 처리하는 프로그램을 작성하려고하는데 유명하거나 잘 알려진 작은 코드 덩어리로 데이터 저장소를 채우고 싶습니다. 프로그래밍과 수학이 내 소프트웨어의 주제와 함께 진행되므로 방정식. 코드는 길이가 총 60 자 미만인 한 모든 수학 분야의 모든 언어와 방정식을 사용할 수 있습니다. 나는 사람들이 이것에 대해 약간의 섹스 를 할 것 같다.

예를 들어

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

정확히 60 자!

당신의 지혜에 너무 감사합니다!


22
왜 브레인 크가 검열 되었는가 ? 우리는 성인이 될 수없고 모든 사람들에게 그들이 읽을 수 있고 읽을 수없는 것을 말할 수는 없습니까? 이러한 맥락에서 두뇌 k는 외설이 아니다.
ChaosPandion

2
이 질문이 끝날 것으로 생각됩니다. 보다 건설적으로 개선하십시오. 참조 : blog.stackoverflow.com/2010/09/good-subjective-bad-subjective
Maniero

8
@bigown : 이것은 좋은 주관적인 것이고 건설적인 것입니다. 유명한 인용구를 요구하는 것과 다르지 않습니다. 사실, 유명한 코드 / 방정식 "인용구"를 요구하기 때문에 더 좋습니다. :-)
Macneil

@ Macneil : 같은 생각이지만 문제는 좋지 않습니다. 개선 될 수 있습니다.
Maniero

3
@bigown : 솔직히, 나는이 질문이 어떻게 더 건설적인지 알 수 없다. 의문의 여지가 없지만 매우 진정으로 물어 보면 @BeachRunnerJoe의 개선을 제안 할 수 있습니까? 나는 실제로 많은 답변을 즐기고 많은 것을 배웠습니다. 이 질문이 다시 열리는 것을보고 싶습니다.
Joris Meys

답변:


34

고전적인 C 문자열 복사 루틴은 요즘 점점 더 많은 사람들에게 알려져 있습니다.

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

3
예, 참전 용사들에게 매우 유명합니다!
BeachRunnerJoe

13
나는 그것을 가지고 이해하지만이 폐기에 떨어지고 있다는 사실은 좋은 일이다, 그래서 "역사"값이 끔찍한 끔찍한 코드) =이다
토마스 Bonini

9
AC 베테랑은이 패턴을 즉시 인식합니다. 관용구 C.
베리 브라운

6
항상 이것이 엄청나게 시원하다고 생각했습니다.
Maulrus

5
@Kop에 동의합니다. 단지 몇 개의 문자로 표준 lib 및 의미의 중요한 결함을 보여줍니다. 가장 터무니없는 것 중 하나는 길이 접두어 대신 0으로 끝나는 문자열입니다 (더 안전하고 문자열 O (1)의 길이를 결정합니다). 두 번째는 C에 실제 부울 값이 없다는 것입니다 ( if (alarm = red) launchNukes();-trap 수정 ). Dijkstra는이 코드를 유해한 것으로 간주합니다. 나는 C 프로그래머가 최소한이 코드를 이해하는 것이 필수적이라는 데 동의하지만 더 잘하는 방법을 아는 것이 더 중요하다고 생각합니다.
back2dos

26

한 줄이 아니라 세계의 마지막 C 버그를 제시합니다.

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

2
그 중 하나 인 "오 쉬!" 오류.
Tin Man

3
그건LaunchNukes();
하센

1
if (GetRadarInfo () = 1) {...}로 작성된 경우이 버그는 컴파일되지 않기 때문에 발생하지 않습니다. 따라서 항상 중간 변수를 도입하지는 마십시오.
tactoth

22

APL에서 Conway의 인생 게임이 많이 떠 다니는 것을 보았습니다.

추가 보너스는 유니 코드를 올바르게 처리하는 것입니다.


2
하아! 그것이 내가 당신의 코드를 보았을 때 가장 먼저 생각한 것입니다!
BeachRunnerJoe

와우, 그것은 인상적이다!
FinnNk


15
그리고 나는 Perl이 라인 노이즈처럼 보인다고 생각했다.
Tin Man

1
@Greg, 잠깐만, APL은 문자와 기호가 충분하지 않기 때문에 로마와 그리스어 알파벳보다 더 많이 사용합니다. 일부 문자는 다른 문자 위에 입력해야하므로 백 스페이스 ( "오버 스트라이크"라고도 함)도 사용됩니다. 그중 하나는 정사각형 위에있는 나누기 기호로 행렬 반전을 나타냅니다 (단항 연산자의 경우 또는 반전 연산자를 이항 연산자로 사용한 경우의 곱셈).
Tangurena 2011

19

유명한 Perl 원 라이너의 수정 된 버전 :

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

이 정규식은 길이가 소수 인 문자열과 일치합니다.

원래 버전은 다음과 같습니다.

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

1의 소수로 구성된 문자열과 일치합니다.


14

퀵 정렬 :

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

목록이 비어 있으면 정렬 된 결과는 빈 목록입니다.

리스트가 x 요소로 시작하고 나머지리스트가 xs 인 경우, 정렬 된 결과는 x보다 작은 xs의 모든 요소로 구성된 정렬 된리스트로 구성됩니다. x는 모든 요소의 정렬 된리스트와 연결된 x와 연결됩니다. x보다 큰 xs의 요소.

즉, x보다 작고 x보다 큰 두 개의 더미로 나눠서 둘 다를 정렬하여 더미보다 작음, 요소 x 및 더미보다 큼으로 목록을 만듭니다.

C 버전의 이해력을 매우 쉽게 능가합니다.


1
이것이 표준 ML입니까? 아니면 하스켈?
베리 브라운

3
하스켈. 나는 언어의 사고 방식을 좋아한다.

나는 파티션 대안을 좋아한다qsort (x:xs) = qsort lesser ++ equal ++ qsort greater where (lesser,equal,greater) = part x xs ([],[x],[])
Kendall Hopkins

1
목록의 머리 대신 임의의 피벗을 사용하는 버전이 있습니까? 그것은 CAR Hoare의 오리지널에 더 가까워 질 것입니다.
Macneil

1
Hoare는 "[피벗 요소로] 선택된 항목은 항상 분할 될 세그먼트의 가장 높은 주소를 차지하는 항목이어야합니다. 이것이 비 임의적 인 결과를 초래할 것으로 우려되는 경우, 무작위로 선택된 항목은 처음에 가장 주소가 높은 위치에 배치해야합니다. 따라서 Hoare에게 사실이 되려면 첫 번째 요소가 아닌 마지막 요소로 작업해야합니다.

13
  1. 에커 기능 . Ackermann-Péter 버전의 구현은 60 자에 적합해야합니다. :)

  2. 이 사랑스러운 16 진 상수 : 0x5f3759df. 그것은 내가 본 것 중 가장 WTFing 코드의 핵심입니다 : 빠른 역 제곱근 .

  3. 유명한 XOR 스왑 .

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


3
역 제곱근의 경우 +1
Macneil

@Macneil Argh! 나는 단지 그 것을 생각하고 있었다.
Mark C

13

내가 bash 포크 폭탄을 처음 발견했을 때, 나는 그것이 정말로 달콤하다고 생각했다.

:(){ :|:& };:

와우, 그것은 단지 악하다!
Macneil

모든 웃음을보세요! 이것을 "스마일 폭탄"이라고 부를 수 있습니다.
Mark C

12
print "hello world\n";

그리고 그 파생물은 인기가있는 것 같습니다. :-)


1
+1 : 쉽게 가장 '유명한'-자격 여부.
Steven Evers

10

방정식을 언급했기 때문에이 방정식은 목록에 속합니다.

e^{i\pi}+1=0

( 볼프람 알파 렌더링 : ei pi + 1 = 0)


그렇습니다! 좋은 ol 'Euler, 또 다른 좋은 사람!
BeachRunnerJoe

나는 이것을 기억합니다e^{i/pi} = i^2
Josh K

@Josh K : 그 때문에 i² == -1, 당신은 양쪽에서 하나를 뺀를 제거하여 방정식의 균형을 할 수 있도록 +1하고 변화 =0-1
Daenyth

7

짝수를 감지하는 방법 :

x % 2 == 0

3
또는 !(x%2)제정신의 언어로.
Christian Mann

8
또는 !(x & 1)컴파일러를 최적화하지 않은 언어로.
jfs

1
@Christian, 숫자는 부울해서는 안됩니다-실수하기가 너무 쉽습니다.

7

import this 파이썬에서.


주석으로 줄 바꿈을 포함 할 수 없으므로 편집하십시오 : 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!

저는 파이썬 초보자입니다. 이것이 무엇을 달성 할 것입니까?
Richard

1
@Richard : 파이썬 인터랙티브 인터프리터에서 이것을 작성해보십시오 :).
MAK

이것은 나의 일요일 오후를 밝게했다 :)
Richard

@Richard 심각한 질문 : 이것을 실행하면 스택 오버플로가 발생합니까?
Mark C

6

꽤 두 줄은 아니지만 이것이 꽤 유명하다고 말하고 싶습니다.

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

실제로 일부 언어는 한 줄로 설명 할 수 있습니다. 루아가 생각 나지만 더 있습니다.

x, y = y, x

확실히 유명하다!
BeachRunnerJoe

7
정수로 : a ^ = b ^ = a ^ = b;
JulioC

이것이 어떻게 구현되는지 궁금합니다. 임시 테이블 (y, x)을 만든 다음 x에 첫 번째 요소를, y에 두 번째 요소를 할당합니까?
tactoth

또한 사람들이 실제 프로그래밍에서 얼마나 자주 가치를 교환하는지 궁금합니다.
tactoth

1
@tactoth-스와핑은 일반적으로 C ++에서 강력한 예외 안전 할당을 구현하는 데 사용됩니다.
Kaz Dragon

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

설정된 비트 수에 비례하여 시간이 걸립니다. 여기서 "ah ha"부분은

n = n & (n - 1)

에서 가장 오른쪽에 설정된 비트를 제거합니다 n.


멋진 K & R 레퍼런스!
BeachRunnerJoe

6

한 줄에 재귀 파스칼의 삼각형 (Haskell)

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

52 개의 캐릭터, 맛볼 공간을 추가하십시오. 여기 에 의견에 "Ephemient"의 의례 .

나는 이것이 JK 의 비밀 스럽지만 간단한 솔루션보다 더 나은 예라고 생각했습니다 (아직 Haskell 사용자는 아니지만).


6

유닉스 룰렛 (위험)

농담 실과 의견에 대한 Bigown의 답변 제공 :

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

(길이가 62 자이므로 주석을 제거하거나 (그렇게 작동합니까?) 불필요한 공백을 제거 할 수 있습니다.)


2
이것을 위험한 것으로 표시하십시오.
Chinmay Kanchi

나는 zsh를 사용하고 s / == /
-eq


4
DO 10 I=1.3

이것은 역사상 가장 비싼 버그 중 하나입니다. 이 Fortran 문은 float 값 1.3을 변수 이름에 할당합니다 DO10I.

올바른 코드-10으로 표시된 명령문과 I값 1, 2, 3을 허용 하는 루프 변수까지 루프 반복 명령문의 헤더

DO 10 I=1,3

1
왜 비싼 버그입니까?
베리 브라운

2
이 버그는 1961 Mercury 우주 비행을위한 궤도 궤도를 계산 한 서브 루틴에있었습니다. 그러나 출시 전에 발견되어 수정되었으므로 비용이 많이 드는 버그 는 아닙니다 . 선원 임무에 비슷한 버그가 있었다 했던 임무의 고장 원인, 그래도. (출처 : Expert C Programming , 31-32 쪽)
Darel

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

Tom Duff는 세계에서 가장 기괴한 C 구성 중 하나에 메모리 매핑 포트 쓰기를 풀었습니다.


60 자에 맞지 않지만 def는 시원합니다. 나는 그의 이름이 크레딧에서 과거의 픽사 영화로 스크롤되는 것을 본다.
Macneil

2

Hello World와 관련된 모든 것이 떠 오릅니다. 여러 언어를 저장하려는 경우 다른 변형을 사용할 수 있습니다.

더 사소한 것을 위해 Fibbonacci가 있습니다.


1
피보나치, 좋은 것! 다음은 코드입니다 ... if (k <2) return k; else return fib (k-1) + fib (k-2);
BeachRunnerJoe

1
@BeachRunnerJoe : 조건 연산자와 결합하고 싶을 수도 있습니다;)
back2dos

3
네 확실합니다! 복귀 (k <2)? k : fib (k-1) + fib (k-2);
BeachRunnerJoe

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

위의 스칼라 코드 행 people( Person들)은 각각의 연령에 따라 두 개의 목록으로 분할 됩니다.

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

세 번째 변수를 사용하지 않고 두 변수의 값을 교환합니다. 이것은 제가 프로그래밍에서 "음 ... 그거 멋지다"고 생각한 첫 번째 것 중 하나입니다.

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

나는 당신이 XORs를 사용하여 이것을 할 수 있다는 것을 알고 있지만 이것은 오늘 내 향수의 일부였습니다 :)
Jonathon

XOR은 오버플로에 문제가 없습니다. 이거요?
Job

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 루프 [자바]


1
실제로 조건부 연산자는 올바른 이름입니다. 세 개의 인수를 취하면 연산자는 삼항입니다.
back2dos

@ back2dos-실제로 C #과 JavaScript는 이것을 조건부 연산자라고 부릅니다.
ChaosPandion

@ back2dos-? : 연산자 세 개의 인수를 취하므로 삼항 연산자라고합니다. 이것은 C부터 올바른 용어였습니다. (분명히 ... 위키 백과에 따르면, BCPL에서 시작)
grkvlt

@ grkvlt : 나는 세 가지 논쟁을하지 않는다고 말한 적이 없습니다. !단항 연산자 나 +이항 연산자를 호출하지 않을뿐입니다 . 단순히 정확하지 않습니다.
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

나는 좋은 것을 가지고 있었고 여백에 적었습니다.


2
좋은 한 페르마
리처드

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

아마 유명하지는 않지만 내가 가장 좋아하는 것 중 하나입니다. 대부분 왜 그것이 작동하는지는 분명하지 않습니다.


1

이것은 60 자 이상이지만 실제로 변수 이름에 달려 있습니다 (따라서 포함시킵니다!)

readLines (rdr : StreamReader) =
      seq {rdr.EndOfStream이 아닌 동안
                rdr.ReadLine ()}을 생성합니다.

F #에서 한 줄씩 파일을 시퀀스로 읽는 멋진 기능.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.