나는 심지어 ... 난 이상한!


36

당신의 작업은 간단합니다 : 정수를 입력으로 받아 홀수이면 출력하고 그렇지 않으면 아무것도하지 않는 프로그램을 작성하십시오 (멈춤은 허용되지 않습니다). 문제는 홀수 바이트 만 사용할 수 있다는 것입니다.

선택적으로 후행 줄 바꾸기를 출력에 추가 할 수 있습니다.

이것은 코드 골프이며 (홀수) 바이트로 가장 짧은 대답입니다.

표준 허점 은 금지되어 있습니다. 또한이 과제를 게시 한 것보다 최신 버전의 언어를 사용할 수 없습니다.

입력 예> 출력 :

13 > 13

42 >


10
이 도전은 "Y없이 X를해야한다"도전이기 때문에 하향식으로 평가했다.
Leaky Nun

4
정확히 무엇을 does nothing otherwise의미합니까? Haskell에서 형식이있는 함수 Int -> Int 는 정수를 반환하거나 중단되지 않거나 오류를 발생시킵니다. 입력이 짝수이면 분명히 반환되지 않아야 하므로이 경우 중지하거나 오류를 발생시키지 않아야합니까?
Laikoni

2
소스 코드를 사용할 수 있는지 알고 싶다면 브라우저 콘솔에서이 스크립트를 사용해보십시오. 유효한 문자 집합을 만드십시오 : alphabet=new Set(Array(256).fill(0).map((v,i)=>i).filter(v=>v%2).map(String.fromCharCode));. 소스가 유효한지 확인하십시오 : [..."SOURCE CODE"].every(v=>alphabet.has(v)). 소스에서 유효하지 않은 문자를 참조하십시오 : [...new Set("SOURCE CODE")].filter(v=>!alphabet.has(v)). 따옴표를 피하십시오, "=> \";)
kamoroso94

14
@LeakyNun "Y없이 X"는 일반적인 소스 제한 문제가 아니라 언어의 특정 기능 을 사용 하지 못하게 하는 문제를 나타 냅니다. 이 과제는 그다지 다르지 않으며 실제 "Y없이 X 수행"과제를 문제로 만드는 문제도 없습니다.
Martin Ender

1
@Laikoni 무한 루프에 들어가는 답변이 이미 있으므로 그러한 행동을 보여주는 것은 괜찮습니다. 돌아 오지 않으면 아무것도하지 않는 것으로 해석 될 수 있습니다.
M.Herzkamp

답변:



67

길이 , 645529908926937253684695788965635909332404360034079 9394157991500940492270727190763049448735 1174269748937617561533841898064735499551 2293382937520069758100171520285996319 바이트

대략 2 십이 지퍼 바이트와 같습니다.

파일은 다음 brainfuck 프로그램으로 변환됩니다.

,[<<+>+>-]<[>>+<<-]+>>[-[->]<]<[<[<]>.<]

최대 값 256의 ASCII 코드로 입력을받습니다. 줄 바꿈을 사용합니다.


@Okx 내 실수. 하지만 왜 그냥 사용하지 ,[<<+>+>-]<[>>+<<-]+>>[-[->]<]<[<[<]>.<]않습니까?
user202729

1
방법에 대한 ,[[>]++[-<]<+>>]>[<<<.<]유일한 3452857532394791089951 바이트?
조 왕

실제로 무한 루프가 허용되기 때문에 ,-[-->++<]>+.작동합니다
Jo King

20

x86-64 기계 코드, 8 바이트

Bruce Forte의 솔루션 에서 영감을 얻었 지만 약간 미달했습니다. :-)

8D 07          lea      eax, [rdi]    ; put copy of input parameter in EAX
D1 EF          shr      edi, 1        ; shift LSB into CF
             InfiniteLoop:
F3 73 FD       rep jnc  InfiniteLoop  ; test CF; infinite loop back here if input was even
C3             ret                    ; return with original input in EAX if it was odd

EDISystem V AMD64 호출 규칙 에 따라 레지스터 에서 단일 정수 매개 변수가 사용됩니다 .

이 값의 사본은 처음에 만들어지며, EAX필요한 경우 반환 될 수 있습니다. ( 홀수 바이트의 명령어가 필요하기 때문에 LEA보통 대신 사용됩니다 MOV.)

그런 다음 in 값 EDI이 1 씩 오른쪽으로 시프트되어 시프트 된 비트가 캐리 플래그 (CF)에 배치됩니다. 이 비트는 짝수이면 0이되고 홀수이면 1이됩니다.

그런 다음 JNC명령을 사용하여 CF를 테스트합니다.이 명령은 CF가 0 인 경우에만 분기됩니다 (예 : 짝수). 이것은 우리가 짝수 값을 위해 무한 루프로 갈 것임을 의미합니다. 홀수 값의 경우 원래 값 (in EAX)이 반환됩니다.

JNC하지만 명령 에는 약간의 트릭 이 있습니다. REP접두사가 있습니다! 일반적으로 REP접두사는 문자열 명령에만 사용되지만 인텔 및 AMD 설명서는 모두 관련이 없거나 불필요한 / 중복 REP접두사가 무시 된다는 점에 동의하므로 여기서는 분기 명령에 1을 던져 3 바이트 길이로 만듭니다. 그렇게하면 점프 명령으로 인코딩 된 상대 오프셋도 홀수입니다. (물론 REP홀수 바이트 접두사입니다.)

고맙게도 RET홀수 바이트를 사용하여 인코딩됩니다!

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


챌린지의 "출력"요구 사항을 만족 시키거나 반환하지 않기 위해 값이 홀수이거나 무한 루프에 들어가면 값을 반환하지 않는다고 생각하거나 더 흥미로운 것을 원한다면 여기에 함수가 있습니다. 직렬 포트에 값을 출력합니다 (물론 홀수 일 경우에만).

x86-64 머신 코드 (직렬 포트로 출력), 17 바이트

8D 07         lea   eax, [rdi]   ; put copy of input parameter (EDI) in EAX

B1 F7         mov   cl, 0xf7     ; put 0xF7 into low-order bits of CX
B5 03         mov   ch, 0x03     ; put 0x03 into high-order bits of CX
FE C1         inc   cl           ; increment low-order bits of CX to 0xF8 (so all together it's now 0x3F8)
0F B7 D1      movzx edx, cx      ; move CX to DX ("MOV DX, CX" would have a 16-bit prefix of 0x66)

D1 EF         shr   edi, 1       ; shift LSB of input parameter into CF
73 01         jnc   IsEven       ; test CF: branch if 0 (even), fall through if 1 (odd)
EF            out   dx, eax      ; output EAX (original input) to I/O port 0x3F8 (in DX)
            IsEven:
C3            ret                ; return

이것을 좀 더 흥미롭게 만드는 것은 코드 가 더 많은 일을한다는 것인데, 이는 홀수 바이트만을 사용하여 인코딩 된 명령어를 사용하여 모든 작업을 수행하는 것이 더 어려웠다는 것을 의미합니다. 물론 이것은 코드 골프에서 실패한다는 것을 의미합니다. 그래서 그것은 일종의 트레이드 오프입니다. 흥미롭고 도전적인 것을 원하십니까, 아니면 짧기를 원하십니까?

어쨌든 이것은 x86 OUT명령어 를 사용하여 PC 의 표준 COM1 직렬 포트 인 I / O 포트 0x3F8에 씁니다 . 물론 재미있는 부분은 모든 표준 I / O 포트 (직렬 및 병렬)가 짝수의 주소를 가지므로 OUT명령에 대한 즉각적인 것으로 단순히 인코딩 되거나 레지스터로 직접 이동할 수 없다는 것 입니다. 실제 값보다 하나 작은 값으로 초기화 한 다음 레지스터의 값 을 증가 시켜야합니다 . 피연산자로 사용될 때 명령어에서 홀수 바이트를 사용하여 인코딩 된 레지스터가 필요하므로 조작에 특정 레지스터를 사용하는 것으로 제한됩니다.

또한 값이 홀수 인 경우에만 명령이 홀수 오프셋을 갖도록 루프 상단에서 레지스터 DX를 통해 레지스터 를 초기화 CX해야했습니다 JNC. 그러나 우리가 건너 뛰는 것은 OUT명령 이므로이 코드는 폐기물주기와 클로버 스크래치 레지스터 만 수행합니다. 실제로 아무것도 출력 하지 않으므로 규칙을 위반하지 않습니다.

마지막으로,이 함수는 입력 값을로 남겨두고 (직렬 포트로 출력을 수행하거나 수행하지 않은 후) 리턴 EAX합니다. 그러나 이것이 실제로 어떤 규칙도 위반하지는 않습니다. 어셈블리 언어의 모든 함수는 값과 함께 반환됩니다. EAX문제는 중요한 값이거나 가비지 값입니다. 그것은 함수의 문서에 의해 결정되며 (실제로 값을 반환하거나 반환합니까 void)이 경우 값을 반환하지 않는 것으로 문서화하고 있습니다. :-)

직렬 포트로의 출력을 구현하지 않기 때문에 TIO 링크가 없습니다. 당신은 진짜 철이나 상상력이 필요합니다.


설명을 위해 +1! 왜 두 번째 줄에서 mov를 사용할 수 있지만 첫 번째 줄에서는 사용할 수 없습니까?
M.Herzkamp

MOV명령 임을 인코딩하는 것 외에도 피연산자 는 바이트로 인코딩해야합니다. 이 경우 소스 및 대상 레지스터가됩니다 (피연산자는 상수와 같은 즉각적인 값일 수도 있음). 다른 레지스터는 다른 바이트에 매핑되며 일부 바이트는 짝수입니다. 예를 들어, 내가 사용하고 싶은 것은 mov eax, edi이지만 89 F8바이트 단위입니다. 참조 방법을 당신이 이제까지 인코딩에 알고 싶어보다 더 많은 은 "코드"섹션에서, 여기 . @ M.Herzkamp
코디 그레이


9

05AB1E , 3 바이트

Éi=

코드는 바이트 값에 해당 C9,69,3D하거나 201,105,61모두 홀수입니다.

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

설명

É     # input % 2 == 1
 i    # if true
  =   # print without popping

= # print without newline실제로 줄 바꿈없이 개행 문자로 인쇄됩니다
Erik the Outgolfer

@EriktheOutgolfer : 맞습니다. 설명을 수정하겠습니다.
Emigna

불행히도, É×작동하지 않는 것) :
kalsowerus

@kalsowerus : 그래, 나도 알아 차렸다. D앞에서 올바르게 작동 하지만 더 짧지 않습니다. 작동하지 않는 이유는 반복적 인 암시 적 입력이 두 번째 인수로 간주되기 때문입니다.
Emigna

@Emigna 그러나 이상한 점은, 스택에서 상위 2 개의 값을 두 번
바꾸어도


5

하스켈 , 36 33 바이트

c[1]=1;c[m]=1+1+c[m-1-1];o	m=c[m]

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

사용법 : o 7yiedls 7, o 8무한 루프에 들어갑니다.

실제 알고리즘은

o 1 = 1
o m = 2 + o(m-2)

내가 직면 한 첫 번째 문제는 공간이 부족하다는 것입니다 . 인수를 취하는 (함수 는 일반적으로 또는로 정의 되기 때문 입니다. 그러나 인라인 주석은 토큰 구분 기호로도 작동하므로 주어진 규칙에 따라 정의 가 가능하다는 것을 알았습니다 . 편집 : Ørjan Johansen은 공백 대신 탭 문자를 사용하여 3 바이트를 절약 할 수 있다고 지적했습니다.omo m=...o(m)=...{- some comment -}o{--}m=... o m=...

두 번째 문제는 재귀 호출 o(m-2)이었습니다. -2그냥 -1-1하지만, 괄호가 필요하기 때문에 여기에 코멘트 트릭은 일을하지 않습니다. 나는 숫자를 포함하는 단일 목록에 함수 작업을 수 있도록함으로써이 문제를 해결 : o[m-2]이 입력을 제공하는 표준 방법이 아니다으로, 그러나, 나는 도우미 함수에 계산을 외부에서 조달 c목록 및 전화에서 작동 c에서 o하는 올바른 형식이 .


공백 대신 탭을 사용할 수 있습니다.
Ørjan Johansen

@ ØrjanJohansen \t대신에 작동하는지 확인할 수 있습니다 {--}.
Esolanging 과일

@ ØrjanJohansen 감사합니다. 알아두면 좋습니다.
Laikoni

5

파이썬 REPL, 38 바이트

을 사용하여 입력을 이전 표현식의 값으로 사용 _합니다. 출력은 문자열 (홀수에 대한 정수의 문자열 표현 또는 짝수에 대한 빈 문자열)입니다.

'%s'%[['']+[_]][-1][[_%[1+1][-1]][-1]]

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

실제 쉘에서 실행하려면 여기에서 시도 하십시오 . 입력을 입력하고 Enter 키를 누르십시오. 코드를 붙여 넣고 Enter 키를 누르십시오.

설명:

알아내는 데 시간이 걸렸습니다. 곱셈, 분기 없음, 슬라이싱 없음, 쉼표 없음, 마침표 없음, 가져 오기 없음 exec, 괄호 없음 , 아니오 eval, 아니오 print, 아니오 및 함수가 없습니다. stderr을 사용하여 출력을 처리하는 하나의 솔루션을 얻었지만 진실 / 거짓 값뿐만 아니라 실제 정수를 출력해야한다는 것을 깨달았습니다.

괄호 대신 괄호를 사용 [expression][-1]합니다. 위의 코드를로 단순화합니다 '%s'%(['']+[_])[_%(1+1)].

쉼표가 없기 때문에 list 추가를 사용하여 create ['',_]. 문자열 형식을 사용하여 원하는 결과를 얻습니다.


명성. 보너스로 Ruby IRB에서도 작동합니다. Nitpick : 홀수로 문자열을 반환해도됩니까, 짝수로 빈 문자열을 반환해도됩니까?
Eric Duminil

아무 것도하지 않고 인쇄하거나 아무 것도 반환하지 않는 것이 같다고 생각합니다. 어떤 식 으로든 빈 문자열은 아무것도 아닙니다.
mbomb007

그렇습니다, 나는 정말로 nitpicking했다. 여전히 아무것도 아닌 문자열을 반환합니다. 파이썬 REPL에서는 None그보다 더 잘 어울릴 것이라고 말하고 싶습니다 ''. 어쨌든, 그것은 내가 생각해 낼 수있는 것보다 여전히 10000 배 낫습니다.
Eric Duminil

@EricDuminil 나는 돌아올 수 있었다 False. None그래도 어떻게 얻을 수 있는지 Idk .
mbomb007

4

CJam, 6 바이트

q_iY%%

113 95 105 89 37 37

이 프로그램은 입력의 mod 2 ( r 이라고 함)를 가져 와서 입력 문자열의 모든 r 번째 문자를 인쇄 합니다. 입력 번호가 홀수이면 전체 문자열을 인쇄하지만 모든 0 번째 문자를 인쇄하도록 요청하면 프로그램에서 오류가 발생합니다.

여기 사용해보십시오


좋은! 게시하려고했는데 qi_Y%]W%{}/M?이걸 보았습니다.
Esolanging 과일

4

Cubix , 23 19 17 바이트

;;u!I1)%/;O=!;;/;

시도 해봐!

@Cubix 프로그램을 종료하는, ascii 64이므로 불행히도 실제로 홀수 테스트 후 무한 루프에 들어갑니다. 시간이 초과되어 TIO 링크가 없습니다.

= (ascii 61)은 Cubix에서 no-op입니다.

이것은 음의 정수에 실제로 작동하는 이전 알고리즘 (같은 바이트 수)을 약간 수정 한 것입니다.

큐브 버전 :

    ; ;
    u !
I 1 ) % / ; O =
! ; ; / ; . . .
    . .
    . .

연산:

  • I (73) : 숫자로 입력 읽기
  • 1 (49) : 푸시 1
  • ) (41) : 증분
  • % (37) : 모드를 가지고
  • / (47) : 왼쪽으로 돌아
  • ! (33) : 홀수 인 경우 다음 명령어 건너 뛰기
    • 1;;/; ;is (59): 출력을 위해 스택을 준비합니다
    • O (79) : 숫자로 출력합니다.
    • 그런 다음 알고리즘을 다시 입력하지만 입력 종료를 위해 Ia 0를 읽으 므로 짝수 분기에 들어갈 수 있습니다.
  • u (117) : 우회전
  • ;;;!I : 루프, 효과적으로 아무것도하지 않습니다.

부정적인 입력에 실패한 @MickyT, 그래서 나는 사용하지 않는 이유?
Giuseppe

사과, 제대로 확인하지 않았다
MickyT

3

, 9 바이트

¿﹪Iθ÷χ⁵→θ

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

기본적으로 입력이 10/5의 배수가 아닌 경우 입력을 오른쪽으로 인쇄합니다 ( ²문자는 숯 코드 페이지에도 있음 ). 사용 된 문자는 다음과 같습니다.

  • ¿: 코드 BF.
  • : 코드 A5.
  • : 코드 C9.
  • θ: 코드 F1.
  • ÷: 코드 AF.
  • χ: 코드 E3.
  • : 코드 B5.
  • : 코드 13.

실제로 끝 부분은 중복되지만 대답의 길이가 홀수 인 것을 보았습니다 ...

설명:

¿      if (
 ﹪      Modulo (
  Iθ      the input as number,
  ÷χ⁵      χ (predefined value: 10) divided by 5 = 2 ) [is 1])
 →θ      then print rightwards the input as string

당신은 인쇄하고 나서 오른쪽으로 움직입니다. 오른쪽으로 인쇄하면 실제로입니다 →θ.
Neil

@ Neil 죄송합니다. 적어도 그것은 내 대답을 무효화하지 않았습니다 ... :-D
Charlie

3

x86_64 머신 코드 (Linux), 12 11 바이트

불행히도 0x80짝수이지만 여전히 해결되었습니다 ( "아무것도하지 않는다"고 가정하면 반환하지 않음).

0000000000000000 <odd>:
   0:   8d 07                   lea  (%rdi), %eax
   2:   83 e7 01                and    $0x1, %edi
   5:   83 ff 01                cmp    $0x1, %edi
   8:   75 fb                   jne       5  <odd+0x5>
   a:   c3                      retq

-1 바이트, @CodyGray 감사합니다!

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


1
x86-64이므로 소스가 32 비트 레지스터 인 경우 lea (%edi),%eax주소 크기 재정의 접두사 ( 0x67)가 필요합니다 . 를 수행하여이를 제거 할 수 있습니다 lea (%rdi),%eax. 그것은 바이트를 절약하고 실제로 코드를 약간 더 효율적으로 만듭니다 (접두사는 디코딩 속도를 늦추고 i 캐시를 채 웁니다). 이것을 더 단축하기 위해 할 수있는 다른 것들이 있지만, 그것은 본질적으로 완전한 재 작성을 구성하므로 내 자신의 답변을 게시 할 것입니다. :-) 물론 이것도 찬성했습니다! (아, 당신은 점프 오프셋을 홀수로 만드는 데 프리픽스를 사용했을지도 모른다는 것을 깨달았습니다. 글쎄, 당신은 더 많은 마술이 필요합니다.)
Cody Grey

또한 TIO를위한 정말 영리한 솔루션입니다! asm으로 출력을 인쇄하기 위해 모든 바닥 판을 "footer"로 작성하고 싶지 않았기 때문에 대부분의 asm 답변에서 건너 뛰었습니다. 나는 마침내 고장 났고 다른 날에 그것을했지만, 이것은 당신이 다른 모든 것에 C를 사용할 수있게 하는 훨씬 더 좋은 아이디어입니다. 나는 지금부터 이것을 훔칠 것입니다! :-)
코디 그레이

귀하의 의견을 응원합니다. 저는 조립 과정에서 완전한 멍청한 놈이지만 충분히 쉬워 보입니다! 솔루션이 궁금합니다. 오, 신용은 @ceilingcat에 간다-나는 그것을 훔쳤다;)
ბიმო

나는 실제로 당신에게 바이트를 저장하지 않았다 ... 당신이 지금 가지고있는 것은 짝수 오프셋이 있기 때문에 명령에 F6대한 짝수 바이트 ( ) JNE가 있습니다. 그것이 내가 첫 번째 주석으로 편집 한 마지막 괄호의 의미입니다. 홀수 정렬을 만들려면 실제로 해당 접두사가 필요 합니다. 또는 다른 방법으로 코드를 다시 작성해야합니다. 다양한 변형을 연주했습니다. 나는 지난 밤에 실제로 이것을 보았고 OUT홀수 값을 출력 하는 데 사용할 수 있는 좋은 방법을 찾으려고 노력 했지만 좋은 해결책은 실제로 나에게 발생하지 않았습니다. 여기에 대한 통찰력은 짝수 값을 위해 무한 루프에 들어가는 것입니다.
코디 그레이

합리적인 솔루션 중 어느 것도 작동하지 않기 때문에 이것은 실제로 어리석은 도전입니다. 실제로 x86 명령어 세트의 모호한 모서리를 얼마나 잘 알고 있는지 테스트합니다. 나는 BT아무도 사용하지 않는 명령어 제품군을 시도했지만 (불행히도 모든 레지스터 인코딩은 바이트입니다). 나는 값이나 다른 것을 반환하는 대신 직렬 포트에 출력하는 코드를 작성하는 것이 더 흥미로울 수 있다고 생각 하지만 바이트는 거기에 카운트됩니다 (특히 16 진수의 직렬 포트 주소가 짝수이기 때문에!) 포기했다.
코디 그레이

3

Mathematica, 20 바이트

골프가 아닌 언어로 된 첫 번째 솔루션 인 것처럼 보입니다.

a=1+1;g[i_/;!a\[Divides]i]=i

에서 MacintoshChineseTraditional문자 인코딩. \[Divides]입니다 {161, 253}(2 바이트)

대체 버전 (23 바이트)

\[CapitalAlpha]=1+1;\[CapitalGamma][\[CapitalChi]_/;\[CapitalAlpha]\[LeftFloor]\[CapitalChi]/\[CapitalAlpha]\[RightFloor]\[NotEqual]\[CapitalChi]]=\[CapitalChi]

또는 (유니 코드로 표시)

Α=1+1;Γ[Χ_/;Α⌊Χ/Α⌋≠Χ]=Χ

Symbol문자 인코딩. (1 바이트 문자 만 사용)

솔루션은 입력이 홀수 일 때 입력으로 평가하고 입력이 짝수 일 때 문자 그대로 "아무것도하지"(평가하지 않음) 하는 함수 g(또는 Γ)를 정의합니다 .


바이트 ;수가 짝수 여야하는 경우 +1 바이트 ( 끝에); 그리고 \[Divides]또한 이상한 유니 코드 코드 포인트가있다.
user202729

당신은 필요하지 않습니다 I[1+1], 당신은 단지 사용할 수 있습니다 {1+1}. 또한 바닥 브래킷의 바이트가 유효한지 확인 했습니까? 그렇다면 2에서 얻을 수 있습니다 \[LeftFloor]E\[RightFloor].
Martin Ender

@MartinEnder Symbol바닥 만 유효하게 만들지 만도 E없습니다 \[ExponentialE].
user202729

나는 당신이 문자를 사용할 수 없습니다 두려워 D; v; 도 d들은 짝수 바이트 값을 갖기 때문에 .. :(
케빈 Cruijssen

1
@KevinCruijssen \[Divides]은 Mathematica에서 하나의 단일 문자이며 2 바이트로 표시됩니다 {161, 253}.
user202729

3

펄, 54 바이트

필요합니다 -E.

나는이 도전을 정말로 즐겼다. 나는이 대답을 시도하고 향상시키고 싶다고 생각하지만, 그것이 내가 지금 할 수있는 가장 짧은 것 같아요. 나는이 답변을 며칠 동안 켜고 끄고 놀고 있지만 54 바이트 솔루션에 만족한다고 생각합니다!

s//A_=Y[;A_=A_%O?A_W''/;y/#A-_/#-A/;s/[#-}]+/uc/ee;say

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

설명

기본적으로 대부분의 Perl 문자열 함수는에서 작동 $_하며 시작하기에는 비어 있습니다.

먼저 s//A_=Y[;A_=A_%O?A_W''/빈 문자열을 $_로 바꾸고 다음 목록에 따라 문자 A_=Y[;A_=A_%O?A_W''y/#A-_/#-A/바꿉니다 (위의 문자는 아래 문자가 됨).

#ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
#$%&'()*+,-./0123456789:;<=>?@A

이는 업데이트 $_포함 $_=<>;$_=$_%2?$_:''. 다음 s/[#-}]+/uc/ee은 모든 문자를 [#-}]+로 바꿉니다 uc. /ee이것이 없으면 string uc만되지만 문자열 /ee의 내용을 두 번 평가합니다. 첫 번째 평가의 결과를 반환 uc의 대문자 버전입니다, $_하지만 이후 $_에는 알파벳 문자를 포함하지, 이것은 단지 전체 문자열, 다음 두 번째 반환 /e문자열을 다시 평가합니다되는 세트 $_중 하나에 $_(입력 번호) 또는 ''여부에 따라 숫자가 홀수이거나 짝수가 아닙니다.

마지막으로, $_이제 우리가 원하는 것을 포함하고 있기 때문에 우리 는 개행 문자 다음에 인쇄하는 ( 대신에 say필요한 -E-e)을 호출 합니다 $_.


얼터너티브 펄, 93 바이트

에 대한 92 바이트 코드 + 1 -p, 나는 그것을 비 경쟁으로 만들 것이라고 생각합니다.

s//_/g;s//uc/e;y/\x09-\x0b/_/;s/____/}[/;s/___/%C]/;s/_/{''H/;y/'{}1CDGH/'-)1-3+--/;s/[#-}]+/uc/ee

탭과의 수직 탭을 포함 y///로 표시, \x09\x0b.

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


2

로고 , 390 46 52 50 바이트

[ask    1   se[make]iseq    1-3 cos ?/ask   1[1/sum 1   179]?]

입력이 홀수이면 입력을 반환하고 입력이 짝수이면 오류를 발생시키는 템플릿 목록입니다.

용법:

show invoke [ask ... (paste code here) ... ] 5

산출

5

5가 홀수이므로

invoke [ask ... (paste code here) ... ] 6

6이 짝수이므로 오류가 발생합니다.



2

TI-BASIC, 14 바이트

Input Q
sinֿ¹(gcd(Q²,int(e
Q

이 경우 짝수에 도메인 오류 (홈 화면에 아무것도 인쇄되지 않음)가 발생합니다.

Input Q             Q is a variable with an odd code. We cannot use "Ans" as it's even.

            int(e   floor(e) = 2; "2" is even.
         Q²         Q may be negative, so we square it which preserves parity.
     gcd(Q²,int(e   1 if Q is odd; 2 if Q is even.
sinֿ¹(gcd(Q²,int(e   Error iff Q is even.

Q                   If there was no error, print Q.

1

Pyth , 14 11 10 9 바이트

I + Q_ + K / Q + 3_1KQ 
I! sIcQ + 3_1Q 
I! u + 1_GQ1Q
? u + 1_GQ1k

테스트 스위트 .


그것은 영리한 방법이지만 I%Qy1Q작동 하지 않아야 합니까?
Jakube

@Jakube 나는 분명히 이해하지 못했습니다 y1... 그러나 %슬프게도 허용되지 않습니다.
Leaky Nun

왜 안돼? %ASCII 값은 37이며 홀수입니다.
Jakube

3
@Jakube 분명히이 목록에서 OP가 제공 한 신뢰를 믿었 기 때문에 (잘못된)
Leaky Nun

1

Japt , 4 바이트

u)çU

Japt는 ISO / IEC 8859-1 을 사용하므로 (10 진수)에 해당합니다 117 41 231 85.

온라인으로 테스트하십시오!

설명

Uu)çU   Implicit: U = input integer
Uu)     Return Python-style U % (missing argument = 2). This gives 1 if U is odd, 0 if even.
   çU   Implicitly convert U to a string and repeat it that many times.
        Implicit: output result of last expression

먼저 p기본적 ç으로 반대 인수가있는를 사용하여 솔루션을 시도했습니다 . 그러나 p왼쪽 인수가 숫자이면 지수를 수행하므로 명시 적으로 문자열로 변환해야합니다. 이 솔루션은 홀수 바이트를 포함하지 않고 실제로 더 짧은 바이트로 밝혀졌습니다.


1

dc , 21 바이트

[c]sa?kKKCI-1;1k%1!=a

소수: 91 99 93 115 97 63 107 75 75 67 73 45 49 59 49 107 37 49 33 61 97

이 홀수이고, 그렇지 않으면 빈 상자 스택을 경우 IO 기본이 프로그램은 주요 스택에 입력을 떠난다. fTIO 페이지에서와 같이 디버그 명령을 프로그램 끝에 추가하면이를 확인할 수 있습니다 .

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

설명

[    # Begin macro definition.
 c   # Clear the main stack.
]sa  # End macro definition and push the macro into register "a".
?k   # Prompt for input and store it into precision parameter "k".
KK   # Push two copies of the input to the main stack.
CI-  # Push C-I = 12-10 = 2 to the main stack  
1;1  # Push the value stored in the first index of array "1" (0 by default) 
     # to the main stack. 
k    # Push 0 into parameter "k" to reset the precision (otherwise the modulus 
     # function will not work correctly).
%    # Push the input (mod 2) to the main stack.
1!=a # If the input (mod 2) does not equal 1, execute the macro in register "a".
f    # OPTIONAL: Output the contents of the main stack.

1

TI 기본, 18 바이트

lirtosiast 덕분에 2 바이트 절약

:Prompt Q
:While 5Q/ᴇ1-int(5Q/ᴇ1
:Q

바이트 단위 (+2 개행 = 3F)

:Prompt Q
 DD     51
:While 5Q/ᴇ1-int(5Q/ᴇ1
 D1    35 3B B1  35 3B  
        51 31     51 31
         83 71     83
:Q
 51

http://tibasicdev.wikidot.com/one-byte-tokens 참조


1
fPart (?)를 사용하지 않는 이유
lirtosiast

tibasicdev.wikidot.com/one-byte-tokens에 따르면 @lirtosiast는 짝수 바이트 (BA = 186) 인 것 같습니다
Oki

아, 어떤 항목이 행이고 어떤 항목이 열인지 잘못 읽었습니다.
lirtosiast

1
나는 Input Q[newline]sinֿ¹(gcd(Q²,int(e[newline]Q(14 바이트)를 발견했다 . 별도의 답변으로 게시 할 수 있습니까?
lirtosiast

트윗 담아 가기 별도의 대답을하기에 충분히 다릅니다. 그것을 사랑
오키


0

배쉬 , 31 바이트

read a
[ $[a%2] = 0 ] ||echo $a

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

설명:

read a                   reading the input and define it on the variable a
[ $[a%2] = 0 ]      outputs exit status 0 when a/2 is 0 and exit status 1 if not.
||                           evaluates only when the exit status left of it is 1
echo $a                displays the variable a

이것은 제한된 소스 챌린지라는 것을 놓친 것 같습니다. 금지 된 바이트를 사용하고 있습니다. ( rd $20|h및 줄 바꿈)
Ørjan Johansen

@ ØrjanJohansen는 내가 추측
ADDB

2
음 .. 아니야. 프로그램 길이에는 제한이 없지만 프로그램의 모든 문자 에는 홀수 바이트 값이 있어야합니다.
Ørjan Johansen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.