Kami Punya Pertanyaan Sekali Yang Hanya Gagal Pada Hari Minggu

39

Terinspirasi oleh Kami memiliki unit test satu kali yang hanya gagal pada hari Minggu , menulis sebuah program atau fungsi yang tidak melakukan apa-apa selain melemparkan kesalahan ketika hari Minggu, dan keluar dengan anggun di hari lain.

Aturan:

  • Tidak menggunakan input atau menampilkan output melalui metode IO yang biasa , kecuali untuk mencetak ke STDERR atau yang setara dengan bahasa Anda. Anda diizinkan mencetak ke STDOUT jika itu merupakan produk sampingan dari kesalahan Anda.
  • Suatu fungsi dapat mengembalikan nilai pada non-Minggu selama itu tidak mencetak apa pun
  • Program Anda dapat menggunakan hari Minggu dari zona waktu mana pun, atau zona waktu setempat, selama konsisten.
  • Kesalahan adalah sesuatu yang membuat program berhenti secara tidak normal , seperti kesalahan dibagi dengan nol atau menggunakan variabel yang tidak diinisialisasi. Ini berarti bahwa jika ada kode yang ditambahkan setelah bagian kesalahan, itu tidak akan dieksekusi pada hari Minggu.
    • Anda juga dapat menggunakan pernyataan yang secara manual membuat kesalahan, setara dengan Python raise.
    • Ini termasuk kesalahan runtime, kesalahan sintaksis dan kesalahan saat kompilasi (semoga berhasil!)
  • Pada kesalahan harus ada beberapa tanda yang membedakannya dari tidak ada kesalahan
  • Ini adalah , jadi bytecount terpendek di setiap bahasa menang!

Saya harus menunggu sampai hari Minggu untuk memeriksa jawabannya;)

Jo King
sumber
2
Dengan "menulis sebuah program atau fungsi yang tidak melakukan apa-apa selain melemparkan kesalahan pada hari Minggu, dan keluar dengan anggun di hari lain", maksud Anda bahwa setiap kali dijalankan pada hari minggu itu harus gagal, atau apakah Anda maksudkan bahwa setidaknya harus ada satu kemungkinan gagal pada hari Minggu. Untuk membuatnya lebih jelas, jika gagal hanya pada hari Minggu jam 2 siang, tetapi tidak pada hari Minggu jam 3 sore, tidak apa-apa?
Bromind
5
Ini akan lebih baik jika Sabtu digunakan. Anda bisa menyebutnya "Saturday Night Error" dan bahkan bekerja dalam beberapa lirik lagu yang disesuaikan dengan pertanyaan.
Aaron
3
Hari Minggu? Bagaimana kalau gagal antara tengah malam dan 1 pagi ?
Draco18s
1
Tidak jelas dari pertanyaan Anda apa yang merupakan kesalahan. Saya memilih untuk menutup sampai ini diperbaiki.
Wheat Wizard
3
Tidak juga ... Bagaimana kita bisa membedakan output kesalahan dari output reguler. Apakah ada yang seperti print "error"kesalahan? Paragraf yang ditambahkan tidak benar-benar menjelaskan apa pun.
Wheat Wizard

Jawaban:

18

PHP 7, 12 byte

1%date("w");

Pada PHP 7 itu melempar pengecualian DivisionByZeropada hari Minggu. Hal yang sama terjadi jika ditafsirkan menggunakan HHVM .

Pada PHP 5 ini menampilkan peringatan (aktif stderr) pada hari Minggu:

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

Pada versi PHP apa pun, itu tidak menampilkan apa pun pada hari-hari lain dalam seminggu.

Jalankan menggunakan CLI:

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

atau coba online!

Dua byte lagi dapat diperas oleh pengupasan tanda kutip ( 1%date(w);) tapi pemicu ini pemberitahuan (yang dapat ditekan dengan benar mengatur error_reporting = E_ALL & ~E_NOTICEdi php.ini).

aksioma
sumber
Saya percaya Anda harus menentukan (dalam judul) bahwa jawaban ini hanya dan hanya untuk PHP7 + dan untuk HHVM, karena PHP5.6 dan keluar lebih rendah tanpa masalah. Peringatan bukanlah kesalahan dan jangan menghentikan eksekusi kode. Jika Anda melakukannya 1%date("w");echo "Alive!", itu akan berhenti di PHP7 + dan HHVM, tetapi tidak di semua versi lain sejak PHP 4.
Ismael Miguel
@IsmaelMiguel pertanyaan mengklasifikasikan pencetakan ke Standard Error sebagai kesalahan, jadi peringatan cukup baik dalam hal ini.
Tolong berhenti menjadi kejahatan
1
Mengutip pertanyaan: "Kesalahan adalah sesuatu yang membuat program berhenti secara tidak normal , seperti pembagian dengan kesalahan nol atau menggunakan variabel yang tidak diinisialisasi. Ini berarti bahwa jika ada kode yang ditambahkan setelah bagian yang kesalahan, itu tidak akan menjadi dieksekusi pada hari Minggu. " Ini tidak terjadi dengan peringatan.
Ismael Miguel
@IsmaelMiguel paragraf yang Anda kutip telah ditambahkan ke pertanyaan kurang dari satu jam yang lalu.
Aksioma
1
Mengutip versi yang lebih lama, yang ada pada saat komentar yang saya tulis: "[...] menulis sebuah program atau fungsi yang tidak melakukan kesalahan selain melempar kesalahan pada hari Minggu, dan keluar dengan anggun di hari lain . " Peringatan menentang baris ini karena PHP akan keluar dengan anggun. Kesalahan akan menjadi kesalahan fatal atau kesalahan sintaksis. Bukan peringatan untuk membagi dengan 0. PHP 5.6 dan yang lebih lama tidak valid untuk tantangan ini.
Ismael Miguel
9

PHP, 15 byte

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

Mengasumsikan pengaturan default .

Output pada hari Minggu

Fatal error: Undefined constant 'n' on line 1

Cobalah online!

primo
sumber
2
Perhatikan bahwa jawaban ini membutuhkan PHP 5.3+. Alternatif bisa jadi ||\nbukan ?:\n.
Ismael Miguel
8

Java 8, 69 43 34 byte

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

-26 byte terima kasih kepada @ OlivierGrégoire .
-9 byte terima kasih @Neil .

Penjelasan:

Coba di sini.

  • v->{...}( parameter yang tidak digunakanVoid null ) lebih pendek satu byte dari ()->{...}(tidak ada parameter).
  • new java.util.Date().getDay()akan mengembalikan 0-6 untuk hari Minggu-Sabtu, jadi 1/...akan memberikan java.lang.ArithmeticException: / by zerokesalahan jika nilainya 0, yang hanya terjadi pada hari Minggu.
Kevin Cruijssen
sumber
1
v->{int i=1/new java.util.Date().getDay();}(43 byte).
Olivier Grégoire
@ OlivierGrégoire Ah, java.util.Date()memang punya metode untuk mendapatkan hari dalam seminggu .. Dan bahkan 0 untuk hari Minggu .. Tidak yakin bagaimana saya melewatkan itu. : S
Kevin Cruijssen
Yup, biasanya kelas yang lebih tua memiliki semua fungsi dengan nama yang lebih pendek. ;-)
Olivier Grégoire
1
Apakah ini valid untuk 34 byte? Cobalah online!
Neil
@Neil itu tidak valid pada saat Anda memposting tetapi menjadi valid kurang dari satu jam kemudian. ;-) Namun itu adalah ide pertama saya ...
Olivier Grégoire
7

Python 3 , 33 byte

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

Cobalah online!

Python 3 , 50 byte

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

Cobalah online!

Disimpan ~ 3 byte berkat Rod .

Tuan Xcoder
sumber
1
@Rod Kenapa tidak "Su"in time.ctime()>q(saya mengedit dengan yang ini)?
Tn. Xcoder
Saya tidak bisa menangkapnya. Bagaimana cara kerjanya?
pacholik
@pacholik "Su"in time.ctime()memeriksa apakah hari ini adalah hari Minggu. Jika ini salah, >qbagian itu tidak dievaluasi sama sekali dan semuanya keluar dengan lancar. Tetapi jika itu benar, maka bagian kedua dari ketidaksetaraan dievaluasi, dan karena qtidak didefinisikan, ini akan membuang a NameError.
Tn. Xcoder
1
@pacholik Sunting: Saya rasa saya tidak salah. Untuk tujuan efisiensi, jika bagian pertama adalah palsu, maka Python bahkan tidak repot-repot untuk mengevaluasi bagian terakhir. Saya harus menunggu sampai hari Minggu untuk menguji ini. ( Saya pikir ) Demonstrasi .
Tn. Xcoder
3
@pacholik Perhatikan bahwa Python mengaitkan operator boolean, sehingga setara dengan ("Su" in time.ctime()) and (time.ctime() > q).
user202729
6

Pyth , 8 7 byte

 l-6.d9

Cobalah online!

Penjelasan

    .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
tongkat
sumber
Ini masih tidak valid. Output Anda ( 1.0tidak dihasilkan oleh kesalahan ). OP mengatakan secara eksplisit bahwa mereka tidak mengizinkan itu. Anda dapat memperbaikinya dengan menambahkan satu spasi ke kode Anda,
Tn. Xcoder
Tetapi Anda tidak diizinkan untuk output ke STDOUT kecuali itu hari Minggu, dan Anda melakukan output ke STDOUT.
Tn. Xcoder
@ Mr.Xcoder benar. Pada hari-hari non-Minggu tidak ada yang keluar
Jo King
@JoKing Saya benar-benar melewatkan aturan ini, diperbaiki sekarang
Rod
6

Haskell + Data.Dates , 55 byte

import Data.Dates
succ.dateWeekDay<$>getCurrentDateTime

Cobalah online!

Ini menggunakan fakta bahwa hari Minggu adalah hari terakhir dalam seminggu. dateWeekDaymengembalikan hari dalam seminggu sebagai WeekDayjenis, yang hanya didefinisikan sebagai

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

WeekDayadalah contoh dari Enum, dengan demikian kita dapat menggunakan succdan preduntuk mendapatkan penerus atau pendahulu dari hari kerja, misalnya succ Mondayhasil Tuesday.

Namun, Sundayadalah entri enum terakhir, jadi panggilan succ Sundaymenghasilkan kesalahan berikut:

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

Sunting 1: Terima kasih kepada nimi untuk -3 byte!
Edit 2: -11 byte sekarang karena fungsi diizinkan.


Program lengkap: 88 81 74 69 66 byte

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

Cobalah online!

purediperlukan untuk mengangkat hasilnya WeekDaykembali ke IO Monad. Namun, Haskell melihat bahwa nilai tidak dihasilkan dengan cara apa pun oleh program, sehingga malas, ekspresi tidak dievaluasi, sehingga bahkan pada hari Minggu program tidak akan gagal. Inilah mengapa $!diperlukan, yang memaksa evaluasi bahkan jika Haskell biasanya tidak mengevaluasi ekspresi.


Pendekatan sebelumnya dengan Data.Time: 127 124 byte

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

Cobalah online! Ini adalah beberapa impor yang mengesankan. Perubahand<7 ke misalnya d/=5untuk menguji kegagalan pada hari Jumat. Gagal dengan pengecualian berikut: Non-exhaustive patterns in function c.

Laikoni
sumber
1
main=pure$!succ.dateWeekDay<$>getCurrentDateTime. Dan, karena fungsi dibolehkan, Anda dapat menjatuhkan main=.
nimi
@nimi Terima kasih! Saya tidak yakin tentang fungsinya, karena No using input or showing output through the usual IO methodsaturannya. Sejauh yang saya lihat, menggunakan fungsi akan menghasilkan output untuk non-Minggu, meskipun dibungkus dengan aksi IO.
Laikoni
Mungkin Anda benar, tetapi di sisi lain program lengkap memiliki kode keluar, yang juga merupakan metode standar.
nimi
... aturan tantangan sekarang memungkinkan fungsi mengembalikan nilai pada non-Minggu selama mereka tidak mencetak.
nimi
@nimi Terima kasih atas pemberitahuannya.
Laikoni
5

05AB1E , 45 44 byte

Karena 05AB1E tidak memiliki bawaan untuk mendapatkan hari dalam seminggu, saya telah menggunakan Aturan Zeller untuk menghitungnya.

Mencetak baris baru ke stderr jika hari Minggu (dapat dilihat pada tampilan debug pada TIO)

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

Cobalah online!

Penjelasan

Rumus umum yang digunakan adalah
DoW = d + [(13*(m+1))/5] + y + [y/4] + [c/4] - 2*c
Dimana DoW=day of week, d=day, m=month, y=last 2 digits of year, c=centurydan dan ekspresi dalam kurung ([] ) adalah bulat ke bawah.

Setiap bulan yang digunakan dalam rumus berhubungan dengan angka, di mana Jan=13,Feb=14,Mar=3,...,Dec=12
Seperti kita memiliki bulan saat ini dalam format yang lebih umum, Jan=1,...,Dec=12 kita mengonversi bulan menggunakan rumus
m = (m0 + 11) % 14 + 1

Sebagai biproduct Maret menjadi bulan pertama, Januari dan Februari termasuk tahun sebelumnya, sehingga perhitungan untuk menentukan ymenjadi
y = (year - (m0 < 3)) % 100

Nilai akhir untuk DoWkita dapatkan adalah int di mana 0=Sat,1=Sun,...,6=Fri.
Sekarang kita dapat secara eksplisit melempar kesalahan jika hasilnya benar.

Emigna
sumber
11
05AB1E kalah dari Java? Semua yang saya tahu adalah kebohongan
Kamil Drakari
5

JavaScript, 23 Bytes

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

Program lengkap.

Variabel ktidak boleh didefinisikan.

JavaScript, 20 byte oleh Rick Hitchcock

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

JavaScript, 19 byte oleh apsillers

Date().match`Su`&&k
l4m2
sumber
1) Anda lupa menyertakan _=>; tanpanya ini adalah cuplikan yang tidak diizinkan secara default. 2) Ini output falsepada setiap hari ketika seharusnya tidak menghasilkan apa-apa.
Shaggy
6
1) Ini adalah program lengkap, yang diizinkan oleh OP. 2) Jika Anda menjalankannya sebagai sebuah program, tidak ada output
l4m2
3
/Su/.test(Date())&&kselama 20 byte.
Rick Hitchcock
1
new Dateversi 25 byte(new Date/864e5%7|0)-3||p
l4m2
3
Solusi oleh @RickHitchcock dapat dibuat lebih pendek dengan eksekusi template-tag matchsebagai gantinya:Date().match`Su`&&k
apsillers
5

VBA / VBScript, 22 20 byte

Disimpan 2 byte berkat Taylor Scott.

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

Ini harus dijalankan di Jendela Segera. Weekday()mengembalikan 1 (Minggu) hingga 7 (Sabtu) sehingga ini menciptakan pembagian dengan kesalahan nol pada hari Minggu. Kalau tidak, tidak ada output.

Pesan eror

Toast insinyur
sumber
Anda mengalahkan saya hingga satu jawaban per jam - 19 Bytes:?1/(Weekday(Now)-1)
Taylor Scott
1
@TaylorScott Saya lupa yang Nowvalid tanpa ()di VBA tapi saya tidak bisa menggunakan cetak karena saya pikir semua output tidak diizinkan kecuali kesalahan keluar. No using input or showing output through the usual IO methods, except to print to STDERR. Tetap saja, tersimpan 2 byte.
Engineer Toast
1
Saya baru saja menulis 20 byte yang tepat ini sebagai solusi VBScript, dan kemudian saya pikir saya akan melihat apakah ada bahasa gaya VB yang sudah dikirimkan dan ini dia. Jadi, ini berfungsi untuk VBScript dan mungkin juga bahasa gaya VB lainnya.
@ EngineerToast Saya pikir Anda harus menandai ini sebagai polyglot dengan VBScript
Taylor Scott
@AylorScott saya belum pernah melakukannya sebelumnya. Apakah saya melakukannya dengan benar?
Engineer Toast
4

Ruby, 15 byte

1/Time.now.wday

wdayakan mengembalikan 0 pada hari Minggu yang menyebabkan ZeroDivisionError: dibagi dengan 0 kesalahan. Sebagai contoh: 1/Time.new(2018,1,7).wday.

Biketire
sumber
4

Perl 5 , 13 byte

1/(gmtime)[6]

Cobalah online!

Ported, jawab biketire

dihapus 3 byte dengan pengingat @ mik

Xcali
sumber
1
gmtimealih-alih localtimejuga akan memenuhi aturan, dan lebih pendek 3 byte
mik
3

jq, 42 karakter

(39 karakter kode + 3 opsi opsi baris perintah)

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

Hanya mencoba pendekatan yang berbeda di sini: parse angka hari minggu (0..6) sebagai angka hari bulan (1..31).

Contoh dijalankan:

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"

Perhatikan bahwa jq hanya menangani tanggal UTC.

Cobalah online!

manatwork
sumber
3

C, 35, 34 27 byte

f(n){n/=time(0)/86400%7^3;}

-7 byte dengan terima kasih kepada @MartinEnder dan @Dennis

Cobalah online!

Alnitak
sumber
3
Selamat datang di PPCG!
Martin Ender
3

VBA 18 byte

Ini bergantung pada fungsi inbuilt date()mengembalikan nomor hari yang tersisa 1 jika dibagi 7, jadi mungkin OS dan / atau CPU spesifik.

a=1/(date mod 7-1)

Ini berjalan di jendela proyek VBA Immediate.

JohnRC
sumber
2
Selamat datang di PPCG! Secara umum, penjelasan dan tautan ke kompiler / juru bahasa online dihargai.
FantaC
@tfbninja - memperbarui ok
JohnRC
dan, jika perlu, petunjuk cara menggunakan, mis. panggilan fungsi atau variabel
FantaC
Golf bagus, baru saja memposting ini sendiri setelah melihat jawaban yang lain!
Greedo
3

R , 31 byte, 30 byte

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

Cobalah online!

Tidak ada output pada non-Minggu, Error: object 'a' not foundpada hari Minggu.

format(Sys.Date(),'%u')adalah cara terpendek yang dapat saya temukan untuk mendapatkan hari kerja, itu menghasilkan nomor kelas karakter untuk hari dalam seminggu, dengan 7 untuk hari Minggu. Kita dapat membandingkan dengan angka 7, dan jika benar mencoba menggunakan objek yang tidak terdefinisi.

Menyimpan satu byte berkat Giuseppe!

Gregor
sumber
>6byte lebih pendek.
Giuseppe
2

Ocaml, 46 byte

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

dan di ocaml REPL, kita dapat mencapai yang lebih baik dengan menghapus letdan final :():

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

yaitu 41 byte (termasuk 1 byte untuk carriage return).

Bromind
sumber
1
Selamat datang di PPCG!
Laikoni
1
Mungkinkah kode ini berfungsi di Coba online ?
Laikoni
Mmh ... perintah kompilasi adalah ocamlopt unix.cmxa <file>, saya tidak tahu bagaimana memberikan opsi kompilasi pada tio. Saya akan menyelidiki malam ini
Bromind
Tio menggunakan penerjemah (simili) REPL, jadi Anda harus menggunakan kemungkinan kedua. Namun, tampaknya tidak memiliki perpustakaan Unix (atau tidak mengizinkan akses ke sana, karena alasan apa pun)
Bromind
2

SAS, 36 byte

%put %eval(1/(1-%index(&sysday,Su)))
J_Lard
sumber
2

TI-Basic 84+, 23 byte

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

Membutuhkan perintah tanggal & waktu, yang hanya 84+ dan lebih tinggi.

Timtech
sumber
2

MATL , 12 byte

vZ'8XOs309>)

Kesalahan yang dihasilkan pada hari Minggu adalah:

  • Berjalan di Oktaf:

    MATL run-time error: The following Octave error refers to statement number 9:  )
    ---
    array(1): out of bound 0
    
  • Berjalan di Matlab:

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

Untuk membalikkan perilaku (kesalahan pada hari apa pun kecuali pada hari Minggu), tambahkan ~setelah >.

Cobalah secara Online!

Penjelasan

Ini mengeksploitasi fakta itu

  • pengindeksan ke dalam array kosong dengan indeks logis falseadalah valid (dan hasilnya adalah array kosong, yang tidak menghasilkan output); sedangkan

  • pengindeksan dengan truemenyebabkan kesalahan karena array tidak memiliki entri pertama.

Kode yang dikomentari:

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)
Luis Mendo
sumber
2

Q, 20 Bytes

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

.zd mengembalikan tanggal saat ini. mod melakukan modulo dari tanggal saat ini, yang mengembalikan int. Jika tanggal adalah hari Minggu, .zd mod 7 mengembalikan 1. Jika 1 = 1, (pada hari Minggu), dan kesalahan dimunculkan menggunakan operator 'Untuk singkatnya, kesalahannya hanya karakter e.

tkg
sumber
3
Selamat datang di PPCG!
Martin Ender
2

C # (.NET Core) , 55 54 48 byte

Cobalah online!

Disimpan 1 byte berkat Shaggy

Disimpan 5 byte berkat Emigna

Disimpan 1 byte berkat Kevin Cruijssen

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

Beruntung bahwa hari Minggu diindeks 0 di enum atau kalau tidak perlu (System.DayOfWeek)7

LiefdeWen
sumber
1
54 byte ?
Shaggy
3
Apakah Anda mendapat using Systemgratis dalam C #? Jika demikian saya pikir Anda bisa melakukannya ()=>{var k=1/(int)DateTime.Now.DayOfWeek;}untuk 42 . Kalau tidak 49 dengan eksplisitSystem.
Emigna
3
@Emigna mengalahkan saya untuk itu; ()=>{var k=1/(int)System.DateTime.Now.DayOfWeek;}lebih pendek. Dan Anda dapat menyimpan satu byte lagi dengan menggunakan parameter kosong yang tidak digunakan alih-alih tanpa parameter (mis. v->{...}Alih-alih ()->{...})
Kevin Cruijssen
1
40 byte: ()=>1/(int)System.DateTime.Now.DayOfWeek. Coba di sini .
Ayb4btu
2

Groovy , 16 byte

1/new Date().day

Cobalah online!

RandomOfAmbr
sumber
Selamat datang di PPCG!
Martin Ender
Terima kasih! Juga, terima kasih sudah mengedit! Saya tidak yakin taman bermain online mana yang harus dipilih. Sekarang saya tahu. :)
RandomOfAmbr
2

C,  68  55 byte

Terima kasih kepada @Ken YN karena telah menghemat 13 byte!

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

Cobalah online!

Steadybox
sumber
Jatuhkan perantara duntuk mendapatkan n/=gmtime(&n)->tm_wday;54 byte (tapi saya tidak yakin saya suka semua peringatan kompiler ini ...)
Ken YN
@ KenY-N Terima kasih!
Steadybox
1

R , 40 byte

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

Cobalah online!

weekdaysmengembalikan hari kerja dari tanggal, dengan argumen opsional abbreviate, yang memendek Sundayuntuk Sun, menyimpan satu byte.

stopifnotmelempar kesalahan jika, untuk setiap argumen, tidak allada TRUE, dan melempar kesalahan dengan pesan yang menunjukkan elemen pertama yang tidak TRUE, sehingga kesalahannya adalahError: "Sun" is not TRUE

Giuseppe
sumber
1

Gema , 40 karakter

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

Harus menentukan pesan kesalahan, jadi pilih yang pendek: "S".

Contoh dijalankan:

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
manatwork
sumber
1

Funky , 21 byte

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

os.date"%w"mengembalikan hari ini dalam seminggu dalam format 0-6, di mana 0 adalah minggu. Mendapatkan logika bukan hanya berlaku ketika hari kerja adalah 0, begitu juga hari Minggu. Maka hanya dasar if(a){error()}akan memastikan bahwa program ini hanya kesalahan pada hari Minggu

Cobalah online!

ATaco
sumber