แสดงผลชั่วโมงที่ 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

3
@FlipTack บางทีเราอาจต้องการแท็กแรงบันดาลใจจากเด็ก ๆ ;)
Steadybox

6
@FlipTack ฉันเสียการนับ :-) แต่เนื่องจากฉันใช้เวลาส่วนใหญ่กับลูก ๆ ของฉันเดาว่าแรงบันดาลใจของฉันมาจากไหน ...
Charlie

คำตอบ:



9

เยลลี่ขนาด 8 ไบต์

12Rṙ’m3Ḋ

ลิงก์ monadic ที่ใช้ตัวเลขและส่งคืนรายการตัวเลข

ลองออนไลน์! หรือดูทุกกรณี

อย่างไร?

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




5

APL + WIN, 13bytes

(⎕⌽⍳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

JavaScript (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" น่าเบื่อสั้นกว่า! ลองออนไลน์!
จูเซปเป้

@Giuseppe ฮ่า ๆ ฉันแน่ใจว่าฉันลองใช้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 ได้อย่างปลอดภัยในการวนซ้ำแต่ละรอบ


เรียบร้อย ฉันไม่รู้ว่า&ทำอย่างนั้น
Jo King

3
@JoKing ในทางเทคนิคแล้วมันเป็นบั๊กในล่ามซึ่งเป็นผลข้างเคียงที่เกี่ยวข้องอีกอย่างหนึ่งที่&สามารถใช้เป็นเครื่องกำเนิดเลขสุ่มแบบใช้ครั้งเดียวได้ ที่เชื่อถือได้น้อย แต่เนื่องจากขึ้นอยู่กับคอมไพเลอร์ที่ใช้ในการสร้าง กำลังทำงานกับ TIO ในขณะนี้ แต่มีช่วงเวลาที่เดนนิสเปลี่ยนไปเป็น gcc รุ่นอื่นและเราสูญเสียฟังก์ชันการทำงานนั้นไประยะหนึ่ง
James Holderness


2

Japt, 11 ไบต์

3ÆU±3 uC ªC

ลองมัน


คำอธิบาย

Uการป้อนข้อมูลโดยนัยของจำนวนเต็ม สร้าง 3 องค์ประกอบอาร์เรย์ ( ) และสำหรับแต่ละองค์ประกอบเพิ่มขึ้นU3 ( U±3), modulo โดย 12 ( uC) และเนื่องจาก12%12=0ส่งคืนผลลัพธ์หรือ 12 ( ªC)


2

Brain-Flakขนาด 84 ไบต์

(()()()){({}<(()(){})(((()()()){}){}<>){(({})){({}[()])<>}{}}<>(([{}]{})<>)>[()])}<>

ลองออนไลน์!

อย่างน้อยฉันก็เอาชนะโซลูชันใบหน้าของ Doorknob ...

คำอธิบาย:

LOOP 3 TIMES: (()()()){({}<

  n += 2:
   (()(){})
  push 12:
   (((()()()){}){}<>)
  n mod 12 + 1; pushing to both stacks:
   {(({})){({}[()])<>}{}}<>(([{}]{})<>)

END LOOP: >[()])}<>




1

เร่งความเร็ว 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

สิ่งนี้เพิ่มสอง mods 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

Forth (gforth) , 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 (Mathematica) 35 ไบต์

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

การอ้างถึงข้างต้นในสัญกรณ์มัดสิ่งที่สามารถแสดงได้ชัดเจนยิ่งขึ้นเป็น

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

RotateLeftหมุนRange[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 Batch, 137 125 111 68 ไบต์

@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.