분석 코드


10

다시 해보자.

이 콘테스트의 목적은 서로에 대한 아나그램 인 두 개의 코드 조각을 만들고 (두 개의 다른 순서로 동일한 바이트를 포함해야 함) 다음 작업을 수행합니다.

  • 입력되는 숫자 인 경우 하나 개의 필수 시험 행복 또는 소수 숫자 (예, 대한 중 하나 인 경우, 출력 7해야 출력 happy prime4출력해야 sad non-prime).

  • 다른 하나는 코드 크기를 바이트 단위로 워드로 출력해야합니다 (60 바이트 프로그램이 출력 sixty하고 39 바이트 프로그램이 출력 thirty-nine).

규칙에 대한 설명이 필요한 경우 주저하지 말고 알려주십시오.

이것은 코드 골프 대회이므로 최단 프로그램이 승리합니다!


일을 하나 무엇 방지 /*program1*/program2다음은 program1/*program2*/? 나는 당신이 의견을 거부해야한다고 생각합니다.
William Barbosa

@WilliamBarbosa 왜? 최적의 솔루션은 아닙니다.
Martin Ender

그러나 당신은 또한 훨씬 쉽게 일부가 아닌 공유의 다른 공유 할 수
자랑 haskeller

1
@proudhaskeller 의견을 금지하는 것은 그래도 해결되지 않습니다. 다른 이유로 항상 실행되지 않는 문자열, 변수 이름 또는 코드 부분에 문자를 넣을 수 있습니다.
Martin Ender

1
FWIW, 나는 당신이 당신의 자신의 제출을 ​​삭제해야한다고 생각 하지 않습니다 . OP 여부에 관계없이 흥미로운 답변이었습니다.
Dennis

답변:


6

CJam, 80 49 48 자

업데이트 : 자릿수의 합계를 계산하는 Dennis의 구현에서 영감을 얻은 짧은 버전입니다.

행복 / 슬픈 프라임 / 비 프라임 :

ri:T{Ab2f#:+}G*X="happy""sad"?STmp4*"non-prime">

작동 방식 :

ri:T                                "Read input as integer and store it in T"
    {       }G*                     "Run this code block 16 times"
     Ab                             "Convert the number into base 10"
       2f#                          "Calculate square of each digit"
          :+                        "Sum all the squared digits and put the sum on stack"
X=                                  "Compare the sum after 16th iteration to 1"
  "happy""sad"?                     "If sum is 1, put `happy` to stack, otherwise `sad`"
               ST                   "Put space on stack then put the value of T on stack"
                 mp4*               "Put 4 to stack if input is prime, otherwise 0"
                     "non-prime">   "Put `non-prime` to stack and slice out first four characters if the input number is prime"

마흔 여덟

""A"forTy-eiGhT""ri:{b2#:+}*X=appsadSmp4*nnpm>"?

작동 원리 :

""                                  "Push empty string to stack"
  A                                 "Push 10 to stack"
   "forTy-eiGhT"                    "Push `forTy-eiGhT` to stack"
                "ri:....pm>"        "Push this string to stack too"
                            ?       "Keep `forTy-eiGhT` on stack and pop the other string"

온라인으로 사용해보십시오

첫 번째 프로그램은 STDIN에서 숫자를 읽습니다.


내 원래 80 자 솔루션

행복 / 슬픈 프라임 / 비 프라임 :

r:N{1/~]{i_*T+:T;}/T_s\1=:H!X):XK<&0:T;}g;H"happy""sad"?SNimp"prime"_"non-"\+?:Y

여든

"eigHTY""r:N{1/~]{i_*T+:T}/_s\1=:H!X):XK<&0:T}happysad?SNmp";"prim_";"non-\?:+";

4

CJam, 50 49 바이트

행복과 우선 순위 테스트

li_{Ab2f#:+}30*(T="happy""sad"?S@mp4*"non-prime">

STDIN에서 숫자를 읽습니다. 두 테스트 모두 64 비트 정수에 대해서만 작동합니다.

온라인으로 사용해보십시오.

자신의 길이

A"forTy-nine""l_{b2#:+}30*(=happsadS@mp4*pim>"?""

Ty-nine 인쇄합니다 .


31 바이트 개선의 경우 +1, "forTy-nine".
Josiah Winslow

3

골프 스크립트-81

이 프로그램은 숫자가 만족스럽고 소수인지 테스트합니다.

~.:a;0.{).a\%!@+\}a*;2="""non-"if"prime"@ {`0\{48-.*+}/}9*("sad ""happy "if@@#get

마지막 프로그램 인이 프로그램은 "eighty-one"을 출력합니다 (워드로 바이트 화).

;"eighty-one"#   !""""""""%()***++-..../002489:;=@@@@\\\`aaaaadffiimnppprs{{{}}}~

이것은 예로서 제공되어야합니다.


2
흠, GolfScript에서 코드 골프 도전에 대한 참조 구현을 제공하는 것이 가장 좋은 아이디어는 아닙니다. 나는 이것이이기는 것이 매우 어렵고 따라서 참가자들에게 약간 낙담한다고 생각합니다.
Martin Ender

나는 사람들이 당신이 그 질문을 썼다는 것을 알지 못하고 당신을 찬성하지 않는 것을 본다. 나는 전적으로 마틴에 동의한다.
자랑스런 Haskeller

@proudhaskeller 자기 응답에는 아무런 문제가 없습니다.
저스틴

나는 스스로 대답하거나 코드를 주석 처리하는 데 아무런 문제가 없다고 말합니다.
Josiah Winslow

2
@JosiahWinslow 아무 문제 없습니다. 나는 단지 아주 좋은 해결책을 직접 게시하면 흥미로운 더 긴 답변을 놓칠 수 있습니다.
마틴 엔더

1

J-87 자

J에서 이것에 순진한 시도. 표준 라이브러리를 사용하지 마십시오.하지만 그것을 사용하면 더 짧아 질 것입니다.

((sad`happy{~1 e.(,[:+/@:*:,.&.":@{:)^:(1-{:e.}:)^:_);@,' ';'gtv]non-prime'}.~4+4*1&p:)
'((ad`app{~1 .(,[:+/@:*:,.&.":@{:)^:(1-{:.}:)^:_);@, ;onprm}.~4+4*1&p:)']'eighty-seven'
('(ad`app{~1 .(,[:+/@:*:,.&.:@{:)^:(1-{:.}:)^:);@, ;onprm}.~4+4*1&p:']'eighty-seven'"_)

맨 위의 줄은 정수를 사용하여 행복과 원시성을 출력 문자열로 진단하는 동사입니다. 두 번째 줄은 string을 반환하는 표현식이고 세 번째 줄은 eighty-seven상수 함수입니다. 나는 둘 다 가능했기 때문에 둘 다 포함 시켰고, 프로그램과 달리 함수 응답에 대한 판결이 무엇인지 알지 못하기 때문에 J에는 인수없는 함수와 같은 것이 없습니다. 더미 논쟁.

우리는 대부분의 문자가 행복을 확인하는 것을 잃습니다. (,[:+/@:*:,.&.":@{:)숫자의 자릿수의 제곱을 합하는 주체이며 해당 숫자 (1-{:e.}:)가 아직 발생했는지 테스트합니다. sad`happy{~1 e.이 단어를 단어 결과로 바꾸고 문자열 앞에 붙이면 non-prime숫자가 실제로 소수라면 4 문자를 잘라낼 수 있습니다.

아나그램에서 우리 'eighty-seven'는 무시하는 문자열에 없는 모든 비트를 숨 깁니다 . J에 재사용 할 글자가 더 있으면 더 잘할 수 있지만 그렇지 않습니다.


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