미러링 된 디지털 시계


19

많은 디지털 시계는 켜지거나 꺼진 7 개의 다른 조명으로 구성된 간단한 숫자를 사용하여 시간을 표시합니다.

수평으로 미러링되면 숫자 018는 대칭이므로 변경되지 않습니다. 또한, 숫자 2와는 5, 교환받을 2되고 5반대의 경우도 마찬가지. 다른 모든 숫자는 미러링 될 때 유효하지 않습니다.

따라서, 24 시간 디지털 클록이 주어지면, 디지털 디스플레이의 미러링 된 이미지가 또한 유효한 클록 판독이되도록 많은 클록 판독이 존재한다. 당신의 임무는 미러링 된 판독 값과 함께 이러한 모든 클록 판독 값을 출력하는 것입니다.

예를 들어, 22:2115:55되고 00:15가됩니다 21:00. 반면에, 12:34또는 16:27(숫자 미러링 할 때 더 이상 유효하지 34679무효가), 및도있다 22:22거나 18:21, 하루에만 24 시간 한 시간에 60 분 있기 때문에, 더 제정신 시계가 표시되지 않기 때문에 55:5512: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필요한 경우 0으로 채워 져야합니다 .

이것은 이므로 바이트 단위의 최단 답변이 이깁니다. 평소와 같이 표준 허점 은 허용되지 않습니다.


Clean에서 a String는의 배열입니다 Char. 내 대답이 목록 을 제공하면 허용 Char됩니까? 인쇄 할 때 유형이 동일하게 보입니다.
OUurous

@Ourous 네, 괜찮습니다. 메타에 대한 합의 는 문자열이 일련의 문자이며 문자 목록이라는 것입니다.
Steadybox

이 7 세그먼트 디스플레이에서 1가장 오른쪽 세그먼트 또는 가장 왼쪽 세그먼트가 숫자를 구성하는 수직 "선"을 형성하는 데 사용되는지 알 수 있기 때문에 숫자 는 미러 이미지와 정확히 동일하지 않습니다. 우리는 여기에서 그것들이 동일하다고 생각합니다.
Jeppe Stig Nielsen

@JeppeStigNielsen은 OP가 7seg 대신 14seg 디스플레이가있는 이미지를 사용했다고 가정 1하여 중앙에 배치 할 수 있습니다.
Sparr

3
@Steadybox 와우, 최근 에이 정확한 아이디어가있었습니다. 프로그래밍 인터뷰 중에 사람들에게 사용할 계획입니다. BTW 제정신 시계가없는 전자 레인지가 있으며 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으로 출력되는 프로그램을 완료하십시오. 필요 ⎕IO( I ndex O rigin) 할 수 0많은 시스템에 기본이된다.

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

온라인으로 사용해보십시오!

⍳1440 많은 nt ntegers

0 60⊤ 혼합 밑으로 변환 ∞, 60

100+ 100 더하기 (이것은 필요한 0을 채 웁니다)

⍕¨ 각 형식 (문자열)

1↓¨ 첫 번째 문자를 각각 삭제하십시오 (이것은 선행 1을 제거합니다)

{}⌿ 다음 익명 함수를 열 단위로 적용하십시오 ( 상위 시간, 분 단위).

0:: 오류가 발생하면 아무것도 반환하지 않습니다

 시험:

  '015xx2xx8x:'[] 이 문자열을 다음과 같이 색인화하십시오.

   ∊⍺':'⍵시간, 콜론, 분  의 ϵ nlisted (flatted) 목록

   i← 저장 i(위한 내가 nput)

   ⎕D⍳ɩ 목록의 각 문자의 ndices D의 igits

   그 반대로

  t← 로 저장 t(대 t의 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

파이썬 2 , 279 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])

온라인으로 사용해보십시오!

크레딧



3

클린 , 269 ... 172170 바이트

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

apt 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

미러되지 않은 숫자에 대해 네 개의 중첩 루프를 만듭니다.

¿›‹⁺ικ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

온라인으로 사용해보십시오!

닐라 딕 프로그램. 나는 '0125'아이디어 의 이중 제품을 Emigna 05AB1E 답변 얻었 지만 나머지는 언어가 그 이후로 다양해지기 때문에 컨설팅하지 않고 수행했습니다. 아마도 골프에 대한 기회는 아마 많을 것입니다.

설명

이 프로그램은 다음과 같이 작동합니다.

  • 문자 목록 중 길이가 4 인 모든 제품을로 '0125'사용하십시오 “0152:”©ṢṖp`⁺. 나중에 사용하기 ©위해 문자열 '0152:'을 레지스터에 복사합니다 . ṢṖ정렬은 문자열의 마지막 요소 →를 표시 '0125'합니다. 제품 링크를 복제합니다.

  • ḣ176형식 25xx또는 5xxx유효 시간이 아닌 시간을 제거합니다 .

  • j€“:”각 숫자 쌍을로 묶습니다 ':'. 예를 들어 ['05'],['21']]'05:12'.

  • Ç€각 시간에 첫 번째 링크를 적용합니다. 문자열에서 각 문자의 색인을 찾은 다음 해당 색인 각각에서 문자열 '0125:'의 문자를 가져 와서 '0152:'뒤집습니다. 이것은 미러 작업입니다 ( 2s와 5s를 뒤집고 바꾸는 것 ).

  • µ;" 원래 시간을 미러링 된 시간과 연결 → '05:2115:20'

  • ⁾25ẇ$ÐṂ부분 문자열로 시간을 걸러냅니다 '25'. 이것은 미러 된 반 25:xx또는로 쌍을 잡습니다 5x:xx. 참고 : 나는 왜$ 필요한지 . 아마도 누군가가 적절한 구문으로 골프를 칠 수는 있지만 확실하지 않습니다.

  • 이 시간을 각각 두 부분으로 나누고 ( œ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

코 틀린 , 205 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

고정, 나는 코드의 나머지 부분을 줄일 수 205 바이트로 다시 얻을 수있는 방법이 있는지 궁금
jrtapsell

0

C, 225 바이트

h,m,l,r,d=10,L[]={0,1,5,9,9,2,9,9,8,9};M(h,m){l=L[h%d]*d+L[h/d];r=L[m%d]*d+L[m/d];return L[h%d]<9&L[h/d]<9&L[m%d]<9&L[m/d]<9;}f(){for(h=0;h<24;++h)for(m=0;m<60;++m)M(h,m)&l<60&r<24&&printf("%02d:%02d - %02d:%02d\n",h,m,r,l);}

C 답변이 없으므로 내 답변을 게시합니다. 다른 접근법은 더 짧을 수도 있습니다.

온라인으로 사용해보십시오!


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.