향수 소수 생성기 [닫힘]


16

간단한 문서 나 웹 페이지를 열었을 때 컴퓨터의 모든 빈약 한 자원을 잃어 버렸을 때 옛날이 늦었 음을 기억하십니까? 그리고 오늘날 프로세서가 수백 배 더 빠르며 수천 배나 더 많은 메모리에 액세스 할 수 있음에도 불구하고 동일한 작업을 수행하는 것이 훨씬 더 느립니다.

현재 문서 뷰어 및 유사한 응용 프로그램에서 팽창 효과를 시뮬레이션하려면 보다 강력한 시스템에서 실행할 때 눈에 띄는 성능 문제가있는 프로그램을 작성하십시오 .

모든 사람에게 공통된 작업을 수행하려면 소수 생성기를 만드십시오 .

  • 프로그램은 2부터 시작하여 각각 새로운 줄에 연속 된 소수를 인쇄해야합니다. 이것은 영원히 (또는 메모리가 부족해질 때까지)해야합니다. 이처럼 :
2
3
5
7
11
13
17
  • 사람이 인식 할 수있을만큼 각 줄을 인쇄하는 데 지연이 있어야합니다.

  • 이 지연은 프로그램이 실행되는 시스템이 빨라질수록 길어 져야합니다. 기계가 빠를수록 프로그램 속도가 느려집니다.

  • 주관적이 될 수 있으므로 정확한 벤치 마크를 지정하지는 않지만 두 시스템의 성능간에 상당한 차이가있는 경우 두 개의 다른 시스템에서 사람이 인식 할 수있는 속도 차이가 있어야합니다.

  • 프로그램의 속도가 기존의 모든 기존 머신에서 단조롭게 감소 할 필요는 없습니다. 이것은 지정하기 어렵고 검증하기가 더 어려울 것입니다. 나는 기계들간에 상당히 다른 성능 으로 간주 될 수있는 것에 대해 참가자들의 상식을 신뢰하며 ,이를 만족시키기에 충분합니다.

  • 또한 정확한 상한 또는 하한을 지정하지는 않지만 합리적인 한도를 초과해서는 안되므로 두 줄을 인쇄하는 데 며칠 또는 몇 년이 걸리지 않습니다.

  • Eniac에서 현대에 이르기까지 모든 것을 실행할 필요는 없지만 일반적으로 충분해야합니다. 예를 들어 두 가지 특정 CPU 유형에서만 작동한다고 말해서는 안되며 특정 특정 CPU 이름을 감지합니다. 느리게 또는 더 빠르게 실행됩니다.

  • 코드는 컴파일러 또는 인터프리터 버전에 의존해서는 안됩니다. 동일한 버전의 컴파일러 / 인터프리터가 느리고 빠른 머신에 설치되어 있거나 바이너리 / 바이트 코드가 한 머신에서 컴파일 된 후 두 개의 다른 머신에서 실행되는 경우에도 작동합니다.

  • 프로그램 운영 방식의 원리를 설명하십시오. 결과를 재현하는 것이 어려울 수 있으므로 답의 유효성은 방법의 실행 가능성에 따라 달라질 수 있습니다.

내가 언더 핸드 컨테스트가되기를 원했지만 슬프게도이 사이트는 더 이상 "프로그래밍 퍼즐 및 코드 골프"가 아니라 단순히 "코드 골프"이므로 가장 짧은 코드가 승리합니다.


5
기계가 빠를수록 프로그램 속도가 느려집니다. 나는 이것을 객관적이고 검증 가능한 기준으로 만드는 쉬운 방법을 보지 못합니다
Luis Mendo

1
@LuisMendo :이 작업을 쉽게 수행 할 수있는 최소한 두 가지 방법이 있습니다.
vsz

1
@vsz 내가 보는 문제는 재현성입니다. 누군가는 두 대의 컴퓨터에서 테스트를 수행했으며 필요에 따라 속도의 큰 차이를 발견했지만 두 컴퓨터에서 해당 동작을 재현 할 수 없다고 말합니다. 대답이 유효합니까?
Luis Mendo

1
busy-beaver 태그로 설정해야합니까 ?
mbomb007

2
"보다 강력한 기계"로 간주되는 것은 무엇입니까 ? 사양은 같지만 더 많은 RAM을 가진 머신이 더 강력한 것으로 간주됩니까? 프로세서가 1 초 안에 실행하는 명령의 수는? 양자 모두? 다른 것?
Fatalize

답변:


4

펄, 80 78 71 바이트

@Dada 덕분에 -9 바이트

$_++;`lscpu`=~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while$_++

명령을 실행하고 lscpuCPU 속도 (MHz)를 찾습니다. CPU가 빠를수록 1MHz마다 1 초씩 출력간에 대기 시간이 길어집니다. 우분투 14.04.5에서 실행됩니다. 내 특정 컴퓨터에서는 800 초마다 (13 분, 20 초) 각 숫자를 테스트합니다. 더 빠른 컴퓨터에서는 50 분 이상이 걸릴 수 있습니다. sleep$a/400테스트 목적으로 훨씬 더 제정신이 나도록 변경하십시오 .


코드를 약간 재 배열하면 $_++;lscpu =~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while++$_가 71 바이트가됩니다.
Dada
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.