Wydaj godziny w 90 stopniach

26

Dzisiaj podczas zabawy z moimi dziećmi zauważyłem, że pozornie prosta zabawka w parku kryje wyzwanie.

Zegar

Koło ma trójkąt, który wskazuje na liczbę, ale ma również trzy koła, które wskazują na liczby co 90 stopni od pierwszego. Więc:

Wyzwanie (bardzo proste)

Biorąc pod uwagę liczbę całkowitą od 1 do 12 (wskazaną przez trójkąt) w dowolnej akceptowalnej formie, wyprowadzaj również w dowolnej akceptowalnej formie i uporządkuj trzy liczby wskazane przez koła (te co 90 stopni).

Przypadki testowe

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

To jest , więc może wygrać najkrótszy kod dla każdego języka!

Charlie
źródło
Czy możemy przyjąć dane wejściowe jako indeksowane 0? Jak 0 -> 4, 7, 10?
Pan Xcoder,
8
@ Mr.Xcoder przepraszam, tym razem powiem nie.
Charlie,
3
Czy to czwarte wyzwanie oparte obecnie na aktywności z udziałem twoich dzieci? : P
FlipTack,
3
@FlipTack Być może potrzebujemy tagu inspirowanego przez dzieci;)
Steadybox
6
@FlipTack straciłem rachubę. :-) Ale biorąc pod uwagę, że większość wolnego czasu spędziłem z dziećmi, zgadnij, skąd wzięła się moja inspiracja ...
Charlie,

Odpowiedzi:

9

Galaretka , 8 bajtów

12Rṙ’m3Ḋ

Monadyczny link pobierający liczbę i zwracający listę liczb.

Wypróbuj online! lub zobacz wszystkie przypadki .

W jaki sposób?

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]
Jonathan Allan
źródło
Alternatywne rozwiązanie: 12Rṙm-3Ḋ(wyjście w odwrotnej kolejności)
202729,
6

MATL , 9 bajtów

I:I*+12X\

Wypróbuj online!

Wyjaśnienie

Rozważ wejście 4jako przykład.

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]
Luis Mendo
źródło
5

APL + WIN, 13 bajtów

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

Wyjaśnienie:

⎕ 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.
Graham
źródło
Całkiem porządnie. Podoba mi się to indeksowane podejście rotacyjne
Uriel
4

JavaScript (ES6), 29 bajtów

Podobne do odpowiedzi Xnora .

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

Próbny

Arnauld
źródło
Miałem n=>[3,6,9].map(v=>(v+n)%12)wtedy zrozumiał, że zwraca 0, a nie 12 ...
ericw31415
@ ericw31415 Właściwie moje pierwsze podejście było n=>[3,6,9].map(v=>(v+n)%12||12)(ale to 31 bajtów).
Arnauld
4

Oktawa , 25 bajtów

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

Wypróbuj online!

Dość prosta anonimowa funkcja.

Najpierw tworzymy tablicę [1:12 1:12]- czyli dwóch kopii pełnego zestawu liczb. Następnie indeksujemy, aby wybrać wartości x+3, x+6, x+9, gdzie xjest wprowadzoną liczbą.

Oktawa ma indeks 1, więc możemy po prostu wybrać elementy tablicy na podstawie danych wejściowych (chociaż szczerze mówiąc indeks 0 użyłby tutaj tej samej liczby bajtów).

Wydaje się, że używa to metody unikalnej dla innych odpowiedzi, ponieważ mając dwie kopie tablicy, nie musimy zawijać indeksów przy użyciu modulo.

Tom Carpenter
źródło
Bardzo fajnie, ale „nudne” podejście modowe jest krótsze! Wypróbuj online!
Giuseppe,
@Giuseppe lol, jestem pewien, że próbowałem użyć modi nie mogłem go skrócić. Dobra robota! Możesz pisać jako odpowiedź.
Tom Carpenter,
3

Befunge-93, 20 19 18 bajtów

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

Wypróbuj online!

Wyjaśnienie

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. 

Zależy to od zachowania specyficznego dla interpretera referencyjnego: na końcu pliku &operator zwraca ostatnią odczytaną wartość. Właśnie dlatego możemy bezpiecznie ponownie odczytać godzinę ze standardowego wejścia na każdej iteracji pętli.

James Holderness
źródło
Schludny. Nie wiedziałem, &że to zrobiłem
Jo King
3
@JoKing Technicznie jest to błąd interpretera, inny związany z tym efekt uboczny, który &można również wykorzystać jako rodzaj jednorazowego generatora liczb losowych . Jest to jednak mniej niezawodne, ponieważ zależy od kompilatora, którego użyto do jego zbudowania. W tej chwili działa na TIO, ale był czas, gdy Dennis zmienił się na inną wersję gcc i na chwilę straciliśmy tę funkcjonalność.
James Holderness
2

Japt, 11 bajtów

3ÆU±3 uC ªC

Spróbuj


Wyjaśnienie

Domniemane wprowadzenie liczby całkowitej U. Wygeneruj tablicę 3-elementową ( ) i, dla każdego elementu, zwiększaj Uo 3 ( U±3), modulo o 12 ( uC) i, ponieważ 12%12=0, zwróć wynik LUB 12 ( ªC).

Kudłaty
źródło
2

Brain-Flak , 84 bajtów

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

Wypróbuj online!

Przynajmniej pokonałem rozwiązanie twarzy Doorknob ...

Wyjaśnienie:

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

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

END LOOP: >[()])}<>
MegaTom
źródło
2

Pyth , 12 bajtów

%R12+LQ*R3S3    

Wypróbuj online!

Dave
źródło
1
Witamy na stronie! :)
DJMcMayhem
1

Pushy , 12 bajtów

258s{K+12%h_

Wypróbuj online!

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 bajtów

Alternatywa dla tej samej liczby bajtów:

12R{:{;$...#

Wypróbuj online!

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

C # (.NET Core) , 42 bajty

h=>new[]{(2+h)%12+1,(5+h)%12+1,(8+h)%12+1}

Wypróbuj online!

Zasadniczo tylko port wielu innych odpowiedzi na C #.

Ayb4btu
źródło
1

K (oK) , 11 bajtów

Rozwiązanie:

1+12!2 5 8+

Wypróbuj online!

Przykłady:

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

Wyjaśnienie:

To było pierwsze rozwiązanie, jakie przyszło mi do głowy. Może nie być najlepszy ani najkrótszy.

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
streetster
źródło
1

GolfScript, 46 bajtów

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

Po raz pierwszy uprawiam golfa kodowego, więc z powodu braku doświadczenia prawdopodobnie nie znalazłem najlepszego rozwiązania, ale muszę gdzieś zacząć, prawda?

Wypróbuj online lub wypróbuj wszystkie przypadki

QunSyBer
źródło
Witam, witam na stronie! To jak miły pierwszej odpowiedzi wygląda :) Niestety, ja nie wiem nic o golfscript, ale może być w stanie uzyskać kilka wskazówek tutaj
DJMcMayhem
1

PHP, 37 + 1 bajtów

while($i++<3)echo(~-$argn+=3)%12+1,_;

Uruchom jako potok z -nRlub spróbuj online .

Tytus
źródło
1

twarz , 96 94 bajtów

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

To po prostu dodaje dwa, mody przez 12, dodaje jeden i drukuje. Potem robi to jeszcze dwa razy.

Skomentowana wersja:

(%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 )

Wypróbuj online! (Końcowy znak nowej linii jest wymagany w TIO z powodu błędu, który został naprawiony w nowszej wersji twarzy.)

Klamka
źródło
Utworzenie zmiennej o wartości 3 m3*33pozwala zastąpić trzy +nn1s jednym +nn3 tio.run/…
Kritixi Lithos
@ Cowsquack Należy pamiętać, że dane wyjściowe w łączu są nieprawidłowe.
Klamka
1

Dalej (gforth) , 39 bajtów

Dane wejściowe są pobierane ze stosu, a dane wyjściowe są umieszczane na stosie

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

Wypróbuj online!

Wyjaśnienie

 : 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 
reffu
źródło
0

Wolfram Language (Mathematica) 35 bajtów

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

Powyższe stwierdza, w zapisie infiksowym, co można wyrazić jaśniej jako

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

RotateLeftobraca się Range[12], sekwencja 1,2, ... 12, w lewo o numer wejściowy. Slot[1]lub #przechowuje numer wejściowy, n.

Na przykład n = 4

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

zwraca listę

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

Take...{3,9,3} zwraca co trzeci element na tej liście od pozycji 3 do pozycji 9, a mianowicie

{7, 10, 1}
DavidC
źródło
34 bajty
202729
0

Pakiet Windows, 137 125 111 68 bajtów

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

Port of add value to input and mod 12 + 1

stevefestl
źródło