Kaynak kodunuzda numarasız 2014 sayısını üretin


579

Yazarlara meta konsensüs uyarınca meydan okumaya dikkat edin : Bu soru, gönderildiği zaman iyi karşılandı, ancak bu gibi zorlukların, Y kullanmadan cevaplayıcılardan Y kullanmadan Do X'e yanıt almasını isteme olasılığı çok düşük. Benzer bir sorunla karşılaşmak istiyorsanız geri bildirim almak için sanal alanı kullanmayı deneyin .


Bu var 2017 2018 zaten 2019, millet, evinize gidin.

Şimdi, 2014 oldu, 2014 sayısını içeren bir kod sorusu zamanı.

Göreviniz , kodunuzdaki 2014karakterlerden herhangi birini kullanmadan 0123456789ve tarih, saat veya rastgele bir tohum gibi herhangi bir harici değişkenden bağımsız olarak , sayıyı basan bir program yapmaktır .

Sayıların geçerli belirteçleri kazandığı herhangi bir dilde bunu yapmak için en kısa kod (bayt sayma).


Liderler Sıralaması:


10
Beyin sapağında sayılar göz ardı edilse de, yine de bir tane göndereceğimi düşündüm. 32 Chars:++++++[>++++++++<-]>++.--.+.+++.
Braden En İyi

4
Brainfuck bu meydan okuma için geçerli bir dil değil.
Joe Z.

8
Merak ediyorum, bu sorunun Yeni Yıl civarında popülaritesinde küçük bir artış olup olmadığını merak ediyorum.
Joe Z.

3
"Hadi millet, 2016'nın farkında değil misiniz?" :)
padawan

1
@BradenBest En az iki farklı şekilde 31 karakterde yapmak mümkündür: +++++++ [> +++++++ <-]> + .--. +. +++. ve ++++++++++ [> +++++ <-]> .--. +. +++.
Zubin Mukerjee

Yanıtlar:


126

Fare-2002 , 4 bayt.

Bu 4 bayt saf, tatlı ASCII.

In Fare , alfabenin harfleri değerlerine 0-25 kadar ilklendirildikten. !baskı tamsayılar için operatör, böylece bu baskılar olduğunu 20o zaman 14(hayır aralıklı satır).

U!O!

Kullanılabilir çevrimiçi tercüman yoktur, ancak burada C dilinde yazılmış bir tercüman bulacaksınız ( gccderlemek için zorlayabilmesi için önce bazı tweaks'lara ihtiyaç duyacaksınız ) ve aynı şekilde derlenmiş tercümanı Win32Linux için mükemmel bir şekilde çalıştırabilir wine.

Burada derleyen tercümanın sabit sürümünü bulabilirsiniz.


7
Vay canına, bu mücadeleden sonra çok daha sonra inanılmaz bir keşif. Ve çok ezoterik bir dil ile buradaki hiç kimse henüz duymamıştı!
Joe Z.

3
Btw: bu CJam ile aynı şeyi yapar KE, ancak aslında geçerlidir çünkü 2014'ten önce bir dil.
Joe Z.

7
Şu an yüzümdeki kendini beğenmiş bakış, Python’un bazı savunucularını en hızlı şekilde attıktan sonra Fortran-77 büyücüsüne benziyor .
kedi,

56
Bu bir kedi ve fare 2002 yılı.
Dijital Travma

5
Gerçekten: @DigitalTrauma: 3
kedi

1300

Python, 52 bayt

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

@Frg sayesinde 2015 yılında güncellendi:

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

2016 versiyonunu görmek için farenin üzerine getirin:

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

Çevrimiçi deneyin!


186
Akıllılık ödülü hak ediyorsun
Carter Pape

167
vay - bu çok bu sorunun ruhu içinde. <3
Johannes

80
"! Mutlu yeni yıl" Ben yılın 1374. için mükemmel olurdu sadece 4 cümle Peşinde çalıştı olduğuna biraz şaşırdım
dansalmo

55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') Bekle bir yıl geciktim. Bu 2013.
Warren P

164
sum(map(ord,'Happy new year to you!'))7 karakter kaydederdi.

243

Befunge 98 - 17 11 9 8 bayt

'-:*b-.@

Eski sürüme benzer, ancak hatırladım '

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

İlginç bir şekilde, 45 2 -11, a, b sayılarının tek eşleşmesidir ( Bu setlerin önemi [32,126 ] yazdırılabilir ascii karakterleri kümesidir ve [10,15] kolayca erişilebilen Befunge sayıları kümesidir. Bu çifti bu python programında buldum :

(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))

Veya, tercümanınız unicode'u destekliyorsa, bu işe yarar:

Befunge 98 - 5 bayt (4 karakter)

'ߞ.@

En azından http://www.quirkster.com/iano/js/befunge.html adresinde aşağıdaki kodla çalışır (Befunge 93 - 6 bytes / 5 chars):

"ߞ".@

Eski versiyon

cdd**e-.@

sayıyı hesaplar, sonra yazdırır:

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

Eski versiyon:

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

2014, -10 için ascii değerlerini zorlar. Sonra her birine 10 ekledikten sonra yazdırır.


78
en.wikipedia.org/wiki/Befunge ... bu ne dediğim bile değil ...
Plato

36
"Dil, aslen Chris Pressey tarafından 1993'te, mümkün olduğunca derlenmesi zor bir dil tasarlama çabası olarak yaratıldı" ...
olacaktır

7
@ 11684 Çıktı, soruda oldukça iyi tanımlanmış. Bir program yazdırılırsa: randomstuff2randomstuff0randomstuff1randomstuff4Geçerli bir çözüm olarak düşünmezdim.
Cruncher

7
@Plato Befunge 98 hakkında bilgi edinmek istiyorsanız, (sadece Befunge 93'ü içeren) wikipedia makalesini okumak yerine , resmi bilgileri
Justin

3
Wiki: '1993 yılında Chris Pressey tarafından mümkün olduğunca derlenmesi zor bir dil tasarlama çabası olarak oluşturuldu.
Kuzen Kokain

239

Ruby, 15

p Time.new.year

Geçici;)


Sorunun bölümünü unutmayın.

Tarih veya saat veya rastgele tohum gibi harici değişkenlerden bağımsız olarak

cevabımı gönderdikten sonra çok uzun zaman önce düzenlenmemiş ...


Jan Dvorak yorumlarda harika bir alternatif sunuyor :

Happy = Time
Happy.new.year

Ama o kadar hevesli değil. Tercih ederim:

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

Happy.new.year!

Ya da:

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!

Ve işte doğru İngilizce noktalama işaretleri:

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!

Tamam tamam, yardım edemedim:

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!

168
Happy = Time; Happy.new.year
John Dvorak

5
@ hobbs Hayır öyle değil; soru bu konuda hiçbir şey
söylemez

12
Bu sadece bir süre doğru çalışacaktır.
14'te hippietrail

119
Bugüne kadar tüm testlerde iyi çalıştı
CoderTao

7
Sorunun ruhunun şu an [bu yıl 2014 olacak olan] yıl olduğunu söylemek olduğuna inanıyorum. Bu nedenle bu çözüm zaman içinde kabul edilenden daha "taşınabilir";). Siz (ve Jan Dvorak) oyumu aldınız!
Olivier Dulac

223

Git, 2 bayt (UTF-16)

Bir unicode karakter (UTF-16'da 2 bayt, UTF-8 formatında 3 bayt), 2014'ün bir hatanın parçası olarak çıktı

http://ideone.com/dRgKfk

can't load package: package : 
prog.go:1:1: illegal character U+2014 '—'

7
Çok zekice, ama soru sayıyı basan bir program istiyor.
HelloGoodbye

40
Basılı hata kodları geçerliyse, bu gönderinin kazanması gerekir.
ToastyMallows,

37
+1. Soru, " sadece sayıyı basar ve başka bir şey basmaz" demez .
Kaz

1
Geçerli olup olmaması umrumda değil, çok güzel.
Redwolf Programları


177

Python, 26

print int('bbc',ord("\r"))

53
bbc 13, üsse 2014
Darren Stone

71
'Bbc' karakterlerinin kullanımı ve üs 13'ün kullanımı bir Douglas Adams ödülü olduğunu farz ediyorum. "Üzgünüm bir dava olabilirim, ancak 13 numaraya şaka yapmıyorum."
Brian Minton

10
13 yıl önce. HUZUR İÇİNDE YATSIN.
Darren Stone

4
IMO, bu cevap "Gerçek Pythonese" içinde
kmonsoor

8
@BirtonMinton: Base 13'ün kullanılması, muhtemelen, 2014 sayısının, herhangi bir karakter olmadan temsil edilmesine izin veren, 2 ile 36 arasındaki tek temel olduğu içindir 0- 9.
dan04,

146

MATLAB, Scala (4 karakter, 5 bayt)

Burada MATLAB'ın (ve Scala'nın) nispeten zayıf tip sisteminden yararlanabilirsiniz. İşin püf noktası, unary +işlemini sadece karakterden oluşan bir dizgede uygulamaktır ߞ(UTF-8 kod noktası U + 07DE veya 2014'te ondalık). Bu işlem, dizgiyi bir ikiye (MATLAB'de) ve bir Int(Scala'da) dönüştürür:

+'ߞ'

Bayt sayısı ayrıntıları:

  • + ASCII ve 1 bayt için sayar
  • ' ASCII ve 1 bayt için sayım yapar (ancak ifadede iki kez görünür)
  • ߞ 2 bayt UTF-8 karakteri

Toplam: 5 bayt

TeX (32 26 karakter, birçok bayt)

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

Daha kısa bir alternatif ( Joseph Wright tarafından önerilen )

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

XeTeX / LuaTeX (13 karakter, 14 bayt)

XeTeX veya LuaTeX'e izin verilirse, UTF-8 girişi doğrudan kullanılabilir ( Joseph Wright tarafından önerildiği şekilde ):

\number`ߞ\bye

\let~\number~`^^T~`^^N\bye25 karakter / bayt. IMHO yanlış sayıyorsunuz, çözümünüz için de 25.
yo'

1
@ tohecz Sanırım her iki çözümümüz de aslında 26 bayt uzunluğunda.
jub0bs

1
Cari yıl isteniyorsa, 13 bayt:\the\year\bye
yo '

2
+'ߞ'Ayrıca Scala'da (ve hayal ettiğim birkaç dilden) çalışır
Ocak'ta

118

dc, 6 karakter

DiBBCp
  • D başlangıçta giriş yarıçapı 10 olsa bile, yığında 13 iter
  • i giriş yarıçapını değiştirir (13'ten 10'a)
  • BBC 2014 yılı 13'tür.
  • p baskılar.

Konsol çıkışı:

$ dc <<< "DiBBCp"
2014

10
Doğru, ancak gerçek dc programı hala DiBBCp(6 karakter), gerisi ise onu çalıştırmanın bir yoludur.
daniero,

11
Bunu oylayacaktım ama 42 puanı var! 13 tabanını ve BBC kelimesini kullanır. Ne kadar serin! Bu yıl yaşam, evren ve sonsuzluk sorununu bulacağımız anlaşılıyor ;-) en.wikipedia.org/wiki/Base_13 . @ Daniero'nun yorumunu yerine getiriyorum ve cevabı bu görkemli 42 ününe bıraktım ;-)
Pablo Marin-Garcia

4
@ PabloMarin-Garcia, maalesef bazı habersiz bir kişi onu kırdı ... Şimdi 43 oy kullandı. Lütfen geri dönün ve oy verin! :)
Tomas

3
@Tomas Vogons her zaman Vogons. Direniş, galaksiler arası bürokrasiye karşı boşuna.
Pablo Marin-Garcia,

2
DKomutu man sayfasında bile bulamıyorum . Bu ne işe yarıyor? Aldırma ... D 13 için altıgendir.
kzh

93

Mors Kodu, 23

;)

..--- ----- .---- ....-

21
"Sayıların geçerli belirteçleri olduğu herhangi bir dilde"
Doorknob

14
"..---" iki vuruş için 5 vuruşta geçerli bir simgedir, değil mi? Tıpkı "4", üç vuruşta "dört" sayısı için geçerli bir simgedir.
DavidC

8
Braille daha kısa olabilir :)
Dr. belisarius

31
İyi bir nokta. BTW, kimsenin Mors Kodunu bilgisayarımda çalıştırmasını istemediğimi sormadım.
DavidC

14
@DavidCarraher Ne demek istiyorsun? Doğal olarak, kodunu çözmek için bu depoyu kullandığını varsaydım. github.com/Nyubis/mspa-morse-decoder Herkes yapıyor ...
Michael J. Calkins

88

72 Koddaki 45 karakter; Sıfır karakter kodları

Bu, gönderilen en kısa cevaptan çok uzak, ancak henüz hiç kimse bir cevap yazmadı.

  • karakter kodlarını sayıların yerine kullanmaz ve
  • sistem tarihini aramaz.

R konsolundan saf matematik (tamam ve otomatik bir boole dönüşümü) kullanarak R konsolu:

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

2014 sayısını yazdırır T. R'de true için önceden tanımlanmış bir eşanlamlıdır floorve expişlevler pisabit olduğu gibi doğrudan temel pakette bulunur . R bir artım işleci içermez, fakat tekrarlanan (x*x)her biri iki kez artan ve azaltan daha az karakter olduğu ortaya çıktı.


Javascript'teki orijinal versiyon (72 karakter)

Konsolda test edebilmemin basit bir nedeni var ve bu da tam bir beyaz boşluk eksikliğini önemsemiyor:

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

Konsolunuzda çalıştırın ve 2014 sayısını geri yazdıracak.


Exp (pi) hakkında düşünmemi sağladığı için xkcd'ye (ve ayrıca ) aittir : e eksi pi için

PS Eğer aynı algoritmayı farklı bir dilde kısaltabilirseniz, onunla bir yorum yapın.


1
o =! ""; (o + o) + "" + (oo) + (o + oo) + (o + o + o + o)
Kernel James

4
25 bayt: alert ('ߞ'. CharCodeAt ())
oberhamsi

1
+1. Bununla birlikte, cevabınızın "rakamların yerine karakter kodlarını kullanmayan ve sistem tarihini aramayan" ilk cevap olduğunu iddia edersiniz. Bu aslında yanlıştır. Cevabım , cdd**e-.@karakter kodlarını veya sistem tarihini kullanmayan bu çözüme (sizinkinden önce gönderilen) sahiptir. Bu sayı 2014 hesaplar c, dve eonaltılık sayı basamak vardır. a,, b..., fbas (sırasıyla) 10,11, ... 15 öyleyse 12 * 13 * 13 - 14hesaplama.
Justin

Karakter kodlarını kullanmamak için ilk cevap bu değildi; Daha önce birkaç tane var.
Timtech

1
@ Quincunx: haklısın; gözden kayma Sürümünüzün karakter kodlarını değil onaltılık sayıları kullandığını anlamadım.
AmeliaBR

85

Scala REPL

34 29 karakter.

+"Happy new year to you!".sum

Tamam, gerçekten herhangi bir karakterle golf oynamak istiyorsanız, kullanabilirsiniz:

'@'*' '-'"'

veya

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

sırasıyla 11 ve 22 karaktere sahip.


4
İlginç bir fikir, özellikle de golf olmasa bile. Ancak dizginin kendisi, yüksek bayt kullanan bir şeyden veya onun gibi bir şeyden daha ilginç kılar.
Konrad Borowski

Golf versiyonunu ekledim.
Mikaël Mayer,

Sen bir kaç karakterleri kurtarabilecek toInt: benzeri bu +"Happy new year to you!".sum Testi
Theon

Güncellenmiş. + 'Nın bir ön ek olabileceğini de bilmiyordum.
Mikaël Mayer,

68

PHP, 9 bayt

Bu PHP 7.1 veya daha düşük gerektirir. PHP 7.2'de çalışacak, ancak bir uyarı ile sonuçlanacaktır. Gelecekteki sürümler için hiçbir garanti yok.

xxdİkili veriler nedeniyle gerekli (bu nedenle kopyalamak ve yapıştırmak daha kolay olurdu). Dönebilir E_NOTICE, ama gerçekten önemli değil, değil mi?

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

Alternatif olarak, ISO-8859-1 kodlamasını kullanarak bunu kaydedin.

<?=~ÍÏÎË;

@ Quincunx: Bunu yüklemek oldukça zordu, ama ideone - ideone.com/APHKhn .
Konrad Borowski

1
Bu ilginç görünüyor; bu ne işe yarıyor?
Justin

7
@Quincunx: Dizenin her karakterinde bitsel değil (0x00 0xFF olarak değişir ve 0x7F 0x80 olarak değişir). Dize geçerli bir tanımlayıcı olduğundan (yüksek bit ayarlı herhangi bir şey PHP için, muhtemelen diğer kodlamaları desteklemek için tanımlayıcı bir karakterdir), PHP bunun sabit olduğunu düşünür, ancak tanımlanmadığı için onu bir dize olarak kabul eder.
Konrad Borowski

2
"Şimdi 2014 oldu ..." sorusundan beri, peki ya echo date('Y');?
John

6
@John: Hayır. Soruyla ilgili yorumları okuyacak olursanız, OP'nin mevcut yılı cevap olarak almak istemediğini fark edersiniz. Ayrıca <?=date(Y);11 karakter olur ve 9 karakterde çözümüm olur.
Konrad Borowski,

67

C, 33 bayt

main(){printf("%d",'A'*' '-'B');}

19
2014'ün ana çarpanlaştırmasının ASCII 5'i gerektirmesi ne kadar sinir bozucu!
Ben Jackson

(İnt a; YES; a ++) {NSLog (@ "% i", a);} Cocoa Touch hedefi C için aldım ancak henüz ekleyemiyorum (yeterince derecelendirmedim). Sonunda 2014 gösteriyor ve bir derleyici hatası var ve hiç çalışmayabilir ve derlenmiş olabilir yaklaşık 4.2 meg - ama hey.
Geri Dönüşümlü Çelik,

main () {printf ("% d", '\ a \ xde');}
mjy

1
@mjy Byte çok karakterli değişmezlerin sıralaması garanti edilmez.
Jonathon Reinhart

@JonathonReinhart çok karakterli değişmezler tamamen uygulamadan mahrumdur.
FUZxxl

54

Mathematica, 14 karakter (veya bitmap'i karakter olarak sayarsanız 15)

TextRecognize @görüntü tanımını buraya girin


50
Aslında, bayt saymanız gerekir, böylece bitmap görüntünün boyutu 14 + olur.
Sylwester

22
Bitmap, muhtemelen 7,357 karakter olur.
Joe Z.

5
Ayrıca görüntüdeki bazı baytların \daralığa girdiğine inanıyorum . Yani, eğer GIF ise, başlığın kendisinin bir miktar içereceği garanti edilir.
John Dvorak

13
Hepiniz öldürücülersiniz. Tamam, First @ ToCharacterCode @ "ߞ" 25 karakter, 26 bayt kullanın.
Michael Stern

9
Bonus olarak, işte 30 karakterlik bir Mathematica çözümü. --URLFetch @ " goo.gl/miVwHe "
Michael Stern

53

Python3.4.0b2 (0 bayt)

% 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.
>>> 

İnsanlar bundan böyle yılda bir kez Python 3 versiyonlarını güncellediklerinde işe yaramaz.
Joe Z.

21
Bu yüzden python3.4.0b2 den bahsetmiştim , iki kez olmaz. Çıkış tarihi, sistem tarihi değil.
SİZ

6
Bu beni güldürdü!
Matt Fletcher

2
Ayrıca Python 3.4.2 de çalışır.
Outgolfer Erik

Fazladan çıktı eklemenize izin verilmiyor.
MilkyWay90

48

Javascript, 23 bayt

Base 64 Dönüşüm kullanır

alert(atob("MjAxNA=="))

23 karakter (16 kendinden atob ile)

Veya

alert("MMXIV") // ;)

27
MMXIVile ortak hiçbir karakterim yok 2014, en son kontrol ettiğim ...// ;)
Joe Z.

23
Eski Romalılar aynı fikirde olmayabilir. Bunlardan ilki 2014 yılında modern İngilizceyi üretiyor.
mantık8

1
Bunlardan ilki çıktı değil ...
Doorknob

1
konsolu krom olarak açarsanız, yapıştırın ve çarptığınızda enter değerini döndürür - yine de diğerlerinden daha uzun bir süre için bir uyarı ekleyeceğim.
mantık8

5
@ mantık8: Güzel bir + 1. Aynı zamanda çalışan başka bir JavaScript versiyonu: (4 bytes) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- Gereksinimlerini alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);karşıladığından emin olmasam da Joe Z.
Hayır

41

Perl - 10 karakter

Bu çözüm, BrowserUK’un PerlMonks’a nezaketinde bulundu , ancak yayınladığı çözümden bazı gereksiz noktalama işaretleri ve boşluklar bıraktım. Dört karakterli bir ikili dizgede bit cinsinden "değil".

say~"ÍÏÎË"

Yukarıda gösterilen karakterler, ikili oktet cd: cf: ce: cb'yi temsil eder ve bunların ISO-8859-1 ve ISO-8859-15'te nasıl göründüğüdür.

İşte hex içinde tüm script, artı çalışan bir örnek:

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

Perl (yüksek bitler olmadan) - 14 karakter

say'````'^RPQT

Bu iki dört karakter dizeleri üzerinde ikilik "veya" kullanır "RPQT"ve "````"(yani, dört backticks olduğunu).

$ ~/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

(Başlangıçta arasındaki boşluk gerekli olan tersi iki dizeyi vardı printve RPQT@DomHastings etrafında duruma getirerek ben bir karakter kurtarabilecek dikkat çekti belirteçleri ayırmak için..)

Perl (hile) - 8 karakter

Bu muhtemelen yarışmanın ruhu içinde değildir, ancak PerlMonks'teki hdb, Perl'in$0 yürütülmekte olan programın adını içeren bir değişken sağladığına dikkat çekti . Eğer "2014" betiğini içeren dosyayı isimlendirmemize izin verilirse, o $0zaman 2014'e eşit olacaktır. $0Bir rakam içerir, bu yüzden doğrudan kullanamayız, ancak ${...}0 olarak değerlendirilen bir ifade içeren bir şey olmaz; Örneğin:

say${$|}

Tutarlılık için, hexcat-then-perl olayını şununla yapalım:

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

Bence bu aldatma, ama yine de söylemeye değer, ilginç bir çözüm.


2
Eğer dize ve barewords ters eğer Selam, bir char kaydedebilirsiniz: print"````"^RPQT. say-E yerine -E kullanarak 5.10+ üzerinde de kullanmak mümkün olabilir , ancak bunun farklı komut satırı argümanları için +2 para cezası getirip getirmediğini bilmiyorum?
Dom Hastings

2
Perl 5 kullandığınızı belirtmek ve sayceza almak için kullanmamanız kabul edilir .
Peter Taylor

@DomHastings, şahsen "-e" veya "-E" ile yapacaksanız, karakter sayınıza "perl -E" dahil tüm komutu eklemeniz gerektiğini düşünüyorum. .
Ocak'ta


4
Ayrıca, örneğin tırnak işaretleri gerektirmeyen dize değişmezleri kullanarak başka bir baytı kaydedebilirsiniz say ABCD^srrp.
primo

40

Ruby, 20

p 'bbc'.to_i ?\r.ord

Açıklama: bbcbir 2014taban 13 Python daha kısa olarak. Forth kadar kısa değil.


23
İnternethaber.com "Hiç kimse 13 numarada şaka yapmaz!"
Jean-Michaël Celerier

1
? W = $; "^ XA [_AXeMFGIAHJLjKNAEFEJJNHQHNKLAEMINJOJOHLAGKHOJOJ [AG [HQHRFJAH} IHAIGGwIIAHHGwKHAHGHrEUAGQFiGVAGQGfIPAFHKHHbJHAQII] MGASHNSOHATIdIAUJJRLIAWLIQGKAZOFUA] ZAeSAiPAjOAkLA" .codepoints {| r | R- = 68; $> << (r <0 ?? \ n: (a = a = =? $? '':? $) * r)}
Darren Stone

1
p 'ߞ'.ordtamamen işlevsel bir program için 'ߞ'.ordiçeride irb. 1.9+ üzerinde çalışıyor
Ricardo Panaggio

1
"Tuhaf" unicode karakterler olmadan: ?-*?--?\v(45 * 45 - 11) (Ruby 1.8)
Ricardo Panaggio

Bir karakter daha küçük: ?.*?.-?f(46 * 46 - 102) (Sadece Ruby 1.8)
Ricardo Panaggio

29

Powershell, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) kod-golf etiketi bilgisine göre iki bayt olarak sayılır .

[""]dizeden ilk karakteri döndürür ( ""dönüştürülür 0). Unary plus opeartor ( +) karakteri bir tam sayıya dönüştürür.



@GlitchMr, teşekkürler, cevabımı düzelttim.
Danko Durbić

3
['']Güzel bir hile. Genelde kullandım [char]ama bu gerçekten daha kısa :)
Joey

27

Scala REPL - 6 karakter

"?="##

( ##Scala'nın sembol anlamı hashCodeve Java dizesi "?="2014'e göre değişiyor.)

Scala REPL - 4 karakter, 5 bayt

+'ߞ'

Bizim favori unicode karakterimizdeki matematik bir üretir Int.


27

Javascript, 18 karakter

alert(btoa('ÛMx'))

Güncelleme: ES6'da bir hazır bilgi şablonu kullanarak iki karakter kaydedebilirsiniz:

alert(btoaMx`)

Yukarıdaki kodun btoa, bir dizgiyi bir dizi iyi tanımlanmış kurala göre başka bir dizgiye dönüştürdüğünü akılda tutmak oldukça kolaydır ( RFC 4648 ). Dönüşümün nasıl çalıştığını görmek için, "ÛMx" giriş dizesini, her karakterin 8 bitlik karakter kodu olarak işlendiği bir ikili basamak dizisi olarak yazacağız.

Giriş karakteri | Û | M | x
Karakter kodu (ondalık) | 219 | 77 | 120
Karakter kodu (ikili) | 11011011 | 01001101 | 01111000

Son satırdaki ikili sayıları 6'lık gruplar halinde yeniden düzenledikten sonra, "2014" dizesindeki 4 karakterin Base64 endekslerine karşılık gelen 4 yeni sayının ikili gösterimini elde ederiz.

Base64 dizini (ikili) | 110110 | 110100 | 110101 | 111000
Base64 dizini (ondalık) | 54 | 52 | 53 | 56
Çıkış karakteri | 2 | 0 | 1 | 4

HTML spesifikasyonuna göre, çıktı karakterleri bu tabloya göre Base64 endekslerinden alınabilir: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Ayrıntıları umursamıyorsanız, tarayıcının sizin için hesaplamaları yapmasına izin verebilir ve "ÛMx" atob('2014')in Javascript'te değerlendirmenin sonucu olduğunu öğrenebilirsiniz .


soru, numarayı basmaktan söz ediyor. Konsoldaki değerlendirmenin sonucun geri dönmesine yol açacağını biliyorum, ancak Code Golf'da genellikle JS cevaplarının bir tür IO içermesi bekleniyor ( alerten yaygın olanı).
zzzzBov

@zzzzBov Evet, orijinal cevabım bir alertarama içeriyordu .
GOTO 0

Topluluk kaldırılmış olarak listeler alert. JS codegolf için standartların değişip değişmediğini veya bunun Topluluk tarafından kabul edilen bir değişiklik olup olmadığını merak ediyorum.
zzzzBov

@zzzzBov: SHiNKiROU ve luser droog tarafından kabul edilen isimsiz bir kullanıcı tarafından değiştirildi. Neyse, bu düzenleme Meta hakkında bir tartışma başlattı ( meta.codegolf.stackexchange.com/questions/803/… ).
Konrad Borowski

@xfix, Bu soruyu meta üzerinde sormamı sağlayan tek başına bir düzenleme değil, insanların dev konsolun baskı olarak sayılıp sayılmayacağı konusunda bir anlaşmaya vardığı, bir standart istediğinin farkına vardığı konusunda anlaşmazlığa düştüğü yeterince kod golfü gördüm.
zzzzBov

24

Yine bir başka GolfScript girişi, 9 basılabilir karakter

Bunun şu ana kadar yazdırılabilir GolfScript girişlerinden daha kısa olduğuna inanıyorum:

"!="{*}*)

( Peter Taylor'ın 7 karakterli girişi onu atıyor, ancak yazdırılamayan kontrol karakterlerini içeriyor.)

Buna "bu çok geçen yıl!" Diyorum . çünkü aslında yaptığı şey 2013 sayısını 8 karakterde, 33 × 61 olarak üretmek ve ardından birer birer arttırmaktır. ;-)


Sen kazandın (ascii golfscript için)
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');}

Nasıl hemen "%x"ve 'b'*'S'? Bu 8212 dec veya 2014 hex. Bir karakter bir değişmezini ve iki tane de biçim dizgisine kaydeder.
MSalters

@ MSalters No 'b'*'S'8134'tür. 8212'nin ana çarpanlara ayırması 2 * 2 * 2053'tür, bu yüzden onu üretmek için kolay bir yol göremiyorum.
fredoverflow,

Bah, tamsayı bölümü ile kontrol edildi 8212/'b' == 'S':(
MSalters

ve sekizli de çalışmaz (02014 = 1036 = 37 * 28, 28 yazdırılamaz)
MSalters

1
@FredOverflow 28 char çözümüm ne olacak? main () {koyar (__ DATE __ + '\ a');}
Arunprasad Rajkumar

20

İleri, 14

'> '" * '^ - .      

1
Bunun nasıl çalıştığını açıklayabilir misiniz?
ProgramFOX

1
Tamsayı sabitlerini sıralı (ASCII) değerlerini kullanarak karakter değişmezleri olarak ifade ediyorum. Öyleyse şudur: 62 34 * 94 - . Eğer Forth bilmiyorsanız, bunun anlamı print (62 * 34 - 94).
Darren Stone 11

İleri (Gforth 0.7.0), 5 bayt, 4 karakter: 'ߞ .Karakteri basar.
18446744073709551615

20

GolfScript, 14

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

Nasıl çalışır: ASCII şöyle gider:

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

Böylece, bu her karakterin ASCII kodlarını alır, beşi çıkarır ve onu bir dizgiye yapıştırır.

{...}%argüman olarak bir dize verildiğinde, eşlenen bir dizenin karakter dizisini verir. Bu nedenle, her bir karakteri 5 )artırır ( artış anlamına gelir).


+Sonunda gereksizdir. Ayrıca, 5 kat artış yerine, sadece beş ekleyin. Toplam tasarruf: 4 karakter. '-+,/'{5+}%
Justin

15
@ Quincunx, 5bir sayıdır.
Peter Taylor

5
@PeterTaylor Unutmaya devam ediyorum.
Justin

Akıllı çözüm
Sumurai8

Bunun CJam sürümü: "-+,/"_,)f+. :) (Sonra tekrar, CJam vardır KD.)
Martin Ender

19

Python, 32 karakter

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

2014 üncü Unicode karakterini kullanarak azaltmak mümkün ߞ, ama denemedim.

Quincunx şöyle bildirir:

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

üç karakter tarafından daha kısadır.


Unicode sürümü, en azından IDLE: ile Python 3'te çalışır print(ord("ߞ")). Python 2'de işe görünmüyor; Python 2 muhtemelen unicode'u desteklemiyor.
Justin

3
Ayrıca, sürümünüzde a=ord('.');print(a*a-ord('f'))2 karakter daha kısa.
Justin

@Quincunx Desteğiniz var, ancak dosyanız için belirli bir kodlamaya sahip olmanız uve dizgenin sonuna eklemeniz gerekir (olur "ߞ"u)
Kroltan

2
@Kroltan Aslında, ikinci bölümün doğru olmadığından eminim. Python 2'de, sen zorundaydı prepend dizelerle uonlar unicode olduğunu söylemek, ancak Python 3'te, bütün dizeleri otomatik unicode vardır
murgatroid99

1
Yukarıda yorumlandığı gibi, unicode olmadan print ord('.')**2-ord('f')biraz daha kısadır.
MLS

18

APL (6 bayt, 4 karakter)

⊃⎕TS

Sadece bu yıl çalışıyor.

Neden çalışıyor:

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

Sistem tarihine güvenmeden, 10 bayttır (7 karakter):

⎕UCS'ߞ'

6
Ne yazık ki, yalnızca bu yıl için işe yarar cevaplar geçersiz.
Joe Z.

Bilmiyorum APL: Bu kare kutu bir APL karakteri mi, yoksa bir yazı tipi gösterimi (Chrome) eksik mi?
Carl Witthoft

@JoeZ .: soru söylemiyor ama 2014 olmaktan dayanmaz birini ekledik
marinus

4
@CarlWitthoft: Buna quad ( ) denir , öyle görünmesi gerekiyordu.
marinus

18

Python 32 10 bayt, 91 85 ( mathvarsayılan olarak ithal edilen 66 ) bayt saf matematik

Bunu yazarken biraz eğlendim:

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)

Bruno Le Floch'un yöntemini (32 karakter) 2014kullanarak yazabileceğim tüm olası yöntemleri yazdırır :

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

Ancak bu açıkça gereksizdir, bu nedenle tercümanınız varsayılan olarak utf-8 olarak ayarlandıysa, gereken tek şey:

>>> ord(u'ߞ')
2014

Ayrıca, AmeliaBR (fikir için) sayesinde, saf matematik versiyonunu uygulamak için elimden geleni yaptım:

from math import*
a,b,c=int(e),round(e),ceil(pi);print int(a**(b*c-(c-b))-a*a**c-a)

ord (',') ** 2 + ord ('N')
MLS

6
@ MLS İçinde bir rakam var :)
Joachim Isaksson

2
Matematik sürümünüzü biraz optimize ettim: a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-ave TruePython 2.x'in o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
işlemdeki

Python 3 kullanıyorsanız karakter kaydedebilirsiniz:ord('ߞ')
asmeurer

@JoachimIsaksson Bir rakam sayı değildir;)
Mega Man

17

R (20 karakter)

@popojan (buraya henüz bir cevap göndermesine izin verilmiyor) çözümü 20 karakter içinde sağladı.

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

Çıktı:

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

R (22 karakter)

Anonim kullanıcı daha kısa bir çözüm önerdi.

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

2014bir BBCtaban 13 de pi*pi+pitamsayıdır 13. Çıkış olarak, bu bağlamda, R ile muamele edilmektedir (= 13.0112):

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

R (30 karakter)

@Tomas'a teşekkürler!

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

Çıktı:

> 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="")

AmeliaBR'in cevabından ilham alındı . Çıktı:

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

Vay, +1! Romen rakamlarımın en iyi çözüm olacağını umuyordum ... :( ;-)
Tomas

Aşağıdaki varyasyonlar daha kısa yapılabilir: 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

@Tomas, işleve paste0, sembolü içerdiğinden izin verilmez 0. Çözüm kullanıyorsanız 30 karakter yapar cat.
djhurio

2014geçerli dizinde dosya oluştur ve yaz list.files()- 12 karakter
Zbynek

@ Zbynek, çözümünüzün kod kuralları kurallarının genel kapsamında geçerli olmamasını bekliyorum.
djhurio

15

Java - 77 75 karakter

printAna yöntemle bir sınıfa eklenirse 75 karakter :

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

35*60-862014'e eşit demek


2
Formülünü beğendim.
Johannes

7
Bunun aslında daha uzun olması gerekiyor, çünkü sınıf tanımının çalışması için içinde olması gerekiyor. Bildiğim en kısa yol (Java 6 ile):class a{static{System.out.println('#'*'<'-'V');}}
Justin

1
@ Quincunx, Java 7 ile temel bir metoda ihtiyaç vardır
True Soft

2
@TrueSoft Not "Java 6 ile" dedim. Mümkün olan en kısa Java'yı seçmelisiniz.
Justin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.