100 자 이내로 가장 유용한 프로그램 만들기 [닫기]


13

이 작업에서는 100 자 내에서 쓸 수있는 모든 작업을 수행하는 유용한 프로그램을 만들 수 있습니다. 더 적은 문자를 사용할 수 있지만 더 많이 사용할 수는 없습니다.

더 이상 재미없는 표준 허점으로부터 보호하기위한 규칙 :

  1. 인터넷에 연결되어 있지 않으면 프로그램이 인터넷에 액세스 할 수 없습니다. 예를 들어,이 웹 사이트에서 가장 많이 제기 된 질문을 보여주는 프로그램은 인터넷을 사용하여이 질문을 확인할 수 있습니다. 그러나 실제 소스를 찾아서 실행하기 위해 인터넷을 탐색 할 수 없습니다.

  2. 귀하의 프로그램은 작성된 언어의 통역사가 될 수 없습니다. 그러나 비 Brainfuck 언어의 Brainfuck 통역사는 좋습니다.

  3. 귀하의 프로그램은 귀하의 프로그램과 정확히 동일한 외부 프로그램을 실행할 수 없습니다. 예를 들어을 (를) 실행할 수 없으며 vim프로그램이 vim구현 되었다고 주장 할 수 있습니다 .

  4. 프로그램이 실행중인 컴퓨터와 다른 컴퓨터에 위험 할 수 없습니다. rmdir /(이 예제는 의도적으로 작동하지 않고 수정하지 마십시오) 와 같은 프로그램을 작성할 수 없으며 컴퓨터의 모든 파일을 제거하는 유용한 프로그램이라고 주장 할 수 있습니다.

  5. 프로그램이 원하는만큼 느리게 작동하고 원하는만큼의 리소스를 사용할 수 있다면 원하는만큼의 리소스를 사용할 수 있습니다.

  6. 이 작업을 위해 특별히 언어를 만들 수 없습니다. 그러나 다른 프로그래밍 언어로 발명 한 언어에 대한 통역사를 만들 수 있습니다.


이 콘테스트에 대해 둘 이상의 답변을 게시 할 수 있습니까?
TrungDQ

@TrungDQ : 물론입니다.
Konrad Borowski

1
이것은 지금까지 가장 좋은 질문 중 하나입니다.)
Timtech

13
이 사이트는 심지어 인기 콘테스트에서도 너무 개방적입니다. 말 그대로 모든 대답이 유효하며, 비교할만한 기준 프레임이 없습니다.
Aaronaught

3
이 질문은 코드 골프를 식인하는 것입니다. 흥미로운 100 가지 캐릭터 아이디어를 훌륭한 코드-골드 질문으로 표현할 수 있어야합니다. 답변자들이 답변을 새로운 질문으로 바꾸는 데 몇 분을 더 보내도록 권장합니다.
gnibbler

답변:


26

C-47 바이트

다음 프로그램은 인간 역사에서 쓰여진 모든 문서와 함께 쓰여질 모든 문서와 인간이 전혀 만들지 않을 흥미로운 텍스트를 많이 출력합니다 ( "쓰레기 쓰레기"와 함께). 시간 좀 줘 또한 실행할 때마다 다른 텍스트가 먼저 출력됩니다! 하면 그건 유용하지! (그리고 모든 문자 제한의 절반 안에!)

main(){srand(time(0));while(1)putchar(rand());}

매번 다른 것을 출력하는 것에 신경 쓰지 않는다면 41 바이트 만 필요 합니다 !

main(){srand(0);while(1)putchar(rand());}

C99를 따르지는 않지만로 원활하게 컴파일됩니다 gcc.exe (GCC) 4.7.0 20111220.

규칙 상태

프로그램이 원하는만큼 느리게 작동하고 원하는만큼의 리소스를 사용할 수 있다면 원하는만큼의 리소스를 사용할 수 있습니다.

문제 없어요.

몇 가지,이 프로그램은 다음을 출력합니다 :

  • 모든 밀레니엄 문제에 대한 해결책
  • 내일의 신문 기사
  • 셰익스피어의 작품 (물론)
  • 가장 어두운 비밀
  • 이 질문에 대한 다른 모든 답변

실제로는 (댓글에 올바르게 언급 된 에이스) rand () 는 의사 임의 생성기 일뿐이므로 어느 시점에서 랩핑되어 의미있는 텍스트를 많이 생성하기에는 너무 빠릅니다. 그러나 100 문자 내에서 진정한 (하드웨어) 난수 생성기에서 데이터를 가져올 수 있는지 의심 스럽습니다. 그래도 재미를 위해 여기에 남겨 두겠습니다.

Dennis가 지적했듯이 알고리즘 rand()^rand()>>16대신에 임의성을 문자 제한 내에서 대신을 사용하여 약간 향상시킬 수 있습니다 rand().


10
반드시 그런 것은 아닙니다. rand()의사 난수 일뿐입니다. 반복되기 전에 유용한 텍스트를 생성 할 수 없습니다.
user12205

1
다행스럽게도 @Dennis는 여전히이 질문의 규칙에 있습니다! :)
Martin Ender

1
@ m.buettner : 함께 GLIBC의 랜드 () 배열로 출력을보기 : 프로그램의 출력 바이트 사이의 단순한 대수 관계가있어 x, 당신은 x[i] == (x[i - 3] + x[i - 31] + c[i]) % 256, c[i]확률 0.25 확률 0.75 및 1 0가. 이것은 당신이 언급 한 것을 생성 할 수 없다는 것을 의미합니다.
Dennis

1
@ m.buettner : PRNG가 훨씬 나아지지는 않지만 rand()^rand()>>16plain 대신에 선형성을 제거 할 수 있습니다 rand(). 바이트를 절약하는 방법을 찾고 있다면 intand을 제거하십시오 %256.
Dennis


18

BBC 베이직, 84 자

MODE 6:INPUT T,A,B,A$,B$:FOR X=0 TO 1279:A=A+EVAL(A$):B=B+EVAL(B$):DRAW X,A+500:NEXT

해를 1 차 및 2 차 미분 방정식으로 플로팅합니다.

사용자 입력으로 사용합니다 :

Title (does nothing)
Start value for A (plotted value)
Start value for B (not plotted)
Expression for dA/dX
Expression for dB/dX

Polymath라는 미분 방정식 풀림 소프트웨어에서 영감을 얻어 화학 엔지니어로 공부할 때 사용했습니다. 우리는 반응물과 생성물에 대해 다른 방정식을 입력하고 시간이 지남에 따라 전체 반응 시스템이 어떻게 변했는지 살펴볼 것입니다. 매우 간단한 소프트웨어 (이보다 훨씬 복잡하지는 않지만 Excel보다이 목적에 훨씬 더 편리합니다. 불행히도 100 자로 Polymath의 완전한 복제를 할 수 없습니다.

여기에 이미지 설명을 입력하십시오


10

매스 매 티카 76

이 프로그램은 240 개 국가의 다양한 속성에 관한 정보를 표시하는 애플릿을 구성합니다. 그것은 아프가니스탄의 성인 인구에 관한 정보로 열립니다. 사용자는 드롭 다운 목록을 통해 국가 및 속성 설정을 변경할 수 있습니다.

Mathematica는 WolframAlpha와 원활하게 상호 운용됩니다.
이런 이유로 나는 제출이 요구 # 도전의 1을 충족 생각 : "당신의 프로그램이 인터넷에 액세스 할 수 없습니다 그것이 정말로하지 않는 한 ".

이 겸손한 애플릿은 단순히 Mathematica 언어의 기존 기능을 사용합니다. 짧은 비디오 는 애플릿에 대한 추가 정보를 제공합니다.

d = CountryData; Manipulate[WolframAlpha[p <> " " <> c], {p, d["Properties"]}, {c, d[]}]

알파


아래는 국가와 관련된 처음 20 개 (223 곳 중) 건물의 목록입니다. 추가 프로그래밍을 통해 국가에 관한 추가 정보를 얻고이 정보를 Mathematica에서 분석 할 수 있습니다.

CountryData["Properties"][[;; 20]]

{ "AdultPopulation", "AgriculturalProducts", "AgriculturalValueAdded", "Airports", "AlternateNames", "AlternateStandardNames", "AMRadioStations", "AnnualBirths", "AnnualDeaths", "AnnualHIVAIDSDeaths", "ArableLandArea", "ArableLandArea", "ArableLandArea", "ArableLandF" Area ","BirthRateFraction ","BorderingCountries ","BordersLengths ","BoundaryLength ","CallingCode ","CapitalCity ","CapitalLocation "}


프로그램이 인터넷에 어떻게 액세스해야하는지 모르겠습니다. 제시 한 데이터는 자주 외부 소스에 의존해야하는 데이터를 변경하지 않습니다.
shiona

1
출처가 내부인지 외부인지는 논쟁의 여지가 있습니다. 코드가 Wolfram 데이터 서버에 직접 문의하고 브라우저를 사용할 필요는 없지만 WolframAlpha (코드가 만드는)에 대한 정보 요청이 (필요한) "인터넷 액세스"의 사례가되는 것을 고려하고있었습니다. FireFox처럼. 네트워크 또는 WIFI 연결이 필요합니다
DavidC

1
가능한 경우 -1-이것은 기존 서비스의 데이터 구조를 단순히 혼란시킵니다.
l0b0

@ l0b0 그런 식으로 볼 수 있다고 생각합니다. 또는 언어의 기능을 이용한다고 말할 수도 있습니다. 결국 WolframAlpha는 Mathematica와 긴밀하게 상호 운용되도록 처음부터 설계되었습니다.
DavidC

1
" WolframAlpha의 정보는 Mathematica의 필수 부분이며 Wolfram Language "는 다소 경이로운 상황입니다. 그것이 존재하는 가장 안정적인 프로그래밍 언어가되어야합니다.
피터 테일러

9

bash, 100 바이트

head -c${1--1} /dev/zero |
openssl enc -aes-128-ctr -pass file:/dev/random 2>/dev/null |
tail -c+17

이 스크립트는 암호화 적으로 안전한 바이트 스트림을 인쇄합니다. 인쇄해야하는 바이트 수를 지정하는 선택적 인수가 필요합니다. 기본적으로 출력은 무한대입니다.

읽기 /dev/urandom속도가 너무 느린 경우에 유용 합니다.

기준

$ time head -c 1G /dev/urandom > /dev/null
Real    59.75
User    0.03
Sys     59.68
$ time random 1G > /dev/null
Real    0.68
User    0.64
Sys     0.86

이 스크립트는 i7-3770에서 초당 최대 1.5GiB를 생성합니다.

대조적으로, 읽기 는 분당/dev/urandom 1 GiB를 거의 생성하지 않습니다.

작동 원리

  • head -c${1--1} /dev/zero지정된 양의 0 바이트를 출력합니다. 양을 지정하지 않으면 ${1--1}-1과 같고 head 는 무한량을 출력합니다.

  • openssl enc -aes-128-ctr -pass file:/dev/random카운터 모드에서 AES-128을 사용하여 0 바이트를 암호화하고에서 비밀번호를 읽습니다 /dev/random.

  • tail -c+17 출력의 16 바이트 헤더를 제거합니다.


이 스트림은 처음 2 ^ 68 출력 바이트를보고 "실제"랜덤 스트림과 구별 할 수 있습니다 (실제 랜덤 스트림에는 중복 된 블록이 있어야하지만이 스트림은 그렇지 않습니다).
Paŭlo Ebermann

@ PaŭloEbermann : 당신 말이 맞아요. 그런 다음 다시 내 컴퓨터에서 많은 바이트를 생성하는 데 6,000 년 이상이 걸렸습니다 ...
Dennis

7

자바 스크립트

모든 방정식을 푸십시오 (모두는 아니지만 공통 함수로 작동해야합니다 ...)

r=s=>{for(x=e=a=1e-7;a;x-=e*a/(eval(s.replace(/x/g,x+e))-a))a=eval(s.replace(/x/g,x));return x}

ES6이없는 경우 (105 자) :

function r(s){for(x=e=a=1e-7;a;x-=e*a/(eval(s.replace(/x/g,x+e))-a))a=eval(s.replace(/x/g,x));return x}

우변이 0이라고 가정하고 방정식의 좌변을 주면됩니다.

예 :

  • r("x*x-9") 보고 3
  • r("Math.sin(x)-1")반환 1.5707963394347828(pi / 2)
  • r("Math.pow(2,x)-512") 보고 9

경고 : 일부 기능 (또는 해결책이없는 경우)으로 분기하여 브라우저 탭을 고정 시키거나 NaN을 반환 할 수 있습니다.


6

C-99 자

i;main(int c,char**a){for(a+=2;1+(c=getchar());)putchar(c+(**(a-1)-69?1:-1)**(*a+i++%strlen(*a)));}

이 프로그램은 모든 종류의 데이터를 암호화 및 해독 할 수 있습니다.

용법

먼저 ... 컴파일하세요!

gcc crypto.c crypto

mypreciousdata.txt키 를 사용하여의 내용을 암호화 mysecretkey하고 결과를 myprotecteddata.txt다음에 저장하려면 다음을 수행하십시오 .

cat mypreciousdata.txt | ./crypto E mysecretkey > myprotecteddata.txt

이제 디코딩 된 내용을 검색하려는 경우 myprotecteddata.txt:

cat myprotecteddata.txt | ./crypto D mysecretkey > mypreciousdata.txt

키가 길수록 안전합니다!

설명

아래에서 확장 및 주석이 달린 코드를 찾으십시오.

int main(int argc, char** argv)
{   
    // retrieve the first argument passed to the program (action)
    char action = argv[1][0];

    // retrieve the second argument passed to the program (key)
    char* key = argv[2];

    // initialize character position in the key
    int i = 0;

    // initialize the current input character
    char c = 0;

    // loop until we reach the end of input
    while (c != -1){
        // get a character from stdin
        c = getchar();
        if (action == 'E'){
            // encode the current character
            putchar(c + key[i]);
        } else{
            // decode the current character
            putchar(c - key[i]);
        }
        // increment the position in the key, without overflow
        i = (i + 1) % strlen(key);
    }
}

이것은 사용자 유형 의 알파벳 (보통 256)에 적합한 Vigenère 암호 의 변형입니다 char.
Paŭlo Ebermann

5

GolfScript

나는 이것을 정확히 100 자로 짜낼 수 있었다!

{{}/]{97-}%}:b~:|;"etaoinshrdlcumwfgypbvkjxqz"b:f,:&,{:x[|{&x-+&%f?}%{+}*\]}%$0=1=:x|{&x-+&%97+}%''+

ROT-n 암호화 텍스트를 입력하고 디코딩 된 텍스트를 출력합니다. (카메라에서 여기 입력이 주어 졌을 때.) 예를 들어 pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom, 출력은이다 8hellopeopleofprogrammingpuzzlescodegolfstackexchange.


5

자바 스크립트

자바 스크립트에서 고유 ID를 생성하려면
Math.random().toString(30).slice(2);

다음과 같은 것을 생성합니다 : 'h9d2f4aniimma7h1d3pbffi0foi8d3mf'

30-32 자의 영숫자 문자열

Math.random().toString(36).slice(2)

다음과 같은 것을 생성합니다 : 'uq2sze67hsacq5mi'

길이가 14-16 인 문자열.



3

포트란-85 바이트

l=0;read(*,*)n;do while(n>0);i=mod(n,10);l=l+i;n=n/10;enddo;print*,"digit sum=",l;end

숫자를 읽고 숫자의 합계를 인쇄합니다 . 프로젝트 오일러 문제에 유용합니다 .


이것이 오일러 프로젝트에 어떻게 도움이됩니까?
Paŭlo Ebermann

@ PaŭloEbermann : 아마도 프로젝트 오일러 앞에 "일부"를 추가했을 것입니다. 문제 16, 20 및 119는 다른 사람들에 대해서는 확실하지 않지만 숫자 합계를 사용하지만 많은 문제가 필요 하지는 않습니다 .
Kyle Kanos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.