PS 일지 (2021.10.21)

Bard·2021년 10월 21일
0

PS 일지

목록 보기
4/11
post-thumbnail

시험 준비때문에 너무 바빠서 게임이론 문제를 풀만한 시간이 안됐다..
그래서 오늘은 GolfScript나 가지고 좀 놀아보자는 생각이었다.

22193. Multiply

Bronze 5

일단 C++로 짜려면 상당히 어려운 문제지만 Python으로는 간단히 풀 수 있는 문제이다.

nm = input() # 필요없는 입력
a = int(input())
b = int(input())
print(a*b)

마음에 별로 안들었다. 그런데 알고있는 GolfScript 문법을 최대한 쓰면 풀 수 있을 것 같았다.
당시 알고있던 문법은 얘네밖에 없었다.

  • ~ : 스택에 원소들을 dump
  • +, -, *, / : 스택에서 원소 두 개를 뽑아 연산
  • @ : 스택에서 상위 세 원소를 회전 ([1,2,3] => [2,3,1])

알고있던 걸로 충분했다 바로 코드를 짜기 시작했고 이렇게 나왔다.

~@0*+@0*+*

이는 다음 순서로 진행되는 코드이다. (한줄에 연산 하나씩)

  1. 3, 4, 123, 4567
  2. 3, 123, 4567, 4
  3. 3, 123, 4567, 4, 0
  4. 3, 123, 4567, 0
  5. 3, 123, 4567
  6. 123, 4567, 3
  7. 123, 4567, 3, 0
  8. 123, 4567, 0
  9. 123, 4567
  10. 561741

보다시피 10byte짜리 코드가 완성됐다.
그리고 숏코딩 순위를 봤는데... 맙소사 1위분이 GolfScript로 5byte를 찍어두셨다.

다시 위키를 정독했고 두가지 연산을 더 알았다.

  • \ : 상위 두 원소를 swap
  • ; : pop

와.. 나름 유용한 언어구나?! 라고 생각한 뒤 다시 코드를 짠 결과는 다음과 같다.

~*\;\;

완전 간결한 코드다. 순서는 다음과 같다. (역시 한 줄에 연산 하나씩)

  1. 3, 4, 123, 4567
  2. 3, 4, 561741
  3. 3, 561741, 4
  4. 3, 561741
  5. 561741, 3
  6. 561741

이렇게 6byte짜리 코드가 완성되었다..
1위 분 코드는 다음과 같았다.

~*p;;

..?
p가 뭔지.. 보자..

Convert to a string using ` (inspect) and print followed by variable n. Same deal as ruby. Implemented as:

{`puts}:p;

하..하나를 출력하는건가..?

맞..맞는.. 거같다..
지식이 늘어따..

profile
The Wandering Caretaker

0개의 댓글