Produzieren Sie die Nummer 2014 ohne Zahlen in Ihrem Quellcode


579

Hinweis zum Herausfordern von Autoren gemäß Metakonsens : Diese Frage wurde zum Zeitpunkt der Veröffentlichung gut aufgenommen, aber Herausforderungen wie diese, bei denen die Beantworter zu X aufgefordert werden, ohne Y zu verwenden, werden wahrscheinlich schlecht aufgenommen. Verwenden Sie die Sandbox , um Feedback zu erhalten, ob Sie eine ähnliche Herausforderung veröffentlichen möchten.


Es ist schon 2017, 2018, 2019, Leute, geht nach Hause.

Jetzt, da es 2014 ist, ist es Zeit für eine Code-Frage mit der Nummer 2014.

Ihre Aufgabe ist es, ein Programm zu erstellen, das die Zahl druckt 2014, ohne die Zeichen 0123456789in Ihrem Code zu verwenden und unabhängig von externen Variablen wie Datum oder Uhrzeit oder einem zufälligen Startwert.

Der kürzeste Code (in Bytes), der in einer Sprache verwendet wird, in der Zahlen gültige Token sind, gewinnt.


Bestenliste:


10
Obwohl Zahlen in Brainfuck ignoriert werden, dachte ich, ich würde trotzdem eine posten. 32 Zeichen:++++++[>++++++++<-]>++.--.+.+++.
Braden Best

4
Brainfuck ist keine gültige Sprache für diese Herausforderung.
Joe Z.

8
Ich frage mich, ob diese Frage um Neujahr einen kleinen Anstieg der Popularität erfährt.
Joe Z.

3
Warten auf "Komm schon, weißt du nicht, dass es 2016 ist?" :)
Padawan

1
@BradenBest Es gibt mindestens zwei Möglichkeiten, dies in 31 Zeichen zu tun: +++++++ [> +++++++ <-]> + .--. +. +++. und ++++++++++ [> +++++ <-]> .--. +. +++.
Zubin Mukerjee

Antworten:


126

Mouse-2002 , 4 Bytes.

Das sind 4 Bytes reines, süßes ASCII.

In der Maus werden die Buchstaben des Alphabets mit den Werten 0-25 initialisiert. !ist der Operator zum Drucken von ganzen Zahlen, daher wird dieser 20dann gedruckt 14(keine intermittierende Newline).

U!O!

Es gibt keinen Online-Interpreter, aber hier finden Sie einen in C geschriebenen Interpreter (der einige Anpassungen benötigt, bevor gccer kompiliert werden kann) und denselben kompilierten Interpreter Win32, der jedoch unter Linux einwandfrei funktioniert wine.

Hier finden Sie die feste Version des Interpreters, der kompiliert.


7
Wow, das ist ein erstaunlicher Fund, der so viel später nach der Herausforderung eintrifft. Und mit einer so esoterischen Sprache hatte hier noch niemand davon gehört!
Joe Z.

3
Übrigens: Dies macht dasselbe wie CJams KE, ist aber tatsächlich gültig, da es eine Sprache aus der Zeit vor 2014 ist.
Joe Z.

7
Der selbstgefällige Ausdruck in meinem Gesicht ähnelt dem eines Fortran-77-Zauberers, nachdem ich einen Befürworter von Python in einem schnellsten Code besiegt habe .
Katze

56
Dies ist ein Spiel von @cat und Mouse-2002.
Digital Trauma

5
@DigitalTrauma in der Tat: 3
Katze

1300

Python, 52 Bytes

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

Aktualisiert für 2015 dank @Frg:

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

Fahren Sie mit der Maus über die Version 2016:

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

Probieren Sie es online!


186
Sie verdienen den Cleverness Award
Carter Pape

167
wow - das ist so im Geiste dieser Frage. <3
Johannes

80
Ich war ein wenig überrascht, dass es nur die 4. Phrase war, die ich nach "Frohes neues Jahr!"
Versuchte

55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') Oh warte, ich bin ein Jahr zu spät. Das ist 2013.
Warren P

164
sum(map(ord,'Happy new year to you!'))würde 7 Zeichen speichern.

243

Befunge 98 - 17 11 9 8 Bytes

'-:*b-.@

Ähnlich wie die alte Version, aber ich erinnerte mich an '

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

Interessanterweise ist 45 2 -11 die einzige Paarung von Zahlen a, b, wobei Die Bedeutung dieser Mengen ist, dass [32,126 ] ist die Menge der druckbaren ASCII-Zeichen und [10,15] die Menge der leicht zugänglichen Befunge-Zahlen. Ich habe dieses Paar mit diesem Python-Programm gefunden :

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

Wenn Ihr Interpreter Unicode unterstützt, funktioniert Folgendes:

Befunge 98 - 5 Bytes (4 Zeichen)

'ߞ.@

Es funktioniert zumindest unter http://www.quirkster.com/iano/js/befunge.html mit dem folgenden Code (Befunge 93 - 6 Byte / 5 Zeichen):

"ߞ".@

Alte Version

cdd**e-.@

berechnet die Zahl und gibt sie aus:

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

Ältere Version:

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

Pusht die ASCII-Werte für 2014, -10. Anschließend wird jeweils nach dem Hinzufügen von 10 gedruckt.


78
en.wikipedia.org/wiki/Befunge ... was ist das, ich weiß nicht einmal ...
Plato

36
"Die Sprache wurde ursprünglich 1993 von Chris Pressey entwickelt, um eine Sprache zu entwickeln, die so schwer wie möglich zu kompilieren ist" ...
wird am

7
@ 11684 Die Ausgabe ist in der Frage ziemlich gut definiert. Wenn ein Programm gedruckt würde: randomstuff2randomstuff0randomstuff1randomstuff4Ich würde es nicht als gültige Lösung betrachten.
Cruncher

7
@Plato Anstatt den Wikipedia-Artikel zu lesen (der nur Befunge 93 enthält), lesen Sie die offiziellen
Justin

3
Wiki: 'Die Sprache wurde ursprünglich von Chris Pressey im Jahr 1993 als Versuch entwickelt, eine Sprache zu entwickeln, die so schwer wie möglich zu kompilieren ist' ... aber warum?
CousinCocaine

239

Rubin, 15

p Time.new.year

Befristet;)


Beachten Sie, dass der Abschnitt der Frage

unabhängig von externen Variablen wie Datum oder Uhrzeit oder einem zufälligen Startwert

wurde erst bearbeitet, nachdem ich meine Antwort gepostet hatte ...


Jan Dvorak bietet eine großartige Alternative in den Kommentaren :

Happy = Time
Happy.new.year

Aber es ist so wenig begeistert. Ich bevorzuge:

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

Happy.new.year!

Oder auch:

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!

Und hier ist die korrekte englische Interpunktion:

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!

Okay, okay, ich konnte nicht anders:

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 Nein, ist es nicht; Die Frage sagt nichts darüber aus
Türklinke

12
Dies funktioniert nur manchmal richtig.
Hippietrail

119
Bisher hat es in allen Tests gut funktioniert
CoderTao

7
Ich glaube, der Sinn der Frage war es, das laufende Jahr [das dieses Jahr zufällig 2014 ist] zu sagen. Diese Lösung ist daher zeitlich "portabler" als die akzeptierte;). Du (und Jan Dvorak) bekommst meine Stimme!
Olivier Dulac

223

Go, 2 Bytes (UTF-16)

Ein Unicode-Zeichen (2 Byte in UTF-16, 3 Byte in UTF-8), Ausgabe 2014 als Teil eines Fehlers

http://ideone.com/dRgKfk

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

7
Das ist sehr klug, aber die Frage verlangt ein Programm, das die Nummer druckt.
HelloGoodbye

40
Wenn gedruckte Fehlercodes zählen, sollte diese Einsendung gewinnen.
ToastyMallows

37
+1. Die Frage lautet nicht "druckt nur die Nummer und sonst nichts".
Kaz

1
Es ist mir egal, ob es gültig ist oder nicht, es ist ziemlich genial.
Redwolf-Programme

1
Dies ist eine Standardlücke
MilkyWay90

177

Python, 26

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

53
BBC ist 2014 in der Basis 13
Darren Stone

71
Ich gehe davon aus, dass die Verwendung der Buchstaben 'bbc' und der Basis 13 ein Tribut an Douglas Adams ist. "Es mag mir leid tun, aber ich schreibe in Basis 13 keine Witze."
Brian Minton

10
vor 13 Jahren. RUHE IN FRIEDEN.
Darren Stone

4
IMO, diese Antwort ist auf "True Pythonese"
kmonsoor

8
@BrianMinton: Die Verwendung von Basis 13 liegt wahrscheinlich daran, dass es die einzige Basis zwischen 2 und 36 ist, mit der die Zahl 2014 ohne die Zeichen dargestellt werden kann 0- 9.
Dan04

146

MATLAB, Scala (4 Zeichen, 5 Bytes)

Hier können Sie das relativ schwache Typensystem von MATLAB (und Scala) ausnutzen. Der Trick besteht darin, die unäre +Operation auf eine Zeichenfolge anzuwenden, die nur aus dem Zeichen besteht ߞ(UTF-8-Codepunkt U + 07DE oder 2014 in Dezimalzahl). Diese Operation konvertiert den String implizit in ein Double (in MATLAB) und in ein Int(in Scala):

+'ߞ'

Byte-Count-Details:

  • + ist ASCII und zählt für 1 Byte
  • ' ist ASCII und zählt für 1 Byte (erscheint aber zweimal im Ausdruck)
  • ߞ ist ein 2-Byte-UTF-8-Zeichen

Gesamt: 5 Bytes

TeX (32 26 Zeichen (beliebig viele Bytes)

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

Eine noch kürzere Alternative (vorgeschlagen von Joseph Wright ) ist

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

XeTeX / LuaTeX (13 Zeichen, 14 Bytes)

Wenn XeTeX oder LuaTeX zulässig sind, kann die UTF-8-Eingabe direkt verwendet werden (wie von Joseph Wright vorgeschlagen ):

\number`ߞ\bye

\let~\number~`^^T~`^^N\bye25 Zeichen / Byte. Wenn Sie meiner Meinung nach falsch zählen, sind es auch 25 für Ihre Lösung.
Du

1
@tohecz Ich denke, dass unsere beiden Lösungen tatsächlich 26 Byte lang sind.
jub0bs

1
Wenn das aktuelle Jahr gewünscht wird, dann 13 Bytes:\the\year\bye
yo '

2
+'ߞ'funktioniert auch in Scala (und einigen anderen Sprachen, die ich mir vorstelle)
am

118

Gleichstrom, 6 Zeichen

DiBBCp
  • D drückt 13 auf den Stack, obwohl der Eingangsradix anfangs 10 ist
  • i Ändert den Eingaberadix (auf 13 von 10)
  • BBC ist 2014 Basis 13.
  • p druckt.

Konsolenausgabe:

$ dc <<< "DiBBCp"
2014

10
Stimmt, aber das eigentliche DC-Programm ist immer noch DiBBCp(6 Zeichen), der Rest ist nur eine Möglichkeit, es auszuführen.
Daniero

11
Ich wollte das positiv bewerten, aber es hat 42 Punkte! verwendet Basis 13 und das Wort BBC. Wie cool ist das! Scheint, dass wir dieses Jahr die Frage nach Leben, Universum und allem finden werden ;-) en.wikipedia.org/wiki/Base_13 . Stattdessen stimme ich @ danieros Kommentar hoch und hinterlasse die Antwort mit diesem ausgezeichneten Ruf ;-)
Pablo Marin-Garcia

4
@ PabloMarin-Garcia, unglücklicherweise hat es eine ahnungslose Person gebrochen ... Hat jetzt 43 Stimmen. Bitte gehen Sie zurück und stimmen Sie ab! :)
Tomas

3
@Tomas Vogons immer die Vogons. Widerstand gegen die intergalaktische Bürokratie ist zwecklos.
Pablo Marin-Garcia

2
Ich kann den DBefehl nicht einmal in der Manpage finden. Was tut es?
Macht

93

Morsecode, 23

;)

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

21
"In jeder Sprache, in der Zahlen gültig sind"
Türklinke

14
"..---" ist in 5 Strichen ein gültiges Zeichen für die Nummer zwei, oder? Ebenso wie "4" ein gültiges Zeichen für die Zahl "vier" in drei Strichen ist.
DavidC

8
Blindenschrift könnte kürzer sein :)
Dr. belisarius

31
Guter Punkt. Übrigens war ich erleichtert, dass niemand gefragt hat, wie ich Morsecode auf meinem Computer ausführen kann.
DavidC

14
@ DavidCarraher Was meinst du? Ich nahm natürlich an, dass Sie dieses Repo verwendet haben, um es zu entschlüsseln. github.com/Nyubis/mspa-morse-decoder Jeder macht es ...
Michael J. Calkins

88

72 45 Zeichen im Code; Nullzeichencodes

Dies ist bei weitem nicht die kürzeste Antwort, aber bisher hat noch niemand eine Antwort veröffentlicht

  • verwendet keine Zeichencodes als Ersatz für Zahlen und
  • ruft das Systemdatum nicht auf.

Verwenden von reiner Mathematik (okay, und einer automatischen Booleschen Konvertierung) in R über die R-Konsole:

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

Gibt die Zahl 2014 aus. Ist Tein vordefiniertes Synonym für wahr in R. Die Funktionen floorund expsind ebenso wie die piKonstante direkt im Basispaket verfügbar . R hat keinen Inkrementierungsoperator, wiederholt (x*x)jedoch weniger Zeichen, die zweimal inkrementiert und dekrementiert werden.


Originalversion in Javascript (72 Zeichen)

Aus dem einfachen Grund, dass ich in der Konsole testen konnte und es nichts ausmacht, wenn Whitespace fehlt:

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

Führen Sie in Ihrer Konsole aus, und es wird die Nummer 2014 zurück gedruckt.


Requisiten an xkcd (und auch ), damit ich über exp (pi) nachdenke: e zum pi Minus pi

PS Wenn Sie denselben Algorithmus in einer anderen Sprache kürzer machen können, fügen Sie ihm einen Kommentar hinzu.


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

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

1
+1. Sie behaupten jedoch, dass Ihre Antwort die erste war, die "keine Zeichencodes als Ersatz für Zahlen verwendet und das Systemdatum nicht aufruft". Das ist eigentlich falsch. Meine Antwort hat diese cdd**e-.@(vor Ihrer gepostete) Lösung, die keine Zeichencodes oder Systemdaten verwendet. Es berechnet die Zahl 2014 c, dund esind hexadezimale Zahl Ziffern. a, b, ..., fpush (bzw.) 10,11, ... 15 , so 12 * 13 * 13 - 14ist die Berechnung.
Justin

Dies war nicht die erste Antwort, bei der keine Zeichencodes verwendet wurden. Ich habe mehrere frühere.
Timtech

1
@ Quincunx: du hast recht; Ich habe nicht bemerkt, dass Ihre Version Hex-Ziffern und keine Zeichencodes verwendet.
AmeliaBR

85

Scala REPL

34 29 Zeichen.

+"Happy new year to you!".sum

Na gut, wenn Sie wirklich wollen, dass es mit irgendwelchen Zeichen gespielt wird, können Sie Folgendes verwenden:

'@'*' '-'"'

oder

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

die jeweils 11 und 22 Zeichen haben.


4
Interessante Idee, auch wenn es nicht besonders golfen ist. Aber die Zeichenfolge selbst macht es interessanter, als etwas mit hohen Bytes oder so etwas.
Konrad Borowski

Ich habe eine Golfversion hinzugefügt.
Mikaël Mayer

Sie könnten ein paar Zeichen davon speichern toInt: +"Happy new year to you!".sum Test
theon

Aktualisiert. Ich wusste nicht, dass + auch ein Präfix sein könnte.
Mikaël Mayer

68

PHP, 9 Bytes

Dies erfordert PHP 7.1 oder niedriger. Es wird in PHP 7.2 funktionieren, aber es wird eine Warnung auslösen. Keine Garantie für zukünftige Versionen.

xxdwird aufgrund von Binärdaten benötigt (daher ist das Kopieren und Einfügen einfacher). Kann zurückkehren E_NOTICE, aber es spielt keine Rolle, oder?

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

Alternativ können Sie dies mit der ISO-8859-1-Codierung speichern.

<?=~ÍÏÎË;

@Quincunx: Das Hochladen war relativ schwierig, aber hier ist Ideone - ideone.com/APHKhn .
Konrad Borowski

1
Das sieht interessant aus; was tut es?
Justin

7
@Quincunx: Bitweise nicht (0x00 ändert sich in 0xFF und 0x7F ändert sich in 0x80) für jedes Zeichen der Zeichenfolge. Da der String ein gültiger Bezeichner ist (alles mit gesetztem High-Bit ist ein Bezeichner für PHP, wahrscheinlich um andere Codierungen zu unterstützen), hält PHP ihn für eine Konstante, behandelt ihn jedoch als String, da er nicht definiert ist.
Konrad Borowski

2
Wie wäre es mit der Frage "Jetzt, wo es 2014 ist ..." echo date('Y');?
John

6
@ John: Nein. Wenn Sie die Kommentare zu dieser Frage lesen, werden Sie feststellen, dass OP das aktuelle Jahr nicht als Antwort erhalten soll. Außerdem <?=date(Y);wäre 11 Zeichen, und ich habe eine Lösung in 9 Zeichen.
Konrad Borowski

67

C 33 Bytes

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

19
Wie ärgerlich, dass die Primfaktorisierung von 2014 ASCII 5 erfordert!
Ben Jackson

Ich habe für (int a; YES; a ++) {NSLog (@ "% i", a);} für Cocoa Touch-Ziel C erhalten, kann aber noch nichts hinzufügen (nicht genug bewertet). Es zeigt schließlich ein 2014 und es hat einen Compilerfehler und es ist möglich, dass es überhaupt nicht funktioniert und kompiliert ist wahrscheinlich über 4,2 Mega - aber hey.
Recycled Steel

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

1
@mjy Die Byte-Reihenfolge von Literalen mit mehreren Zeichen kann nicht garantiert werden.
Jonathon Reinhart

@ JonathonReinhart-Literale mit mehreren Zeichen sind vollständig implementierungsdefiniert.
FUZxxl

54

Mathematica, 14 Zeichen (oder 15, wenn Sie die Bitmap als Zeichen zählen)

TextRecognize @Bildbeschreibung hier eingeben


50
Eigentlich sollten Sie Bytes zählen, damit es 14 + die Größe des Bitmap-Bildes ist.
Sylwester

22
Die Bitmap würde wahrscheinlich aus 7.357 Zeichen bestehen.
Joe Z.

5
Ich glaube auch, dass einige der Bytes im Bild in den \dBereich fallen. Wenn es sich nämlich um das GIF handelt, enthält der Header selbst garantiert einige.
John Dvorak

13
Ihr seid alle Killjoys. Gut, verwenden Sie First @ ToCharacterCode @ "ߞ" für 25 Zeichen, 26 Bytes.
Michael Stern

9
Als Bonus gibt es hier eine Mathematica-Lösung in 30 Zeichen --URLFetch @ " goo.gl/miVwHe "
Michael Stern

53

Python3.4.0b2 (0 Bytes)

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

Dies wird nicht funktionieren, wenn die Leute in einem Jahr ihre Version von Python 3 aktualisieren.
Joe Z.

21
Deshalb habe ich python3.4.0b2 erwähnt . Es kommt nicht zweimal vor. Das Veröffentlichungsdatum, nicht das Systemdatum.
SIE

6
Das hat mich zum Lächeln gebracht!
Matt Fletcher

2
Funktioniert auch in Python 3.4.2.
Erik der Outgolfer

Sie dürfen keine externen Ausgaben hinzufügen.
MilkyWay90

48

Javascript, 23 Bytes

Verwendet die Base 64-Konvertierung

alert(atob("MjAxNA=="))

23 Zeichen (16 mit atob alleine)

Oder

alert("MMXIV") // ;)

27
MMXIVhat keine gemeinsamen Charaktere mit 2014, zuletzt habe ich nachgesehen ...// ;)
Joe Z.

23
Die alten Römer könnten anderer Meinung sein. Die erste produziert 2014 allerdings in modernem Englisch.
Logik8

1
Ihr erstes wird jedoch nicht ausgegeben ...
Türklinke

1
Wenn Sie die Konsole in Chrom öffnen, sie einfügen und die Eingabetaste drücken, wird der Wert zurückgegeben. Ich füge ihr ohnehin eine Warnung hinzu, die länger ist als andere.
logic8

5
@ logic8: Schön eins +1. Eine andere JavaScript-Version, die auch funktioniert: (4 Bytes) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);Obwohl ich nicht sicher bin, ob sie den Joe ZAnforderungen entspricht.
Nope

41

Perl - 10 Zeichen

Diese Lösung wurde mit freundlicher Genehmigung von BrowserUK auf PerlMonks erstellt , obwohl ich einige unnötige Satzzeichen und Leerzeichen von der von ihm veröffentlichten Lösung entfernt habe. Es ist ein bitweises "Nicht" für eine vierstellige Binärzeichenfolge.

say~"ÍÏÎË"

Die oben angezeigten Zeichen stellen die binären Oktette cd: cf: ce: cb dar und entsprechen der Darstellung in ISO-8859-1 und ISO-8859-15.

Hier ist das gesamte Skript in hexadezimaler Schreibweise sowie ein Beispiel, in dem es ausgeführt wird:

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

Perl (ohne hohe Bits) - 14 Zeichen

say'````'^RPQT

Dies verwendet ein bitweises "oder" für die beiden Zeichenfolgen mit vier Zeichen "RPQT"und "````"(dh vier 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

(Anfangs hatte ich die beiden Zeichenfolgen umgekehrt, was Leerzeichen zwischen printund RPQTzum Trennen der Token erforderte . @DomHastings wies darauf hin, dass ich ein Zeichen speichern könnte, indem ich sie vertauschte.)

Perl (Schummeln) - 8 Zeichen

Dies ist wahrscheinlich nicht im Sinne des Wettbewerbs, aber hdb auf PerlMonks hat darauf hingewiesen, dass Perl eine Variable namens $0enthält, die den Namen des aktuell ausgeführten Programms enthält. Wenn wir die Datei mit dem Skript "2014" benennen dürfen, ist $0sie gleich 2014. Sie $0enthält eine Ziffer, daher können wir sie nicht direkt verwenden, aber wenn ${...}ein Ausdruck mit 0 ausgewertet wird, ist dies in Ordnung. zum Beispiel:

say${$|}

Lassen Sie uns der Konsistenz halber das Hexcat-dann-Perl-Ding damit machen:

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

Ich denke, das ist Betrug, aber es ist trotzdem eine interessante Lösung, die es wert ist, erwähnt zu werden.


2
Hey, wenn Sie die Zeichenfolge und Barewords umkehren, können Sie ein Zeichen sparen: print"````"^RPQT. Es könnte möglich sein, sayauch auf 5.10+ -E anstelle von -e zu verwenden, aber ich weiß nicht, ob dies eine +2 Strafe für verschiedene Befehlszeilenargumente zur Folge hat.
Dom Hastings

2
Es wird als akzeptabel angesehen, anzugeben, dass Sie Perl 5 verwenden und sayfür keine Strafe verwenden.
Peter Taylor

@DomHastings, ich persönlich denke, wenn Sie es mit "-e" oder "-E" machen wollen, würde ich sagen, dass Sie dann den gesamten Befehl einschließlich "perl -E" in Ihre Zeichenanzahl aufnehmen müssen .
Bis


4
Sie können auch ein anderes Byte speichern, indem Sie Zeichenfolgenliterale verwenden, für die keine Anführungszeichen erforderlich sind, z say ABCD^srrp.
Primo

40

Rubin, 20

p 'bbc'.to_i ?\r.ord

Erläuterung: bbcbefindet sich 2014in Basis 13. Kürzer als Python. Nicht so kurz wie Forth.


23
"Niemand schreibt Witze in Basis 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 'ߞ'.ordfür ein voll funktionsfähiges Programm, 'ߞ'.ordinnen irb. Arbeitet an 1.9+
Ricardo Panaggio

1
Ohne "seltsame" Unicode-Zeichen: ?-*?--?\v(45 * 45 - 11) (Ruby 1.8)
Ricardo Panaggio

Ein Zeichen kleiner: ?.*?.-?f(46 * 46 - 102) (nur wieder Ruby 1.8)
Ricardo Panaggio

29

Powershell, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) wird gemäß der Code-Golf-Tag-Information als zwei Bytes gezählt .

[""]Gibt das erste Zeichen der Zeichenfolge zurück ( ""wird konvertiert in 0). Der unary plus opeartor ( +) konvertiert das Zeichen in eine Ganzzahl.



@GlitchMr, danke, ich habe meine Antwort korrigiert.
Danko Durbić

3
Das ['']ist ein schöner Trick. Ich habe normalerweise verwendet, [char]aber das ist in der Tat kürzer :)
Joey

27

Scala REPL - 6 Zeichen

"?="##

( ##Ist die Symbolbedeutung von Scala hashCodeund der Java-String entspricht "?="2014.)

Scala REPL - 4 Zeichen, 5 Bytes

+'ߞ'

Mathe auf unserem Lieblings-Unicode-Charakter ergibt eine Int.


27

Javascript, 18 Zeichen

alert(btoa('ÛMx'))

Update: In ES6 können mit einem Vorlagenliteral zwei Zeichen gespeichert werden:

alert(btoaMx`)

Der obige Code ist recht einfach zu verstehen, wenn man bedenkt, dass btoaeine Zeichenfolge gemäß einer Reihe gut definierter Regeln ( RFC 4648 ) in eine andere Zeichenfolge konvertiert wird . Um zu sehen, wie die Konvertierung funktioniert, schreiben wir die Eingabezeichenfolge "ÛMx" als Folge von Binärziffern, wobei jedes Zeichen als 8-Bit-Zeichencode dargestellt wird.

Eingabezeichen | Û | M | X
Zeichencode (dezimal) | 219 | 77 | 120
Zeichencode (binär) | 11011011 | 01001101 | 01111000

Nach der Reorganisation der Binärziffern in der letzten Zeile in 6er-Gruppen erhalten wir die Binärdarstellung von 4 neuen Zahlen, die den Base64-Indizes der 4 Zeichen in der Zeichenfolge "2014" entsprechen.

Base64-Index (binär) | 110110 | 110100 | 110101 | 111000
Base64-Index (dezimal) | 54 | 52 | 53 | 56
Ausgabezeichen | 2 | 0 | 1 | 4

Gemäß der HTML-Spezifikation können die Ausgabezeichen anhand der folgenden Tabelle aus ihren Base64-Indizes abgerufen werden: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Wenn Sie sich nicht um die Details kümmern, können Sie den Browser die Berechnungen für Sie durchführen lassen und feststellen, dass "ÛMx" das Ergebnis der Auswertung atob('2014')in Javascript ist.


In der Frage wird erwähnt, wie die Nummer gedruckt wird. Ich weiß, dass die Auswertung in einer Konsole dazu führt, dass das Ergebnis zurückgegeben wird, aber bei Code Golf wird im Allgemeinen erwartet, dass JS-Antworten eine Form von E / A enthalten ( alertam häufigsten).
zzzzBov

@zzzzBov Ja, meine ursprüngliche Antwort enthielt einen alertAnruf.
GOTO 0

Es listet die Community als entfernt auf alert. Ich frage mich, ob sich die Standards für JS Codegolf geändert haben oder ob es sich nur um eine Änderung handelt, die von der Community übernommen wurde.
zzzzBov

@zzzzBov: Es war eine Änderung durch einen anonymen Benutzer, die von SHiNKiROU und luser droog akzeptiert wurde. Wie auch immer, diese Änderung hat eine Diskussion über Meta ausgelöst ( meta.codegolf.stackexchange.com/questions/803/… ).
Konrad Borowski

@xfix, Es ist nicht nur diese Bearbeitung, die mich veranlasst hat, diese Frage auf Meta zu stellen. Ich habe genug Code-Golfs gesehen, bei denen sich die Leute darüber streiten, ob die Dev-Konsole als Druckkonsole gilt. Ich dachte, es lohnt sich, nach einem Standard zu fragen.
zzzzBov

24

Noch ein GolfScript-Eintrag, 9 druckbare Zeichen

Ich glaube, das ist kürzer als alle druckbaren GolfScript-Einträge:

"!="{*}*)

( Peter Taylors 7- Zeichen -Eintrag schlägt es, enthält aber nicht druckbare Steuerzeichen.)

Ich nenne das das "das ist so letztes Jahr!" Eintrag, denn was es tatsächlich tut, ist die Zahl 2013 in 8 Zeichen, als 33 × 61, zu generieren und dann um eins zu erhöhen. ;-)


Sie gewinnen (für 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');}

Wie wäre es einfach "%x"und 'b'*'S'? Das ist 8212 dez oder 2014 hex. Speichert ein Zeichen für ein Literal und zwei Zeichen für eine Formatzeichenfolge.
MSalters

@MSalters Nein, 'b'*'S'ist 8134. Die Hauptfaktorisierung von 8212 ist 2 * 2 * 2053, daher sehe ich keinen einfachen Weg, sie herzustellen.
Fredoverflow

Bah, mit Integer Division überprüft, dass 8212/'b' == 'S':(
MSalters

und Oktal funktioniert auch nicht (02014 = 1036 = 37 * 28, 28 ist nicht druckbar)
MSalters

1
@FredOverflow Was ist mit meiner 28-Zeichen-Lösung? main () {puts (__ DATE __ + '\ a');}
Arunprasad Rajkumar

20

Viertens, 14

'> '" * '^ - .      

1
Können Sie erklären, wie das funktioniert?
ProgramFOX

1
Ich drücke Integer-Konstanten als Zeichenliterale mit ihren Ordinalwerten (ASCII) aus. Das ist also: 62 34 * 94 - . Wenn du nicht weiter sprichst, bedeutet das print (62 * 34 - 94).
Darren Stone

Forth (Gforth 0.7.0), 5 Bytes, 4 Zeichen: Gibt 'ߞ .das Zeichen aus.
18446744073709551615

20

GolfScript, 14

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

So funktioniert es: ASCII geht so:

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

Dies nimmt also die ASCII-Codes jedes Zeichens, subtrahiert fünf und fügt sie in eine Zeichenfolge ein.

{...}%Gibt ein Array der Zeichen einer Zeichenfolge zurück, die zugeordnet sind, wenn eine Zeichenfolge als Argument angegeben wird. So erhöht es jedes Zeichen um 5 ( )bedeutet Inkrement).


Das +am Ende ist unnötig. Anstatt fünfmal zu erhöhen, addieren Sie einfach fünf. Gesamteinsparung: 4 Zeichen. '-+,/'{5+}%
Justin

15
@Quincunx 5ist eine Zahl.
Peter Taylor

5
@PeterTaylor Ich vergesse immer wieder.
Justin

Clevere Lösung
Sumurai8

Die CJam Version davon: "-+,/"_,)f+. :) (Andererseits hat CJam KD.)
Martin Ender

19

Python, 32 Zeichen

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

Wahrscheinlich ist es möglich, es mit dem 2014. Unicode-Zeichen zu reduzieren ߞ, aber ich habe es nicht versucht.

Quincunx merkt das an

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

ist um drei Zeichen kürzer.


Die Unicode - Version funktioniert, zumindest in Python 3 mit IDLE: print(ord("ߞ")). Es scheint nicht in Python 2 zu funktionieren; Python 2 unterstützt wahrscheinlich keinen Unicode.
Justin

3
Außerdem ist Ihre Version a=ord('.');print(a*a-ord('f'))2 Zeichen kürzer.
Justin

@ Quincunx Es wird unterstützt, Sie müssen jedoch eine bestimmte Codierung für Ihre Datei festlegen und uam Ende der Zeichenfolge anfügen (wäre "ߞ"u)
Kroltan

2
@Kroltan Eigentlich bin ich mir ziemlich sicher, dass der zweite Teil nicht stimmt. In Python 2 mussten Sie Zeichenfolgen voranstellen , um uzu sagen, dass sie Unicode waren, in Python 3 sind jedoch alle Zeichenfolgen automatisch Unicode
murgatroid99

1
Ähnlich wie oben kommentiert, ist Unicode ohne print ord('.')**2-ord('f')etwas kürzer.
MLS

18

APL (6 Bytes, 4 Zeichen)

⊃⎕TS

Funktioniert allerdings nur in diesem Jahr.

Warum es funktioniert:

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

Ohne auf das Systemdatum angewiesen zu sein, sind es 10 Bytes (7 Zeichen):

⎕UCS'ߞ'

6
Leider sind Antworten, die nur für dieses Jahr funktionieren, ungültig.
Joe Z.

Ich kenne APL nicht: Ist dieses quadratische Kästchen ein APL-Zeichen oder fehlt mir eine Schriftartdarstellung (Chrome)?
Carl Witthoft

@JoeZ .: Die Frage sagt das nicht aus, aber ich habe eine hinzugefügt, die sich nicht darauf stützt, dass es 2014 ist.
Marinus

4
@CarlWitthoft: Es heißt quad ( ) und soll so aussehen.
Marinus

18

Python 32 10 Bytes, 91 85 (66 mit mathstandardmäßig importierten) Bytes reine Mathematik

Hatte ein bisschen Spaß beim Schreiben:

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)

Druckt alle möglichen Schreibweisen 2014nach Bruno Le Floch (32 Zeichen):

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

Dies ist jedoch offensichtlich redundant. Wenn Ihr Interpreter also standardmäßig auf utf-8 eingestellt ist, ist Folgendes erforderlich:

>>> ord(u'ߞ')
2014

Dank AmeliaBR (für die Idee) habe ich mein Bestes gegeben, um eine reine Mathematikversion zu implementieren:

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 Nun, das hat eine Ziffer :)
Joachim Isaksson

2
Ich optimiert Ihre mathematischen Version ein bisschen: a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-a, und Sie können , indem sie sich die Tatsache zunutze , die Mathematik Import völlig auszuschließen , dass Truein Python 2.x auf die ganze Zahl 1 im Betrieb identisch ist, es bis zu 50 Zeichen zu bringen:o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
Ponkadoodle

Sie können einen Charakter speichern, wenn Sie Python 3 verwenden:ord('ߞ')
asmeurer

@ JoachimIsaksson Eine Ziffer ist keine Zahl;)
Mega Man

17

R (20 Zeichen)

@popojan (er darf hier noch keine Antwort schreiben) hat die Lösung innerhalb von 20 Zeichen bereitgestellt.

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

Ausgabe:

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

R (22 Zeichen)

Anonymer Benutzer hat kürzere Lösung vorgeschlagen.

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

2014ist BBCin der Basis 13. pi*pi+pi(= 13.0112) wird in diesem Zusammenhang von R als ganze Zahl 13 behandelt.

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

R (30 Zeichen)

Vielen Dank an @Tomas!

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

Ausgabe:

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

R (31 Zeichen)

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

Inspiriert von der Antwort von AmeliaBR . Ausgabe:

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

Wow, +1! Und ich hoffte, meine Lösung mit römischen Ziffern wird die beste sein ... :( ;-)
Tomas

Die folgenden Varianten können verkürzt werden: cat(a<-T+T,T-T,T/T,a^a,sep="")(30 Zeichen), paste0(aT+T,T-T,T/T,a^a)(26 Zeichen)
Tomas

@Tomas, die Funktion paste0ist nicht erlaubt, da sie das Symbol enthält 0. Ihre Lösung enthält 30 Zeichen, wenn Sie verwenden cat.
Djhurio

Datei 2014im aktuellen Verzeichnis erstellen und schreiben list.files()- 12 Zeichen
Zbynek

@Zbynek, ich erwarte, dass Ihre Lösung im allgemeinen Geltungsbereich der Codegolf-Regeln nicht gültig ist.
Djhurio

15

Java - 77 75 Zeichen

75 Zeichen, wenn printin einer Klasse mit der Hauptmethode hinzugefügt wird:

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

Das heißt, 35*60-86das ist gleich 2014


2
Ich mag deine Formel.
Johannes

7
Dies muss tatsächlich länger sein, da die Klassendefinition enthalten sein muss, um ausgeführt zu werden. Kürzester Weg, den ich kenne (mit Java 6):class a{static{System.out.println('#'*'<'-'V');}}
Justin

1
@ Quincunx, mit Java 7, ist eine Hauptmethode erforderlich
True Soft

2
@ TrueSoft Hinweis Ich sagte "mit Java 6". Sie sollten das kürzestmögliche Java auswählen.
Justin

2
Sie können 'ln' in println entfernen, um Zeichen zu reduzieren ...
laksys
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.