시간을 90 도로 출력


26

오늘 내 아이들과 놀면서 공원의 단순한 장난감이 도전에 빠졌다는 것을 알았습니다.

시계

바퀴에는 숫자를 가리키는 삼각형이 있지만 첫 번째 것에서 90 도마 다 숫자를 가리키는 세 개의 원이 있습니다. 그래서:

도전 (정말 간단)

허용되는 형식으로 1에서 12 사이의 정수 (삼각형으로 표시되는 정수)가 주어지면 허용 가능한 형식으로도 출력하고 원으로 표시되는 세 숫자 (90 도마 다 하나씩)를 정렬하십시오.

테스트 사례

In       Out
1        4, 7, 10
2        5, 8, 11
3        6, 9, 12
4        7, 10, 1
5        8, 11, 2
6        9, 12, 3
7        10, 1, 4
8        11, 2, 5
9        12, 3, 6
10       1, 4, 7
11       2, 5, 8
12       3, 6, 9

이것은 이므로 모든 언어에 대해 가장 짧은 코드가 이길 수 있습니다!


입력을 0 인덱스로 가져올 수 있습니까? 처럼 0 -> 4, 7, 10?
Mr. Xcoder

8
@ Mr.Xcoder 죄송합니다. 이번에는 아니요라고하겠습니다.
Charlie

3
이것이 당신의 아이들과 관련된 어떤 활동에 근거한 네 번째 도전입니까? : P
FlipTack 2016

3
@FlipTack 아마도 우리는 아이들에게 영감을 얻은 태그가 필요할 것입니다;)
Steadybox

6
@FlipTack 수를 잃었습니다. :-) 그러나 대부분의 여가 시간을 아이들과 함께 보낸다면, 영감은 어디에서 오는지 맞춰보세요.
Charlie

답변:



9

젤리 , 8 바이트

12Rṙ’m3Ḋ

숫자를 가져와 숫자 목록을 반환하는 모나드 링크.

온라인으로 사용해보십시오! 또는 모든 경우를 참조하십시오.

방법?

12Rṙ’m3Ḋ - Link: number, n   e.g. 5
12       - literal twelve         12
  R      - range                  [1,2,3,4,5,6,7,8,9,10,11,12]
    ’    - decrement n            4
   ṙ     - rotate left            [5,6,7,8,9,10,11,12,1,2,3,4]
      3  - literal three          3
     m   - modulo slice           [5,8,11,2]
       Ḋ - dequeue                [8,11,2]

다른 해결책 : 12Rṙm-3Ḋ(역순으로 출력)
user202729


6

MATL , 9 바이트

I:I*+12X\

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

설명

4예를 들어 입력 을 고려하십시오 .

I:     % Push [1 2 3]
       % STACK: [1 2 3]
I      % Push 3
       % STACK: [1 2 3], 3
*      % Multiply, element-wise
       % STACK: [3 6 9]
+      % Add implicit input, element-wise
       % STACK: [7 10 13]
12     % Push 12
X\     % 1-based modulus. Implicit display
       % STACK: [7 10 1]


5

APL + WIN, 13 바이트

(⎕⌽⍳12)[3×⍳3]

설명:

⎕ Prompt for screen input of indicated time t

⍳12 Create a vector of integers from 1 to 12

⌽ Rotate the vector by t elements front to back

[3×⍳3] Select 3rd, 6th and 9th elements.

아주 깔끔합니다. 인덱스 회전 방식이 마음
Uriel


4

자바 스크립트 (ES6), 29 바이트

xnor의 답변과 유사합니다 .

n=>[2,5,8].map(k=>(n+k)%12+1)

데모


나는 한 n=>[3,6,9].map(v=>(v+n)%12)다음 ...이 0이 아닌 12 반환 실현
ericw31415

@ ericw31415 사실, 첫 번째 접근 방식은 n=>[3,6,9].map(v=>(v+n)%12||12)31 바이트였습니다.
Arnauld

4

옥타브 , 25 바이트

@(x)[a=1:12 a](3+x:3:9+x)

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

상당히 간단한 익명 함수.

먼저 [1:12 1:12]정수 세트의 사본 두 개를 만듭니다 . 그런 다음의 값을 선택하기 위해 색인을 생성 합니다. x+3, x+6, x+9여기서 x숫자는 입력됩니다.

옥타브는 1 인덱싱되므로 입력을 기반으로 배열 요소를 간단히 선택할 수 있습니다 (정직한 0 인덱싱은 동일한 바이트 수를 사용하지만).

이것은 배열의 두 복사본을 가짐으로써 모듈로를 사용하여 인덱스를 래핑 할 필요가 없다는 점에서 다른 답변에 고유 한 방법을 사용하는 것 같습니다.


매우 훌륭하지만 "지루한"모드 접근 방식이 더 짧습니다! 온라인으로 사용해보십시오!
주세페

@ 주세페 롤, 나는 그것을 사용하려고 노력했고 mod그것을 더 짧게 만들 수 없었습니다. 잘 했어! 답변으로 자유롭게 게시하십시오.
Tom Carpenter

3

Befunge-93, 20 19 18 바이트

852<_@#:.+1%+66+&p

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

설명

852                   Push 8, 5 and 2 onto the stack - the offsets we're going to add.
   <                  Reverse direction, and start the main loop.
852                   Push 2, 5, and 8 onto the stack, but we don't actually want these.
                 p    So we use a "put" operation to drop the top three values.
                &     Read the hour from stdin.
               +      Add it to the topmost offset.
         +1%+66       Mod 12 and add 1 to get it in the range 1 to 12.
        .             Then output the result to stdout.
    _@#:              Exit if the next offset is zero (i.e. nothing more on the stack).
   <                  Otherwise start the main loop again. 

이는 참조 인터프리터와 관련된 동작에 의존합니다. 파일 끝에서 &연산자는 마지막으로 읽은 값을 리턴합니다. 그렇기 때문에 루프를 반복 할 때마다 stdin부터 시간을 안전하게 다시 읽을 수 있습니다.


산뜻한. 내가 모르는 &그 한
조 왕에게

3
@JoKing 기술적으로 이것은 인터프리터의 버그이며, 또 다른 관련 부작용 &일회성 난수 생성기 로도 사용될 수 있습니다 . 그러나 컴파일러를 빌드하는 데 사용 된 컴파일러에 의존하기 때문에 신뢰성이 떨어집니다. 현재 TIO에서 작업하고 있지만 Dennis가 다른 버전의 gcc로 변경하여 잠시 동안 해당 기능을 잃어버린 시간이있었습니다.
James Holderness


2

apt, 11 바이트

3ÆU±3 uC ªC

시도 해봐


설명

정수의 묵시적 입력 U. 3 개의 요소 배열 ( )을 생성하고 각 요소에 대해 U3 ( U±3) 씩 증가 하고 모듈로를 12 ( uC) 씩 증가 시키므로 12%12=0OR 12 ( ªC) 결과를 반환합니다 .






1

Pushy , 12 바이트

258s{K+12%h_

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

258            \ Push 258                            
   s           \ Split into digits, yielding [2, 5, 8]
    {K+        \ Add input to each
       12%     \ Modulo each by 12
          h    \ Increment each
           _   \ Print (space separated)

12 바이트

동일한 바이트 수에 대한 대안 :

12R{:{;$...#

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

12R            \ Push range(1, 12), inclusive
   {: ;        \ Input times do:
     {         \   Rotate left
       $       \ While there are items on stack:
        ...    \   Pop the top three
           #   \   Print top item


1

K (oK) , 11 바이트

해결책:

1+12!2 5 8+

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

예 :

1+12!2 5 8+1
4 7 10
1+12!2 5 8+2
5 8 11
1+12!2 5 8+3
6 9 12
1+12!2 5 8+4
7 10 1

설명:

이것이 가장 먼저 떠오른 해결책이었습니다. 최고 또는 최단이 아닐 수도 있습니다.

1+12!2 5 8+ / the solution
     2 5 8+ / add 2, 5 and 8 to the input
  12!       / apply modulo 12 to the results
1+          / add 1

1

GolfScript, 46 바이트

~13,1>:x?:y;0:i;x y 3+12%=x y 6+12%=x y 9+12%=

코드 골프를하는 것은 이번이 처음입니다. 경험이 부족하여 최상의 솔루션을 찾지 못했을 수도 있지만 어딘가에서 시작해야합니까?

온라인으로 시도 하거나 모든 사례를 시도하십시오


안녕하세요, 사이트에 오신 것을 환영합니다! 이것은 좋은 첫 번째 답변처럼 보입니다 :) 불행히도, golfscript에 대해 아무것도 몰랐지만 여기에서
DJMcMayhem



1

페이스 , 96 94 바이트

(%d
@)\$*,c'$ooiim%*m1*6%+%%%11m!*mn*m~*3!m&!r!&!is!&$pn3!:L+nn1+nn1%nn%+nn1p~>$inw~>~o-!!1?!L

이것은 단순히 두 개의 모드를 12 씩 더하고 하나를 더한 다음 인쇄합니다. 그런 다음 두 번 더 수행합니다.

댓글 버전 :

(%d
@)

\$*,c'$ooii     ( store format string in $, ip in *, get stdin/out )
m%*m1*6%+%%%11  ( initialize constants, %=12, 1=1 )
m!*mn*m~*       ( malloc space for a counter, input var, and length )
3!m&!r!&!i      ( read into & )
s!&$pn          ( scan into n )
3!:L            ( start of main loop, executed thrice )
  +nn1+nn1      ( add 2 to n )
  %nn%+nn1      ( mod by 12 and add 1 more )
  p~>$in        ( sprintf n into > )
  w~>~o         ( output to stdout )
  -!!1          ( decrement counter )
?!L             ( conditional jump back to loop start )

온라인으로 사용해보십시오! 최신 버전의 얼굴에서 수정 된 버그로 인해 TIO에서 후행 줄 바꿈이 필요합니다.


값 3을 보유한 변수를 작성 m3*33하면 세 개의 +nn1s를 하나의 +nn3 tio.run/…
Kritixi Lithos

@Cowsquack 링크의 출력이 잘못되었습니다.
Doorknob

1

4 번째 (2 번째) , 39 바이트

스택에서 입력을 가져 와서 스택에 출력

: a 2 + 12 mod 1+ ; : f a dup a dup a ;

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

설명

 : a 2 + 12 mod 1+ ; \ helper word to handle adding the hours
    2 +              \ Add 2 to the input
    12 mod           \ get the result modulo 12
    1+               \ add 1

 : f a dup a dup a ; \ word that calculates and outputs the result
    a dup            \ add 3 hours to the input and then duplicate the result
    a dup            \ add 3 hours to the duplicate then duplicate the result
    a                \ add 3 hours to the duplicate 



0

Wolfram Language (Mathematica) 35 바이트

Range@12~RotateLeft~#~Take~{3,9,3}&

위의 내용은 중위 표기법으로보다 명확하게 표현할 수있는 것을 주장합니다.

Function[Take[RotateLeft[Range[12],Slot[1]],List[3,9,3]]]

RotateLeftRange[12]입력 번호만큼 왼쪽에서 순서 1,2, ... 12를 회전 합니다. Slot[1]또는 #입력 번호 n을 보유합니다.

예를 들어, n = 4 인 경우

Function[RotateLeft[Range[12],4]]]

리스트를 돌려 준다

{5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4}

Take...{3,9,3} 위치 3에서 위치 9까지 해당 목록의 모든 세 번째 요소, 즉

{7, 10, 1}


0

Windows 배치, 13712511168 바이트

@set/ab=(%1+2)%%12+1,c=(%1+5)%%12+1,d=(%1+8)%%12+1
@echo %b% %c% %d%

포트 add value to input and mod 12 + 1



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