昼食はもう食べましたか?


15

あなたは昼食が大好きです。しかし、あなたはダイエット中であり、あなたが誤って1日に2回昼食を食べないようにしたいです。そのため、あなたが確認するのに役立つプログラムを作る必要があります。

ただし、複雑なことの1つは、非常に奇妙なスケジュールでランチを食べることです。昼食を食べる時間は、月曜日から日曜日までです(UTCまたはローカライズされたタイムゾーンを使用できます)。そうです、その日が7月14日であれば、午後7時14分に昼食を食べます。

プログラムでは、現在の日付と時刻を使用する必要があり(入力を受け付けない)、その日の昼食をすでに食べている場合(または現在は昼食時間である場合)、または一貫した偽の値を出力する必要がありますあなたが持っていない場合。

例:(プログラムを実行する時間=>出力)

  • 5月4日11:35 AM => false(昼食は5:04 PMに食べる)
  • 6月3日午後5時45分=> false(午後6時3分に昼食を食べる)
  • 7月28日8:30 PM => true(7:28 PMに昼食を食べました)
  • 12月15日午後3時25分=> true(午後12時15分に昼食を食べた)
  • 2月29日2:29 PM => true(正確には昼食時間です)
  • 10月12日12:00 AM => false(日が始まったばかり)

参照:

12時間時計の仕組み


代わりにUTCを使用できませんか?
ミスターXcoder

@ Mr.Xcoderええ、実際にはそれで構いません。明確にします。
geokavel

5
1日の特定の時間にのみ昼食を食べる場合、どうやって2回食べることができますか?= p
jpmc26

1
@MarkS。少なくとも今世紀、言いましょう。
-geokavel

3
みんなこのように昼食を食べませんか?本当に私だけですか?
18:06にコイアリンガーアーイング

回答:


7

Swift 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)])!)

見てみな!

これはtruefalseとをそれぞれ印刷します。

:これは、日付を比較するために文字列を使用するため、9999年11:59:59 PMまでしか機能しません。


2
スウィフトの部分文字列は、常に私を見るのが苦痛です> _ <:P
Downgoat

3

05AB1E15 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?

私はこれが機能するとは思わない。現在はUTCの午前12時51分であり、1を出力しているためです。
geokavel17年

Nvmは、pmではなくamに対してチェックしていることに気づきました。3バイトのコストで修正されました。
ダトボイ

2

オクターブ、61バイト

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

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

説明:

最初に機能:

  • now()10進形式で時刻を返します。括弧はオプションです。
  • datestr 10進数を2番目の引数で指定された形式の文字列に変換します
  • str2num 文字列を数値に変換します
  • diff 2つの数値の差をとる

壊す:

これを真ん中から取ります:

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

datestr(now,'mmddHHMM'):最初に、現在の時間nowを入力として受け取りdatestr、形式を指定しますmmddHHMM。文字の意味:mm = monthdd = dayHH = hourMM = minutesおよびAM時間は12時間形式で指定する必要があります。可能な限り短くするために、セパレータは含まれていません。d = 07142117この説明を書いた時点で出力します。今からその部分を参照しますx

[(d=x)(1:4);d(5:8)]:上記の文字列をとして保存しd、最初の4文字、5〜9文字の2つの要素を持つ配列を作成します。これにより以下が得られます

ans =
0714
2122

数字ではなく数字が文字列として保存される場所。上記の結果をy以下に呼び出します。

str2num(y)文字の配列を数値に変換します。各行は1つの数値になります。これはを与え[714; 2122]ます。の結果を呼び出しますz

diff(z)>12002つの数値の差を取り、現在の時刻が現在の日付より1200高いかどうかを確認します。これはAM / PMを説明します。これにより、望ましい結果が得られます。


これが実際にPMかどうかを確認しますか?
michi7x7

今はそうです。:)
スティーヴィーグリフィン

「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バイトでは機能しませんか?確かではありませんし、まだ実際にテストしていませんが...
氏Xcoder

&g.d6+12.d4g.d5.d7実際には18になります。また、古いアプローチでは、あなたが必要とは思わない`、それは18バイトの長さになります。わからない、間違っているかもしれない。
ミスターXcoder

@ Mr.Xcoder&を使用する場合、両方ともtrueにする必要があります。たとえば、コードでは22:17は分がfalseであるため19:15以降としてカウントされません。一部の `` `を削除できますが、すべてを削除することはできません。1バイト節約してくれてありがとう。
カールカストール

OK、それが正しいかどうか本当に知りませんでした、私はまだPythを学んでいます:P
Mr. Xcoder

次に、私は別の解決策を見つけました g++720.d5*60.d4+*60.d6.d7が、残念ながらそれは長くなります(25バイト)。しかし、それはインスピレーションの源である可能性があり、私はそれを言及する必要があると考えました。
ミスター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));}}

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


時間と分を追加できるとは思わないので、設定する必要があります。

1
バイトを節約するための匿名アクション(()=>...)を作成しAction<bool>ます。DateTime.Now月と日にアクセスするときに使用します。一般的にpublicは必要ではなく、Program1文字でかまいません。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

evalが死んだと言うのは誰ですか?;-)


2

Java、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に送信されるように見えます。
マーク

のインポートをjava.util.Dateバイトカウントに含めることを忘れないでください。
ヤコブ

2

Haskell、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分である場合、「ボーナス」コードは、「はい、昼食をとった」と言うでしょう。OPにはAMにテストケースがあるため、これにより無効になったと思います。私は何が欠けていますか?
マークS。17年

@Mark_S。なるほど-何らかの理由で12:59ではなく11:59 PMと読んだことがあります-ボーナスコードに12時間を追加する簡潔な方法はありませんか?
テイラースコット

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に行ったかどうかを調べる関数を作成します。より長いです。
マークS。17年

1
@MarkS。12 + Mod [#[[2]]、12]?
michi7x7

1

JavaScript(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」とし、最後の2を取ります文字: {x:.z.P;x>"T"$":"sv -2#'"0",'($)12 0+mmのdd$\:x}49バイトのために
streetster

良いスポット。オリジナルは無効でした。私も短いバージョンを追加
skeevey

1

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

Python 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

Perl、45文字

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

メソッドを提供する必要がある場合、それは45になりsub c{...}ます。印刷say ()||0する必要がある場合 でも47になります。必要な場合は追加します。


私は信じて元の質問に指定されているため、you need to make a program to help you make sureスニペットが許可されていないこと-のいずれか、あなたの列挙された出力方法のが、一般的に有効であると考えていると述べた
テイラー・スコットが

1
十分に公平で、出力を提供します。編集してくれてありがとう、私は適切な言語タグを知りませんでした!私の思考はしてperl -e[OK]一般的でしたが、私はそれを編集したので、他の人が、機能を提供している。
bytepusher

1

Excel、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いいえ、判明しました。減算の前に不等式を評価すると推測していましたが、チェックしませんでした。ありがとう。
エンジニアトースト

からnow()-today()に変更することでバイトを節約できると思いますmod(now(),1)
アダム

0

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

ジュリア0.6.0 99バイト

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

ジュリアには、コンピューターの時計/カレンダーを使用する機能が組み込まれています。私のコンピューターはubuntu 16.04で実行されており、すでに12時間時計が付いているので、別の時計を使用して他のマシンで動作したかどうかはわかりませんが、私のマシンでは動作しているようです。


0

JavaScript 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として解釈されると述べているため、時間がAMである場合は自動的にfalseを書き込みます。現在の時刻が午後である場合、続行し、時刻の数を比較するだけです。

注:ここでは、読みやすくするためにフォーマットを少し変更しました。

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