배경
축소 기는 일반적으로 웹 브라우저에 JavaScript를 제공 할 때 사용됩니다. 일반적으로 전송해야하는 바이트 수를 줄이는 데 사용됩니다. 대역폭 절약은 명백한 이유로 유용합니다. 어떤 사람들은 의도적으로 코드를 읽기 어렵게 만드는 난독 화를 사용합니다.
우리는 파이썬 2를 축소 할 것입니다
나는 축소 경험에 JavaScript 또는 Python을 사용할지 여부에 대해 토론하고 있었고 두 가지 이유로 파이썬을 결정했습니다. 공백 문제와 흥미로운 동적 문제를 추가 할 것이라고 생각합니다. 또한 Python 2.7을 사용 ()
하면 인쇄 중에 불필요한 제거 (예 : print("Hello world")
vs. print"Hello world"
) 와 같은 또 다른 동적 요소가 제공됩니다 . 개인적으로 언어를 공개하는 것을 선호했지만 일부 언어의 경우이 프로세스가 적합하지 않습니다. 그리고 어떤 언어를 축소하기로 결정했는지는 점수에 직접 영향을 미칩니다 (언어를 축소 할 수있는 경우).
명세서
목표는 어쨌든 코드의 기능을 변경하지 않는 방식으로 만 코드를 수정하는 것입니다. 물론 출력에 영향을 미치지 않는 범위 내에서 변수 이름을 축소 프로그램 내에서 변경할 수 있습니다 ( 범위 추적 ). 특정 프로그램을 제공하고 있지만 모든 표준 허점 이 금지되어 있으므로 테스트 사례에 맞게 최적화하지 마십시오 .
점수 : 프로그램을 축소 한 후의 길이입니다.
입력 : 모든 Python 2.7 프로그램 (오류가 포함되지 않음)
출력 : 축소 버전입니다.
코드가 유효한 모든 Python 2.7 입력을 수용 할 수 있어야하지만 효과를 입증하기 위해 스크립트를 테스트해야합니다.
더 접근하기 쉬운 문제 만들기
내 솔루션 내부에있는 코드를 자유롭게 사용하거나 수정하십시오 (아래 참조). 나는 당신이 견적 기본 견적 처리를 시작하기 위해 이것을했다; 그러나 들여 쓰기 등으로 확장 할 수 있습니다.
파이썬을 축소하는 예제 방법
모든 공백은 가능한 최소량으로 대체 할 수 있습니다 (Python 에서는 tab으로 까다로운 작업을 수행 할 수 있음을 인정 하지만 구현 여부를 결정하기 위해 귀하에게 맡길 것입니다).
예
다음과 같은:
def print_a_range(a):
for i in range(a):
print(i)
될 수 있습니다 :
def print_a_range(a):
for i in range(a):
print(i)
기술적으로 루프 안에 한 줄만 있으면 더 압축 할 수 있습니다.
def print_a_range(a):
for i in range(a):print(i) #Note, you can also remove the `()` here.
그러나 파이썬에서 공백을 최소화 할 수있는 또 다른 방법이 있습니다.
다음과 같은:
print ([a * 2 for a in range(20) if a % 2 == 0])
될 수 있습니다 :
print([a*2for a in range(20)if a%2==0])
2
와 사이에 공백이 필요하지 않습니다 for
. 변수, 함수 및 키워드 는 숫자로 시작할 수 없습니다 . 따라서 파이썬 인터프리터는 <num><keyword>
공간이 없어도 괜찮습니다 . )
와 사이에 공백이 없어도 if
됩니다.
프로그램의 출력을 변경해서는 안됩니다! 그래서:
print"f(x)=x*2 is a great equation!"
위의 인쇄 문 사이의 공간을 제거하기 때문에 동일하게 유지해야 2
하고 is
출력을 수정하는 것입니다.
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'
에 '1'*100
허용? 동작이 동일하므로해야합니까?