Merry Golfmas, Semuanya!


35

Ini Natal semua orang, dan inilah tantangan kode-golf untuk merayakannya. Anda perlu membuat program untuk mencetak hadiah. Secara khusus, kata-kata "Selamat Natal". TETAPI ada peluang: program ini hanya bisa berfungsi jika tanggal 25 Desember. Jika kode dijalankan pada hari lain, maka program tersebut akan mogok.

Ini adalah Code-Golf, jadi jawabannya dengan jumlah byte terkecil menang.

Selamat Natal!


5
Ya itu tadi ermmmmm. .. yeah 25 maaf
Leo


3
Codemas Golfy ! :)
Luis Mendo

1
Tidak, itu pasti macet. Anda tidak dapat keluar dari aplikasi
Leo

2
@PhiNotPi Tantangan-tantangan itu berbeda. Ini bukan meminta hitungan mundur dan tidak melibatkan menunggu untuk memberikan hasil
Leo

Jawaban:


8

Pyke, 21 byte

.dↄґ6C65h*325q/Al

Coba di sini!

     C65h*        -   multiply the day by the (current month + 1)
          325q    -  ^ == 325
    6         /   - 6 / ^
.dↄґ              -  load "merry christmas"
               Al - ^.capwords()

Atau 18 byte tidak kompetitif.

.dↄґ6Cs6Y1q/Al

Sama persis kecuali untuk bagian ini:

Cs6Y1q 
C      -    get_time()
 s6    -   add 1 week
   Y   -  get day of the year
    1q - ^ == 1

Coba di sini!


Ini gagal jika 30 Oktober, bukan?
Magic Gurita Guci

1
@carusocomputing 30 * (10+1)= 330 bukan 325
Biru

6

JavaScript, 55 53 46 byte

Catatan: ini hanya diuji di Google Chrome, program mungkin berperilaku berbeda dari peramban ke peramban (atau perangkat ke perangkat)

2 byte disimpan berkat @ ConorO'Brien

7 byte disimpan berkat @ETHProductions

alert(/c 25/.test(Date())?"Merry Christmas":a)

Keluar dengan Uncaught ReferenceError: a is not definedjika tanggal tidak Dec 25. Saya tidak begitu yakin apakah ini dianggap sebagai crash

alert(/c 25/.test(Date())?"Merry Christmas":a)


Bagaimana dengan .slice(6,10)=="c 25"?
Conor O'Brien

@ ConorO'Brien Terima kasih! Itu cerdas :)
Kritixi Lithos

@ ETHproductions Saya tidak bisa memikirkan hari atau bulan apa pun yang berakhir c( Octhampir saja, tetapi masih belum memenuhi regex). Terima kasih atas tipnya!
Kritixi Lithos

Hasil Date()sepenuhnya tergantung pada implementasi. Sebagai contoh, saya berharap ini berbeda dengan bahasa dan lokasi mesin.
Oriol

@ Oriol Lalu saya akan menentukan browser dalam jawaban saya
Kritixi Lithos

5

Python 3, 66 63 byte

Berkat ide-ide dari JavaScript / jawaban ES di sini saya berhasil memeras beberapa byte. Buat indeks kamus - kunci yang tidak ada akan memunculkan a KeyError. Kode berikut berfungsi di zona waktu lokal

import time;print({1:'Merry Christmas'}['c 25'in time.ctime()])

Format output untuk ctimetidak bergantung pada lokal - formatnya selalu ~ 'Sun Dec 25 19:23:05 2016'. Karena hanya pada bulan Desember berakhirnya singkatan 3 huruf c, aman untuk digunakan di 'c 25'in time.ctime()sini.


Versi sebelumnya:

Ini bekerja di zona waktu UTC. Untuk zona waktu lokal kita perlu s/gm/local3 byte lagi. Untuk Python 2, seseorang dapat menghapus tanda kurung dari print65 byte.

import time;print({(12,25):'Merry Christmas'}[time.gmtime()[1:3]])

Konstruk ini memuat KeyErrortanggal lain:

>>> import time;print({(1,1):'Happy New Year'}[time.gmtime()[1:3]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: (12, 25)

Apakah ini macet pada hari-hari lain (memang seharusnya demikian)?
Erresen

2
Saya tidak bisa menjalankan yang ini karena ia keberatan dengan tuple sebagai kunci Cobalah online! . Jika Anda mengubahnya import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]dan melabeli Python 2, itu masih 66 byte dan macet dengan KeyError pada tanggal selain 25 Desember.
ElPedro

@ElPedro oops: D seharusnya 1:3, saya menyalin kode pengujian saya secara tidak sengaja
Antti Haapala

Mengetahui hal itu ketika saya meminjam gmtime()ide Anda untuk jawaban saya. Harap Anda tidak keberatan :-)
ElPedro

5

PHP, 39 38 byte, tidak bersaing (tidak crash)

<?=date(md)-1225?"":"Merry Christmas";

atau

<?date(md)-1225?die:0?>Merry Christmas

atau

<?=["Merry Christmas"][date(md)-1225];

Adakah yang bisa bermain golf 4 byte date(Lz)%1001-358? : D
Titus

3
Apakah ini crash?
edc65

Anda dapat meninggalkan ""kode pertama yang menghemat 2 Byte. Jika bukan karena tahun kabisat, Anda bisa menghemat 2 Byte lebih banyak dengan mengganti mddengan zdan 1225dengan jumlah hari tahun 25 Desember.
UTF-8

1
Alternatif: eval((date(md)^TQZZ).'"Merry Christmas";');(43 byte)
Ismael Miguel

1
@ UTF-8: Anda benar. Saya kebanyakan menggunakan Elvis untuk nilai boolean; dan itu akan mencetak 1. Ini akan mencetak hasil perhitungan. dan 0104-12251121.
Titus

4

Python 2 , 68 67 65 byte

-1 dengan terima kasih kepada @muddyfish

Terima kasih kepada @AnttiHaapala untuk ide yang menyelamatkan pasangan lain.

import time;print['Merry Christmas'][(12,25)!=time.gmtime()[1:3]]

Cobalah online!

Melempar IndexError jika tidak 25 Des.

Versi yang tidak bersaing untuk 59 byte karena hanya berfungsi untuk tahun yang tidak Leap (menggunakan hari dalam setahun yaitu 360 tahun ini tetapi 361 tahun kabisat)

import time;print['Merry Christmas'][360!=time.gmtime()[7]]

Tidak bisakah Anda menyimpan byte dengan menggunakan daftar alih-alih tupel?
Biru

@muddyfish Terima kasih, tangkapan yang bagus.
ElPedro


Terima kasih. Itu juga versi 67 byte saya sampai saya mengomentari jawaban dari @AnttiHaapala dan berpikir gmtime()untuk mencukur pasangan. Saya harus mengakui, saya berharap ada lebih banyak yang bisa saya lakukan dengan ide hari-tahun ini.
ElPedro

Anda dapat menyimpan 1 byte dengan: time.ctime () [6:10]! = 'C 25'
Max

4

R, 52 61 58 byte

`if`(format(Sys.Date(),"%m%d")=="1225","Merry Christmas",)

Jika tanggal saat ini bukan tanggal 25 Desember maka kesalahan dikembalikan karena tidak ada argumen ketiga yang diberikan if.

Sunting: Memperbaiki kesalahan konyol


Maaf tentang kesalahan ketik kecil saya. Saya bermaksud mengatakan 25tg
Leo

Ini hanya bekerja tahun ini!
Erresen

@ Erresen Ah benar, kesalahan konyol. Tetap sekarang.
Billywob

4

Pertama kali di sini ... Dimulai dengan bahasa terbaik untuk pekerjaan ini:

Java, 200 188 byte (terima kasih kepada @Daniel Gray), 186 byte menghapus "ln" dari cetakan.

import java.util.*;public class a{public static void main(String[]r){Calendar c=Calendar.getInstance();if(!(c.get(2)==11&&c.get(5)==25)){int i=1/0;}System.out.print("Merry Christmas");}}

Coba di sini!


1
Selamat datang di PPCG! Posting pertama yang bagus, meskipun java bukan yang terpendek.
Rɪᴋᴇʀ

1
Anda dapat mengubah Calendaruntuk *dan menyimpan beberapa byte. Anda juga bisa mempersingkat nama argsparameter dalam metode utama, saya kira ...
Daniel Gray

@Daniel Gray, Anda benar sekali, terima kasih!
Bonifacio

1
Selamat datang! Anda dapat menyimpan 10 byte jika Anda mengganti "kelas publik" dengan "antarmuka" dan menghapus pengubah publik dari utama, menjadikannya "antarmuka a {static void main ..." Ini, bagaimanapun, akan mencegah Compilejava dari dapat menjalankannya on line.
Zavada

3

MATL , 34 33 byte

'Merry Christmas'IHh&Z'5U12h=?}Yl

Ini berfungsi dalam versi bahasa saat ini (19.7.0) . Untuk menyebabkan kesalahan, kode berikut mengeksploitasi fakta bahwa logaritma string memberikan kesalahan (ini dapat berubah di versi yang akan datang).

Cobalah online!

Penjelasan

'Merry Christmas'  % Push this string
IHh                % Push 3, then 2, concatenate: gives array [3 2]
&Z'                % Get 3rd and 2nd outputs of clock vector: current day and month
5U12h              % Push 5, square, push 12, concatenate: gives [25 12]
=                  % Compare if corresponding entries are equal in the two arrays
?                  % If all entries are equal: do nothing
}                  % Else
  Yl               %   Logarithm. Gives an error when applied on a string
                   % End (implicit). Display (implicit)

3

QBIC , 48 byte

~left$$|(_D,5)=@12-25||?@Merry Christmas|\?a(12)

Penjelasan:

~             IF
left$$|(_D,5) the date string starts with
=@12-25|      the string "12-25"
|             THEN
?@Me..as|     PRINT "Merry Christmas"
\             ELSE
?a(12)        Print the twelfth index of an undefined array. 
              Since there are only 11 elements in undefined arrays, this 
              results in an index-out-of-bounds error.    
The the IF statement is auto-closed by QBIC.

Ini mengasumsikan MM-DDnotasi tanggal Amerika . Ini akan lebih pendek jika saya akhirnya membuat fungsi Substring di QBIC.


Apa yang terjadi pada hari-hari yang bukan Natal? Apakah itu crash seperti yang seharusnya?
Erresen

@Erresen itu sekarang.
steenbergh

3

05AB1E ,32 21 byte

Disimpan 11 byte berkat kompresi string Adnan :).

1žfže‚12D·>‚Q÷”ÞٌΔ×

Penjelasan

 žfže‚                Push [current month, current day]
      12D·>‚          Push [12, 25]
            Q         Push tmp = 1 if the two arrays are equal, tmp = 0 otherwise
1            ÷        Evaluate x = 1/tmp. If tmp = 0 a division by 0 exception is thrown
              ”ÞÙŒÎ”× Implicitly display "Merry Christmas" x times

Cobalah online!

Saya melakukan apa yang terlintas dalam pikiran pertama, jadi mungkin ada pendekatan yang lebih baik untuk yang satu ini. Tapi PPCG juga layak mendapatkan Selamat Natal di 05AB1E;).


Juga, xkependekan dari duplikat dan ganda :).
Adnan

3

C # / CS Script 106 100 99 byte

Solusi 99 byte

using System;int i;Console.WriteLine(DateTime.Now.ToString("dM")=="2512"?"Merry Christmas":i/0+"");

Coba di sini!

Solusi 100 byte (lebih suka yang ini ... agak berbeda)

using System;int i;Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1?"Merry Christmas":i/0+"");

Dijelaskan:

using System;
int i;

// if today plus 7 days is the first day of the year, then it's xmas!
Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1
    ? "Merry Christmas"

// otherwise divide i by 0
    : i/0+"");

DateTime.Now.AddDays(7).DayOfYear==1adalah satu byte lebih pendek dari DateTime.Now.ToString("ddMM")=="2512"tetapi 1 byte lebih lama dariDateTime.Now.ToString("dM")=="2512"


1
Anda bisa menggunakannya $"{DateTime.Now:dM}"=="2512". dMambigu, tetapi tidak untuk "2512".
Kobi

@ Kobi Saya tidak bisa menggunakan interpolasi string untuk CS Script :(
Erresen

1
Anda bisa jika menggunakan LinqPad (mis. $"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""55 byte) =)
Kenneth K.

Kenapa int idan tidak adil 1/0?
NoOneIsHere

1
@ Erresen Ah, kesalahan saya. Saya tidak cukup menguji secara menyeluruh. Tweaked: $"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)(59 byte)
Kenneth K.

2

C # / CS Script, 96 Bytes, Kebanyakan dijiplak dari Erresen

using System;Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1?"Merry Christmas":1/0+"");

Menghapus int ideklarasi yang mendukung pengodean keras divisi. Saya akan meninggalkan ini sebagai komentar tetapi tidak memiliki reputasi.


Selamat datang di PPCG! Posting pertama yang bagus! Jangan khawatir tentang hal komentar / jawaban, itu tidak masalah.
Rɪᴋᴇʀ

2

bash + utilitas Unix, 51 49 47 byte

((`date +%m%d`-1225))&&${};echo Merry Christmas

* Terima kasih kepada @ KenY-N untuk menunjukkan bahwa tanda kutip dalam gema dapat dihapus, dan untuk @IporSircer untuk mengurangi ukuran kondisi sebesar 2 byte.


Itu memberi saya bash: ${}: bad substitutionkesalahan. Anda juga dapat menjatuhkan tanda kutip dari Selamat Natal untuk menghemat dua byte. Selanjutnya, [ `date +%m%d` = 1225 ]&&echo Merry Christmasbekerja untuk saya, sama dengan 45 byte saya .
Ken YN

1
@ KenY-N Kesalahan ini disengaja: program seharusnya mogok pada hari-hari selain Natal. Terima kasih telah menyebutkan bahwa kutipan dalam gema dapat dijatuhkan; Saya melewatkan itu.
Mitchell Spector

Ups, tidak memenuhi persyaratan itu! Diuji dengan mengubah string tanggal, dan saya melihat sekarang bahwa itu tidak mogok. Menghapus jawaban saya ... Tapi, saya punya alternatif, jadi izinkan saya memperbaruinya.
Ken YN

Coba ganti ${}dengan !-untuk mengalahkan saya dengan satu byte. Saya akan mendukung Anda saat Anda menang.
Ken YN

1
@ KenY-N Terima kasih, tapi saya tidak akan mengubah $ {} menjadi! - karena saya pikir yang terakhir hanya akan bekerja dengan benar pada baris perintah, bukan dalam skrip (kecuali Anda mengaktifkan subtitusi riwayat, yang akan membutuhkan tambahan karakter).
Mitchell Spector

1

Groovy, 57 byte

print new Date().format("Md")=="1225"?"Merry Christmas":b

Gangguan pada tanggal selain 25.12. dengan groovy.lang.MissingPropertyExceptionkarena btidak didefinisikan.


1

Ditumpuk , 42 byte

Coba di sini!

('Merry Christmas')'MMDD'date'1225'=¬#out

Ini menciptakan array elemen tunggal yang mengandung yaitu 'Merry Christmas!'. Setelah itu, tanggal dimasukkan ke dalam string dengan bulan diikuti oleh hari. Ia memeriksa kesetaraan dengan '1225'(Natal), membalikkannya dengan ¬, lalu mendapatkan anggota itu dari susunan sebelumnya. Jika ini bukan Natal, ini akan kesalahan dengan kesalahan indeks. Kalau tidak, ia akan mencetak Merry Christmas. (Ubah tanggal dalam string untuk melihat cara kerjanya di hari lain.)


1

Batch, 66 byte

@echo off
if %date:~0,5%==25/12 echo Merry Christmas&exit/b
if

Baris baru yang tertinggal signifikan, karena menyebabkan penguraian ifpernyataan gagal. Anda mungkin perlu mengubah cek tanggal agar cocok dengan format tanggal lokal Anda.


1

Python 2, 69 77 75 atau 72 70 Bytes

import time
if time.strftime("%d%m")=="2512":print"Merry Christmas"
else:1/0

Jika tidak masalah jika keluar dengan kesalahan saat Natal, maka:

import time
if time.strftime("%d%m")=="2512":print"Merry Christmas"
1/0

EDIT:

Terima kasih @ Flp.Tkc untuk menunjukkan bahwa saya perlu meningkatkan kesalahan

-2 Bytes dari @Max untuk menunjukkan tentang menghapus titik dua dari fungsi strftime


1
Ini dimaksudkan untuk crash jika bukan Natal, ini hanya keluar secara normal.
FlipTack

Anda dapat menghemat 2 byte dengan menghapus titik dua -> '% d% m' == '2512'
Max

@ Max OK, terima kasih atas tipnya. Saya belum pernah menggunakan fungsi ini sebelumnya, jadi saya tidak berpikir untuk melakukan itu
sonrad10

simpan 3 byte lagi dengan: time.ctime () [6:10] == 'c 25'
Max

1

CJam, 28

et[C25]#1="Merry Christmas"/

Cobalah online

Penjelasan:

et                   push an array of current [year month day hour ...]
[C25]                push the array [12 25] (C=12)
#                    find the position of the 2nd array within the first one
1=                   compare it with 1, resulting in 1 for 1 and 0 otherwise
"Merry Christmas"/   split "Merry Christmas" into pieces of that length
                      (it crashes if the length is 0)
                     at the end, all the pieces are concatenated
                      and printed automatically

0

C # .NET, 180 172 171 byte

Disimpan 8 byte berkat Kritixi Lithos

Disimpan 1 byte berkat Kritixi Lithos, lagi;)

namespace System{class P{static void Main(string[] args){var d=DateTime.Today;if(d.Day==25)if(d.Month>11){Console.Write("Merry Christmas!");return;}throw new Exception();}}}

Alternatif, varian tidak mengandung serigala:

namespace System //In System, so we don't have to use system.
{
    class Program
    {
        static void Main(string[] args) //Main function.
        {
            var d = DateTime.Today; //Get Today.
            if (d.Day == 25) if (d.Month == 12) //Day has to be 25th, Month has to be 12nd.
                {
                    Console.Write("Merry Christmas!"); return; //Prints.
                }
            throw new NotChristmasException(); //Errors/Crashes the program.
        }
    }
    class NotChristmasException : Exception { } //Holiday exception, hooray!
}

Tidak bisakah Anda memberi program nama kelas yang lebih pendek?
Kritixi Lithos

Anda dapat menghapus beberapa byte dengan mengubah "NotChristmasException" menjadi sesuatu yang lebih pendek.
Leo

@FishProHD NotChristmasExceptionHanya ada di varian yang tidak diserang.
devRicher

@KritixiLithos Terima kasih, mengubahnya.
devRicher

1
if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()Catatan dikombinasikan jika pernyataan dan penghapusan kawat gigi di sekitar Console.Writedan ganti returndengan else. Juga ubah var d=DateTime.NowAnda dapat menyingkirkan pengecualian melempar dengan mungkin args[-1];setelah mengubah nama argumen menjadi abegitu a[-1];(ini jadi tidak identik untuk dibagi dengan nol yang digunakan di tempat lain)
pinkfloydx33

0

Mathematica, 46 byte

If[Today[[1,2;;]]=={12,25},"Merry Christmas!"]

Nowmenghemat 2 Bytes lebihToday
Kelly Lowder

Juga, Anda perlu crash dalam hasil False, jadi saya pikir sesuatu seperti Quit[]atau 1/0sudah cukup.
Kelly Lowder

0

Common Lisp, 140

(let((m(multiple-value-list(decode-universal-time(get-universal-time)))))(if(and(eq(nth 3 m)25)(eq(nth 4 m)12))(write"Merry Christmas")(c)))

Gangguan dengan fungsi yang tidak ditentukan jika tanggal tidak tepat.


0

awk, 29 byte (+ panjang ("Selamat xmas"))

v=1225==strftime("%m%d")||1/0

Menjalankannya:

$ echo Merry xmas | awk 'v=1225==strftime("%m%d")||1/0'
awk: cmd. line:1: (FILENAME=- FNR=1) fatal: division by zero attempted

Salam musim disalurkan ke awk. strftimemengembalikan bulan + hari (misalnya 1226) dan jika cocok, 1225 $0catatan akan dihasilkan. Hasil perbandingan 1225==1226ditempatkan pada vvar yang digunakan untuk membagi 1 jika perbandingan tanggal gagal.


0

Haskell, 116

Gangguan dengan "Pola tidak lengkap dalam fungsi f" jika bukan Natal.

import Data.Time
f(_,12,25)="Merry Christmas"
main=getZonedTime>>=print.f.toGregorian.localDay.zonedTimeToLocalTime

Sayangnya, tidak ada fungsi yang memungkinkan Anda untuk segera mendapatkan waktu dalam format yang bermanfaat, sehingga sebagian besar dari ini mengonversi format tanggal.


0

C #, 122 104 byte

18 byte disimpan, terima kasih kepada @raznagul

using System;i=>{if(DateTime.Now.AddDays(7).DayOfYear==1)Console.Write("Merry Christmas");else{i/=0;};};

Ini menambahkan 7 hari ke hari saat ini, dan memeriksa apakah itu adalah hari pertama tahun ini, jika ya, itu menampilkan "Selamat Natal", jika tidak dibagi dengan nol.


Itu returntidak perlu. Gunakan isebagai ganti ().
raznagul

0

Ruby, 69 byte

if Time.now.strftime("%j")=="360";puts "Merry Christmas";else 0/0;end

Bekerja pada 2016. Tidak membedakan antara tahun normal dan tahun kabisat, mungkin perlu disesuaikan untuk tahun-tahun tidak kabisat.


0

ForceLang, 180 byte

set s datetime.toDateString datetime.now()
set t "Dec 25"
def c s.charAt i
def d t.charAt i
set i -1
label 1
set i 1+i
if i=6
 io.write "Merry Christmas!"
 exit()
if c=d
goto 1
z.z

(Ingat itu datetime.toDateStringtergantung pada lokal, jadi ini mungkin tidak berfungsi tergantung pada lokal Anda)


0

C #, 90 byte

using System;Console.Write(new[]{"Merry Christmas"}[DateTime.Now.AddDays(7).DayOfYear-1]);

Lempar IndexOutOfRangeException jika ini bukan Natal.

Coba di sini!


0

baris perintah bash, 45 48 49 48 byte

date +%m%d|grep -q 1225&&echo Merry Christmas||!-
date +%m%d|grep -q 1225||!-;echo Merry Christmas

Mirip dengan Mitchell Spector , tetapi gunakan grepdalam mode diam untuk memeriksa kecocokan, kemudian &&akan memastikan bahwa itu hanya mencetak pada kesuksesan, dan ||penyebabnya untuk mencari riwayat !-, yang memberi saya ini:

-bash: !-: event not found

Dan itu menghentikan eksekusi seperti yang !- ; echo fooditunjukkan. The bashdokumentasi mengatakan bahwa !-nmengacu pada perintah dikurangi saat n, jadi mungkin itu sedang ditafsirkan sebagai !-0, yang memberikan pesan kesalahan yang sama (dan non-lokal).


Ide bagus, tapi ini tidak crash pada hari-hari selain Natal, seperti seharusnya, bukan?
Mitchell Spector

Sekarang memberikan kesalahan pada kegagalan.
Ken YN

1
Ini mencetak pesan kesalahan tetapi terus berlanjut; itu tidak benar-benar crash. Jika Anda mengganti. dengan $ {} maka itu akan benar-benar macet bukan hanya mencetak pesan kesalahan dan berlangsung. Saya pikir crashing mengharuskan program dihentikan pada saat itu. Anda dapat mengatakan bahwa milik Anda tidak berakhir dengan meletakkan ekstra "; echo x" di akhir dan melihat bahwa itu dijalankan. (Itulah sebabnya saya menggunakan $ {} alih-alih dalam jawaban saya.) Saya tidak tahu apakah ada urutan 1 atau 2 karakter yang dapat Anda gunakan yang akan menyebabkan crash yang sebenarnya.
Mitchell Spector

@MitchellSpector: Saya menemukan urutan 2 karakter!
Ken YN

Dan sekarang kembali ke 48 dengan beralih logika sehingga saya dapat menggunakan ;bukan ||.
Ken YN
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.