時間を90度で出力します


26

今日、子供たちと遊んでいる間、私は公園にある一見シンプルなおもちゃが課題を隠していることに気付きました。

Clock

ホイールには、数値を指す三角形がありますが、最初の数値から90度ごとに数値を指す3つの円もあります。そう:

チャレンジ(本当にシンプル)

1〜12の整数(三角形が指すもの)を受け入れ可能な形式で指定すると、受け入れ可能な形式でも出力し、円(90度ごとの番号)が指す3つの数字を並べます。

テストケース

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
これは、子供を巻き込んだ何らかの活動に基づいた4番目の課題ですか?: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




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.

かなりきちんとした。私はそのインデックスローテーションアプローチが好きです
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バイトです)。
アーナルド

4

オクターブ、25バイト

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

オンラインでお試しください!

かなり単純な匿名関数。

最初に[1:12 1:12]-の配列を作成します。そのため、フルセットの2つのコピーが設定されます。次に、インデックスを作成して、の値を選択しますx+3, x+6, x+9。ここで、x。で、は数値入力です。

Octaveは1インデックスであるため、入力に基づいて単純に配列要素を選択できます(正直なところ、0インデックスでは同じバイト数が使用されます)。

これは、配列の2つのコピーを持つことにより、モジュロを使用してインデックスをラップする必要がないという点で、他の回答に固有のメソッドを使用しているようです。


とてもいいのですが、「退屈な」MODアプローチはもっと短いです!オンラインでお試しください!
ジュゼッペ

@ジュゼッペ笑、私は使用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. 

これは、参照インタープリターに固有の動作に依存しています。ファイルの終わりでは、&オペレーターは読み取られた最後の値を返します。そのため、ループの各反復で標準入力から時間を安全に再読み込みできます。


きちんとした。私はそれを知ら&なかった
ジョーキング

3
@JoKing技術的には、インタープリターのバグです。別の関連する副作用&として、一時乱数ジェネレーターの一種としても使用できます。ただし、ビルドに使用されたコンパイラに依存するため、信頼性は低くなります。現時点ではTIOに取り組んでいますが、デニスが別のバージョンのgccに変更したため、しばらくの間その機能を失いました。
ジェームズホルダーネス


2

Japt、11バイト

3ÆU±3 uC ªC

それを試してみてください


説明

integerの暗黙的な入力U。3要素の配列()を生成し、各要素について、U3(U±3)ずつ増加し、12(uC)を法として12%12=0、そして結果OR 12(ªC)を返します。






1

Pushy、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

これは単純に2つのmodを12ずつ追加し、もう1つ追加して印刷します。その後、さらに2回実行します。

コメント版:

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

オンラインでお試しください!(新しいバージョンのfaceで修正されたバグのため、TIOでは末尾の改行が必要です。)


値3を保持する変数を作成するとm3*33、3つ+nn1のsを1つの+nn3 tio.run/…
Kritixi Lithos

@Cowsquackリンクの出力が間違っていることに注意してください。
ドアノブ

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]]]

RotateLeftRange[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バッチ、137125111 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.