ミラーリングされたデジタル時計


19

多くのデジタル時計は、オンまたはオフの7つの異なるライトのみで構成される簡略化された数字を使用して時間を表示します。

水平にミラーリングされている場合、数字018は対称であるため変更されません。また、数字2とは5、スワップ取得2になって5、またはその逆。他のすべての数字は、ミラーリングされると無効になります。

したがって、24時間のデジタル時計が与えられると、デジタル表示の鏡像も有効な時計の読み取り値になるように、多くの時計の読み取り値があります。あなたの仕事は、そのようなすべてのクロック測定値をミラー測定値とともに出力することです。

たとえば、に22:21なり15:55、に00:15なり21:00ます。一方、12:34または16:27ミラーリングされた場合34679は無効になります(数字は無効になります)。また、どちらも22:22また18:21はです。これは、1日は24時間、1時間は60分であるため、正気の時計は表示され55:55ないため12:81です。

仕事

以下に示すように、入力を受け取らず、すべての有効なペアを昇順で出力するプログラムまたは関数を作成します。

00:00 - 00:00
00:01 - 10:00
00:05 - 20:00
00:10 - 01:00
00:11 - 11:00
00:15 - 21:00
00:20 - 05:00
00:21 - 15:00
00:50 - 02:00
00:51 - 12:00
00:55 - 22:00
01:00 - 00:10
01:01 - 10:10
01:05 - 20:10
01:10 - 01:10
01:11 - 11:10
01:15 - 21:10
01:20 - 05:10
01:21 - 15:10
01:50 - 02:10
01:51 - 12:10
01:55 - 22:10
02:00 - 00:50
02:01 - 10:50
02:05 - 20:50
02:10 - 01:50
02:11 - 11:50
02:15 - 21:50
02:20 - 05:50
02:21 - 15:50
02:50 - 02:50
02:51 - 12:50
02:55 - 22:50
05:00 - 00:20
05:01 - 10:20
05:05 - 20:20
05:10 - 01:20
05:11 - 11:20
05:15 - 21:20
05:20 - 05:20
05:21 - 15:20
05:50 - 02:20
05:51 - 12:20
05:55 - 22:20
10:00 - 00:01
10:01 - 10:01
10:05 - 20:01
10:10 - 01:01
10:11 - 11:01
10:15 - 21:01
10:20 - 05:01
10:21 - 15:01
10:50 - 02:01
10:51 - 12:01
10:55 - 22:01
11:00 - 00:11
11:01 - 10:11
11:05 - 20:11
11:10 - 01:11
11:11 - 11:11
11:15 - 21:11
11:20 - 05:11
11:21 - 15:11
11:50 - 02:11
11:51 - 12:11
11:55 - 22:11
12:00 - 00:51
12:01 - 10:51
12:05 - 20:51
12:10 - 01:51
12:11 - 11:51
12:15 - 21:51
12:20 - 05:51
12:21 - 15:51
12:50 - 02:51
12:51 - 12:51
12:55 - 22:51
15:00 - 00:21
15:01 - 10:21
15:05 - 20:21
15:10 - 01:21
15:11 - 11:21
15:15 - 21:21
15:20 - 05:21
15:21 - 15:21
15:50 - 02:21
15:51 - 12:21
15:55 - 22:21
20:00 - 00:05
20:01 - 10:05
20:05 - 20:05
20:10 - 01:05
20:11 - 11:05
20:15 - 21:05
20:20 - 05:05
20:21 - 15:05
20:50 - 02:05
20:51 - 12:05
20:55 - 22:05
21:00 - 00:15
21:01 - 10:15
21:05 - 20:15
21:10 - 01:15
21:11 - 11:15
21:15 - 21:15
21:20 - 05:15
21:21 - 15:15
21:50 - 02:15
21:51 - 12:15
21:55 - 22:15
22:00 - 00:55
22:01 - 10:55
22:05 - 20:55
22:10 - 01:55
22:11 - 11:55
22:15 - 21:55
22:20 - 05:55
22:21 - 15:55
22:50 - 02:55
22:51 - 12:55
22:55 - 22:55

末尾または先頭の改行が許可されます。改行の直前にスペースをいくつか入れることもできます。時間はformat hh:mmである必要があり、必要に応じてゼロが埋め込まれます。

これはであるため、バイト単位の最短回答が優先されます。通常、標準の抜け穴は許可されていません。


Cleanでは、a Stringはの配列ですChar。私の答えがリストを提供する場合、それは受け入れられCharますか ベアプリントの場合、タイプは同一に見えます。
17

@Ourousはい、大丈夫だと思います。メタ上のコンセンサスは、文字列は文字のシーケンスであり、そしてそれは文字のリストがあるものだということのようです。
Steadybox

この7セグメントディスプレイでは1、右端のセグメントと左端のセグメントのどちらが数字を構成する垂直の「線」を形成するのかを判断できるため、数字は鏡像とまったく同じではありません。ここではそれらが同一であると考えていることを理解しています。
ジェッペスティグニールセン

@JeppeStigNielsenは、OPが7セグメントではなく14セグメントディスプレイの画像を使用しているように見せましょう1
スパー

3
@Steadyboxうわー、私は最近この正確なアイデアを持っていました。プログラミングインタビュー中に人々に使用する予定です。ところで、私は、健全な時計を持たず、83:75のようなものを指定できる電子レンジを持っています:
JohnEye

回答:


2

05AB1E、34バイト

0125DâDâεÂ5n‡í)}ʒ€н25‹P}':ý… - ý»

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

説明

0125                                # push "0125"
    Dâ                              # cartesian product with itself
      Dâ                            # cartesian product with itself
        ε       }                   # apply to each
         Â                          # bifurcate
          5n                       # push 25 bifurcated
             ‡                      # transliterate
              í                     # reverse each
               )                    # wrap in a list
                 ʒ      }           # filter each on
                  €н                # head of each
                    25‹             # less than 25
                       P            # product
                         ':ý        # merge on ":"
                            … - ý   # merge on " - "
                                 »  # join on newlines


5

APL(Dyalog Unicode)、84バイトSBCS

STDOUTへの完全なプログラム出力。多くのシステムでデフォルトである⎕IOI ndex O rigin)が必要0

{0::⋄∧/23 59≥⍎¨(':'t)⊆t←⌽'015xx2xx8x:'[⎕Di←∊⍺':'⍵]:⎕←1↓⍕i'-'t}⌿1↓¨⍕¨100+0 60⊤⍳1440

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

⍳1440 その多くɩの ntegers

0 60⊤ 混合ベース∞、60に変換

100+ 100を追加します(これにより、必要な0が埋め込まれます)

⍕¨ それぞれフォーマット(文字列化)

1↓¨ それぞれから最初の文字をドロップします(これにより、先頭の1が削除されます)

{}⌿ 次の匿名関数を列ごとに適用します(トップの時間、分です)

0:: エラーが発生した場合、何も返しません

 試してください:

  '015xx2xx8x:'[] この文字列にインデックスを付けます:

   ∊⍺':'⍵ε nlisted時間、コロン、分のリストを(平坦化)

   i←i(for i nput)に 保存

   ⎕D⍳ɩのリスト内の各文字のndices Dの igits

   その逆

  t← として保存tt ime)

  ()⊆ グループの実行場所:

   ':'≠t コロンとは異なります t

⍎¨ 各実行(評価)

23 59≥ それぞれ23および59以下であるかどうかのそれぞれのブール値

∧/ 両方とも本当ですか?

: もしそうなら、それから:

  ⍕i'-'t 入力、ダッシュ、時間のフォーマットされた(スペースで区切られた)リスト

  1↓ 最初の(スペース)をドロップします

  ⎕← STDOUTへの出力


4

網膜、57バイト


 - 
+m`^.{3,9}$
0$&0¶1$&1¶2$&5¶5$&2
A`\b2?5
\b\d.
$&:
O`

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


 - 

セパレーターを挿入します。

+m`^.{3,9}$
0$&0¶1$&1¶2$&5¶5$&2

4つのミラー数字のすべての可能なセットを生成します。

A`\b2?5

違法時間のあるものを削除します。

\b\d.
$&:

コロンを挿入します。

O`

順番に並べ替えます。


4

Pythonの2279の 277 255バイト

for h in range(1440):
 q=[[[0,(a+"52")[(a=="2")+(a=="5")*2]][a in"01825"]for a in c]for c in[("%02d"%e)[::-1]for e in[h%60,h/60]]]
 if all(q[0]+q[1]):
	z=[int(''.join(j))for j in q]
	if(z[1]<60)*(z[0]<24):print"%02d:%02d - %02d:%02d"%(h/60,h%60,z[0],z[1])

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

クレジット

  • dylnanによって279バイトが256バイトに削減されました

  • FlipTrackにより256バイトが255バイトに削減されました。



3

Clean269 ... 172 170バイト

import StdEnv
?n=toChar n+'0'
$c|c<2=c=7-c
n=[0,1,2,5]
t=flatlines[u++[' - ':v]\\[u,v]<-[[map?[a,b,10,x,y],map?[$y,$x,10,$b,$a]]\\a<-n,b<-n,x<-n,y<-n]|['23:59']>=max u v]

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

ゴルフをしていない:

import StdEnv
numeral n = toChar (n+48)
mirror 2 = 5
mirror 5 = 2
mirror c = c
digits = [0, 1, 2, 5]
times
    = flatlines [ // flatten with interspersed newlines
        original ++ [' - ' : reflection] // insert separator
        \\ // generate all pairs of times and their mirrored copies
        [original, reflection] <- [
            [map numeral [a, b, 10, x, y], map (numeral o mirror) [y, x, 10, b, a]]
            \\ // generate every combination of display digits
            a <- digits,
            b <- digits,
            x <- digits,
            y <- digits
            ]
        | ['23:59'] >= max original reflection // make sure both times actually exist
        ]

2

Pyth、48バイト

Lj\:c2bjf!:T"5.:|25:"0mj" - ",ydyX_d`25)^"0125"4

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

の可能なすべての組み合わせを生成0125し、それらを時間に合わせて操作します。これらは辞書式順序で生成されるため、正しい順序です。最後に、これは、正規表現5.:またはに一致する行を削除することにより、余分な無効時間を除外し25:ます。悲しいことに、エラーや見落としをしない限り、このプログラムが使用する文字列のいずれに対しても圧縮がうまく機能していないようです。



2

Japt v2(+ -R)、51バイト

G²Çs4 ùT4 i':2î+" - "+Zw r\d_^Z>1})r3,5Ãkf/5.|25):

オンラインでテストしてください!

説明

G²Ç   s4 ùT4 i':2à ®   +" - "+Zw r\d_  ^Z>1})r3,5à kf/5.|25):
G²oZ{Zs4 ùT4 i':2} mZ{Z+" - "+Zw r\dZ{Z^Z>1})r3,5} kf/5.|25):/   Ungolfed

G²              Calculate 16**2, or 256.
  oZ{       }   Create the range [0...256) and map each integer Z to:
Zs4               Convert Z to a base-4 string.  [0, 1, 2, 3, 10, ..., 3331, 3332, 3333]
    ùT4           Pad-left with 0's to length 4. [0000, 0001, 0002, ..., 3331, 3332, 3333]
        i':2      Insert a colon at index 2.     [00:00, 00:01, 00:02, ..., 33:31, 33:32, 33:33]

mZ{      }      Map each string Z in the resulting array to:
Zw r\dZ{     }    Reverse Z, and replace each digit Z' with
        Z^Z>1       Z' xor'd with (Z>1). This turns 2 to 3 and vice versa.
                  We now have [00:00, 10:00, 30:00, 20:00, 01:00, ..., 12:22, 32:22, 22:22]
Z+" - "+          Append this to Z with " - " in between. This gives
                    [00:00 - 00:00, 00:01 - 10:00, 00:02 - 30:00, ..., 33:32 - 32:22, 33:33 - 22:22]
r3,5              Replace all 3s in the result with 5s.
                    [00:00 - 00:00, 00:01 - 10:00, 00:02 - 50:00, ..., 55:52 - 52:22, 55:55 - 22:22]

k               Remove all results that
 f/5.|25):/       match the regex /(5.|25):/g. This removes times with impossible hours.

                Implicit: output result of last expression, joined with newlines (-R)


1

、59バイト

F012F0125F0125F015¿›‹⁺ικ25⁼⁺λμ25«ικ:λμ - F⟦μλ3κι⟧§015::2Iν⸿

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

F012F0125F0125F015

ミラーリングされていない数字用に4つのネストされたループを作成します。

¿›‹⁺ικ25⁼⁺λμ25«

時間も分も25でないことを確認します(25分間ミラーリングすると25時間になるため、これは不要です)。

ικ:λμ - 

ミラー化されていない時間を出力します。

F⟦μλ3κι⟧§015::2Iν⸿

反転した数字(または3コロンの数字)を文字列から整数に変換し、変換テーブルで検索することにより、ミラーリングされた時間を出力します。

または、59バイトの場合:

F¹¹F¹⁶¿⁻¹¹κ¿⁻²﹪κ⁴«≔⟦÷ι⁴﹪ι⁴¦⁴÷κ⁴﹪κ⁴⟧θFθ§0125:λ - F⮌θ§0152:λ⸿

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

F¹¹F¹⁶

時間と分のループを作成します。

¿⁻¹¹κ¿⁻²﹪κ⁴«

25終わるすべての分も除外し2ます。

≔⟦÷ι⁴﹪ι⁴¦⁴÷κ⁴﹪κ⁴⟧θ

時間と分を基数4に変換します。

Fθ§0125:λ

変換テーブルで検索された数字を出力します。

 - 

セパレータを印刷します。

F⮌θ§0152:λ⸿

ミラー化された変換テーブルで検索された逆の数字を印刷します。


1

ゼリー72 66 62 55バイト

®ṢiЀUị®
“0152:”©ṢṖp`⁺ḣ176j€“:”µ;"Ç€⁾25ẇ$ÐṂœs€2j€“ - ”Y

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

ニラディックプログラム。Emignaによる05AB1Eの回答'0125'からアイデアの二重の製品を入手しましたが、それ以降は言語が分岐するため、コンサルティングをせずにそれを行いました。おそらく多くの場合、おそらくゴルフの機会があります。

説明

プログラムは次のように機能します。

  • で文字のリストの長さ4のすべての製品を取得'0125'“0152:”©ṢṖp`⁺ます。後で使用するために©、文字列'0152:'をレジスタにコピーします。ṢṖソートしてから、文字列の最後の要素をポップします→ '0125'製品リンクを複製します。

  • ḣ176format 25xxまたは5xxx(有効な時間ではない)の時刻を削除します。

  • j€“:”は、数字の各ペアをで結合します':'。例えば['05'],['21']]'05:12'

  • Ç€これらの各時間に最初のリンクを適用します。文字列内の各文字のインデックスを検索し、'0125:'それらの各インデックスに対して文字列内の文字を取得し、'0152:'逆にします。これがミラー操作です(2sと5sの反転と交換)。

  • µ;" 元の時間とミラーリングされた時間を連結します→ '05:2115:20'

  • ⁾25ẇ$ÐṂ部分文字列で時間を除外し'25'ます。これは、ミラー化された半分25:xxまたはのタイムペアをキャッチします5x:xx$が必要な理由はわかりません。おそらく誰かが適切な構文でそれをゴルフすることができますが、私にはわかりません。

  • これらの時間をそれぞれ2つに分割し(œs€2)、文字列で結合します' - 'j€“ - ”)。 '05:2115:20''05:21 - 15:20'

  • 最後に、Yすべての文字列を改行で結合し、すべてが暗黙的に印刷されます。

旧バージョン

62バイト

i@€®ị“:0152”
“:0125”©Ḋp`⁺ḣ176j€“:”µ,"UÇ€$F€⁾25ẇ$ÐṂœs€2j€“ - ”Y

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

66バイト

“0125”
i@€¢ị“0152”
UṚÇ€
Ñp`⁺ḣ176µ,"Ç€j€€“:”j€“ - ”¹⁾2 ẇ$ÐṂ⁾25ẇ$ÐṂY

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

72バイト

⁾25
i@€¢µẋ@€¢ṙ"
Ṛµ;@""Ç€Ḣ€€
“0125”p`⁺j€“:”ḣ176µ,"Ç€j€“ - ”¹⁾2 ẇ$ÐṂÑẇ$ÐṂY

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




1

Kotlin205 207バイト

(0..1439).map{"%02d : %02d".format(it/60,it%60)}.let{it.map{i->i to i.reversed().map{x->"25180:X52180:".let{it[it.indexOf(x)+7]}}.joinToString("")}.filter{(_,b)->it.contains(b)}.map{(a,b)->println("$a-$b")}}

美化

    (0..1439)
        .map { "%02d : %02d".format(it / 60, it % 60) }              // Make the times
        .let { it.map {i->
                i to i.reversed().map {x->                         // Pair it with the reversed times
                    "25180:X52180:".let{ it[it.indexOf(x)+7] }     // - X means bad times are removed
                }.joinToString("")                                 // - Make the string
            }.filter {(_,b)-> it.contains(b) }                     // Remove the unpaired times
                .map { (a, b) -> println("$a - $b") }              // Print out the pairs
        }

テスト

fun main(args: Array<String>) {
    f()
}

fun f() =
(0..1439).map{"%02d:%02d".format(it/60,it%60)}.let{it.map{i->i to i.reversed().map{x->"25180:X52180:".let{it[it.indexOf(x)+7]}}.joinToString("")}.filter{(_,b)->it.contains(b)}.map{(a,b)->println("$a-$b")}}

TIO

TryItOnline

編集

  • +2 Steadybox -IOフォーマットを修正

の両側にスペースがあるはず-です。追加するのに2バイトしかかかりません:オンラインで試してください!
Steadybox

修正、残りのコードを減らす205バイトに戻す方法があるのだろうか
-jrtapsell

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.