Hasilkan nomor 2014 tanpa angka dalam kode sumber Anda

579

Catatan untuk menantang penulis sesuai konsensus meta : Pertanyaan ini diterima dengan baik ketika diposting, tetapi tantangan seperti ini, meminta penjawab untuk Melakukan X tanpa menggunakan Y cenderung diterima dengan buruk. Coba gunakan kotak pasir untuk mendapatkan umpan balik jika Anda ingin memposting tantangan serupa.


Ini 2017 2018 2019 sudah, kawan, pulang.

Jadi, sekarang ini tahun 2014, saatnya untuk pertanyaan kode yang melibatkan angka 2014.

Tugas Anda adalah membuat program yang mencetak angka 2014, tanpa menggunakan salah satu karakter 0123456789dalam kode Anda, dan secara independen dari variabel eksternal seperti tanggal atau waktu atau seed acak.

Kode terpendek (menghitung dalam byte) untuk melakukannya dalam bahasa apa pun di mana nomor adalah token yang valid menang.


Papan peringkat:

Joe Z.
sumber
10
Meskipun angka diabaikan dalam brainfuck, saya pikir saya tetap akan mempostingnya. 32 Chars:++++++[>++++++++<-]>++.--.+.+++.
Braden Best
4
Brainfuck bukan bahasa yang valid untuk tantangan ini.
Joe Z.
8
Saya bertanya-tanya apakah pertanyaan ini mendapatkan lonjakan popularitas di sekitar Tahun Baru.
Joe Z.
3
Menunggu "Ayo teman-teman, tidakkah kamu sadar ini tahun 2016?" :)
padawan
1
@BradenBest Anda dapat melakukannya dalam 31 karakter dengan setidaknya dua cara berbeda: +++++++ [> +++++++ <-]> + .--. +. +++. dan ++++++++++ [> +++++ <-]> .--. +. +++.
Zubin Mukerjee

Jawaban:

126

Mouse-2002 , 4 byte.

Itu 4 byte ASCII murni dan manis .

Di Mouse , huruf-huruf alfabet diinisialisasi dengan nilai 0-25. !adalah operator untuk bilangan bulat pencetakan, sehingga ini cetakan 20kemudian 14(tidak ada baris intermiten).

U!O!

Tidak ada penerjemah online yang tersedia, tetapi di sini Anda akan menemukan penerjemah yang ditulis dalam bahasa C (perlu beberapa penyesuaian sebelum seseorang dapat memaksa gccuntuk mengkompilasinya) dan penerjemah yang dikompilasi yang sama untuk Win32tetapi yang bekerja dengan baik di Linux wine.

Di sini Anda dapat menemukan versi penerjemah tetap, yang dikompilasi.

kucing
sumber
7
Wow, ini adalah penemuan yang luar biasa setelah tantangan. Dan dengan bahasa yang begitu esoteris, belum ada orang di sini yang pernah mendengarnya!
Joe Z.
3
BTW: ini melakukan hal yang sama dengan CJam KE, tetapi sebenarnya valid karena merupakan bahasa dari sebelum 2014.
Joe Z.
7
Tampilan sombong di wajah saya sekarang mirip dengan penyihir Fortran-77 setelah mengalahkan beberapa pendukung Python dalam kode tercepat .
kucing
56
Ini permainan @cat dan Mouse-2002.
Trauma Digital
5
@DigitalTrauma memang: 3
kucing
1300

Python, 52 byte

print sum(ord(c) for c in 'Happy new year to you!')

Diperbarui untuk 2015 berkat @Frg:

print sum(ord(c) for c in 'A Happy New Year to You!')

Arahkan kursor ke versi 2016:

print sum(ord(c) for c in 'Happy New Year to you!!!')

Cobalah online!

dansalmo
sumber
186
Anda berhak atas penghargaan kepintaran
Carter Pape
167
wow - inilah semangat pertanyaan ini. <3
Johannes
80
Saya sedikit terkejut bahwa itu hanya frasa ke-4 yang saya coba setelah "Selamat tahun baru!", Yang akan menjadi sempurna untuk tahun 1374.
dansalmo
55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') Oh, tunggu, aku terlambat satu tahun. Itu tahun 2013.
Warren P
164
sum(map(ord,'Happy new year to you!'))akan menghemat 7 karakter.
243

Befunge 98 - 17 11 9 8 byte

'-:*b-.@

Mirip dengan versi lama, tapi saya ingat '

'-:* pushes 45, duplicates it, then squares it, producing 2025
b-   subtracts 11 from it, resulting in 2014
.@   prints the result, then ends the program

Menariknya, 45 2 -11 adalah satu-satunya pasangan angka a, b di mana Pentingnya set tersebut adalah bahwa [32.126] adalah himpunan karakter ascii yang dapat dicetak dan [10,15] adalah himpunan nomor Befunge yang mudah diakses. Saya menemukan pasangan itu dengan program python ini :

(a,b)[32,126]×[10,15]a2b=2014
for a in range(32,127):
    for c in range(10,16):
        if (a**2-c)==2014:
            print("%s,%s"%(a,c))

Atau, jika penerjemah Anda mendukung unicode, maka ini berfungsi:

Befunge 98 - 5 byte (4 karakter)

'ߞ.@

Setidaknya berfungsi di http://www.quirkster.com/iano/js/befunge.html dengan kode berikut (Befunge 93 - 6 byte / 5 karakter):

"ߞ".@

Versi lama

cdd**e-.@

menghitung nomor, lalu mencetaknya:

cdd pushes numbers to the stack so that it is this: 12,13,13
**  multiplies top three values of stack, which is now: 2028
e   pushes 14
-   subtracts the top two values of the stack, resulting in: 2014
.   prints the numerical value
@   end of program

Versi yang lebih lama:

"*'&("#;:a`j@a+,;

Mendorong nilai ascii untuk 2014, -10. Kemudian cetak masing-masing setelah menambahkan 10 ke dalamnya.

Justin
sumber
78
en.wikipedia.org/wiki/Befunge ... apa ini, saya bahkan tidak ...
Plato
36
"Bahasa ini awalnya diciptakan oleh Chris Pressey pada tahun 1993 sebagai upaya untuk merancang bahasa yang sulit untuk dikompilasi mungkin" ...
akan
7
@ 11684 Outputnya didefinisikan dengan cukup baik dalam pertanyaan. Jika suatu program dicetak: randomstuff2randomstuff0randomstuff1randomstuff4Saya tidak akan menganggapnya sebagai solusi yang valid.
Cruncher
7
@ Plato Daripada membaca artikel wikipedia (yang hanya mencakup Befunge 93), jika Anda ingin belajar tentang Befunge 98, bacalah spesifikasi resminya
Justin
3
Wiki: 'Bahasa ini awalnya diciptakan oleh Chris Pressey pada tahun 1993 sebagai upaya untuk merancang bahasa yang sulit dikompilasi mungkin' ... tetapi mengapa?
SepupuCocaine
239

Ruby, 15

p Time.new.year

Sementara;)


Perhatikan bahwa bagian dari pertanyaan

secara independen dari variabel eksternal seperti tanggal atau waktu atau seed acak

tidak diedit sampai lama setelah saya memposting jawaban saya ...


Jan Dvorak menawarkan alternatif yang bagus di komentar :

Happy = Time
Happy.new.year

Tapi itu sangat antusias. Aku lebih memilih:

Happy = Time
class Time; alias year! year; end

Happy.new.year!

Atau bahkan:

class Have; def self.a; A.new; end; end
class A; def happy; Time; end; end
class Time; alias year! year; end

Have.a.happy.new.year!

Dan ini tanda baca bahasa Inggris yang benar:

def noop x = nil; end
alias a noop
alias happy noop
alias new noop
alias year! noop
def Have x
    p Time.new.year
end

Have a happy new year!

Oke oke, saya tidak bisa menahannya:

def noop x = nil; end
eval %w[we wish you a merry christmas! christmas and a happy new].map{|x|"alias #{x} noop"}*"\n"
def year!; p Time.new.year; end

we wish you a merry christmas! we wish you a merry christmas!
we wish you a merry christmas and a happy new year!
Gagang pintu
sumber
168
Happy = Time; Happy.new.year
John Dvorak
5
@obb Tidak, bukan itu; pertanyaannya tidak mengatakan apa-apa tentang ini
Gagang Pintu
12
Ini hanya akan berfungsi dengan benar beberapa waktu.
hippietrail
119
Ini telah bekerja dengan baik di semua tes hingga saat ini
CoderTao
7
Saya percaya semangat pertanyaannya adalah untuk mengatakan tahun ini [yang kebetulan 2014 tahun ini]. Solusi ini karena itu lebih "portabel" dalam waktu daripada yang diterima;). Anda (dan Jan Dvorak) mendapatkan suara saya!
Olivier Dulac
223

Go, 2 byte (UTF-16)

Satu karakter unicode (2 byte dalam UTF-16, 3 byte dalam format UTF-8), menghasilkan 2014 sebagai bagian dari kesalahan

http://ideone.com/dRgKfk

can't load package: package : 
prog.go:1:1: illegal character U+2014 '—'
KAMU
sumber
7
Itu sangat pintar, tetapi pertanyaannya meminta program yang mencetak nomor.
HelloGoodbye
40
Jika kode kesalahan yang dicetak dihitung, pengajuan ini akan menang.
ToastyMallows
37
+1. Pertanyaannya tidak mengatakan, " hanya mencetak nomor dan tidak ada yang lain".
Kaz
1
Saya tidak peduli apakah itu valid atau tidak, itu cukup mengagumkan.
Program Redwolf
1
Ini adalah celah standar
MilkyWay90
177

Python, 26

print int('bbc',ord("\r"))
Darren Stone
sumber
53
bbc adalah 2014 di base 13
Darren Stone
71
Saya menganggap penggunaan karakter 'bbc' dan penggunaan basis 13 adalah penghargaan Douglas Adams. "Aku mungkin orang yang menyesal, tapi aku tidak menulis lelucon di markas 13."
Brian Minton
10
13 tahun yang lalu. MENINGGAL DUNIA.
Darren Stone
4
IMO, jawaban ini ada di "True Pythonese"
kmonsoor atau
8
@BrianMinton: Penggunaan Basis 13 mungkin karena basis satu-satunya antara 2 dan 36 yang memungkinkan angka 2014 untuk diwakili tanpa salah satu karakter 0- 9.
dan04
146

MATLAB, Scala (4 karakter, 5 byte)

Anda dapat memanfaatkan sistem tipe MATLAB (dan Scala) yang relatif lemah, di sini. Caranya adalah dengan menerapkan +operasi unary pada string yang hanya terdiri dari karakter ߞ(dari UTF-8 kode titik U + 07DE, atau 2014 dalam desimal). Operasi ini secara implisit mengubah string menjadi dobel (dalam MATLAB) dan menjadi Int(dalam Scala):

+'ߞ'

Rincian byte-hitung:

  • + adalah ASCII dan dihitung untuk 1 byte
  • ' adalah ASCII dan dihitung untuk 1 byte (tetapi muncul dua kali dalam ekspresi)
  • ߞ adalah karakter 2-byte UTF-8

Total: 5 byte

TeX (32 26 karakter, sebanyak byte)

\def~{\the\catcode`}~}~\\~\%\bye

Alternatif yang bahkan lebih pendek (diusulkan oleh Joseph Wright ) adalah

\number`^^T\number`^^N\bye

XeTeX / LuaTeX (13 karakter, 14 byte)

Jika XeTeX atau LuaTeX diizinkan, input UTF-8 dapat digunakan secara langsung (seperti yang diusulkan oleh Joseph Wright ):

\number`ߞ\bye
jub0bs
sumber
\let~\number~`^^T~`^^N\bye25 karakter / byte. Anda IMHO menghitung salah, itu 25 untuk solusi Anda juga.
yo '
1
@ Tohecz Saya pikir kedua solusi kami sebenarnya panjangnya 26 byte.
jub0bs
1
Jika tahun ini diinginkan, maka 13 byte:\the\year\bye
yo '
2
+'ߞ'juga bekerja di Scala (dan beberapa bahasa lain yang saya bayangkan)
theon
118

dc, 6 karakter

DiBBCp
  • D menekan 13 pada stack, bahkan input radix awalnya 10
  • i mengubah input radix (menjadi 13 dari 10)
  • BBC adalah 2014 base 13.
  • p cetakan.

Output konsol:

$ dc <<< "DiBBCp"
2014
daniero
sumber
10
Benar, tetapi program dc sebenarnya masih DiBBCp(6 karakter), sisanya hanya cara untuk menjalankannya.
daniero
11
Saya akan mengungguli ini tetapi memiliki 42 poin! menggunakan basis 13 dan kata BBC. Betapa kerennya itu! Tampaknya tahun ini kita akan menemukan pertanyaan untuk kehidupan, alam semesta dan everithing ;-) en.wikipedia.org/wiki/Base_13 . Saya memilih komentar @ daniero sebagai gantinya dan meninggalkan jawaban dengan reputasi 42 yang luar biasa ini ;-)
Pablo Marin-Garcia
4
@ PabloMarin-Garcia, sayangnya beberapa orang yang tidak sadar merusaknya ... Memiliki 43 suara sekarang. Silakan kembali dan turunkan suaranya! :)
Tomas
3
@ Thomas Vogons selalu menjadi Vogons. Perlawanan sia-sia melawan burokrasi intergalaksi.
Pablo Marin-Garcia
2
Saya bahkan tidak dapat menemukan Dperintah di halaman manual. Apa fungsinya? Sudahlah ... D adalah hex untuk 13.
kzh
93

Kode Morse, 23

;)

..--- ----- .---- ....-
DavidC
sumber
21
"dalam bahasa apa pun di mana angka adalah token yang valid"
Doorknob
14
"..---" adalah token yang valid, dalam 5 pukulan, untuk nomor dua, kan? Sama seperti "4" adalah token yang valid, dalam tiga pukulan, untuk nomor "empat".
DavidC
8
Braille bisa lebih pendek :)
Dr. belisarius
31
Poin bagus. Btw, saya lega tidak ada yang bertanya bagaimana saya bisa menjalankan Kode Morse di komputer saya.
DavidC
14
@DavidCarraher Apa maksudmu? Saya berasumsi Anda menggunakan repo ini untuk memecahkan kode itu. github.com/Nyubis/mspa-morse-decoder Semua orang melakukannya ...
Michael J. Calkins
88

72 45 karakter dalam kode; Kode karakter nol

Ini jauh dari jawaban terpendek yang diposting, tetapi belum ada yang mengirim jawaban itu

  • tidak menggunakan kode karakter sebagai pengganti angka, dan
  • tidak memanggil tanggal sistem.

Menggunakan matematika murni (oke, dan konversi boolean otomatis) di R, dari konsol R:

x<-(T+T);x+floor(exp(pi)^x)*x*x-(x*x)^(x*x)/x

Mencetak nomor 2014. Tadalah sinonim yang telah ditentukan sebelumnya untuk true dalam R. floorDan expfungsi langsung tersedia dalam paket dasar, seperti pikonstanta. R tidak memiliki operator kenaikan, tetapi mengulangi (x*x)ternyata menjadi lebih sedikit karakter yang melakukan kenaikan dan penurunan masing-masing dua kali.


Versi asli dalam Javascript (72 karakter)

Untuk alasan sederhana yang bisa saya uji di konsol, dan itu tidak masalah kurangnya ruang kosong:

m=Math;p=m.pow;t=true;++t+m.floor(p(m.exp(m.PI),t))*t*t++-p(++t,t--)/--t

dijalankan di konsol Anda dan itu akan mencetak kembali nomor 2014.


Alat peraga untuk xkcd (dan juga ) untuk membuat saya berpikir tentang exp (pi): e ke pi Minus pi

NB. Jika Anda dapat membuat algoritme yang sama lebih pendek dalam bahasa yang berbeda, poskan komentar dengannya.

AmeliaBR
sumber
1
o =! ""; (o + o) + "" + (oo) + (o + oo) + (o + o + o + o)
Kernel James
4
25 byte: lansiran ('ߞ'. CharCodeAt ())
oberhamsi
1
+1. Namun, Anda mengklaim jawaban Anda adalah jawaban pertama yang "tidak menggunakan kode karakter sebagai pengganti angka, dan tidak menyebut tanggal sistem". Itu sebenarnya salah. Jawaban saya memiliki solusi ini cdd**e-.@(diposting sebelum Anda) yang tidak menggunakan kode karakter atau tanggal sistem. Ini menghitung angka 2014 c. d,, dan emerupakan digit angka heksadesimal. a,, b..., ftekan (masing-masing) 10,11, ... 15 begitu 12 * 13 * 13 - 14juga perhitungannya.
Justin
Ini bukan jawaban pertama untuk tidak menggunakan kode karakter; Saya punya beberapa yang sebelumnya.
Timtech
1
@ Quincunx: Anda benar; membaca sekilas Saya tidak mengetahui bahwa versi Anda menggunakan digit hex, bukan kode karakter.
AmeliaBR
85

Scala REPL

34 29 karakter.

+"Happy new year to you!".sum

Baiklah ok jika Anda benar-benar ingin golf dengan karakter apa pun, Anda dapat menggunakan:

'@'*' '-'"'

atau

"{yz}"map(_-'I'toChar)

yang masing-masing memiliki 11 dan 22 karakter.

Mikaël Mayer
sumber
4
Ide yang menarik, bahkan jika itu tidak golf. Tetapi string itu sendiri membuatnya lebih menarik, daripada sesuatu yang menggunakan byte tinggi, atau sesuatu seperti itu.
Konrad Borowski
Saya menambahkan versi golf.
Mikaël Mayer
Anda dapat menyimpan beberapa karakter dari yang toIntseperti ini: +"Happy new year to you!".sum Tes
theon
Diperbarui. Saya tidak tahu bahwa + juga bisa menjadi awalan.
Mikaël Mayer
68

PHP, 9 byte

Ini membutuhkan PHP 7.1 atau lebih rendah. Ini akan bekerja di PHP 7.2, tetapi akan menghasilkan peringatan. Tidak ada jaminan untuk versi masa depan.

xxddiperlukan karena data biner (jadi menyalin dan menempelkannya akan lebih mudah). Mungkin kembali E_NOTICE, tapi itu tidak masalah, kan?

~ $ xxd -r > 2014.php
0000000: 3c3f 3d7e cdcf cecb 3b                   <?=~....;
~ $ php 2014.php
2014

Atau, simpan ini menggunakan pengkodean ISO-8859-1.

<?=~ÍÏÎË;
Konrad Borowski
sumber
@Quincunx: Mengunggah ini relatif rumit, tetapi di sini adalah Ideone - ideone.com/APHKhn .
Konrad Borowski
1
Ini terlihat menarik; apa fungsinya?
Justin
7
@ Quincunx: Tidak bitwise (0x00 berubah menjadi 0xFF, dan 0x7F berubah menjadi 0x80) pada setiap karakter string. Karena string adalah pengidentifikasi yang valid (apa pun dengan set bit tinggi adalah karakter pengidentifikasi untuk PHP, mungkin untuk mendukung pengkodean lainnya), PHP menganggapnya sebagai konstanta, tetapi karena tidak didefinisikan, string itu memperlakukannya sebagai string.
Konrad Borowski
2
Karena pertanyaannya adalah "Sekarang ini tahun 2014 ...", bagaimana echo date('Y');?
John
6
@ John: Tidak. Jika Anda akan membaca komentar untuk pertanyaan, Anda akan melihat bahwa OP tidak ingin mendapatkan tahun berjalan sebagai jawaban. Selain itu, <?=date(Y);akan ada 11 karakter, dan saya punya solusi dalam 9 karakter.
Konrad Borowski
67

C, 33 byte

main(){printf("%d",'A'*' '-'B');}
Sudharsan Mohan
sumber
19
Betapa menyebalkan bahwa faktorisasi utama tahun 2014 membutuhkan ASCII 5!
Ben Jackson
Saya mendapatkan (int a; YA; a ++) {NSLog (@ "% i", a);} untuk tujuan Cocoa Touch C, tetapi saya belum bisa menambahkan (belum diberi nilai cukup). Itu tidak menunjukkan 2014 akhirnya dan memiliki kesalahan kompiler dan mungkin itu mungkin tidak bekerja sama sekali dan dikompilasi mungkin sekitar 4,2 mc - tapi hei.
Baja Daur Ulang
main () {printf ("% d", '\ a \ xde');}
mjy
1
@mjy Byte, urutan literal multi-karakter tidak dijamin.
Jonathon Reinhart
@JonathonReinhart literal multi-karakter sepenuhnya implementasi-defind.
FUZxxl
54

Mathematica, 14 karakter (atau 15 jika Anda menghitung bitmap sebagai karakter)

TextRecognize @masukkan deskripsi gambar di sini

Michael Stern
sumber
50
Sebenarnya, Anda harus menghitung byte sehingga ukurannya 14+ dari ukuran bitmap.
Sylwester
22
Bitmap mungkin adalah 7.357 karakter, sungguh.
Joe Z.
5
Juga, saya percaya beberapa byte dalam gambar termasuk dalam \djangkauan. Yaitu, jika itu GIF, maka tajuk itu sendiri dijamin mengandung beberapa.
John Dvorak
13
Anda semua sangat senang. Baik, gunakan First @ ToCharacterCode @ "ߞ" untuk 25 karakter, 26 byte.
Michael Stern
9
Sebagai bonus, inilah solusi Mathematica dalam 30 karakter --URLFetch @ " goo.gl/miVwHe "
Michael Stern
53

Python3.4.0b2 (0 byte)

% python3.4  
Python 3.4.0b2 (v3.4.0b2:ba32913eb13e, Jan  5 2014, 11:02:52) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
KAMU
sumber
Ini tidak akan berfungsi setelah orang memperbarui versi Python 3 mereka setahun dari sekarang.
Joe Z.
21
Itu sebabnya saya menyebutkan python3.4.0b2 , itu tidak akan terjadi dua kali. Tanggal rilisnya, bukan tanggal sistem.
KAMU
6
Ini membuatku tersenyum!
Matt Fletcher
2
Juga berfungsi di Python 3.4.2.
Erik the Outgolfer
Anda tidak diizinkan untuk menambah keluaran asing.
MilkyWay90
48

Javascript, 23 byte

Menggunakan Konversi Basis 64

alert(atob("MjAxNA=="))

23 karakter (16 dengan atob dengan sendirinya)

Atau

alert("MMXIV") // ;)
logic8
sumber
27
MMXIVtidak memiliki karakter yang sama dengan 2014, terakhir saya periksa ...// ;)
Joe Z.
23
Orang Romawi kuno mungkin tidak setuju. Yang pertama menghasilkan 2014, dalam bahasa Inggris modern.
logic8
1
Yang pertama Anda tidak menghasilkan meskipun ...
Gagang Pintu
1
jika Anda membuka konsol dalam chrome, rekatkan dan tekan enter untuk mengembalikan nilainya - saya akan menambahkan peringatan kepadanya karena lebih panjang dari yang lain.
logic8
5
@ logic8: Bagus satu +1. Versi JavaScript lain yang juga berfungsi: (4 byte) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);Meskipun saya tidak yakin itu memenuhi Joe Zpersyaratan.
Tidak
41

Perl - 10 karakter

Solusi ini adalah milik BrowserUK pada PerlMonks , meskipun saya telah memotong beberapa tanda baca dan spasi yang tidak perlu dari solusi yang ia posting. Ini agak "tidak" pada string biner empat karakter.

say~"ÍÏÎË"

Karakter yang ditampilkan di atas mewakili oktet biner cd: cf: ce: cb, dan bagaimana mereka muncul di ISO-8859-1 dan ISO-8859-15.

Berikut ini seluruh skrip dalam hex, plus contoh menjalankannya:

$ hexcat ~/tmp/ten-stroke.pl
73:61:79:7e:22:cd:cf:ce:cb:22
$ perl -M5.010 ~/tmp/ten-stroke.pl
2014

Perl (tanpa bit tinggi) - 14 karakter

say'````'^RPQT

Ini menggunakan bitwise "atau" pada dua string empat karakter "RPQT"dan "````"(yaitu, empat backticks).

$ ~/tmp/fourteen-stroke.pl
73:61:79:27:60:60:60:60:27:5e:52:50:51:54
$ perl -M5.010 ~/tmp/fourteen-stroke.pl
2014

(Awalnya saya memiliki dua string sebaliknya, yang membutuhkan spasi putih di antara printdan RPQTuntuk memisahkan token. @DomHastings menunjukkan bahwa dengan mengubah mereka, saya bisa menyelamatkan karakter.)

Perl (curang) - 8 karakter

Ini mungkin bukan dalam semangat kompetisi, tetapi hdb pada PerlMonks telah menunjukkan bahwa Perl menyediakan variabel yang disebut $0yang berisi nama program saat ini sedang dieksekusi. Jika kami diizinkan memberi nama file yang berisi skrip "2014", maka $0akan sama dengan 2014. $0berisi angka, jadi kami tidak dapat menggunakannya secara langsung, tetapi ${...}berisi ekspresi yang bernilai 0 akan baik-baik saja; sebagai contoh:

say${$|}

Untuk konsistensi, mari kita lakukan hexcat-then-perl dengan itu:

$ hexcat 2014
73:61:79:24:7b:24:7c:7d
$ perl -M5.010 2014
2014

Saya pikir ini curang, tapi tetap saja ini solusi yang menarik, jadi layak disebut.

tobyink
sumber
2
Hey there, jika Anda membalik string dan barewords, Anda dapat menyimpan char: print"````"^RPQT. Mungkin juga bisa digunakan saypada 5.10+ menggunakan -E bukannya -e, tapi saya tidak tahu apakah itu menimbulkan penalti +2 untuk args baris perintah yang berbeda?
Dom Hastings
2
Dianggap dapat diterima untuk menentukan bahwa Anda menggunakan Perl 5 dan menggunakan saytanpa penalti.
Peter Taylor
@HomHastings, secara pribadi saya pikir jika Anda akan melakukannya dengan "-e" atau "-E", saya akan mengatakan bahwa Anda harus memasukkan seluruh perintah, termasuk "perl -E" dalam jumlah karakter Anda .
tobyink
1
Jawaban meta yang relevan
Peter Taylor
4
Anda juga dapat menyimpan byte lain dengan menggunakan string literal yang tidak memerlukan tanda kutip, seperti say ABCD^srrp.
Primo
40

Ruby, 20

p 'bbc'.to_i ?\r.ord

Penjelasan: bbcada 2014di basis 13. Lebih pendek dari Python. Tidak sependek Keempat.

Darren Stone
sumber
23
"Tidak ada yang menulis lelucon di base 13!"
Jean-Michaël Celerier
1
? w = $; "^ XA [_AXeMFGIAHJLjKNAEFEJJNHQHNKLAEMINJOJOHLAGKHOJOJ [AG [HQHRFJAH} IHAIGGwIIAHHGwKHAHGHrEUAGQFiGVAGQGfIPAFHKHHbJHAQII] MGASHNSOHATIdIAUJJRLIAWLIQGKAZOFUA] ZAeSAiPAjOAkLA" .codepoints {| r | r = 68; $> << (r <0 ?? \ n: (w = w = =? $? '':? $) * r)}
Darren Stone
1
p 'ߞ'.orduntuk program yang berfungsi penuh, 'ߞ'.orddi dalamnya irb. Bekerja pada 1,9+
Ricardo Panaggio
1
Tanpa karakter unicode "aneh": ?-*?--?\v(45 * 45 - 11) (Ruby 1.8)
Ricardo Panaggio
Satu karakter lebih kecil: ?.*?.-?f(46 * 46 - 102) (Hanya Ruby 1.8 lagi)
Ricardo Panaggio
29

Powershell, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) dihitung sebagai dua byte sesuai dengan info tag kode-golf .

[""]mengembalikan karakter pertama dari string ( ""dikonversi ke 0). Une plus opeartor ( +) mengubah karakter menjadi integer.

Danko Durbić
sumber
1
Menurut codegolf.stackexchange.com/tags/code-golf/info , itu harus dihitung sebagai 9 karakter.
Konrad Borowski
@ GitchMr, terima kasih, saya sudah mengoreksi jawaban saya.
Danko Durbić
3
Ini ['']adalah trik yang bagus. Saya biasanya menggunakan [char]tetapi itu memang lebih pendek :)
Joey
27

Scala REPL - 6 karakter

"?="##

( ##adalah makna simbol Scala hashCode, dan "?="hash string Java hingga 2014.)

Scala REPL - 4 karakter, 5 byte

+'ߞ'

Matematika pada karakter unicode favorit kami menghasilkan Int.

Rex Kerr
sumber
27

Javascript, 18 karakter

alert(btoa('ÛMx'))

Pembaruan: di ES6, menggunakan templat literal dapat menyimpan dua karakter:

alert(btoaMx`)

Kode di atas cukup mudah dipahami dengan mengingat bahwa btoamengubah string menjadi string lain sesuai dengan seperangkat aturan yang terdefinisi dengan baik ( RFC 4648 ). Untuk melihat cara kerja konversi, kita akan menulis string input "ÛMx" sebagai urutan digit biner, di mana setiap karakter dirender sebagai kode karakter 8-bitnya.

Masukkan karakter | Û | M | x
Kode karakter (desimal) | 219 | 77 | 120
Kode karakter (biner) | 11011011 | 01001101 | 01111000

Setelah mengatur ulang angka biner pada baris terakhir dalam grup 6, kita mendapatkan representasi biner dari 4 angka baru, sesuai dengan indeks Base64 dari 4 karakter dalam string "2014".

Indeks Base64 (biner) | 110110 | 110100 | 110101 | 111000
Indeks Base64 (desimal) | 54 | 52 | 53 | 56
Karakter keluaran | 2 | 0 | 1 | 4

Sesuai spesifikasi HTML, karakter keluaran dapat diambil dari indeks Base64 mereka sesuai dengan tabel ini: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Jika Anda tidak peduli dengan detailnya, Anda dapat membiarkan browser melakukan perhitungan untuk Anda dan mengetahui bahwa "ÛMx" adalah hasil dari evaluasi atob('2014')dalam Javascript.

GOTO 0
sumber
pertanyaan menyebutkan mencetak nomor. Saya tahu bahwa evaluasi di konsol akan menghasilkan hasil yang dikembalikan, tetapi pada Code Golf umumnya diharapkan bahwa jawaban JS akan mencakup beberapa bentuk IO ( alertpaling umum).
zzzzBov
@zzzzBov Ya, jawaban asli saya termasuk alertpanggilan.
GOTO 0
Daftar Komunitas yang telah dihapus alert. Saya bertanya-tanya apakah standar telah berubah untuk JS codegolf atau apakah itu hanya perubahan yang diadopsi oleh Komunitas.
zzzzBov
@zzzzBov: Itu adalah perubahan oleh pengguna anonim yang diterima oleh SHiNKiROU dan luser droog. Bagaimanapun juga, suntingan ini memicu diskusi tentang Meta ( meta.codegolf.stackexchange.com/questions/803/… ).
Konrad Borowski
@xfix, Bukan pengeditan ini saja yang menyebabkan saya menanyakan pertanyaan itu pada meta, saya sudah melihat cukup kode golf di mana orang-orang berselisih tentang apakah konsol dev dianggap sebagai pencetakan, yang saya pikir layak meminta standar.
zzzzBov
24

Namun entri GolfScript lain, 9 karakter yang dapat dicetak

Saya percaya ini lebih pendek daripada entri GolfScript yang dapat dicetak sejauh ini:

"!="{*}*)

( Entri 7-char Peter Taylor mengalahkannya, tetapi termasuk karakter kontrol yang tidak dapat dicetak.)

Saya menyebutnya "itu begitu tahun lalu!" entri, karena apa yang sebenarnya dilakukannya adalah menghasilkan angka 2013 dalam 8 karakter, seperti 33 × 61, dan kemudian menambahkannya dengan satu. ;-)

Ilmari Karonen
sumber
Anda menang (untuk skrip golf ascii)
aditsu
21

C (31)

main(){printf("%o",' b'/'\b');}

C (32)

main(){printf("%x%o",' ','\f');}

C (30)

main(){printf("%x",' j'^'~');}

C (30)

main(){printf("%d",'\a\xde');}
fredoverflow
sumber
Bagaimana kalau hanya "%x"dan 'b'*'S'? Itu 8212 des atau 2014 hex. Menghemat satu karakter char satu literal dan dua di string format.
MSalters
@MSalters Tidak, 'b'*'S'adalah 8134. Faktorisasi utama 8212 adalah 2 * 2 * 2053, jadi saya tidak melihat cara mudah untuk memproduksinya.
fredoverflow
Bah, diperiksa dengan pembagian integer yang 8212/'b' == 'S':(
MSalters
dan oktal juga tidak berfungsi (02014 = 1036 = 37 * 28, 28 tidak dapat
dicetak
1
@ FredOverflow bagaimana dengan solusi 28 char saya? main () {puts (__ DATE __ + '\ a');}
Arunprasad Rajkumar
20

Keempat, 14

'> '" * '^ - .      
Darren Stone
sumber
1
Bisakah Anda menjelaskan cara kerjanya?
ProgramFOX
1
Saya menyatakan konstanta integer sebagai literal karakter menggunakan nilai ordinal (ASCII) mereka. Jadi ini adalah: 62 34 * 94 - . Jika Anda tidak berbicara Forth, ini berarti print (62 * 34 - 94).
Darren Stone
Keempat (Gforth 0.7.0), 5 byte, 4 karakter: 'ߞ .Mencetak karakter.
18446744073709551615
20

GolfScript, 14

'-+,/'{)))))}%

Cara kerjanya: ASCII berjalan seperti ini:

...
+
,
-
.
/
0
1
2
3
4
...

Jadi, ini mengambil kode ASCII dari setiap karakter, mengurangi lima, dan menempelkannya dalam sebuah string.

{...}%menghasilkan array karakter string yang dipetakan, saat diberi string sebagai argumen. Jadi, itu menambah setiap karakter dengan 5 ( )berarti kenaikan).

Gagang pintu
sumber
Pada +akhirnya tidak perlu. Selain itu, daripada menambah 5 kali, tambahkan saja lima. Total penghematan: 4 karakter. '-+,/'{5+}%
Justin
15
@ Quincunx, 5adalah angka.
Peter Taylor
5
@PeterTaylor saya selalu lupa.
Justin
Solusi
cerdas
The CJam versi ini: "-+,/"_,)f+. :) (Kemudian lagi, CJam memiliki KD.)
Martin Ender
19

Python, 32 karakter

print ord(',')*ord('-')+ord('"')

Mungkin mungkin untuk menguranginya menggunakan char Unicode 2014 ߞ, tetapi saya tidak mencoba.

Quincunx mencatat itu

a=ord('.');print a*a-ord('f')

lebih pendek dengan tiga karakter.

Bruno Le Floch
sumber
Versi unicode bekerja, setidaknya di Python 3 dengan IDLE: print(ord("ߞ")). Tampaknya tidak berfungsi di Python 2; Python 2 mungkin tidak mendukung unicode.
Justin
3
Juga, dengan versi Anda, a=ord('.');print(a*a-ord('f'))adalah 2 karakter lebih pendek.
Justin
@ Quincunx Itu memang mendukung, namun Anda harus memiliki set pengkodean khusus untuk file Anda dan menambahkan upada akhir string (akan "ߞ"u)
Kroltan
2
@ Kroltan Sebenarnya, saya cukup yakin bagian kedua tidak benar. Dalam Python 2, Anda harus menambahkan string dengan umengatakan bahwa mereka unicode, tetapi dalam Python 3, semua string secara otomatis unicode
murgatroid99
1
Mirip seperti yang dikomentari di atas, tanpa unicode print ord('.')**2-ord('f')sedikit lebih pendek.
MLS
18

APL (6 byte, 4 karakter)

⊃⎕TS

Hanya bekerja tahun ini.

Mengapa ini bekerja:

      ⎕TS
2014 1 1 11 58 5 811
      ⊃⎕TS
2014

Tanpa mengandalkan tanggal sistem, ini 10 byte (7 karakter):

⎕UCS'ߞ'
marinus
sumber
6
Sayangnya, jawaban yang hanya berfungsi untuk tahun ini tidak valid.
Joe Z.
Saya tidak tahu APL: apakah kotak persegi itu adalah char APL, atau apakah saya kehilangan representasi font (Chrome)?
Carl Witthoft
@ Joz .: Pertanyaannya tidak mengatakan itu, tetapi saya telah menambahkan satu yang tidak bergantung pada itu menjadi 2014.
marinus
4
@CarlWitthoft: Ini disebut quad ( ), seharusnya terlihat seperti itu.
marinus
18

Python 32 10 byte, 91 85 (66 dengan mathimpor secara default) byte murni matematika

Bersenang-senang menulis ini:

my_lst = []
for i in range(33, 126):
    for j in range(i, 126):
        if 2014 - 126 < i * j < 2014 - 33:
            if j not in range(48, 58):
                my_lst.append("ord('" + unichr(i) +
                              "')*ord('" + unichr(j) +
                              "')+ord('" + unichr(2014 - i * j) + "')")

for val in my_lst:
    print val, '->', eval(val)

Mencetak semua cara yang bisa saya tulis 2014menggunakan metode Bruno Le Floch (32 karakter):

ord('!')*ord(':')+ord('d') -> 2014
ord('!')*ord(';')+ord('C') -> 2014
ord('!')*ord('<')+ord('"') -> 2014
ord('"')*ord(':')+ord('*') -> 2014
ord(')')*ord('/')+ord('W') -> 2014
ord('*')*ord('-')+ord('|') -> 2014
ord('*')*ord('.')+ord('R') -> 2014
ord('*')*ord('/')+ord('(') -> 2014
ord('+')*ord(',')+ord('z') -> 2014
ord('+')*ord('-')+ord('O') -> 2014
ord('+')*ord('.')+ord('$') -> 2014
ord(',')*ord(',')+ord('N') -> 2014
ord(',')*ord('-')+ord('"') -> 2014

Tetapi ini jelas berlebihan, jadi jika penerjemah Anda diatur ke utf-8 secara default, maka yang diperlukan hanyalah:

>>> ord(u'ߞ')
2014

Juga terima kasih AmeliaBR (untuk idenya), saya mencoba yang terbaik untuk mengimplementasikan versi matematika murni:

from math import*
a,b,c=int(e),round(e),ceil(pi);print int(a**(b*c-(c-b))-a*a**c-a)
Deneb
sumber
ord (',') ** 2 + ord ('N')
MLS
6
@ MLS Yah, itu memiliki angka di dalamnya :)
Joachim Isaksson
2
Saya sedikit mengoptimalkan versi matematika Anda:, a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-adan Anda dapat menghilangkan impor matematika sama sekali dengan memanfaatkan fakta bahwa Truedalam Python 2.x identik dengan integer 1 yang sedang beroperasi, membawanya ke 50 karakter:o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
Ponkadoodle
Anda dapat menyimpan karakter jika menggunakan Python 3:ord('ߞ')
asmeurer
@ JoachimIsaksson Digit tidak ada nomor;)
Mega Man
17

R (20 karakter)

@popojan (dia belum diizinkan mengirim jawaban di sini) telah memberikan solusi dalam 20 karakter.

sum(T+T:exp(T+pi))-T

Keluaran:

> sum(T+T:exp(T+pi))-T
[1] 2014

R (22 karakter)

Pengguna anonim menyarankan solusi yang lebih pendek.

strtoi("bbc",pi*pi+pi)

2014ada BBCdi basis 13. pi*pi+pi(= 13.0112) diperlakukan oleh R dalam konteks ini sebagai bilangan bulat 13. Output:

> strtoi("bbc",pi*pi+pi)
2014

R (30 karakter)

Terima kasih kepada @Tomas!

cat(a<-T+T,T-T,T/T,a*a,sep="")

Keluaran:

> cat(a<-T+T,T-T,T/T,a*a,sep="")
2014

R (31 karakter)

cat(T+T,T-T,T/T,T+T+T+T,sep="")

Terinspirasi dari jawaban oleh AmeliaBR . Keluaran:

> cat(T+T,T-T,T/T,T+T+T+T,sep="")
2014
djhurio
sumber
Wow, +1! Dan saya berharap solusi angka romawi saya akan menjadi yang terbaik ... :( ;-)
Tomas
Varian di bawah ini dapat dibuat lebih pendek: cat(a<-T+T,T-T,T/T,a^a,sep="")(30 karakter), paste0(aT+T,T-T,T/T,a^a)(26 karakter)
Tomas
@ Thomas, fungsi paste0ini tidak diizinkan, karena mengandung simbol 0. Solusi Anda menghasilkan 30 karakter jika menggunakan cat.
djhurio
buat file 2014di direktori saat ini dan tulis list.files()- 12 karakter
Zbynek
@ Zbynek, saya berharap solusi Anda tidak valid dalam lingkup umum aturan codegolf.
djhurio
15

Jawa - 77 75 karakter

75 karakter jika printditambahkan dalam kelas dengan metode utama:

class C{public static void main(String[]a){System.out.print('#'*'<'-'V');}}

Artinya 35*60-86sama dengan 2014

Benar Lembut
sumber
2
Saya suka formula Anda.
Johannes
7
Ini sebenarnya perlu lebih lama, karena definisi kelas perlu di dalamnya untuk dijalankan. Cara terpendek yang saya tahu (dengan Java 6):class a{static{System.out.println('#'*'<'-'V');}}
Justin
1
@ Quincunx, dengan Java 7, metode utama diperlukan
True Soft
2
@ TrueSoft Note Saya mengatakan "dengan Java 6". Anda harus memilih Java sesingkat mungkin.
Justin
2
Anda dapat menghapus 'ln' di println untuk mengurangi karakter ...
laksys