Saída as horas a 90 graus

26

Hoje, enquanto brincava com meus filhos, notei que um brinquedo aparentemente simples no parque escondia um desafio.

Relógio

A roda possui um triângulo que aponta para um número, mas também possui três círculos que apontam para os números a cada 90 graus do primeiro. Tão:

Desafio (realmente simples)

Dado um número inteiro entre 1 e 12 (aquele apontado pelo triângulo) em qualquer forma aceitável, imprima também em qualquer forma aceitável e ordene os três números apontados pelos círculos (os a cada 90 graus).

Casos de teste

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

Este é o , então o código mais curto para todos os idiomas vence!

Charlie
fonte
Podemos considerar a entrada como indexada em 0? Como 0 -> 4, 7, 10?
Mr. Xcoder
8
@ Mr.Xcoder desculpe, desta vez eu vou dizer não.
Charlie
3
Esse é o quarto desafio agora baseado em alguma atividade envolvendo seus filhos? : P
FlipTack
3
@FlipTack Talvez precisamos de uma tag inspirou-a-crianças;)
Steadybox
6
@FlipTack eu perdi a conta. :-) Mas dado que passei a maior parte do meu tempo livre com os meus filhos, acho que a minha inspiração vem de ...
Charlie

Respostas:

9

Geléia , 8 bytes

12Rṙ’m3Ḋ

Um link monádico que pega um número e retorna uma lista de números.

Experimente online! ou veja todos os casos .

Quão?

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
fonte
Solução alternativa: 12Rṙm-3Ḋ(saída em ordem inversa)
user202729
6

MATL , 9 bytes

I:I*+12X\

Experimente online!

Explicação

Considere a entrada 4como um exemplo.

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
fonte
6

R ,  29  28 bytes

Obrigado a @ Giuseppe por salvar um byte!

function(n)(n+1:3*3-1)%%12+1

Experimente online!

Steadybox
fonte
5

APL + WIN, 13 bytes

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

Explicação:

⎕ 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
fonte
Bastante limpo. Eu gosto dessa abordagem rotação indexada
Uriel
4

JavaScript (ES6), 29 bytes

Semelhante à resposta do xnor .

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

Demo

Arnauld
fonte
Eu tinha n=>[3,6,9].map(v=>(v+n)%12)então percebeu que ele retorna 0, não 12 ...
ericw31415
@ ericw31415 Na verdade, minha primeira abordagem foi n=>[3,6,9].map(v=>(v+n)%12||12)(mas são 31 bytes).
Arnauld
4

Oitava , 25 bytes

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

Experimente online!

Função anônima bastante simples.

Primeiro, criamos uma matriz de [1:12 1:12]duas cópias do conjunto de números completo. Então indexamos para selecionar os valores de x+3, x+6, x+9, onde xé a entrada do número.

A oitava é indexada em 1, para que possamos simplesmente selecionar os elementos da matriz com base na entrada (embora, para ser honesto, a indexação com 0 usaria o mesmo número de bytes aqui).

Isso parece usar um método exclusivo das outras respostas, pois, tendo duas cópias da matriz, não precisamos agrupar os índices usando o módulo.

Tom Carpenter
fonte
Muito bom, mas a abordagem mod "chata" é mais curta! Experimente online!
Giuseppe
@ Giuseppe lol, tenho certeza que tentei usar mode não poderia torná-lo mais curto. Bem feito! Sinta-se à vontade para postar como resposta.
Tom Carpenter
3

Befunge-93, 20 19 18 bytes

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

Experimente online!

Explicação

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. 

Isso depende do comportamento específico do intérprete de referência: no final do arquivo, o &operador retorna o último valor que foi lido. É por isso que podemos reler com segurança a hora do stdin em cada iteração do loop.

James Holderness
fonte
Arrumado. Eu não sabia &que fiz isso
Jo King
3
@JoKing Tecnicamente, é um erro no intérprete, outro efeito colateral relacionado que &também pode ser usado como uma espécie de gerador de números aleatórios . Porém, isso é menos confiável, pois depende do compilador usado para construí-lo. Está funcionando no TIO no momento, mas houve um momento em que Dennis mudou para uma versão diferente do gcc e perdemos essa funcionalidade por um tempo.
precisa
2

Japonês, 11 bytes

3ÆU±3 uC ªC

Tente


Explicação

Entrada implícita de número inteiro U. Gere uma matriz de 3 elementos ( ) e, para cada elemento, aumente Uem 3 ( U±3), module em 12 ( uC) e, porque 12%12=0, retorne o resultado OR 12 ( ªC).

Shaggy
fonte
2

Flacidez Cerebral , 84 bytes

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

Experimente online!

Pelo menos eu venci a solução de maçaneta da maçaneta ...

Explicação:

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

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

END LOOP: >[()])}<>
MegaTom
fonte
2

Pitão , 12 bytes

%R12+LQ*R3S3    

Experimente online!

Dave
fonte
1
Bem vindo ao site! :)
DJMcMayhem
1

Limpo , 44 bytes

import StdEnv
@n=[(n+i)rem 12+1\\i<-[2,5,8]]

Experimente online!

Furioso
fonte
1

Pushy , 12 bytes

258s{K+12%h_

Experimente 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 bytes

Uma alternativa para a mesma contagem de bytes:

12R{:{;$...#

Experimente 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
fonte
1

C # (.NET Core) , 42 bytes

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

Experimente online!

Essencialmente, apenas uma porta de muitas das outras respostas para C #.

Ayb4btu
fonte
1

K (oK) , 11 bytes

Solução:

1+12!2 5 8+

Experimente online!

Exemplos:

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

Explicação:

Esta foi a primeira solução que veio à mente. Pode não ser o melhor ou o mais curto.

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
rua
fonte
1

GolfScript, 46 bytes

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

Essa é a primeira vez que pratico código de golfe. Portanto, com minha falta de experiência, provavelmente não encontrei a melhor solução, mas preciso começar em algum lugar, certo?

Experimente online ou em todos os casos

QunSyBer
fonte
Olá, bem-vindo ao site! Parece uma boa primeira resposta :) Infelizmente, não sei nada sobre o golfscript, mas você pode obter algumas dicas aqui
DJMcMayhem
1

PHP, 37 + 1 bytes

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

Execute como pipe -nRou experimente online .

Titus
fonte
1

face , 96 94 bytes

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

Isso simplesmente adiciona dois mods por 12, adiciona mais um e imprime. Então faz isso mais duas vezes.

Versão comentada:

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

Experimente online! (A nova linha à direita é necessária no TIO devido a um bug que foi corrigido em uma versão mais recente do face.)

Maçaneta da porta
fonte
Criar uma variável que contém o valor 3 m3*33permite substituir os três +nn1s por um +nn3 tio.run/…
Kritixi Lithos
@Cowsquack Observe que a saída do seu link está incorreta.
Maçaneta
1

Quarto (gforth) , 39 bytes

A entrada é retirada da pilha e a saída é colocada na pilha

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

Experimente online!

Explicação

 : 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
fonte
0

Haskell , 29 bytes

-2 bytes graças a Laikoni.

f n=[mod(n+i)12+1|i<-[2,5,8]]

Experimente online!

Não é muito original, não ...

totalmente humano
fonte
0

Wolfram Language (Mathematica) 35 bytes

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

O acima afirma, em notação infix, o que pode ser expresso mais claramente como

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

RotateLeftgira Range[12], a sequência 1,2, ... 12, para a esquerda pelo número de entrada. Slot[1]ou #mantém o número de entrada, n.

Por exemplo, com n = 4,

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

retorna a lista

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

Take...{3,9,3} retorna todos os terceiros elementos dessa lista da posição 3 à posição 9, ou seja,

{7, 10, 1}
DavidC
fonte
34 bytes
user202729
0

Lote do Windows, 137 125 111 68 bytes

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

Porto do add value to input and mod 12 + 1

stevefestl
fonte
0

PowerShell , 30 bytes

param($a)2,5,8|%{($_+$a)%12+1}

Experimente online!

Porta das outras respostas (por exemplo, resposta Python 2 do xnor). Ho-hum.

AdmBorkBork
fonte