Geben Sie die Stunden bei 90 Grad aus


26

Heute, als ich mit meinen Kindern spielte, bemerkte ich, dass ein scheinbar einfaches Spielzeug im Park eine Herausforderung verbarg.

Uhr

Das Rad hat ein Dreieck, das auf eine Zahl zeigt, aber auch drei Kreise, die alle 90 Grad von der ersten auf die Zahlen zeigen. So:

Herausforderung (ganz einfach)

Geben Sie bei einer Ganzzahl zwischen 1 und 12 (die durch das Dreieck angezeigte Zahl) in einer beliebigen zulässigen Form auch in einer beliebigen zulässigen Form aus und ordnen Sie die drei durch die Kreise angezeigten Zahlen (die Zahlen alle 90 Grad).

Testfälle

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

Das ist , also kann der kürzeste Code für jede Sprache gewinnen!


Dürfen wir die Eingabe als 0-indiziert annehmen? Wie 0 -> 4, 7, 10?
Mr. Xcoder

8
@ Mr.Xcoder sorry, diesmal werde ich nein sagen.
Charlie

3
Ist dies nun die vierte Herausforderung, die auf Aktivitäten mit Ihren Kindern basiert? : P
FlipTack

3
@FlipTack Vielleicht brauchen wir ein Kindertag;)
Steadybox

6
@FlipTack Ich habe die Zählung verloren. :-) Aber da ich den größten Teil meiner Freizeit mit meinen Kindern verbracht habe, rate mal, woher meine Inspiration kommt ...
Charlie

Antworten:



9

Gelee , 8 Bytes

12Rṙ’m3Ḋ

Ein monadischer Link, der eine Nummer aufnimmt und eine Liste von Nummern zurückgibt.

Probieren Sie es online! oder alle Fälle sehen .

Wie?

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]

Alternative Lösung: 12Rṙm-3Ḋ(Ausgabe in umgekehrter Reihenfolge)
user202729


6

MATL , 9 Bytes

I:I*+12X\

Probieren Sie es online!

Erläuterung

Betrachten Sie die Eingabe 4als Beispiel.

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 Byte

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

Erläuterung:

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

Ganz ordentlich. Ich mag diesen Ansatz der indizierten Rotation
Uriel


4

JavaScript (ES6), 29 Byte

Ähnlich wie die Antwort von xnor .

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

Demo


Ich hatte n=>[3,6,9].map(v=>(v+n)%12)dann festgestellt, dass es 0 zurückgibt, nicht 12 ...
ericw31415

@ ericw31415 Eigentlich war mein 1. Ansatz n=>[3,6,9].map(v=>(v+n)%12||12)(aber das sind 31 Bytes).
Arnauld

4

Oktave , 25 Bytes

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

Probieren Sie es online!

Ziemlich einfache anonyme Funktion.

Wir erstellen zunächst ein Array von [1:12 1:12]- also zwei Kopien des vollständigen Nummernsatzes. Dann indexieren wir in, um die Werte von auszuwählen x+3, x+6, x+9, wobei xdie Zahleneingabe ist.

Octave ist 1-indiziert, daher können wir die Array-Elemente einfach basierend auf der Eingabe auswählen (obwohl 0-indiziert hier die gleiche Anzahl von Bytes verwenden würde).

Dies scheint eine Methode zu verwenden, die einzigartig für die anderen Antworten ist, da bei zwei Kopien des Arrays die Indizes nicht mit Modulo umbrochen werden müssen.


Sehr schön, aber der "langweilige" Mod Ansatz ist kürzer! Probieren Sie es online!
Giuseppe

@ Giuseppe lol, ich bin sicher, ich habe es versucht modund konnte es nicht kürzer machen. Gut gemacht! Fühlen Sie sich frei, als Antwort zu posten.
Tom Carpenter

3

Befunge-93, 20 19 18 Bytes

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

Probieren Sie es online!

Erläuterung

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. 

Dies hängt vom Verhalten des Referenzinterpreters ab: Am Ende der Datei gibt der &Operator den zuletzt gelesenen Wert zurück. Aus diesem Grund können wir die Stunde bei jeder Iteration der Schleife sicher von stdin neu ablesen.


Ordentlich. Das wusste ich &nicht
Jo King

3
@JoKing Technisch gesehen ist es ein Fehler im Interpreter, ein weiterer damit verbundener Nebeneffekt ist dieser & kann auch als eine Art Zufallszahlengenerator verwendet werden . Das ist jedoch weniger zuverlässig, da es vom Compiler abhängt, mit dem es erstellt wurde. Momentan arbeitet es an TIO, aber es gab eine Zeit, in der Dennis auf eine andere Version von gcc umgestiegen ist und wir diese Funktionalität für eine Weile verloren haben.
James Holderness


2

Japt, 11 Bytes

3ÆU±3 uC ªC

Versuch es


Erläuterung

Implizite Eingabe einer Ganzzahl U. Generieren Sie ein 3-Element-Array ( ) und erhöhen Sie für jedes Element Uum 3 ( U±3), modulo um 12 ( uC) und 12%12=0geben Sie das Ergebnis OR 12 ( ªC) zurück.






1

Aufdringlich , 12 Bytes

258s{K+12%h_

Probieren Sie es 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

Eine Alternative für die gleiche Byteanzahl:

12R{:{;$...#

Probieren Sie es 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


1

K (oK) , 11 Bytes

Lösung:

1+12!2 5 8+

Probieren Sie es online!

Beispiele:

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

Erläuterung:

Dies war die erste Lösung, die mir in den Sinn kam. Könnte nicht die beste oder kürzeste sein.

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 Bytes

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

Dies ist das erste Mal, dass ich Codegolf spiele. Aufgrund meiner mangelnden Erfahrung habe ich wahrscheinlich nicht die beste Lösung gefunden, aber ich muss irgendwo anfangen, oder?

Probieren Sie es online aus oder probieren Sie alle Fälle aus


Hallo, willkommen auf der Seite! Das sieht aus wie eine schöne erste Antwort :) Leider, ich weiß nichts über golfscript, aber Sie könnten in der Lage sein , ein paar Tipps bekommen hier
DJMcMayhem



1

Gesicht , 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

Dies fügt einfach zwei Mods zu 12 hinzu, fügt einen weiteren hinzu und druckt. Dann macht es das noch zweimal.

Kommentierte Version:

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

Probieren Sie es online! (Der nachgestellte Zeilenumbruch ist für TIO aufgrund eines Fehlers erforderlich, der in einer neueren Version von face behoben wurde.)


Wenn Sie eine Variable mit dem Wert 3 erstellen,m3*33 können Sie die drei +nn1s durch eins ersetzen. +nn3 Tio.run/…
Kritixi Lithos

@Cowsquack Beachten Sie, dass die Ausgabe in Ihrem Link falsch ist.
Türknauf

1

Forth (gforth) , 39 Bytes

Die Eingabe wird vom Stapel genommen und die Ausgabe wird auf den Stapel gelegt

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

Probieren Sie es online!

Erläuterung

 : 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 Bytes

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

Das oben Gesagte behauptet in der Infixnotation, was deutlicher ausgedrückt werden kann als

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

RotateLeftdreht Range[12]die Sequenz 1,2, ... 12 um die eingegebene Nummer nach links. Slot[1]oder #enthält die eingegebene Nummer, n.

Zum Beispiel mit n = 4,

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

gibt die Liste zurück

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

Take...{3,9,3} Gibt jedes dritte Element in dieser Liste von Position 3 bis Position 9 zurück, nämlich

{7, 10, 1}


0

Windows Batch, 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%

Hafen der add value to input and mod 12 + 1



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.