เรามีคำถามหนึ่งครั้งซึ่งล้มเหลวในวันอาทิตย์เท่านั้น


39

แรงบันดาลใจจากเรามีการทดสอบหน่วยครั้งเดียวซึ่งล้มเหลวในวันอาทิตย์เท่านั้นเขียนโปรแกรมหรือฟังก์ชั่นที่ไม่ทำอะไรเลยนอกจากโยนข้อผิดพลาดเมื่อมันเป็นวันอาทิตย์และออกอย่างสง่างามในวันอื่น ๆ

กฎ:

  • ไม่ใช้อินพุตหรือแสดงเอาต์พุตผ่านวิธีการ IO ปกติยกเว้นการพิมพ์ไปยัง STDERR หรือภาษาที่เทียบเท่าของคุณ คุณได้รับอนุญาตให้พิมพ์ไปที่ STDOUT หากเป็นผลพลอยได้จากข้อผิดพลาดของคุณ
  • ฟังก์ชั่นอาจคืนค่าในวันอาทิตย์ตราบใดที่มันไม่ได้พิมพ์อะไรเลย
  • โปรแกรมของคุณอาจใช้วันอาทิตย์จากเขตเวลาใดก็ได้หรือเขตเวลาท้องถิ่นตราบใดที่มีความสอดคล้อง
  • ข้อผิดพลาดคือสิ่งที่ทำให้โปรแกรมหยุดทำงานผิดปกติเช่นการหารด้วยข้อผิดพลาดที่เป็นศูนย์หรือการใช้ตัวแปรที่ไม่มีการกำหนดค่าเริ่มต้น ซึ่งหมายความว่าหากมีการเพิ่มรหัสใด ๆ หลังจากส่วนที่มีข้อผิดพลาดจะไม่ถูกประมวลผลในวันอาทิตย์
    • raiseนอกจากนี้คุณยังสามารถใช้งบที่ตนเองสร้างข้อผิดพลาดเทียบเท่ากับงูใหญ่
    • ซึ่งรวมถึงข้อผิดพลาดขณะทำงานข้อผิดพลาดทางไวยากรณ์และข้อผิดพลาดขณะรวบรวม (ขอให้โชคดี!)
  • ในข้อผิดพลาดจะต้องมีสัญญาณบางอย่างที่แตกต่างจากไม่มีข้อผิดพลาด
  • นี่คือดังนั้นจำนวนไบต์ที่สั้นที่สุดในแต่ละภาษาจะชนะ!

ฉันจะต้องรอจนกว่าจะถึงวันอาทิตย์เพื่อตรวจสอบคำตอบ;)


2
โดย "เขียนโปรแกรมหรือฟังก์ชั่นที่ไม่ทำอะไรเลยนอกจากโยนข้อผิดพลาดในวันอาทิตย์และออกอย่างสง่างามในวันอื่น ๆ " คุณหมายถึงว่าเมื่อใดก็ตามที่มันทำงานในวันอาทิตย์มันควรล้มเหลวหรือคุณหมายความว่าควรมีอย่างน้อย เป็นไปได้อย่างหนึ่งที่มันล้มเหลวในวันอาทิตย์ เพื่อให้ชัดเจนยิ่งขึ้นถ้ามันล้มเหลวเฉพาะวันอาทิตย์เวลา 14.00 น. แต่ไม่ใช่ในวันอาทิตย์ที่ 15:00 น.
รอมมิ

5
นี่น่าจะดีกว่านี้ถ้าใช้วันเสาร์ คุณอาจเรียกมันว่า "Saturday Night Error" และแม้แต่ทำงานในเนื้อเพลงบางเพลงที่ปรับตามคำถาม
แอรอน


1
ยังไม่ชัดเจนจากคำถามของคุณว่าเกิดข้อผิดพลาดอะไร ฉันลงคะแนนให้ปิดจนกว่าจะแก้ไขได้
ตัวช่วยสร้างข้าวสาลี

3
ไม่จริง ... เราจะแยกความแตกต่างของข้อผิดพลาดออกจากผลลัพธ์ปกติได้อย่างไร เป็นสิ่งที่ต้องการprint "error"ผิดพลาด? ย่อหน้าที่เพิ่มเข้ามาไม่ได้ชี้แจงอะไรเลย
ข้าวสาลีตัวช่วยสร้าง

คำตอบ:



18

PHP 7, 12 ไบต์

1%date("w");

ใน PHP 7 มันมีข้อยกเว้นการพิมพ์DivisionByZeroในวันอาทิตย์ เดียวกันที่เกิดขึ้นหากมีการตีความโดยใช้HHVM

ใน PHP 5 จะแสดงคำเตือน (เปิดstderr) ในวันอาทิตย์:

PHP Warning:  Division by zero in Command line code on line 1

ในเวอร์ชัน PHP ใด ๆ มันจะไม่แสดงผลอะไรในวันอื่น ๆ ของสัปดาห์

รันโดยใช้ CLI:

php -r '1%date("w");'

หรือลองออนไลน์!

สองไบต์เพิ่มเติมสามารถบีบโดยการลอกคำพูด ( 1%date(w);) แต่ทริกเกอร์นี้แจ้งให้ทราบล่วงหน้า (ที่สามารถระงับโดยตั้งอย่างถูกต้องerror_reporting = E_ALL & ~E_NOTICEในphp.ini)


ฉันเชื่อว่าคุณต้องระบุ (ในชื่อ) ว่าคำตอบนี้เป็นเพียงสำหรับ PHP7 + และ HHVM เท่านั้นเนื่องจาก PHP5.6 และการออกต่ำกว่าโดยไม่มีปัญหาใด ๆ คำเตือนไม่ใช่ข้อผิดพลาดและไม่หยุดการเรียกใช้รหัส ถ้าคุณทำเช่น1%date("w");echo "Alive!"นั้นมันจะหยุดใน PHP7 + และ HHVM แต่ไม่ใช่ในเวอร์ชันอื่นทั้งหมดตั้งแต่ PHP 4
Ismael Miguel

@IsmaelMiguel คำถามที่จัดประเภทการพิมพ์ใด ๆ ไปยังข้อผิดพลาดมาตรฐานเป็นข้อผิดพลาดดังนั้นคำเตือนที่ดีพอในกรณีนี้
โปรดหยุดความชั่วร้ายใน

1
การตั้งคำถาม: "ข้อผิดพลาดเป็นสิ่งที่ทำให้โปรแกรมหยุดทำงานผิดปกติเช่นการหารด้วยศูนย์ข้อผิดพลาดหรือการใช้ตัวแปรที่ไม่มีค่าเริ่มต้นซึ่งหมายความว่าหากมีการเพิ่มรหัสใด ๆ หลังจากส่วนที่ข้อผิดพลาดมันจะไม่ ดำเนินการในวันอาทิตย์ ". สิ่งนี้จะไม่เกิดขึ้นหากมีคำเตือน
Ismael Miguel

@IsmaelMiguel ย่อหน้าที่คุณอ้างถึงถูกเพิ่มเข้าไปในคำถามน้อยกว่าหนึ่งชั่วโมงที่ผ่านมา
axiac

1
อ้างถึงเวอร์ชั่นที่เก่ากว่าอันที่อยู่ในช่วงเวลาของความคิดเห็นที่ฉันเขียน: "[... ] เขียนโปรแกรมหรือฟังก์ชั่นที่ไม่ทำอะไรเลยนอกจากโยนข้อผิดพลาดเมื่อวันอาทิตย์และออกอย่างสง่างามในวันอื่น ๆ . " คำเตือนขัดต่อบรรทัดนี้เนื่องจาก PHP จะออกจากระบบไปอย่างเรียบร้อย ข้อผิดพลาดจะเป็นข้อผิดพลาดร้ายแรงหรือข้อผิดพลาดทางไวยากรณ์ ไม่ใช่คำเตือนสำหรับการหารด้วย 0. PHP 5.6 ขึ้นไปไม่สามารถใช้กับความท้าทายนี้ได้
Ismael Miguel

9

PHP, 15 ไบต์

<?@date(w)?:\n;

ถือว่าตั้งค่าเริ่มต้น

ผลผลิตในวันอาทิตย์

Fatal error: Undefined constant 'n' on line 1

ลองออนไลน์!


2
ขอให้สังเกตว่าคำตอบนี้ต้องใช้ PHP 5.3 ขึ้นไป ทางเลือกที่อาจจะแทน||\n ?:\n
Ismael Miguel

8

Java 8, 69 43 34 ไบต์

v->1/new java.util.Date().getDay()

-26 ไบต์ขอบคุณที่@ OlivierGrégoire
-9 ไบต์ขอบคุณที่@Neil

คำอธิบาย:

ลองที่นี่

  • v->{...}( พารามิเตอร์ที่ไม่ได้ใช้Void null ) สั้นกว่าหนึ่งไบต์()->{...}(ไม่มีพารามิเตอร์)
  • new java.util.Date().getDay()จะกลับมา 0-6 สำหรับวันอาทิตย์ - วันเสาร์ดังนั้น1/...จะให้java.lang.ArithmeticException: / by zeroข้อผิดพลาดหากค่าเป็น 0 ซึ่งเกิดขึ้นเฉพาะวันอาทิตย์เท่านั้น


@ OlivierGrégoireอ่าjava.util.Date()มีวิธีในการรับวันในสัปดาห์ .. และมันก็เป็น 0 สำหรับวันอาทิตย์ .. ไม่แน่ใจว่าฉันพลาดมันอย่างไร : S
Kevin Cruijssen

ใช่โดยปกติคลาสที่เก่ากว่าจะมีฟังก์ชันทั้งหมดในชื่อที่สั้นกว่า ;-)
Olivier Grégoire

1
ถูกต้องสำหรับ 34 ไบต์หรือไม่ ลองออนไลน์!
Neil

@ ไม่ถูกต้องในเวลาที่คุณโพสต์ แต่ใช้ไม่ถึงหนึ่งชั่วโมงในภายหลัง ;-) มันเป็นความคิดแรกของฉันแม้ว่า ...
Olivier Grégoire

7

Python 3 , 33 ไบต์

import time
"Su"in time.ctime()>q

ลองออนไลน์!

Python 3 , 50 ไบต์

from datetime import*
datetime.now().weekday()>5>q

ลองออนไลน์!

ที่บันทึกไว้ ~ 3 ไบต์ขอบคุณที่ร็อด


1
@ เร็วทำไมไม่"Su"in time.ctime()>q(ฉันแก้ไขด้วยอันนี้)
Mr. Xcoder

ฉันไม่เข้าใจเลย มันทำงานยังไง?
pacholik

@pacholik "Su"in time.ctime()ตรวจสอบว่าวันปัจจุบันเป็นวันอาทิตย์หรือไม่ หากสิ่งนี้เป็นเท็จ>qส่วนนั้นจะไม่ถูกประเมินเลยและทุกอย่างจะออกไปอย่างราบรื่น แต่ถ้าเป็นจริงแล้วส่วนที่สองของความไม่เท่าเทียมกันจะถูกประเมินและเนื่องจากไม่ได้ถูกกำหนดนี้จะโยนq NameError
Mr. Xcoder

1
@pacholik แก้ไข: ฉันไม่คิดว่าฉันผิด เพื่อจุดประสงค์ด้านประสิทธิภาพหากส่วนแรกเป็นเท็จ Python ก็ไม่สนใจที่จะประเมินส่วนสุดท้าย ฉันจะต้องรอจนถึงวันอาทิตย์เพื่อทดสอบเรื่องนี้ ( ผมคิดว่า ) สาธิต
Mr. Xcoder

3
@pacholik ("Su" in time.ctime()) and (time.ctime() > q)ทราบว่าโซ่งูใหญ่ผู้ประกอบการบูลีนเพื่อให้เทียบเท่ากับ
user202729

6

Pyth , 8 7 ไบต์

 l-6.d9

ลองออนไลน์!

คำอธิบาย

    .d9 # Get the current day of week (0 = Monday, 6 = Sunday)
  -6    # Subtract 6 from the day
 l      # Try to calculate the log base 2 of the result of the previous operation raising a "ValueError: math domain error" on sundays
        # there is an extra space at the start, to supress the output on the other days

สิ่งนี้ยังไม่ถูกต้อง ผลลัพธ์ของคุณ ( 1.0ไม่ได้เกิดจากข้อผิดพลาด ) OP กล่าวอย่างชัดเจนว่าพวกเขาไม่อนุญาต คุณสามารถแก้ไขได้โดยการเพิ่มช่องว่างให้กับโค้ดของคุณแม้ว่า
Mr. Xcoder

แต่คุณไม่ได้รับอนุญาตให้ส่งออกไปยัง STDOUT ยกเว้นว่าเป็นวันอาทิตย์และคุณส่งออกไปยัง STDOUT
Mr. Xcoder

@ Mr.Xcoder ถูกต้อง ในวันที่ไม่มีวันอาทิตย์ไม่มีสิ่งใดควรได้รับการนำเสนอ
โจคิง

@JoKing ฉันข้ามกฎนี้ไปหมดแล้วตอนนี้แก้ไขแล้ว
Rod

6

Haskell + Data วันที่ , 55 ไบต์

import Data.Dates
succ.dateWeekDay<$>getCurrentDateTime

ลองออนไลน์!

สิ่งนี้ใช้ความจริงที่ว่าวันอาทิตย์เป็นวันสุดท้ายของสัปดาห์ dateWeekDayส่งคืนวันในสัปดาห์เป็นWeekDayประเภทซึ่งมีการกำหนดเพียงแค่เป็น

data WeekDay = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday

WeekDayเป็นตัวอย่างของEnumทำให้เราสามารถใช้succและpredเพื่อให้ได้ทายาทหรือบรรพบุรุษของวันธรรมดาเช่นอัตราผลตอบแทนsucc MondayTuesday

อย่างไรก็ตามSundayเป็นรายการ enum ล่าสุดดังนั้นการเรียกsucc Sundayผลลัพธ์ในข้อผิดพลาดต่อไปนี้:

fail_on_sunday.hs: succ{WeekDay}: tried to take `succ' of last tag in enumeration
CallStack (from HasCallStack):
  error, called at .\Data\Dates.hs:56:34 in dates-0.2.2.1-6YwCvjmBci55IfacFLnAPe:Data.Dates

แก้ไข 1: ขอบคุณ nimi สำหรับ -3 ไบต์!
แก้ไข 2: -11 ไบต์ในขณะนี้อนุญาตให้ใช้ฟังก์ชันได้


โปรแกรมเต็มรูปแบบ: 88 81 74 69 66 ไบต์

import Data.Dates
main=pure$!succ.dateWeekDay<$>getCurrentDateTime

ลองออนไลน์!

pureจำเป็นต้องใช้เพื่อยกผลลัพธ์ที่ได้WeekDayกลับคืนสู่ IO Monad อย่างไรก็ตาม Haskell เห็นว่าค่าไม่ได้ถูกส่งออกในทางใดทางหนึ่งของโปรแกรมดังนั้นขี้เกียจอย่างที่มันเป็นนิพจน์ไม่ได้รับการประเมินดังนั้นแม้ในวันอาทิตย์โปรแกรมจะไม่ล้มเหลว นี่คือเหตุผลที่$!เป็นสิ่งจำเป็นซึ่งบังคับให้มีการประเมินแม้ว่าโดยปกติแล้ว Haskell จะไม่ประเมินการแสดงออก


วิธีก่อนหน้านี้ด้วยData.Time: 127 124 ไบต์

import Data.Time.Clock
import Data.Time.Calendar.WeekDate
c(_,_,d)|d<7=d
main=getCurrentTime>>=(pure$!).c.toWeekDate.utctDay

ลองออนไลน์! นี่เป็นการนำเข้าที่น่าประทับใจ เปลี่ยนd<7เป็นเช่นd/=5เพื่อทดสอบความล้มเหลวในวันศุกร์ ล้มเหลวด้วยข้อยกเว้นต่อไปนี้: Non-exhaustive patterns in function c.


1
main=pure$!succ.dateWeekDay<$>getCurrentDateTime. main=และเป็นฟังก์ชั่นได้รับอนุญาตให้คุณสามารถวาง
nimi

@nimi ขอบคุณ! แต่ฉันไม่แน่ใจเกี่ยวกับฟังก์ชั่นเนื่องจากNo using input or showing output through the usual IO methodsกฎ เท่าที่ฉันเห็นการใช้ฟังก์ชั่นจะส่งผลให้เกิดผลลัพธ์ที่ไม่ใช่วันอาทิตย์ถึงแม้ว่ามันจะถูกห่อหุ้มด้วยการกระทำของ IO
Laikoni

บางทีคุณอาจจะถูก แต่ในทางกลับกันโปรแกรมเต็มรูปแบบมีรหัสการออกซึ่งเป็นวิธีมาตรฐาน
nimi

... ตอนนี้กฎความท้าทายอนุญาตให้ฟังก์ชั่นคืนค่าในวันอาทิตย์ตราบใดที่ไม่ได้พิมพ์
nimi

@nimi ขอบคุณสำหรับการแจ้งเตือน
Laikoni

5

05AB1E , 45 44 ไบต์

ในฐานะที่เป็น 05AB1E ไม่มีโครงสร้างในการรับวันในสัปดาห์ฉันจึงใช้กฎของเซลเลอร์เพื่อคำนวณ

พิมพ์บรรทัดใหม่เป็น stderr ในกรณีของวันอาทิตย์ (สามารถสังเกตได้ในมุมมองการดีบักบน TIO)

žežf11+14%Ì13*5÷žgžf3‹-т%D4÷žgт÷©4÷®·(O7%i.ǝ

ลองออนไลน์!

คำอธิบาย

สูตรทั่วไปที่ใช้เป็น
DoW = d + [(13*(m+1))/5] + y + [y/4] + [c/4] - 2*c
ที่ไหนDoW=day of week, d=day, m=month, y=last 2 digits of year, c=centuryและและการแสดงออกในวงเล็บ ( []) ลงโค้งมน

แต่ละเดือนที่ใช้ในสูตรจะสอดคล้องกับตัวเลขโดยที่Jan=13,Feb=14,Mar=3,...,Dec=12
เรามีเดือนปัจจุบันในรูปแบบทั่วไปมากขึ้นJan=1,...,Dec=12 เราแปลงเดือนโดยใช้สูตร
m = (m0 + 11) % 14 + 1

ในฐานะที่เป็นสองขั้วของเดือนมีนาคมเป็นเดือนแรกมกราคมและกุมภาพันธ์เป็นของปีก่อนดังนั้นการคำนวณสำหรับการพิจารณาyกลายเป็น
y = (year - (m0 < 3)) % 100

มูลค่าขั้นสุดท้ายสำหรับการDoWที่เราได้รับเป็น int 0=Sat,1=Sun,...,6=Friที่
ตอนนี้เราสามารถโยนข้อผิดพลาดได้อย่างชัดเจนหากผลลัพธ์เป็นจริง


11
05AB1E สูญเสีย Java ใช่ไหม ทุกสิ่งที่ฉันรู้ก็คือเรื่องโกหก
Kamil Drakari

5

JavaScript ขนาด 23 ไบต์

Date().slice(1)>'um'&&k

โปรแกรมเต็มรูปแบบ

kต้องไม่กำหนดตัวแปร

JavaScript ขนาด 20 ไบต์โดย Rick Hitchcock

/Su/.test(Date())&&k

JavaScript ขนาด 19 ไบต์โดย apsillers

Date().match`Su`&&k

1) คุณลืมที่จะรวมถึง_=>; โดยไม่มีนี่เป็นตัวอย่างที่ไม่ได้รับอนุญาตตามค่าเริ่มต้น 2) เอาท์พุทนี้falseในวันเว้นวันเมื่อมันไม่ควรเอาท์พุทอะไร
Shaggy

6
1) เป็นโปรแกรมเต็มรูปแบบซึ่งได้รับอนุญาตจาก OP 2) ถ้าคุณเรียกใช้เป็นโปรแกรมจะไม่มีเอาต์พุต
l4m2

3
/Su/.test(Date())&&kเป็นเวลา 20 ไบต์
Rick Hitchcock

1
new Dateรุ่น 25 ไบต์(new Date/864e5%7|0)-3||p
l4m2

3
วิธีการแก้ปัญหาโดย @RickHitchcock สามารถทำให้สั้นลงหนึ่งรายการโดยการใช้งานเทมเพลตแท็กmatchแทน:Date().match`Su`&&k
apsillers

5

VBA / VBScript, 22 20 ไบต์

บันทึก 2 ไบต์ขอบคุณ Taylor Scott

a=1/(Weekday(Now)-1)

ควรเรียกใช้ในหน้าต่างค้นหาทันที Weekday()ส่งกลับ 1 (วันอาทิตย์) ถึง 7 (วันเสาร์) ดังนั้นสิ่งนี้จะสร้างการหารด้วยศูนย์ข้อผิดพลาดในวันอาทิตย์ มิฉะนั้นจะไม่มีเอาต์พุต

ข้อความผิดพลาด


คุณเอาชนะฉันเพื่อตอบคำถามหนึ่งชั่วโมง - 19 Bytes:?1/(Weekday(Now)-1)
Taylor Scott

1
@TaylorScott ฉันลืมที่Nowถูกต้องโดยไม่มี()ใน VBA แต่ฉันไม่สามารถใช้การพิมพ์เพราะฉันคิดว่าการส่งออกทั้งหมดไม่ได้รับอนุญาตเว้นแต่จะมีข้อผิดพลาดออก No using input or showing output through the usual IO methods, except to print to STDERR. ยังบันทึก 2 ไบต์
Engineer Toast

1
ฉันเพิ่งเขียน 20 ไบต์ที่แน่นอนเหล่านี้เป็นวิธี VBScript แล้วฉันคิดว่าฉันจะดูว่ามีภาษา VB แบบที่มีอยู่ส่งแล้วและนี่คือ ดังนั้นสิ่งนี้จึงใช้ได้กับ VBScript และภาษาสไตล์ VB อื่น ๆ เช่นกัน

@EngineerToast ฉันคิดว่าคุณควรทำเครื่องหมายสิ่งนี้เป็นรูปหลายเหลี่ยมด้วย VBScript
Taylor Scott

@TaylorScott ฉันไม่ได้ทำแบบนั้นมาก่อน ฉันทำถูกไหม?
Engineer Toast

4

ทับทิมขนาด 15 ไบต์

1/Time.now.wday

wdayจะคืนค่า 0 ในวันอาทิตย์ที่ทำให้เกิด ZeroDivisionError: หารด้วย 0 ข้อผิดพลาด ตัวอย่างเช่น1/Time.new(2018,1,7).wday.



3

jq, 42 ตัวอักษร

(ตัวเลือกรหัสบรรทัด 39 ตัวอักษร + 3 ตัวอักษร)

now|strftime("%w")|strptime("%d")|empty

ลองใช้วิธีอื่นที่นี่: แยกหมายเลขวันในสัปดาห์ (0..6) เป็นจำนวนวันต่อเดือน (1..31)

วิ่งตัวอย่าง:

bash-4.4$ TZ=UTC faketime 2018-01-06 jq -n 'now|strftime("%w")|strptime("%d")|empty'

bash-4.4$ TZ=UTC faketime 2018-01-07 jq -n 'now|strftime("%w")|strptime("%d")|empty'
jq: error (at <unknown>): date "0" does not match format "%d"

โปรดทราบว่า jq จัดการวันที่ UTC เท่านั้น

ลองออนไลน์!



3

VBA 18 ไบต์

สิ่งนี้ขึ้นอยู่กับฟังก์ชัน inbuilt ที่date()ส่งคืนหมายเลขวันที่เหลือ 1 ถ้าหารด้วย 7 ดังนั้นอาจเป็นระบบปฏิบัติการและ / หรือ CPU เฉพาะ

a=1/(date mod 7-1)

มันทำงานในโครงการ VBA หน้าต่างทันที


2
ยินดีต้อนรับสู่ PPCG! โดยทั่วไปคำอธิบายและลิงก์ไปยังคอมไพเลอร์ / ล่ามออนไลน์นั้นได้รับการชื่นชม
แฟนต้า

@tfbninja - อัปเดตตกลง
JohnRC

และหากจำเป็นคำแนะนำเกี่ยวกับวิธีการใช้เช่นการเรียกใช้ฟังก์ชันหรือตัวแปร
FantaC

การตีกอล์ฟที่ดีกำลังจะโพสต์ตัวเองหลังจากเห็นคำตอบอื่น!
Greedo

3

R , 31 ไบต์ 30 ไบต์

if(format(Sys.Date(),'%u')>6)a

ลองออนไลน์!

ไม่มีการแสดงผลในวันที่ไม่ใช่วันอาทิตย์Error: object 'a' not foundในวันอาทิตย์

format(Sys.Date(),'%u')เป็นวิธีที่สั้นที่สุดที่ฉันสามารถหาได้ในวันธรรมดามันส่งผลให้มีจำนวนคลาสอักขระสำหรับวันในสัปดาห์โดยมี 7 สำหรับวันอาทิตย์ เราสามารถเปรียบเทียบกับตัวเลข 7 และถ้าพยายามจริงที่จะใช้วัตถุที่ไม่ได้กำหนด

บันทึกเป็นไบต์ด้วย Giuseppe!


>6เป็นไบต์ที่สั้นกว่า
Giuseppe

2

Ocaml, 46 ไบต์

open Unix
let()=1/(gmtime(time())).tm_wday;()

และใน ocaml REPL เราสามารถประสบความสำเร็จได้ดีขึ้นโดยการลบletและสุดท้าย:():

$ open Unix;;1/(gmtime(time())).tm_wday;;<CR>

ซึ่งคือ 41 ไบต์ (incuding 1 byte สำหรับการคืนค่าขนส่ง)


1
ยินดีต้อนรับสู่ PPCG!
Laikoni

1
มันเป็นไปได้ที่จะทำให้การทำงานของรหัสนี้ในลองออนไลน์ ?
Laikoni

อืม ... คำสั่งคอมไพล์คือ ocamlopt unix.cmxa <file> ฉันไม่รู้วิธีให้ตัวเลือกการคอมไพล์บน tio ฉันจะตรวจสอบในเย็นวันนี้
Bromind

tio ใช้ล่าม REPL (simili) ดังนั้นคุณควรใช้ความเป็นไปได้ที่สอง อย่างไรก็ตามดูเหมือนว่าจะไม่มี
ไลบรารี่


2

TI-Basic 84+, 23 ไบต์

getDate
0/(1-dayOfWk(Ans(1),Ans(2),Ans(3

ต้องการคำสั่ง date & time ซึ่งมี 84+ ขึ้นไปเท่านั้น


2

MATLขนาด 12 ไบต์

vZ'8XOs309>)

ข้อผิดพลาดที่เกิดขึ้นในวันอาทิตย์คือ:

  • ทำงานบนคู่:

    MATL run-time error: The following Octave error refers to statement number 9:  )
    ---
    array(1): out of bound 0
    
  • ทำงานบน Matlab:

    MATL run-time error: The following MATLAB error refers to statement number 9:  )
    ---
    Index exceeds matrix dimensions
    

กับพฤติกรรมสลับ (ข้อผิดพลาดใด ๆ ในวันยกเว้นวันอาทิตย์), เพิ่มหลัง~>

ลองออนไลน์!

คำอธิบาย

วิธีนี้ใช้ประโยชน์จากความจริงที่ว่า

  • การจัดทำดัชนีในอาเรย์ว่างด้วยดัชนีโลจิคัลfalseจะใช้ได้ (และผลลัพธ์คืออาเรย์ที่ว่างเปล่าซึ่งไม่สร้างผลลัพธ์) แต่ทว่า

  • การทำดัชนีด้วยtrueสาเหตุข้อผิดพลาดเนื่องจากอาร์เรย์ไม่มีรายการแรก

รหัสความคิดเห็น:

v       % Concatenate stack. Gives empty array
Z'      % Push current date and time as a number
8XO     % Convert to date string with format 8: gives 'Mon', 'Tue' etc
s       % Sum of ASCII codes. Gives 310 for 'Sun', and less for others
309>    % Greater than 309? Gives true for 'Sun', false for others
)       % Index into the empty array
        % Implicit display. Empty arrays are not displayed (not even newline)

2

Q, 20 ไบต์

if[1=.z.d mod 7;'e]

.zd ส่งคืนวันที่ปัจจุบัน mod ทำ modulo ของวันที่ปัจจุบันซึ่งคืนค่า int หากวันที่เป็นวันอาทิตย์, .zd mod 7 จะส่งกลับ 1 หาก 1 = 1, (ในวันอาทิตย์) และข้อผิดพลาดจะเพิ่มขึ้นโดยใช้ตัวดำเนินการ 'สำหรับช่วงเวลาสั้น ๆ ข้อผิดพลาดเป็นเพียงตัวอักษร e


3
ยินดีต้อนรับสู่ PPCG!
Martin Ender

2

C # (.NET Core) , 55 54 48 ไบต์

ลองออนไลน์!

บันทึก 1 ไบต์ขอบคุณ Shaggy

บันทึก 5 ไบต์ขอบคุณ Emigna

บันทึกแล้ว 1 ไบต์ขอบคุณ Kevin Cruijssen

_=>{var k=1/(int)System.DateTime.Now.DayOfWeek;}

โชคดีที่วันอาทิตย์ได้รับการจัดทำดัชนี 0 ใน enum มิฉะนั้นจะต้องเป็น (System.DayOfWeek)7



3
คุณได้รับusing Systemฟรีใน C # หรือไม่ ถ้าเป็นเช่นนั้นผมคิดว่าคุณสามารถทำ()=>{var k=1/(int)DateTime.Now.DayOfWeek;}สำหรับ42 มิฉะนั้น49กับชัดเจนSystem.
Emigna

3
@Emigna ชนะฉันมัน; ()=>{var k=1/(int)System.DateTime.Now.DayOfWeek;}สั้นกว่า และคุณสามารถบันทึกหนึ่งไบต์มากขึ้นโดยใช้พารามิเตอร์ที่ไม่ได้ใช้ที่ว่างเปล่าแทนการพารามิเตอร์ไม่มี (เช่นv->{...}แทน()->{...})
เควิน Cruijssen

1
40 ()=>1/(int)System.DateTime.Now.DayOfWeekไบต์: ลองได้ที่นี่
Ayb4btu

2

Groovyขนาด 16 ไบต์

1/new Date().day

ลองออนไลน์!


ยินดีต้อนรับสู่ PPCG!
Martin Ender

ขอบคุณ! นอกจากนี้ขอขอบคุณสำหรับการแก้ไข! ฉันไม่แน่ใจว่าจะเลือกสนามเด็กเล่นออนไลน์แบบใด ตอนนี้ฉันรู้. :)
RandomOfAmbr

2

C,  68  55 ไบต์

ขอบคุณ @Ken YN สำหรับการบันทึก 13 ไบต์!

#import<time.h>
f(n){time(&n);n/=gmtime(&n)->tm_wday;;}

ลองออนไลน์!


วางสื่อกลางdเพื่อรับn/=gmtime(&n)->tm_wday;54 ไบต์ (แต่ฉันไม่แน่ใจว่าฉันชอบคำเตือนของคอมไพเลอร์เหล่านี้ ... )
Ken YN

@ KenY-N ขอบคุณ!
Steadybox

1

R , 40 ไบต์

stopifnot(weekdays(Sys.Date(),T)!="Sun")

ลองออนไลน์!

weekdaysส่งคืนวันทำงานของวันที่ด้วยอาร์กิวเมนต์ที่เป็นทางเลือกabbreviateซึ่งย่อSundayให้สั้นลงSunและบันทึกไบต์เดียว

stopifnotโยนข้อผิดพลาดถ้าสำหรับแต่ละอาร์กิวเมนต์ไม่allเป็นTRUEและโยนข้อผิดพลาดพร้อมข้อความที่ระบุองค์ประกอบแรกที่ไม่ใช่TRUEดังนั้นข้อผิดพลาดคือError: "Sun" is not TRUE




1

Gema , 40 ตัวอักษร

\A=@subst{Su=\@err\{S\}\;*=;@datime}@end

จำเป็นต้องระบุข้อความแสดงข้อผิดพลาดดังนั้นให้เลือกข้อความย่อ:“ S”

วิ่งตัวอย่าง:

bash-4.4$ faketime 2018-01-06 gema '\A=@subst{Su=\@err\{S\}\;*=;@datime}@end'

bash-4.4$ faketime 2018-01-07 gema '\A=@subst{Su=\@err\{S\}\;*=;@datime}@end'
S

1

ขี้ขลาด 21 ไบต์

if!os.date"%w"error()

os.date"%w"ส่งคืนวันที่ปัจจุบันของสัปดาห์ในรูปแบบ 0-6 โดยที่ 0 คือวันอาทิตย์ การรับตรรกะไม่ใช่สิ่งนั้นจริงเมื่อวันธรรมดาคือ 0 ดังนั้นวันอาทิตย์ จากนั้นเป็นเพียงพื้นฐานif(a){error()}จะมั่นใจได้ว่าโปรแกรมนี้ข้อผิดพลาดเฉพาะในวันอาทิตย์

ลองออนไลน์!



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.