아직 점심을 먹었습니까?


15

당신은 점심을 좋아합니다. 그러나 다이어트 중이며 하루에 실수로 점심을 두 번 먹지 않도록하고 싶습니다. 따라서 확인을 돕기위한 프로그램을 만들어야합니다.

그러나 하나의 합병증은 매우 이상한 일정으로 점심을 먹는다는 것입니다. 점심을 먹는 시간은 MONTH : DAY PM입니다 (UTC 또는 현지 시간대를 사용할 수 있음). 하루가 7 월 14 일인 경우 오후 7시 14 분에 점심을 먹습니다 .

프로그램의 경우 현재 날짜와 시간을 사용하고 (입력하지 마십시오), 하루 동안 점심을 먹었거나 (지금 점심 시간 인 경우) 일관된 거짓 값을 일관된 값으로 출력해야합니다. 당신이하지 않은 경우.

예 : (프로그램 실행 시간 => 출력)

  • 5 월 4 일 오전 11시 35 분 => 거짓 (오후 5시 4 분에 점심을 먹을 것입니다)
  • 6 월 3 일 오후 5:45 => 거짓 (오후 6:03에 점심을 먹을 것)
  • 7 월 28 일 8:30 PM => true (오후 7:28에 점심을 먹었습니다)
  • 12 월 15 일 오후 3시 25 분 => true (오후 12시 15 분에 점심을 먹었습니다)
  • 2 월 29 일 오후 2시 29 분 => true (정확한 점심 시간 임)
  • 10 월 12 일 오전 12시 => false (방금 시작한 날)

참고:

12 시간제 시계 작동 방식


대신 UTC를 사용할 수 없습니까?
Mr. Xcoder

@ Mr.Xcoder 네, 사실 괜찮습니다. 나는 명확히 할 것이다.
geokavel

5
하루 중 특정 시간에만 점심을 먹으면 어떻게 두 번 먹을 수 있습니까? = p
jpmc26

1
@점수. 적어도 이번 세기에 말합시다.
geokavel

3
모두가 이렇게 점심을 먹지 않습니까? 정말 나야?
caird coinheringaahing

답변:


7

스위프트 3 , 310 바이트

import Foundation;var n=String(describing:Date());var k=n.startIndex;print(Int(n[n.index(k,offsetBy:5)...n.index(k,offsetBy:6)])!*60+Int(n[n.index(k,offsetBy:8)...n.index(k,offsetBy:9)])!+720<=Int(n[n.index(k,offsetBy:11)...n.index(k,offsetBy:12)])!*60+Int(n[n.index(k,offsetBy:14)...n.index(k,offsetBy:15)])!)

확인 해봐!

이 인쇄 true하고 false, truthy 및 falsy 각각.

참고 : 이것은 날짜를 비교하기 위해 문자열을 사용하기 때문에 9999 년 11:59:59 PM까지만 작동합니다.


2
스위프트 서브 스트링은 항상> _ <: P
Downgoat

3

05AB1E , 15 18 바이트

žežb‚žf12+ža‚т*+`‹

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

설명

žežb‚žf12+ža‚т*+`‹
že                 # Push current day
  žb               # Push current minute
    ‚              # Wrap to array
     žf12+         # Push current month and add 12 to it
       ža          # Push current hour
         ‚         # Wrap these two to array as well
          т*       # Multiply each element in the second array by 100
            +      # Add both arrays together
             `     # Flatten the resulting array to stack
              ‹    # Is the first item smaller than the second one?

나는 이것이 효과가 있다고 생각하지 않습니다. 지금은 오전 12:51이고 UTC를 출력하기 때문에 1을 출력합니다.
geokavel

Nvm은 방금 오후가 아니라는 것을 깨달았습니다. 3 바이트의 비용으로 수정되었습니다.
Datboi

2

옥타브 , 61 바이트

diff(str2num([(d=datestr(now,'mmddHHMM'))(1:4);d(5:8)]))>1200

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

설명:

먼저 기능 :

  • now()시간을 10 진수 형식으로 반환합니다. 괄호는 선택 사항입니다.
  • datestr 두 번째 인수에 지정된 형식으로 10 진수를 문자열로 변환합니다.
  • str2num 문자열을 숫자로 변환
  • diff 두 숫자의 차이를

고장:

우리는 이것을 중간에서 가져옵니다.

diff(str2num([(d=datestr(now,'mmddHHMM'))(1:4);d(5:8)]))>1200

datestr(now,'mmddHHMM'): 먼저 현재 시간 now을 입력으로 datestr받아 형식을 지정합니다 mmddHHMM. 글자의 의미 : mm = month, dd = day, HH = hour, MM = minutesAM 시간이 12 시간 형식에 있어야 지정합니다. 가능한 한 짧게 유지하기 위해 구분 기호가 포함되어 있지 않습니다. d = 07142117이 설명을 쓸 때 출력 됩니다. 나는 x지금부터 그 부분을 언급 할 것이다 .

[(d=x)(1:4);d(5:8)]: 위의 문자열을 다음과 같이 저장합니다. d 한 다음 두 요소 (처음 4 자, 5-9 자)로 배열을 만듭니다. 이것은 다음을 제공합니다 .

ans =
0714
2122

숫자가 아닌 문자열로 저장되는 위치 위의 결과를 y아래에 호출합니다 .

str2num(y)문자 배열을 숫자로 변환합니다. 여기서 각 행은 하나의 숫자로 바뀝니다. 이 제공합니다 [714; 2122]. 에 대한 결과를 호출합니다 z.

diff(z)>1200두 숫자의 차이를 가져 와서 현재 시간이 현재 날짜보다 1200 높은지 확인합니다. 이것은 AM / PM을 설명합니다. 이것은 우리에게 원하는 결과를 제공합니다.


실제로 PM인지 확인합니까?
michi7x7

지금은 그렇습니다. :)
Stewie Griffin

"mmdd"가 "1201"이고 "HHMM"이 "1215"인 경우 이는 사실이 아닙니다. 어떻게 든 그것을 설명하기 위해 달에 mod 12를 사용해야했습니다.
michi7x7

2

Pyth, 22 21 20 바이트

<0+g.d7.d5-.d6+12.d4

@ Mr.Xcoder 덕분에 -1 바이트

이 시도!

기존 접근 방식, 22 20 바이트

<+`+12.d4.d5+`.d6.d7

시도 해봐!

설명

<0+g.d7.d5-.d6+12.d4
              +12.d4   # Add 12 to the current month to make it PM
          -.d6         # subtract that from the current hour: negative it is too early,
                       # positive when it is past this hour, zero when its the same hour
   g.d7.d5             # Is the minute greater or equal than the day? True=1; False=0
  +                    # Add this to the hour result,
                       # so that 0 can turn positive if minutes are true
<0                     # Is the result larger than 0 ?

&g.d6+.d4 12g.d5.d719 바이트에서 작동 하지 않습니까? 확실하지 않고 실제로 테스트하지는 않았지만 ...
Mr. Xcoder

&g.d6+12.d4g.d5.d7실제로 18입니다. 또한 이전 방법에서는을 필요로하지 않는다고 생각 `하며 길이는 18 바이트가됩니다. 잘 모르겠습니다. 틀렸을 수도 있습니다.
Mr. Xcoder

@ Mr.Xcoder &를 사용하면 둘 다 true 여야합니다. 예를 들어 코드 22:17은 분이 거짓이기 때문에 19:15 이후로 계산되지 않습니다. ```의 일부를 제거 할 수 있지만 전부는 아닙니다. 바이트를 저장해 주셔서 감사합니다.
KarlKastor

좋아, 나는 그것이 옳은지 정말로 몰랐다. 나는 아직도 Pyth를 배우고있다. : P
Mr. Xcoder

그런 다음 다른 해결책을 찾았 g++720.d5*60.d4+*60.d6.d7지만 불행히도 더 길었습니다 (25 바이트). 그러나 그것은 영감의 원천이 될 수 있으며 언급해야한다고 생각했습니다.
Mr. Xcoder

2

C #, 174 바이트

using System;public class Program{public static void Main(){Console.WriteLine(DateTime.Now>DateTime.Today.AddHours(DateTime.Today.Month+12).AddMinutes(DateTime.Today.Day));}}

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


시간과 분을 추가 할 수 있다고 생각하지 않으므로 설정해야합니다.
Winter

1
바이트를 저장 하는 익명 작업 ( ()=>...)을 만듭니다 Action<bool>. DateTime.Now월과 일에 액세스 할 때 사용하십시오 . 일반적으로 public필요하지 않으며 Program한 글자 일 수 있습니다. using D=System.DateTime;바이트를 절약하는 데 사용 합니다. 전반적으로 좋은 아이디어이지만 골프를 많이 할 수 있습니다. PPCG에 오신 것을 환영합니다!
TheLethalCoder

@TheLethalCoder 조언에 감사드립니다! 이것은 코드 골프에서 처음 갔지만 더 많은 노력을 기울일 것입니다!
pritch90

2

다음과 같은 공통 기능을 가진 PHP 및 기타 언어 : 약 28-29 바이트 :

echo eval(date('Gi-1199>md')); 

또는 대안 적으로

<?=eval(date('Gi-1199>md'))?>

둘 다 인쇄됩니다.

아마도 ?1:0표현에 따라. 암시 적 반향이 있거나 최종 ';'이없는 언어를 사용하는 경우 바이트가 잘릴 수 있습니다.

왜 필요하지 않을 때 값을 변수와 나머지로 가져 오는 이유는 무엇입니까? :)
date()정의되지 않은 리터럴로 아무것도 남기지 않으므로 예를 들어 7 May 2017 17:22:43표현식 1722 - 1200 >= 507을 eval ()에 전달합니다 . 바이트를 동등한 것으로 변경하여 저장했습니다 1722 - 1199 > 507.

누가 평가가 죽었다고합니까? ;-)


2

자바, 81 바이트

n->new Date().after(new Date(){{setHours(getMonth()+13);setMinutes(getDate());}})

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

언 골프 드 :

n -> new Date().after(new Date() { //new Date() returns current date
    { //instance initialization
        setHours(getMonth() + 13); //month + 12 hours for PM + 1 because months are 0 indexed
        setMinutes(getDate()());
    }
})

1
이것이 12 월을 올바르게 처리합니까? 나는 오랫동안 Java로 작업하지 않았지만 정오가 아닌 12 월 1 일부터 24:01까지 보낼 수 있습니다.
Mark S.

가져 오기를 java.util.Date바이트 수에 포함시키는 것을 잊지 마십시오 .
Jakob

2

하스켈 135 129 바이트

import Data.Time
x(ZonedTime(LocalTime d(TimeOfDay h m _))_)|(_,x,y)<-toGregorian d=return(mod x 12<h-12&&y<m)
y=getZonedTime>>=x

이 언 패킹은 상당히 성가 시며, 아마도 문자열 처리가 더 적합 할 것입니다

// 편집 : 패턴 가드 안전 5 바이트


2

Mathematica, 65 64 62 바이트

3 프로그램

p=Date[][[#]]&;{60,1}.#&/@(p[4;;5]>=p[2;;3]+{12+p@2~Mod~12,0})

{60,1}.#&/@(#[[4;;5]]>=#[[2;;3]]+{12+#[[2]]~Mod~12,0})&@Date[]

{60,1}.#&/@(#[4;;5]>=#[2;;3]+{12+#@2~Mod~12,0})&[Date[][[#]]&]

Mathematica에서 단일 바이트로 계산되는 경우 각각 1 바이트가 적습니다 .

설명

  1. Date[]형식으로 목록을 반환합니다 {y,m,d,h,m,s}. Date[][[4;;5]]현재 시간의시와 분도 마찬가지 입니다.
  2. p=Date[][[#]]&;p우리가 원하는 인덱스를 가져와 날짜의 해당 부분을 제공하는 함수를 만듭니다 .
  3. {60,1}.#&의 내적 {60,1}과 입력을 사용하여 시간을 비교할 수 있는 익명 함수입니다 . 보다 1 바이트 짧습니다 TimeObject.
  4. p@2p[2]월의 숫자 와 같습니다 .
  5. +{12+p@2~Mod~12,0}추가 {12,0}우리는 12 월에 없을 때 월과 일을하고, 추가 {0,0}그렇지. (감사합니다, michi7x7!)
  6. >= 비교 연산자이지만 {hours, minutes}와 {adjusted month, date}를 입력 방식으로 비교할 수 없습니다 ...
  7. /@{60,1}.#&괄호 안의 불평등의 양쪽에 매핑 되므로 시간을 정확하게 비교할 수 있습니다.
  8. 로 시작하는 프로그램의 경우 {60,1}.#&, 그들이 사용하는 #큰 익명 함수에 입력을 표시하고, &끝을 의미 할 수 있습니다.
  9. @Date[] 목록의 일부를 추출하는 행에 큰 기능을 날짜 목록 자체에 적용합니다.
  10. [Date[][[#]]&] 날짜 목록의 일부를 추출하는 다른 익명 함수에 해당 행의 큰 함수를 적용합니다.

보너스

따로, 오전 1시에서 오후 12시 59 분 사이에 점심을 먹었다면 25 바이트 만 절약 할 수 있습니다 {60,1}.#&[Date[][[#]]]&/@(4;;5>=2;;3).

Wolfram Cloud 샌드 박스에 코드를 붙여 넣고 Gear-> Evaluate Cell을 클릭하거나 Shift + Enter 또는 Numpad Enter를 눌러이 모든 것을 테스트 할 수 있습니다 .


나는 보너스 노트는 유효한 해결책이 실제로 있다고 생각 - 유효 시간의 도메인 그대로 13:0124:31
테일러 스콧

@TaylorScott 코드 형식에 대해 감사합니다 (일부 까다로운 경우에는 색상이 표시되지 않는 것 같습니다). 그래도 귀하의 의견을 이해하지 못합니다. 7 월 19 일 오전 7시 20 분이면 오후 7시 20 분과 거리가 멀지 만 "보너스"코드에 "예, 점심을 먹었습니다"라고 표시됩니다. OP에는 AM의 테스트 사례가 있으므로 이것이 무효라고 생각합니다. 내가 무엇을 놓치고 있습니까?
Mark S.

@점수. 나는 어떤 이유로 12:59가 아닌 오후 11시 59 분이라고 읽었습니다. 보너스 코드에 12 시간을 더하는 간결한 방법이 없습니까?
Taylor Scott

1
@TaylorScott 글쎄요, 우리는 대부분의 달에 12 시간을 추가하여 1 월부터 11 월까지 Date[]보너스를 다음과 같이 대체 (Date[]+{0,12,0,0,0,0})할 수 있습니다 12UnitVector[6,2]. 문제는 12 월 3 일과 같은 날짜에 24:03이 아닌 12:03에 점심을 먹으므로 12 월을 제외하고 12를 추가해야한다는 것입니다 . 이를 위해서는 1. 날짜 안에 들어 와서 12 월에 있는지 (내 답변에서와 같이) 있는지 확인하거나, 2. 사실 이후 24 : XX에 갔는지 검사하는 함수를 작성해야합니다. 더 길게.
Mark S.

1
@점수. 12+ 모드 [# [[2]], 12]?
michi7x7

1

자바 스크립트 (ES6), 75 바이트

f=
(d=new Date)=>(d.getHours()-d.getMonth()-13||d.getMinutes()-d.getDate())>=0
<input type=button value=Lunch? onclick=o.textContent=f()><tt id=o>

긴 기능 명 ...



1

R , 92 바이트

library(lubridate)
d=Sys.Date()
cat(Sys.time()>ymd_hm(paste0(d,'-',month(d)+12,'-',day(d))))

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

                                   month(d)+12,'-',day(d)    # get month and day and paste into a string, adding 12 hours for pm
                      paste0(d,'-',                      )   # add current date to beginning
               ymd_hm(                                    )  # turn whole thing into a date-time object
cat(Sys.time()>                                            ) # compare with current date-time and print

1

q, 31 바이트

x>12:+"T"$(-3!x:.z.P)5 6 13 8 9

예:

q).z.P
2017.07.16D19:35:26.654099000
q)x>12:+"T"$(-3!x:.z.P)5 6 13 8 9
1b

통역이 가능합니다 여기에서 합니다

구 버전

{x:.z.p;x>"T"$":"sv"0"^2$/:string 12 0+`mm`dd$\:x}`

2$패드집니다 66_보다는 _6당신이 원하는 것, 그래서 (-2)$,하지만 당신을위한 속기를 사용하여 그 여분의 3 개 문자를 취소 할 수 있습니다 string ($)"0"또는 ... 대신 패드에 $를 사용하여 앞에 추가하고이 마지막을 문자 : 49 바이트의 경우 {x:.z.P;x>"T"$":"sv -2#'"0",'($)12 0+mmdd$\:x}
streetster

좋은 자리. 원본이 잘못되었습니다. 더 짧은 버전을 추가했습니다
skeevey

1

자바 스크립트, 75 바이트

t=new Date,t.setHours(13+t.getMonth()),t.setMinutes(t.getDate()),new Date>t

다음 코드와 동일합니다.

function didEat()
  const d = new Date()
  d.setHours(12 /* PM */ + d.getMonth() + 1)
  d.setMinutes(d.getDate())
  return new Date > d
}
didEat()

t수정하는 동안 마지막 사용할 수 있습니다
l4m2

t=new Date,t.setMinutes(t.getDate(t.setHours(13+t.getMonth(n=+t))))<n
l4m2

1

파이썬 2.7, 130 바이트

from datetime import*
a=str(datetime.now()).split()
print int(''.join(a[0].split('-')[1:]))+1200<int(''.join(a[1].split(':')[:2]))

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

참고 : 부호에 문제가있을 수 있습니다. 내가 IST를 따르고 있기 때문에 실례합니다. 지금 오전 2시 28 분이므로 혼란 스럽습니다. 잘못되었다고 생각되면 표지판을 수정하십시오.


1

펄, 45 자

sub c{@a=gmtime;$a[2]-12>$a[4]&&$a[1]>=$a[3]}

방법을 제공 해야하는 경우 45입니다 sub c{...}. 인쇄해야한다면 say ()||047 개가됩니다 . 필요하다면 추가 할 것입니다.


나는 원래 질문 you need to make a program to help you make sure에 스 니펫이 허용되지 않는다고 명시했기 때문에 -나열된 출력 방법 중 하나가 일반적으로 유효한 것으로 간주된다고
Taylor Scott

1
충분히 공평하게, 나는 그때 출력을 제공 할 것이다. 편집 해 주셔서 감사합니다. 올바른 언어 태그를 몰랐습니다! 나는 perl -e일반적으로 괜찮다고 생각 했지만 다른 사람들이 기능을 제공했기 때문에 편집했습니다.
bytepusher

1

엑셀, 52 50 49 바이트

=TIME(MONTH(NOW())+12,DAY(NOW()),0)<=MOD(NOW(),1)

입력은 모든 셀에서이 공식입니다.
출력은 TRUE또는 FALSE입니다.

Excel의 기본 제공 날짜 처리 기능이 많은 도움이됩니다.
TIME함수는 날짜의 점심 시간을 날짜로 변환 할 경우 사용하는 시간 값으로 반환합니다 Jan 0, 1900. 우리 NOW - TODAY는 현재 시간을 날짜 값 0또는Jan 0, 1900 .

Wernisch 덕분에 2 바이트
절약 Adam으로 1 바이트 절약


NOW ()-TODAY () 주위에 추가 괄호가 필요합니까?
Wernisch

@Wernisch No, 밝혀졌습니다. 나는 그것이 빼기 전에 불평등을 평가할 것이라고 추정했지만 그것을 확인하지는 않았습니다. 감사.
엔지니어 토스트

나는 당신이에서 변경하여 바이트를 저장할 수 있습니다 생각 now()-today()mod(now(),1)
아담

0

자바 스크립트, 62 자

f=
_=>[,m,d,H,M]=(new Date).toISOString().split(/\D/),+m+12+d<=H+M

아래 테스트 코드 :


0

Excel VBA, 55 바이트

입력을받지 않고 VBE 즉시 창에서 점심을 먹었는지 여부를 나타내는 부울 값을 출력하는 익명 VBE 즉시 창 함수

n=Now:?TimeValue(n)>TimeValue(Month(n)&":"&Day(n)&"PM")

0

루비 , 64 + 7 = 71 바이트

필요합니다 -rtime몇 가지 이유가 있기 때문에 플래그 Time::parse처럼, 유일한 기능은 전체의 그것을 필요 Time모듈.

p Time.parse("#{t=Time.now}"[/.+-(..)-(..) /]+[$1,$2]*?:+'pm')<t

온라인으로 사용해보십시오! (현재 시간도 인쇄)


0

Julia 0.6.0 99 바이트

a=split(string(Dates.today()),"-");(Dates.hour(now())<parse(a[2]))&&Dates.minute(now())<parse(a[3])

Julia는 컴퓨터의 시계 / 달력을 사용하는 기능을 내장하고 있습니다. 내 컴퓨터가 우분투 16.04에서 실행 중이고 이미 12 시간 시계를 사용하고 있기 때문에 다른 시계를 사용하여 다른 컴퓨터에서 작동 한 것을 말할 수는 없지만 내 컴퓨터에서는 작동하는 것 같습니다.


0

자바 스크립트 ES6, 70 바이트

_=>(h=x=>new Date().toJSON().substr(x,5).replace(/\D/,0))(5)+12e3<h(11)

아마도 몇 밀리 초에 맞지 않을 수도 있습니다 ...


0

Matlab, 241 바이트

dt=datestr(now,'mm/dd');
dt(2)
dt(4:5)
CrctLchTm=[' ' dt(2) ':' dt(4:5) ' PM']
CrntTm=datestr(now,'HH:MM PM')
CrntTm(7)=='A'
if ans==1
    Lch='false'
else
    CrctLchTm=str2num([CrctLchTm(2) CrctLchTm(4:5)])
    CrntTm=str2num([CrntTm(2) CrntTm(4:5)])
    CrntTm<CrctLchTm
    if ans==1
        Lch='false'
    else
        Lch='true'             
    end    
end

설명 : 먼저 날짜를 문자열로 얻습니다. 그런 다음 월과 일을 분리합니다. 문제는 항상 PM으로 해석되므로 시간이 오전이면 자동으로 false를 씁니다. 현재 시간이 PM 인 경우 계속 진행하고 시간 수를 비교합니다.

참고 : 가독성을 위해 여기에서 약간 다르게 포맷했습니다.

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