Wyprodukuj liczbę 2014 bez żadnych liczb w kodzie źródłowym

579

Uwaga do autorów wyzwań według meta konsensusu : pytanie zostało dobrze przyjęte, gdy zostało opublikowane, ale podobne wyzwania, takie jak proszenie osób odpowiadających o wykonanie X bez użycia Y, prawdopodobnie nie zostaną dobrze odebrane. Spróbuj użyć piaskownicy, aby uzyskać opinię, jeśli chcesz opublikować podobne wyzwanie.


To już 2017 2018 2019, ludzie, idźcie do domu.

Teraz, gdy jest rok 2014, czas na pytanie kodowe dotyczące liczby 2014.

Twoim zadaniem jest stworzenie programu, który drukuje liczbę 2014, bez użycia żadnych znaków 0123456789w kodzie i niezależnie od jakichkolwiek zewnętrznych zmiennych, takich jak data lub godzina lub losowy materiał siewny.

Wygrywa najkrótszy kod (liczony w bajtach) w dowolnym języku, w którym liczby są prawidłowe.


Tabela liderów:

Joe Z.
źródło
10
Mimo, że liczby są ignorowane w pieprzeniu mózgu, pomyślałem, że i tak opublikuję jeden. 32 znaki:++++++[>++++++++<-]>++.--.+.+++.
Braden Best
4
Brainfuck nie jest właściwym językiem dla tego wyzwania.
Joe Z.
8
Zastanawiam się, czy to pytanie zyskuje niewielką popularność w okolicach Nowego Roku.
Joe Z.
3
Czekam na „Chodźcie ludzie, nie zdajecie sobie sprawy, że to 2016?” :)
padawan
1
@BradenBest Można to zrobić przy użyciu 31 znaków na co najmniej dwa różne sposoby: +++++++ [> +++++++ <-]> + .--. +. +++. i ++++++++++ [> +++++ <-]> .--. +. +++.
Zubin Mukerjee

Odpowiedzi:

126

Mysz-2002 , 4 bajty.

To 4 bajty czystego, słodkiego ASCII.

W Mysz litery alfabetu są inicjowane na wartości 0-25. !jest operatorem wypisującym liczby całkowite, więc drukuje się 20wtedy 14(bez przerywanej nowej linii).

U!O!

Nie ma dostępnego tłumacza online, ale tutaj znajdziesz tłumacza napisanego w C (wymagającego drobnych poprawek, zanim będzie można wymusić gccjego kompilację) i tego samego skompilowanego tłumacza, Win32ale działającego doskonale w systemie Linux wine.

Tutaj możesz znaleźć stałą wersję interpretera, który się kompiluje.

kot
źródło
7
Wow, to niesamowite odkrycie, o wiele później po wyzwaniu. A w języku tak ezoterycznym nikt jeszcze o nim nie słyszał!
Joe Z.
3
BTW: robi to to samo, co CJam KE, ale w rzeczywistości jest ważne, ponieważ jest to język sprzed 2014 roku.
Joe Z.
7
Zadowolony wyraz mojej twarzy przypomina teraz kreatora Fortran-77 po pokonaniu jakiegoś zwolennika Pythona w najszybszym kodzie .
kot
55
To gra @cat i Mouse-2002.
Digital Trauma
5
@DigitalTrauma rzeczywiście: 3
kot
1300

Python, 52 bajty

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

Zaktualizowano w 2015 roku dzięki @Frg:

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

Najedź myszką, aby zobaczyć wersję 2016:

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

Wypróbuj online!

dansalmo
źródło
185
Zasługujesz na nagrodę za spryt
Carter Pape
166
wow - tak jest w duchu tego pytania. <3
Johannes
80
Byłem trochę zaskoczony, że to tylko czwarta fraza, którą wypróbowałem po „Szczęśliwego nowego roku!”, Która byłaby idealna na rok 1374.
dansalmo
55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') Och, czekaj, jestem spóźniony o rok. To 2013.
Warren P
163
sum(map(ord,'Happy new year to you!'))uratuje 7 znaków.
243

Befunge 98 - 17 11 9 8 bajtów

'-:*b-.@

Podobne do starej wersji, ale o tym pamiętałem '

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

Co ciekawe, 45 2 -11 jedyny parowania liczb a, b, gdzie Znaczenie tych zestawów jest [32,126 ] to zbiór drukowanych znaków ascii, a [10,15] to zbiór łatwo dostępnych liczb Befunge. Znalazłem tę parę z tym programem python :

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

Lub, jeśli twój tłumacz obsługuje Unicode, to działa:

Befunge 98-5 bajtów (4 znaki)

'ߞ.@

Działa przynajmniej na http://www.quirkster.com/iano/js/befunge.html z następującym kodem (Befunge 93 - 6 bajtów / 5 znaków):

"ߞ".@

Stara wersja

cdd**e-.@

oblicza liczbę, a następnie drukuje:

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

Starsza wersja:

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

Przesuwa wartości ascii dla 2014, -10. Następnie drukuje każdy po dodaniu do niego 10.

Justin
źródło
78
en.wikipedia.org/wiki/Befunge ... co to jest, ja nawet nie ...
Plato
36
„Język został pierwotnie stworzony przez Chrisa Presseya w 1993 roku jako próba opracowania języka, który jest tak trudny do skompilowania, jak to możliwe” ...
będzie
7
@ 11684 Wynik jest raczej dobrze zdefiniowany w pytaniu. Jeśli program zostanie wydrukowany: randomstuff2randomstuff0randomstuff1randomstuff4nie uważam go za prawidłowe rozwiązanie.
Cruncher
7
@Plato Zamiast przeczytać artykuł na Wikipedii (który zawiera tylko Befunge 93), jeśli chcesz dowiedzieć się o Befunge 98, przeczytaj oficjalną specyfikację
Justin
3
Wiki: „Język został pierwotnie stworzony przez Chrisa Presseya w 1993 roku jako próba opracowania języka, który jest tak trudny do skompilowania, jak to możliwe” ... ale dlaczego?
CousinCocaine
239

Ruby, 15 lat

p Time.new.year

Tymczasowe;)


Zauważ, że sekcja pytania

niezależnie od jakichkolwiek zmiennych zewnętrznych, takich jak data lub godzina lub losowy materiał siewny

nie był edytowany długo po opublikowaniu mojej odpowiedzi ...


Jan Dvorak oferuje doskonałą alternatywę w komentarzach :

Happy = Time
Happy.new.year

Ale to nie jest entuzjastyczne. Wolę:

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

Happy.new.year!

Lub nawet:

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!

A oto poprawna interpunkcja angielska:

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!

Okej, nic nie mogłem na to poradzić:

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!
Klamka
źródło
167
Happy = Time; Happy.new.year
John Dvorak
5
@hobbs Nie, to nie jest; pytanie nic nie mówi na ten temat
Klamka
12
Będzie to działało poprawnie tylko przez pewien czas.
hippietrail
119
Do tej pory sprawdził się we wszystkich testach
CoderTao
7
Uważam, że duchem tego pytania było powiedzenie bieżącego roku [który w tym roku przypada 2014]. To rozwiązanie jest więc bardziej „przenośne” w czasie niż zaakceptowane;). Ty (i Jan Dvorak) dostajesz mój głos!
Olivier Dulac
223

Idź, 2 bajty (UTF-16)

Jeden znak Unicode (2 bajty w UTF-16, 3 bajty w formacie UTF-8), dane wyjściowe 2014 jako część błędu

http://ideone.com/dRgKfk

can't load package: package : 
prog.go:1:1: illegal character U+2014 '—'
TY
źródło
7
To bardzo sprytne, ale pytanie wymaga programu, który wypisze numer.
HelloGoodbye
40
Jeśli drukowane kody błędów się liczą, to zgłoszenie powinno wygrać.
ToastyMallows
36
+1. Pytanie nie mówi: „drukuje tylko liczbę i nic więcej”.
Kaz
1
Nie obchodzi mnie, czy jest to ważne, czy nie, jest całkiem niesamowite.
Programy Redwolf
1
Jest to standardowa luka
MilkyWay90
177

Python, 26

print int('bbc',ord("\r"))
Darren Stone
źródło
53
bbc ma rok 2014 w bazie 13
Darren Stone
70
Zakładam, że użycie znaków „bbc”, a użycie podstawy 13 to hołd Douglasa Adamsa. „Mogę być przykro, ale nie piszę żartów w bazie 13.”
Brian Minton
10
13 lat temu. ROZERWAĆ.
Darren Stone
4
IMO, ta odpowiedź znajduje się w „True Pythonese”
kmonsoor
8
@BrianMinton: Korzystanie z Bazy 13 jest prawdopodobnie dlatego, że jest to jedyna baza między 2 a 36, ​​która pozwala na reprezentację liczby 2014 bez żadnych znaków 0- 9.
dan04
146

MATLAB, Scala (4 znaki, 5 bajtów)

Tutaj możesz skorzystać ze stosunkowo słabego systemu typów MATLAB (i Scali). Sztuką jest zastosowanie +operacji jednoargumentowej na łańcuchu złożonym tylko ze znaku ߞ(punktu kodowego UTF-8 U + 07DE lub 2014 w systemie dziesiętnym). Ta operacja niejawnie konwertuje ciąg znaków na podwójne (w MATLAB) i na Int(w Scala):

+'ߞ'

Szczegóły dotyczące liczby bajtów:

  • + jest ASCII i liczy 1 bajt
  • ' jest ASCII i liczy 1 bajt (ale pojawia się dwa razy w wyrażeniu)
  • ߞ jest 2-bajtowym znakiem UTF-8

Razem: 5 bajtów

TeX (32 26 znaków, tyle bajtów)

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

Jeszcze krótszą alternatywą (zaproponowaną przez Josepha Wrighta ) jest

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

XeTeX / LuaTeX (13 znaków, 14 bajtów)

Jeśli dozwolone są XeTeX lub LuaTeX, wejścia UTF-8 można użyć bezpośrednio (jak zaproponował Joseph Wright ):

\number`ߞ\bye
jub0bs
źródło
\let~\number~`^^T~`^^N\bye25 znaków / bajtów. Uważasz, że nie zgadzasz się, to również 25 dla twojego rozwiązania.
jo
1
@tohecz Myślę, że oba nasze rozwiązania mają w rzeczywistości 26 bajtów.
jub0bs
1
Jeśli potrzebny jest bieżący rok, wówczas 13 bajtów:\the\year\bye
yo '
2
+'ߞ'działa również w Scali (i kilku innych językach, jakie sobie wyobrażam)
theon
118

dc, 6 znaków

DiBBCp
  • D popycha 13 na stos, nawet jeśli początkowa podstawa wynosi 10
  • i zmienia podstawową wartość wejściową (na 13 z 10)
  • BBC to podstawa 13 z 2014 r.
  • p odbitki.

Dane wyjściowe konsoli:

$ dc <<< "DiBBCp"
2014
daniero
źródło
10
To prawda, ale rzeczywisty program DC jest nadal DiBBCp(6 znaków), reszta to tylko sposób na uruchomienie go.
daniero
11
Chciałem to zagłosować, ale ma 42 punkty! używa bazy 13 i słowa BBC. Jakie to jest świetne! Wydaje się, że w tym roku znajdziemy pytanie o życie, wszechświat i wieczność ;-) en.wikipedia.org/wiki/Base_13 . Zamiast tego jestem wdzięczny za komentarz @ daniero i zostawiam odpowiedź z tą wspaniałą 42 reputacją ;-)
Pablo Marin-Garcia
4
@ PabloMarin-Garcia, niestety nieświadoma osoba go złamała ... Ma teraz 43 głosy. Wróć i oddaj głos! :)
Tomas
3
@Tomas Vogons zawsze the Vogons. Opór jest daremny wobec międzygalaktycznej burokracji.
Pablo Marin-Garcia
2
Nie mogę nawet znaleźć Dpolecenia na stronie man. Co to robi? Nieważne ... D jest hex na 13.
kzh
93

Kod Morse'a, 23

;)

..--- ----- .---- ....-
DavidC
źródło
21
„w dowolnym języku, w którym liczby są poprawnymi tokenami”
Klamka
14
„..---” to poprawny token, w 5 pociągnięciach, dla numeru dwa, prawda? Tak jak „4” jest poprawnym tokenem, w trzech pociągnięciach, dla liczby „cztery”.
DavidC
8
Brajl może być krótszy :)
Dr Belisarius
31
Słuszna uwaga. Przy okazji, poczułem ulgę, że nikt nie zapytał, jak uruchomić Morse Code na moim komputerze.
DavidC
14
@DavidCarraher Co masz na myśli? Oczywiście założyłem, że użyłeś tego repozytorium do jego odkodowania. github.com/Nyubis/mspa-morse-decoder Wszyscy to robią ...
Michael J. Calkins
88

72 45 znaków w kodzie; Zero kodów znaków

Jest to dalekie od najkrótszej opublikowanej odpowiedzi, ale nikt jeszcze jej nie opublikował

  • nie używa kodów znaków jako zamiennika liczb, oraz
  • nie nazywa daty systemowej.

Używając czystej matematyki (dobra i automatycznej konwersji boolowskiej) w R z konsoli R:

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

Drukuje liczbę 2014. Tjest wstępnie zdefiniowanym synonimem true w R. Funkcje floori expsą bezpośrednio dostępne w pakiecie podstawowym, podobnie jak pistała. R nie ma operatora inkrementacji, ale powtórzenie (x*x)okazało się, że jest mniej znaków, które wykonują inkrementację i dekrementację dwa razy.


Oryginalna wersja w JavaScript (72 znaki)

Z tego prostego powodu, że mógłbym przetestować konsolę i nie przeszkadza jej całkowity brak białych znaków:

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

uruchom w konsoli, a wydrukuje liczbę 2014.


Propozycje dla xkcd (i także ) za skłonienie mnie do myślenia o exp (pi): e do pi Minus pi

PS Jeśli możesz skrócić ten sam algorytm w innym języku, opublikuj w nim komentarz.

AmeliaBR
źródło
1
o =! ""; (o + o) + "" + (oo) + (o + oo) + (o + o + o + o)
Kernel James
4
25 bajtów: alert ('ߞ'. CharCodeAt ())
oberhamsi
1
+1. Twierdzisz jednak, że Twoja odpowiedź była pierwszą odpowiedzią, która „nie używa kodów znaków jako zamiennika liczb i nie nazywa daty systemowej”. To jest w rzeczywistości fałsz. Moja odpowiedź zawiera to rozwiązanie cdd**e-.@(opublikowane wcześniej), które nie korzysta z kodów znaków ani daty systemowej. Oblicza liczbę 2014 c, di esą cyfry szesnastkowe numer. a, b, ..., fPush (odpowiednio) 10,11, ... 15 więc 12 * 13 * 13 - 14jest obliczenie.
Justin
To nie była pierwsza odpowiedź, by nie używać kodów znaków; Mam kilka wcześniejszych.
Timtech
1
@Quincunx: masz rację; przeglądając Nie zauważyłem, że twoja wersja używa cyfr szesnastkowych, a nie kodów znaków.
AmeliaBR
85

Scala REPL

34 29 znaków.

+"Happy new year to you!".sum

Cóż, ok, jeśli naprawdę chcesz grać w golfa z dowolnymi znakami, możesz użyć:

'@'*' '-'"'

lub

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

które mają odpowiednio 11 i 22 znaki.

Mikaël Mayer
źródło
4
Ciekawy pomysł, nawet jeśli nie jest szczególnie golfowy. Ale sam ciąg sprawia, że ​​jest bardziej interesujący niż coś używającego wysokich bajtów lub coś takiego.
Konrad Borowski
Dodałem wersję golfową.
Mikaël Mayer
Możesz uratować kilka postaci z toInttego: +"Happy new year to you!".sum Test
theon
Zaktualizowano Nie wiedziałem, że + może być również przedrostkiem.
Mikaël Mayer
68

PHP, 9 bajtów

Wymaga to PHP 7.1 lub niższej. Będzie działał w PHP 7.2, ale spowoduje ostrzeżenie. Brak gwarancji na przyszłe wersje.

xxdpotrzebne ze względu na dane binarne (więc kopiowanie i wklejanie byłoby łatwiejsze). Może wrócić E_NOTICE, ale to nie ma znaczenia, prawda?

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

Możesz też zapisać to przy użyciu kodowania ISO-8859-1.

<?=~ÍÏÎË;
Konrad Borowski
źródło
@Quincunx: Przesyłanie tego było stosunkowo trudne, ale oto Ideone - ideone.com/APHKhn .
Konrad Borowski
1
To wygląda interesująco; co to robi?
Justin
7
@Quincunx: Nie działa bitowo (0x00 zmienia się w 0xFF, a 0x7F zmienia się w 0x80) dla każdego znaku ciągu. Ponieważ ciąg jest prawidłowym identyfikatorem (wszystko z wysokim zestawem bitów jest znakiem identyfikującym PHP, prawdopodobnie do obsługi innych kodowań), PHP uważa, że ​​jest stały, ale ponieważ nie jest zdefiniowany, traktuje go jako ciąg.
Konrad Borowski
2
Ponieważ pytanie brzmiało „Teraz, kiedy jest 2014 ...”, co powiesz na echo date('Y');?
John
6
@John: Nie. Gdybyś przeczytał komentarze do pytania, zauważyłbyś, że OP nie chce otrzymać bieżącego roku jako odpowiedzi. Poza tym <?=date(Y);byłoby 11 znaków, a mam rozwiązanie w 9 postaciach.
Konrad Borowski
67

C, 33 bajty

main(){printf("%d",'A'*' '-'B');}
Sudharsan Mohan
źródło
19
Jak denerwujące jest to, że pierwsza faktoryzacja 2014 wymaga ASCII 5!
Ben Jackson
Mam za (int a; TAK; a ++) {NSLog (@ "% i", a);} za cel C Cocoa Touch, ale nie mogę jeszcze dodać (za mało). W końcu pokazuje 2014 i ma błąd kompilatora i jest możliwe, że może w ogóle nie działać i skompilowany ma prawdopodobnie około 4,2 megapiksela - ale hej.
Stal z recyklingu
main () {printf ("% d", '\ a \ xde');}
mjy
1
@mjy Kolejność bajtów literałów wieloznakowych nie jest gwarantowana.
Jonathon Reinhart
@JonathonReinhart literały wieloznakowe są całkowicie zależne od implementacji.
FUZxxl
54

Mathematica, 14 znaków (lub 15, jeśli policzisz bitmapę jako znak)

TextRecognize @wprowadź opis zdjęcia tutaj

Michael Stern
źródło
50
Właściwie powinieneś policzyć bajty, więc jest to 14 + rozmiar obrazu bitmapowego.
Sylwester
22
Mapa bitowa prawdopodobnie miałaby 7,357 znaków.
Joe Z.
5
Ponadto uważam, że niektóre bajty na obrazie mieszczą się w tym \dzakresie. Mianowicie, jeśli jest to GIF, to sam nagłówek z pewnością zawiera niektóre.
John Dvorak
13
Wszyscy jesteście zabójcami. Dobra, użyj First @ ToCharacterCode @ „ߞ” dla 25 znaków, 26 bajtów.
Michael Stern
9
Jako bonus, oto rozwiązanie Mathematica w 30 znakach --URLFetch @ „ goo.gl/miVwHe
Michael Stern
53

Python3.4.0b2 (0 bajtów)

% 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.
>>> 
TY
źródło
To nie zadziała, gdy ludzie będą aktualizować swoją wersję Python 3 za rok.
Joe Z.
21
Dlatego wspomniałem o python3.4.0b2 , Nie stanie się to dwa razy. Data jego wydania, a nie data systemowa.
TY
6
To mnie rozśmieszyło!
Matt Fletcher,
2
Działa również w Python 3.4.2.
Erik the Outgolfer
Nie możesz dodawać obcych danych wyjściowych.
MilkyWay90
48

JavaScript, 23 bajty

Wykorzystuje konwersję Base 64

alert(atob("MjAxNA=="))

23 znaki (16 z atobem w sobie)

Lub

alert("MMXIV") // ;)
logika 8
źródło
27
MMXIVnie ma żadnych wspólnych znaków 2014, ostatnio sprawdziłem ...// ;)
Joe Z.
23
Starożytni Rzymianie mogą się nie zgadzać. Pierwszy z nich produkuje 2014 w nowoczesnym języku angielskim.
logic8
1
Twój pierwszy nie
wychodzi
1
jeśli otworzysz konsolę w chromie, wklej ją i naciśnij Enter, aby zwrócić wartość - dodam do niej alert, ponieważ jest dłuższy niż inne.
logic8
5
@ logic8: Nice one +1. Kolejna wersja JavaScript, która również działa: (4 bajty) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);chociaż nie jestem pewien, czy spełnia Joe Zwymagania.
Nie,
41

Perl - 10 znaków

To rozwiązanie jest dostępne dzięki uprzejmości BrowserUK w PerlMonks , chociaż odrzuciłem trochę niepotrzebnej interpunkcji i białych znaków w rozwiązaniu, które opublikował. Jest nieco „nie” na czteroznakowym ciągu dwójkowym.

say~"ÍÏÎË"

Znaki wyświetlane powyżej reprezentują binarne oktety cd: cf: ce: cb i są takie, jak wyglądają w ISO-8859-1 i ISO-8859-15.

Oto cały skrypt w systemie szesnastkowym, a także przykład jego uruchomienia:

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

Perl (bez wysokich bitów) - 14 znaków

say'````'^RPQT

Ten wykorzystuje logiczną „lub” na dwóch strunach czterech znaków "RPQT"i "````"(czyli cztery 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

(Początkowo miałem dwa łańcuchy na odwrót, co wymagało spacji między printi RPQTaby oddzielić tokeny. @DomHastings wskazało, że przełączając je, mogę zapisać znak.)

Perl (oszukiwanie) - 8 znaków

Prawdopodobnie nie leży to w duchu konkurencji, ale hdb na PerlMonks zwrócił uwagę, że Perl udostępnia zmienną o nazwie, $0która zawiera nazwę aktualnie wykonywanego programu. Jeśli wolno nam nazwać plik zawierający skrypt „2014”, to $0będzie równy 2014. $0zawiera cyfrę, więc nie możemy go użyć bezpośrednio, ale ${...}zawierające wyrażenie o wartości 0 będzie w porządku; na przykład:

say${$|}

Aby zachować spójność, zróbmy hexx-then-perl z tym:

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

Myślę, że to oszustwo, ale mimo to jest to interesujące rozwiązanie, o którym warto wspomnieć.

Tobyink
źródło
2
Hej tam, jeśli odwrócić ciąg i gołe słowa, można zaoszczędzić char: print"````"^RPQT. Może być możliwe użycie sayrównież w wersji 5.10+ za pomocą opcji -E zamiast -e, ale nie wiem, czy spowoduje to karę +2 za różne argumenty wiersza poleceń?
Dom Hastings
2
Dopuszczalne jest określenie, że używasz Perla 5 i nie używasz saykary.
Peter Taylor
@DomHastings, osobiście uważam, że jeśli zamierzasz to zrobić za pomocą „-e” lub „-E”, powiedziałbym, że powinieneś wtedy uwzględnić całą komendę, łącznie z „perl -E” w swojej liczbie znaków .
tobyink
4
Możesz także zapisać kolejny bajt, używając literałów łańcuchowych, które nie wymagają cudzysłowów, takich jak say ABCD^srrp.
primo
40

Ruby, 20 lat

p 'bbc'.to_i ?\r.ord

Objaśnienie: bbcjest 2014w bazie 13. Krótszy niż Python. Nie tak krótki jak Forth.

Darren Stone
źródło
23
„Nikt nie pisze żartów w bazie 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 'ߞ'.orddla w pełni funkcjonalnego programu 'ߞ'.ordwewnątrz irb. Działa na wersji 1.9+
Ricardo Panaggio
1
Bez „dziwnych” znaków Unicode: ?-*?--?\v(45 *
45–11
Jedna postać mniejsza: ?.*?.-?f(46 * 46 - 102) (tylko Ruby 1.8)
Ricardo Panaggio
29

PowerShell, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) jest liczony jako dwa bajty zgodnie z informacjami o znaczniku code-golf .

[""]zwraca pierwszy znak z ciągu ( ""jest konwertowany na 0). Unary plus opeartor ( +) konwertuje znak na liczbę całkowitą.

Danko Durbić
źródło
1
Według codegolf.stackexchange.com/tags/code-golf/info powinno ono liczyć się jako 9 znaków.
Konrad Borowski
@GlitchMr, dzięki, poprawiłem swoją odpowiedź.
Danko Durbić
3
To ['']niezła sztuczka. Zwykle używałem, [char]ale to rzeczywiście krótsze :)
Joey
27

Scala REPL - 6 znaków

"?="##

( ##oznacza symbol Scali hashCode, a ciąg Java ma "?="skrót do 2014 r.)

Scala REPL - 4 znaki, 5 bajtów

+'ߞ'

Matematyka na naszej ulubionej postaci z Unicode tworzy Int.

Rex Kerr
źródło
27

JavaScript, 18 znaków

alert(btoa('ÛMx'))

Aktualizacja: w ES6 użycie literału szablonu pozwala zapisać dwa znaki:

alert(btoaMx`)

Powyższy kod jest dość łatwy do zrozumienia, pamiętając, że btoakonwertuje łańcuch na inny łańcuch zgodnie z zestawem dobrze zdefiniowanych reguł ( RFC 4648 ). Aby zobaczyć, jak działa konwersja, napiszemy ciąg wejściowy „ÛMx” jako ciąg cyfr binarnych, gdzie każdy znak jest renderowany jako 8-bitowy kod znaku.

Wpisz znak | Û | M | x
Kod znaku (dziesiętny) | 219 | 77 | 120
Kod znaku (binarny) | 11011011 | 01001101 | 01111000

Po reorganizacji cyfr binarnych w ostatnim rzędzie w grupach po 6, otrzymujemy binarną reprezentację 4 nowych liczb, odpowiadających indeksom Base64 4 znaków w ciągu „2014”.

Indeks Base64 (binarny) | 110110 | 110100 | 110101 | 111000
Indeks Base64 (dziesiętny) | 54 | 52 | 53 | 56
Znak wyjściowy | 2 | 0 | 1 | 4

Zgodnie ze specyfikacją HTML znaki wyjściowe można pobrać z ich indeksów Base64 zgodnie z poniższą tabelą: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Jeśli nie zależy ci na szczegółach, możesz pozwolić przeglądarce wykonać obliczenia za Ciebie i dowiedzieć się, że „ÛMx” jest wynikiem oceny atob('2014')w JavaScript.

GOTO 0
źródło
pytanie wspomina o wydrukowaniu numeru. Wiem, że ocena w konsoli doprowadzi do zwrócenia wyniku, ale w Code Golf ogólnie oczekuje się, że odpowiedzi JS będą zawierać jakąś formę IO ( alertnajczęściej).
zzzzBov
@zzzzBov Tak, moja pierwotna odpowiedź zawierała alertpołączenie.
GOTO 0
Wymienia Społeczność jako usuniętą alert. Zastanawiam się, czy zmieniły się standardy dla kodegolfa JS, czy to tylko zmiana, którą przyjęła społeczność.
zzzzBov
@zzzzBov: To była zmiana dokonana przez anonimowego użytkownika zaakceptowanego przez SHiNKiROU i luser droog. W każdym razie ta edycja wywołała dyskusję na temat Meta ( meta.codegolf.stackexchange.com/questions/803/… ).
Konrad Borowski
@xix, To nie tylko ta edycja spowodowała, że ​​zadałem to pytanie na meta. Widziałem wystarczająco dużo golfów z kodem, w których ludzie nie zgadzają się co do tego, czy konsola deweloperska liczy się jako drukowanie, pomyślałem, że warto zapytać o standard.
zzzzBov
24

Jeszcze jeden wpis GolfScript, 9 znaków do wydrukowania

Uważam, że jest on krótszy niż jakikolwiek z dotychczasowych drukowanych wpisów GolfScript:

"!="{*}*)

( 7-znakowy wpis Petera Taylora bije go, ale zawiera znaki kontrolne, które nie mogą być drukowane).

Nazywam to „ tak jest w zeszłym roku!” wpis, ponieważ tak naprawdę generuje liczbę 2013 w 8 znakach, czyli 33 × 61, a następnie zwiększa ją o jeden. ;-)

Ilmari Karonen
źródło
Wygrywasz (dla ascii golfscript)
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
źródło
A może po prostu "%x"i 'b'*'S'? To 8212 grudnia lub heks 2014. Zapisuje jeden znak, jeden literał i dwa w ciągu formatu.
MSalters
@MSalters No, 'b'*'S'wynosi 8134. Pierwotna faktoryzacja 8212 wynosi 2 * 2 * 2053, więc nie widzę łatwego sposobu jej wytworzenia.
fredoverflow
Bah, sprawdzono z podziałem całkowitym, że 8212/'b' == 'S':(
MSalters
i ósemkowy też nie działa (02014 = 1036 = 37 * 28, 28 jest niedrukowalne)
MSalters
1
@FredOverflow co z moim rozwiązaniem 28 znaków? main () {puts (__ DATE __ + '\ a');}
Arunprasad Rajkumar
20

Czwarty, 14

'> '" * '^ - .      
Darren Stone
źródło
1
Czy możesz wyjaśnić, jak to działa?
ProgramFOX
1
Wyrażam stałe liczb całkowitych jako literały znaków przy użyciu ich wartości porządkowych (ASCII). A więc jest to: 62 34 * 94 - . jeśli nie mówisz dalej, to znaczy print (62 * 34 - 94).
Darren Stone
Dalej (Gforth 0.7.0), 5 bajtów, 4 znaki: 'ߞ .Drukuje znak.
18446744073709551615
20

GolfScript, 14

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

Jak to działa: ASCII wygląda następująco:

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

To bierze kody ASCII każdego znaku, odejmuje pięć i umieszcza go w ciągu.

{...}%zwraca tablicę znaków ciągu odwzorowanego, gdy podano ciąg jako argument. Tak więc zwiększa każdy znak o 5 ( )oznacza przyrost).

Klamka
źródło
+Na końcu jest niepotrzebna. Zamiast dodawać 5 razy, po prostu dodaj pięć. Łączne oszczędności: 4 znaki. '-+,/'{5+}%
Justin
15
@Quincunx, 5jest liczbą.
Peter Taylor
5
@PeterTaylor ciągle zapominam.
Justin
Sprytne rozwiązanie
Sumurai8
Wersja CJam tego: "-+,/"_,)f+. :) (Znowu CJam ma KD.)
Martin Ender
19

Python, 32 znaki

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

Prawdopodobnie można to zmniejszyć za pomocą 2014-szego znaku Unicode ߞ, ale nie próbowałem.

Quincunx zauważa, że

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

jest krótszy o trzy znaki.

Bruno Le Floch
źródło
Wersja Unicode działa, przynajmniej w Pythonie 3 z IDLE: print(ord("ߞ")). Nie działa w Pythonie 2; Python 2 prawdopodobnie nie obsługuje Unicode.
Justin
3
Również w twojej wersji a=ord('.');print(a*a-ord('f'))jest o 2 znaki krótszy.
Justin
@Quincunx Obsługuje, jednak musisz mieć określony kodowanie pliku i dołączyć go una końcu łańcucha (byłoby "ߞ"u)
Kroltan
2
@Kroltan Właściwie jestem prawie pewien, że druga część nie jest prawdziwa. W Pythonie 2, należało poprzedzić ciągi upowiedzieć, że były one Unicode, ale w Pythonie 3 wszystkie ciągi są automatycznie unicode
murgatroid99
1
Podobnie jak skomentowano powyżej, bez Unicode print ord('.')**2-ord('f')jest nieco krótszy.
MLS
18

APL (6 bajtów, 4 znaki)

⊃⎕TS

Działa tylko w tym roku.

Dlaczego to działa:

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

Bez polegania na dacie systemowej, ma 10 bajtów (7 znaków):

⎕UCS'ߞ'
marinus
źródło
6
Niestety odpowiedzi, które działają tylko w tym roku, są nieprawidłowe.
Joe Z.
Nie wiem APL: czy to kwadratowe pole jest znakiem APL, czy brakuje mi reprezentacji czcionek (Chrome)?
Carl Witthoft
@JoeZ .: Pytanie tego nie mówi, ale dodałem taki, który nie polega na tym, że to 2014.
marinus
4
@CarlWitthoft: Nazywa się to quad ( ), tak powinno wyglądać.
marinus
18

Python 32 10 bajtów, 91 85 (66 mathdomyślnie importowanych) bajtów czystej matematyki

Bawiłem się pisząc to:

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)

Drukuje wszystkie możliwe sposoby pisania 2014przy użyciu metody Bruno Le Flocha (32 znaki):

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

Ale jest to oczywiście zbędne, więc jeśli twój interpreter jest domyślnie ustawiony na utf-8, wtedy wystarczy:

>>> ord(u'ߞ')
2014

Ponadto, dzięki AmeliaBR (za pomysł), starałem się jak najlepiej wdrożyć wersję czysto matematyczną:

from math import*
a,b,c=int(e),round(e),ceil(pi);print int(a**(b*c-(c-b))-a*a**c-a)
Deneb
źródło
ord (',') ** 2 + ord ('N')
MLS
6
@MLS Cóż, to ma cyfrę :)
Joachim Isaksson
2
Zoptymalizowałem trochę twoją wersję matematyczną: a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-ai możesz całkowicie wyeliminować import matematyki, korzystając z faktu, że Truew Pythonie 2.x jest identyczna z liczbą całkowitą 1 w działaniu, zmniejszając ją do 50 znaków:o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
Ponkadoodle
Możesz zapisać postać, jeśli używasz Python 3:ord('ߞ')
asmeurer
@JachachimIsaksson Cyfra nie ma numeru;)
Mega Man
17

R (20 znaków)

@ popojan (nie ma jeszcze możliwości opublikowania odpowiedzi tutaj) podał rozwiązanie w ciągu 20 znaków.

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

Wynik:

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

R (22 znaków)

Anonimowy użytkownik zaproponował krótsze rozwiązanie.

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

2014jest BBCw bazie 13. pi*pi+pi(= 13.0112) jest traktowany przez R w tym kontekście jako liczba całkowita 13. Dane wyjściowe:

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

R (30 znaków)

Dzięki @Tomas!

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

Wynik:

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

R (31 znaków)

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

Zainspirowany odpowiedzią AmeliaBR . Wynik:

> cat(T+T,T-T,T/T,T+T+T+T,sep="")
2014
djhurio
źródło
Wow, +1! I miałem nadzieję, że moje rozwiązanie z cyframi rzymskimi będzie najlepsze ... :( ;-)
Tomas
Poniższe warianty można skrócić: cat(a<-T+T,T-T,T/T,a^a,sep="")(30 znaków), paste0(aT+T,T-T,T/T,a^a)(26 znaków)
Tomas
@Tomas funkcja paste0jest niedozwolona, ​​ponieważ zawiera symbol 0. Twoje rozwiązanie składa się z 30 znaków, jeśli używasz cat.
djhurio
utwórz plik 2014w bieżącym katalogu i napisz list.files()- 12 znaków
Zbynek
@Zbynek, oczekuję, że twoje rozwiązanie nie będzie poprawne w ogólnym zakresie zasad codegolf.
djhurio
15

Java - 77 75 znaków

75 znaków, jeśli printzostanie dodany do klasy za pomocą głównej metody:

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

Oznacza to, 35*60-86co jest równe 2014

True Soft
źródło
2
Podoba mi się twoja formuła.
Johannes
7
To faktycznie musi być dłuższe, ponieważ definicja klasy musi się w nim znajdować, aby działał. Najkrótsza droga jaką znam (z Javą 6):class a{static{System.out.println('#'*'<'-'V');}}
Justin
1
@Quincunx, z Javą 7, potrzebna jest główna metoda
True Soft
2
@TrueSoft Uwaga Powiedziałem „z Javą 6”. Powinieneś wybrać możliwie najkrótszą Javę.
Justin
2
Możesz usunąć 'ln' w println, aby zmniejszyć znaki ...
laksys