Виведіть години на 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,?
Містер Xcoder

8
@ Mr.Xcoder вибачте, на цей раз я збираюся сказати "ні".
Чарлі

3
Це четвертий виклик, який зараз базується на діяльності, яка стосується ваших дітей? : P
FlipTack

3
@FlipTack Можливо, нам потрібен натхненний тег для дітей;)
Steadybox

6
@FlipTack Я втратив рахунок. :-) Але враховуючи, що більшу частину вільного часу я проводив із дітьми, здогадайтесь, звідки береться моє натхнення ...
Чарлі

Відповіді:



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.

Досить акуратно. Мені подобається той індексований підхід до обертання
Уріель


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 байт).
Арнольд

4

Октава , 25 байт

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

Спробуйте в Інтернеті!

Досить проста анонімна функція.

Спочатку ми створюємо масив [1:12 1:12]- так дві копії повного набору номерів. Потім індексуємо, щоб вибрати значення x+3, x+6, x+9, деx вводиться число.

Octave є 1-індексованою, тому ми можемо просто вибрати елементи масиву на основі вхідних даних (хоча, якщо чесно, 0-індексований тут би використовував стільки ж байтів).

Це здається, що використовується метод, який є унікальним для інших відповідей тим, що, маючи дві копії масиву, нам не доведеться обертати індекси за допомогою модуля.


Дуже приємно, але "нудний" модний підхід коротший! Спробуйте в Інтернеті!
Джузеппе

@Giuseppe lol, я впевнений, що я спробував використовувати modі не зміг зробити його коротшим. Молодці! Сміливо публікуйте як відповідь.
Том Карпентер

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, але був час, коли Денніс змінився на іншу версію gcc і ми втратили цю функціональність на деякий час.
Джеймс Холдернес


2

Japt, 11 байт

3ÆU±3 uC ªC

Спробуй це


Пояснення

Неявне введення цілого числа U. Створіть 3-елементний масив ( ) та, для кожного елемента, приріст Uна 3 ( U±3), модуль на 12 ( uC) і, тому 12%12=0, поверніть результат АБО 12 ( ªC).






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

Це просто додає два моди на 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 Зауважте, що вихід у вашому посиланні неправильний.
Дверна ручка

1

Четвертий (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

Мова Вольфрама (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



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.