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:


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.


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!


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.


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!

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 '—'

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


177

Python, 26

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

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

\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

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

;)

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

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.


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.


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.

<?=~ÍÏÎË;

@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');}

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


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

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") // ;)

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


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.


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


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.


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.


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. ;-)


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');}

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

'> '" * '^ - .      

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


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


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'ߞ'

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)

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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.