Produisez le numéro 2014 sans aucun chiffre dans votre code source

579

Note pour défier les rédacteurs selon une méta-consensus : cette question a été bien accueillie lorsqu'elle a été postée, mais les défis de ce type, demander aux personnes qui répondent à Do X sans utiliser Y risquent d'être mal accueillis. Essayez d’utiliser le bac à sable pour obtenir des commentaires si vous souhaitez publier un défi similaire.


Nous sommes en 2017 2018 2019, rentrez chez vous.

Donc, maintenant que nous sommes en 2014, il est temps de poser une question sur le code portant le numéro 2014.

Votre tâche consiste à créer un programme qui imprime le nombre 2014, sans utiliser aucun des caractères 0123456789de votre code, et indépendamment de toute variable externe telle que la date ou l'heure ou une graine aléatoire.

Le code le plus court (comptant en octets) pour le faire, quelle que soit la langue dans laquelle les nombres sont valides, gagne le jeton.


Classement:

Joe Z.
la source
10
Même si les chiffres sont ignorés dans le brainfuck, je pensais en publier un de toute façon. 32 Chars:++++++[>++++++++<-]>++.--.+.+++.
Braden Best
4
Brainfuck n'est pas un langage valide pour ce défi.
Joe Z.
8
Je me demande si cette question suscite un léger pic de popularité en ce début d'année.
Joe Z.
3
En attendant "Allez les gars, vous ne réalisez pas que c'est 2016?" :)
Padawan
1
@BradenBest Il est possible de faire cela en 31 caractères d'au moins deux manières différentes: +++++++ [> +++++++ <-]> + .--. +. +++. et ++++++++++ [> +++++ <-]> .--. +. +++.
Zubin Mukerjee le

Réponses:

126

Souris-2002 , 4 octets.

C'est 4 octets d' ASCII pur et doux .

Dans Mouse , les lettres de l'alphabet sont initialisées aux valeurs 0-25. !est l'opérateur pour l'impression des entiers, donc ceci est 20ensuite imprimé 14(pas de nouvelle ligne intermittente).

U!O!

Il n'y a pas d' interprète disponible en ligne, mais ici vous trouverez un interprète écrit en C (nécessitant quelques modifications avant que l' on peut forcer gccà le compiler) et le même interpréteur compilé pour Win32mais qui fonctionne parfaitement sous Linux avec wine.

Ici vous pouvez trouver la version corrigée de l'interpréteur, qui compile.

chat
la source
7
Wow, c'est une découverte incroyable, beaucoup plus tard, après le défi. Et avec une langue si ésotérique, personne ici n'en avait encore entendu parler!
Joe Z.
3
BTW: cela fait la même chose que CJam KE, mais est en fait valable parce que c'est un langage d'avant 2014.
Joe Z.
7
Le regard suffisant sur mon visage ressemble maintenant à celui d'un sorcier Fortran-77 après avoir battu un partisan de Python dans un code plus rapide .
chat
56
C'est un jeu de @cat et Mouse-2002.
Digital Trauma
5
@DigitalTrauma en effet: 3
cat
1300

Python, 52 octets

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

Mis à jour pour 2015 grâce à @Frg:

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

Passez la souris sur la version 2016:

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

Essayez-le en ligne!

dansalmo
la source
186
Vous méritez l'intelligence Award
Carter Pape
167
wow - c'est dans l'esprit de cette question. <3
Johannes
80
J'étais un peu surpris que ce ne soit que la 4ème phrase que j'ai essayée après "Bonne année!", Ce qui aurait été parfait pour l'année 1374.
dansalmo
55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') Oh, attends, j'ai un an de retard. C'est 2013.
Warren P
164
sum(map(ord,'Happy new year to you!'))permettrait d'économiser 7 caractères.
243

Befunge 98 - 17 11 9 8 octets

'-:*b-.@

Semblable à l'ancienne version, mais je me souvenais de '

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

Il est intéressant de 45 2 -11 est le couplage seulement des nombres a, b , où La signification de ces ensembles est que [32126] est l'ensemble des caractères imprimables ascii et [10,15] est l'ensemble des nombres Befunge facilement accessibles. J'ai trouvé cette paire avec ce programme 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))

Ou, si votre interprète prend en charge l'unicode, cela fonctionne:

Befunge 98 - 5 octets (4 caractères)

'ߞ.@

Cela fonctionne au moins sur http://www.quirkster.com/iano/js/befunge.html avec le code suivant (Befunge 93 - 6 octets / 5 caractères):

"ߞ".@

Ancienne version

cdd**e-.@

calcule le nombre puis l’imprime:

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

Ancienne version:

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

Pousse les valeurs ascii pour 2014, -10. Puis imprime chacun après avoir ajouté 10.

Justin
la source
78
en.wikipedia.org/wiki/Befunge ... qu'est-ce que je ne fais même pas ...
Plato
36
"Le langage a été créé à l'origine par Chris Pressey en 1993 dans le but de concevoir un langage aussi difficile à compiler que possible" ...
will
7
@ 11684 Le résultat est plutôt bien défini dans la question. Si un programme est imprimé: randomstuff2randomstuff0randomstuff1randomstuff4je ne considérerais pas cela comme une solution valable.
Cruncher
7
@ Plato Plutôt que de lire l'article de Wikipédia (qui ne comprend que Befunge 93), si vous voulez en savoir plus sur Befunge 98, lisez les spécifications officielles
Justin
3
Wiki: "Le langage a été créé par Chris Pressey en 1993 dans le but de concevoir un langage aussi difficile à compiler que possible" ... mais pourquoi?
CousinCocaine
239

Ruby, 15 ans

p Time.new.year

Temporaire;)


Notez que la section de la question

indépendamment de toute variable externe telle que la date ou l'heure ou une graine aléatoire

n’a été modifié que longtemps après que j’ai posté ma réponse ...


Jan Dvorak offre une excellente alternative dans les commentaires :

Happy = Time
Happy.new.year

Mais c'est tellement peu enthousiaste. Je préfère:

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

Happy.new.year!

Ou même:

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!

Et voici la ponctuation anglaise correcte:

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!

D'accord, d'accord, je ne pouvais pas m'en empêcher:

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!
Poignée de porte
la source
168
Happy = Time; Happy.new.year
John Dvorak
5
@ Hobbs Non ce n'est pas; la question n'en dit rien
Bouton de porte
12
Cela ne fonctionnera correctement que de temps en temps.
hippietrail
119
Il a bien fonctionné dans tous les tests à ce jour
CoderTao
7
Je crois que l'esprit de la question était de dire l'année en cours [qui se trouve être 2014 cette année]. Cette solution est donc plus "portable" dans le temps que celle acceptée;). Vous (et Jan Dvorak) obtenez mon vote!
Olivier Dulac
223

Go, 2 octets (UTF-16)

Un caractère Unicode (2 octets en UTF-16, 3 octets en format UTF-8), sortie 2014 dans le cadre d'une erreur

http://ideone.com/dRgKfk

can't load package: package : 
prog.go:1:1: illegal character U+2014 '—'
TOI
la source
7
C'est très intelligent, mais la question demande un programme qui affiche le nombre.
HelloGoodbye
40
Si les codes d'erreur imprimés comptent, cette soumission devrait l'emporter.
ToastyMallows
37
+1 La question ne dit pas "imprime seulement le nombre et rien d’autre".
Kaz
1
Je me moque de savoir si c'est valide ou non, c'est plutôt génial.
Programmes Redwolf
1
C'est une échappatoire standard
MilkyWay90
177

Python, 26 ans

print int('bbc',ord("\r"))
Darren Stone
la source
53
bbc is 2014 en base 13
Darren Stone
71
Je suppose que l'utilisation des personnages "bbc" et l'utilisation de la base 13 est un hommage de Douglas Adams. "Je suis peut-être désolé, mais je n'écris pas de blagues en base 13."
Brian Minton
10
Il y a 13 ans. DÉCHIRURE.
Darren Stone le
4
OMI, cette réponse est dans "True Pythonese"
kmonsoor
8
@BrianMinton: L'utilisation de la base 13 est probablement due au fait que c'est la seule base entre 2 et 36 qui permet au numéro 2014 d'être représenté sans aucun des caractères 0- 9.
dan04
146

MATLAB, Scala (4 caractères, 5 octets)

Vous pouvez tirer parti du système de types relativement faible de MATLAB (et de Scala), ici. L'astuce consiste à appliquer l' +opération unaire sur une chaîne composée uniquement du caractère ߞ(du point de code UTF-8 U + 07DE ou 2014 en décimal). Cette opération convertit implicitement la chaîne en un double (en MATLAB) et en un Int(en Scala):

+'ߞ'

Nombre d'octets:

  • + est ASCII et compte pour 1 octet
  • ' est ASCII et compte pour 1 octet (mais apparaît deux fois dans l'expression)
  • ߞ est un caractère UTF-8 à 2 octets

Total: 5 octets

TeX (32 26 caractères, autant d'octets)

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

Une alternative encore plus courte (proposée par Joseph Wright ) est

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

XeTeX / LuaTeX (13 caractères, 14 octets)

Si XeTeX ou LuaTeX sont autorisés, l'entrée UTF-8 peut être utilisée directement (comme proposé par Joseph Wright ):

\number`ߞ\bye
jub0bs
la source
\let~\number~`^^T~`^^N\bye25 caractères / octets. Vous comptez mal à mon humble avis, il est également 25 pour votre solution.
Yo '
1
@tohecz Je pense que nos deux solutions ont une longueur de 26 octets.
Jub0bs
1
Si vous voulez l'année en cours, alors 13 octets:\the\year\bye
le
2
+'ߞ'fonctionne aussi en scala (et quelques autres langues j'imagine)
theon
118

dc, 6 caractères

DiBBCp
  • D pousse 13 sur la pile, même si la base d'entrée est 10 initialement
  • i change la base d'entrée (de 13 à 13)
  • BBC est 2014 base 13.
  • p impressions.

Sortie de la console:

$ dc <<< "DiBBCp"
2014
Daniero
la source
10
C'est vrai, mais le programme en continu est toujours DiBBCp(6 caractères), le reste n'est qu'un moyen de le lancer.
daniero
11
J'allais upvoter cela, mais il a 42 points! utilise la base 13 et le mot BBC. À quel point cela est cool! Il semble que cette année nous trouverons la question de la vie, de l’univers et du monde ;-) en.wikipedia.org/wiki/Base_13 . Je vote plutôt le commentaire de @ daniero à la place et laisse la réponse avec cette magnifique 42e réputation ;-)
Pablo Marin-Garcia
4
@ PabloMarin-Garcia, malheureusement, une personne ignorante l'a brisé ... A 43 voix maintenant. S'il vous plaît revenir en arrière et downvote! :)
Tomas
3
@ Thomas Vogons toujours les Vogons. La résistance est vaine contre la burocratie intergalactique.
Pablo Marin-Garcia
2
Je ne parviens même pas à trouver la Dcommande dans la page de manuel. Qu'est ce que ça fait?
Qu'à cela
93

Code morse, 23

;)

..--- ----- .---- ....-
DavidC
la source
21
"dans toute langue dans laquelle les chiffres sont des jetons valides"
Bouton de porte
14
"..---" est un jeton valide, en 5 coups, pour le numéro deux, non? Tout comme "4" est un jeton valide, en trois coups, pour le nombre "quatre".
DavidC
8
Le braille pourrait être plus court :)
Dr. belisarius
31
Bon point. Au fait, j'étais soulagé que personne ne me demande comment j'obtiens du code Morse sur mon ordinateur.
DavidC
14
@DavidCarraher Que voulez-vous dire? J'ai naturellement supposé que vous utilisiez ce dépôt pour le décoder. github.com/Nyubis/mspa-morse-decoder Tout le monde le fait ...
Michael J. Calkins Le
88

72 45 caractères dans le code; Codes de caractère zéro

C’est loin d’être la réponse la plus courte publiée, mais personne n’a encore posté de réponse

  • n'utilise pas de codes de caractères pour remplacer des chiffres, et
  • n'appelle pas la date du système.

Utilisation de mathématiques pures (d'accord, et d'une conversion booléenne automatique) sous R, à partir de la console R:

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

Imprime le nombre 2014. Test un synonyme prédéfini pour true dans R. Les fonctions flooret expsont directement disponibles dans le package de base, tout comme la piconstante. R n'a pas d'opérateur d'incrémentation, mais il est répété (x*x)qu'il y a moins de caractères qui incrémentent et décrémentent deux fois chacun.


Version originale en Javascript (72 caractères)

Pour la simple raison que j'ai pu tester sur la console et que l'absence totale d'espace est un inconvénient:

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

exécutez dans votre console et il imprimera le numéro 2014.


Des accessoires à xkcd (et aussi ) pour m'avoir fait penser à exp (pi): e au pi Minus pi

PS Si vous pouvez raccourcir le même algorithme dans une langue différente, postez un commentaire avec celui-ci.

AmeliaBR
la source
1
o =! ""; (o + o) + "" + (oo) + (o + oo) + (o + o + o + o)
Kernel James
4
25 octets: alert ('ߞ'. CharCodeAt ())
oberhamsi
1
+1 Cependant, vous affirmez que votre réponse était la première réponse qui "n'utilise pas les codes de caractères comme substitut aux nombres et n'appelle pas la date du système". C'est en fait faux. Ma réponse a cette solution cdd**e-.@(postée avant la vôtre) qui ne fait pas usage de codes de caractères ni de date système. Il calcule le nombre 2014. c, det esont les chiffres du numéro hexadécimal. a, b..., fpoussée (respectivement) 10,11 ... 15 donc 12 * 13 * 13 - 14est le calcul.
Justin
Ce n'était pas la première réponse à ne pas utiliser les codes de caractères; J'ai plusieurs précédents.
Timtech
1
@ Quincunx: tu as raison; Je n'ai pas remarqué que votre version utilisait des chiffres hexadécimaux, pas des codes de caractères.
AmeliaBR
85

Scala REPL

34 29 caractères.

+"Happy new year to you!".sum

Bien ok si vous voulez vraiment jouer avec des personnages, vous pouvez utiliser:

'@'*' '-'"'

ou

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

qui ont respectivement 11 et 22 caractères.

Mikaël Mayer
la source
4
Idée intéressante, même si ce n'est pas particulièrement joué au golf. Mais la chaîne elle-même le rend plus intéressant que quelque chose qui utilise des octets élevés ou quelque chose comme ça.
Konrad Borowski
J'ai ajouté une version golfée.
Mikaël Mayer
Vous pourriez sauver quelques personnages toIntcomme ceci: +"Happy new year to you!".sum Test
theon
Mis à jour. Je ne savais pas que + pourrait aussi être un préfixe.
Mikaël Mayer
68

PHP, 9 octets

Cela nécessite PHP 7.1 ou inférieur. Cela fonctionnera sous PHP 7.2, mais cela entraînera un avertissement. Aucune garantie pour les versions futures.

xxdnécessaires en raison de données binaires (il serait donc plus facile de copier et coller). Peut revenir E_NOTICE, mais cela n'a pas vraiment d'importance, n'est-ce pas?

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

Sinon, enregistrez ceci en utilisant le codage ISO-8859-1.

<?=~ÍÏÎË;
Konrad Borowski
la source
@Quincunx: Le téléchargement de ce fichier était relativement compliqué, mais voici Ideone - ideone.com/APHKhn .
Konrad Borowski
1
Cela semble intéressant; Qu'est ce que ça fait?
Justin
7
@Quincunx: Cela ne se produit pas au niveau des bits (0x00 se transforme en 0xFF et 0x7F se transforme en 0x80) sur chaque caractère de la chaîne. Comme la chaîne est un identifiant valide (tout ce qui a un bit élevé est un caractère d'identification pour PHP, probablement pour supporter d'autres encodages), PHP pense que c'est une constante, mais comme il n'est pas défini, il le traite comme une chaîne.
Konrad Borowski
2
Puisque la question était "Maintenant que c'est 2014 ...", que diriez-vous echo date('Y');?
Jean le
6
@ John: Nope. Si vous lisiez les commentaires de la question, vous remarquerez que OP ne veut pas que l'année en cours soit une réponse. En outre, <?=date(Y);serait de 11 caractères, et j'ai une solution à 9 caractères.
Konrad Borowski
67

C, 33 octets

main(){printf("%d",'A'*' '-'B');}
Sudharsan Mohan
la source
19
Quelle gêne que la première factorisation de 2014 nécessite ASCII 5!
Ben Jackson
J'ai obtenu pour (int a; YES; a ++) {NSLog (@ "% i", a);} pour l'objectif C de Cocoa Touch, mais je ne peux pas encore ajouter (classé insuffisamment). Il montre une année 2014 finalement et il a une erreur de compilation et il est possible que cela ne fonctionne pas du tout et que la compilation soit probablement d'environ 4,2 mégawatts - mais bon.
Acier recyclé
main () {printf ("% d", '\ a \ xde');}
mardi
1
@mjy L'ordre des octets des littéraux à plusieurs caractères n'est pas garanti.
Jonathon Reinhart
Les littéraux multi-caractères @JonathonReinhart sont entièrement définis par la mise en oeuvre.
FUZxxl
54

Mathematica, 14 caractères (ou 15 si vous comptez le bitmap comme un caractère)

TextRecognize @enter image description here

Michael Stern
la source
50
En fait, vous devez compter les octets pour qu’elle soit 14 + la taille de l’image bitmap.
Sylwester
22
Le bitmap serait probablement 7 357 caractères, vraiment.
Joe Z.
5
De plus, je pense que certains des octets de l’image tombent dans cette \dplage. À savoir, s'il s'agit du GIF, l'en-tête lui-même est garanti en contenir.
John Dvorak
13
Vous êtes tous killjoys. Très bien, utilisez First @ ToCharacterCode @ "" pour 25 caractères, 26 octets.
Michael Stern
9
En bonus, voici une solution Mathematica en 30 caractères --URLFetch @ " goo.gl/miVwHe "
Michael Stern
53

Python3.4.0b2 (0 octet)

% 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.
>>> 
TOI
la source
Cela ne fonctionnera pas une fois que les utilisateurs auront mis à jour leur version de Python 3 dans un an.
Joe Z.
21
C'est pourquoi j'ai mentionné python3.4.0b2 , cela n'arrivera pas deux fois. Sa date de sortie, pas la date du système.
VOUS
6
Cela m'a fait sourire!
Matt Fletcher
2
Fonctionne également en Python 3.4.2.
Erik the Outgolfer
Vous n'êtes pas autorisé à ajouter des sorties superflues.
MilkyWay90
48

Javascript, 23 octets

Utilise la conversion en base 64

alert(atob("MjAxNA=="))

23 caractères (16 avec atob seul)

Ou

alert("MMXIV") // ;)
logique8
la source
27
MMXIVn'a pas de caractère en commun avec 2014, la dernière fois que j'ai vérifié ...// ;)
Joe Z.
23
Les anciens Romains pourraient être en désaccord. Le premier produit cependant 2014 en anglais moderne.
logic8
1
Ton premier ne sort pas bien ...
Bouton de porte
1
Si vous ouvrez la console en chrome, collez-la et appuyez sur Entrée, elle renvoie la valeur. J'ajouterai une alerte car elle est plus longue que les autres.
logic8
5
@ logic8: Nice one +1. Une autre version de JavaScript qui fonctionne aussi: (4 octets) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);Bien que je ne sois pas sûr que cela réponde à Joe Zses exigences.
Nope
41

Perl - 10 caractères

Cette solution est une gracieuseté de BrowserUK sur PerlMonks , bien que je me sois débarrassé de la ponctuation et des espaces inutiles de la solution qu'il a publiée. C'est un bitwise "pas" sur une chaîne binaire de quatre caractères.

say~"ÍÏÎË"

Les caractères affichés ci-dessus représentent les octets binaires cd: cf: ce: cb, et indiquent comment ils apparaissent dans ISO-8859-1 et ISO-8859-15.

Voici l'intégralité du script au format hexadécimal, ainsi qu'un exemple d'exécution:

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

Perl (sans bits forts) - 14 caractères

say'````'^RPQT

Ceci utilise un "ou" au niveau des bits sur les deux chaînes de quatre caractères "RPQT"et "````"(c'est-à-dire quatre 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

(Au départ, j'avais les deux chaînes inversées , ce qui nécessitait des espaces blancs printet RPQTséparant les jetons. @DomHastings a fait remarquer qu'en les changeant, je pouvais enregistrer un personnage.)

Perl (tricherie) - 8 caractères

Cela n’est probablement pas dans l’esprit de la concurrence, mais hdb sur PerlMonks a fait remarquer que Perl fournit une variable appelée $0contenant le nom du programme en cours d’exécution. Si nous sommes autorisés à nommer le fichier contenant le script "2014", il $0sera égal à 2014. $0contient un chiffre; nous ne pouvons donc pas l'utiliser directement, mais ${...}contenir une expression dont le résultat est 0 sera OK; par exemple:

say${$|}

Par souci de cohérence, faisons la chose hexcat-then-perl avec ça:

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

Je pense que c'est de la triche, mais c'est quand même une solution intéressante, donc il vaut la peine d'être mentionné.

tobyink
la source
2
Hé, si vous inversez la chaîne et barewords, vous pouvez enregistrer char: print"````"^RPQT. Il pourrait être possible d’utiliser sayaussi sur 5.10+ en utilisant -E au lieu de -e, mais je ne sais pas si cela entraîne une pénalité de +2 pour différents arguments de ligne de commande?
Dom Hastings
2
Il est considéré comme acceptable de spécifier que vous utilisez Perl 5 et que vous l’utilisez saysans pénalité.
Peter Taylor
@DomHastings, personnellement, je pense que si vous voulez le faire avec "-e" ou "-E", je dirais que vous devriez alors inclure la commande entière, y compris "perl -E" dans le nombre de vos personnages. .
tobyink
1
Méta réponse pertinente
Peter Taylor
4
Vous pouvez également enregistrer un autre octet en utilisant des littéraux de chaîne ne nécessitant pas de guillemets, tels que say ABCD^srrp.
Primo
40

Ruby, 20 ans

p 'bbc'.to_i ?\r.ord

Explication: bbcest 2014en base 13. Plus court que Python. Pas aussi court que Forth.

Darren Stone
la source
23
"Personne n'écrit des blagues en base 13!"
Jean-Michaël Celerier
1
? w = $; "^ XA [_AXeMFGIAHJLjKNAEFEJJNHQHNKLAEMINJOJOHLAGKHOJOJ [AG [HQHRFJAH} IHAIGGwIIAHHGwKHAHGHrEUAGQFiGVAGQGfIPAFHKHHbJHAQII] MGASHNSOHATIdIAUJJRLIAWLIQGKAZOFUA] ZAeSAiPAjOAkLA" .codepoints {| r | r- = 68; $> << (r <0 ?? \ n: (w = w = =? $? '':? $) * r)}
Darren Stone
1
p 'ߞ'.ordpour un programme entièrement fonctionnel, à l' 'ߞ'.ordintérieur irb. Fonctionne sur 1.9+
Ricardo Panaggio
1
Sans "étranges" caractères Unicode: ?-*?--?\v(45 * 45 - 11) (Ruby 1.8)
Ricardo Panaggio
Un personnage plus petit: ?.*?.-?f(46 * 46 - 102) (Ruby 1.8 seulement encore)
Ricardo Panaggio
29

Powershell, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) est compté comme deux octets selon les informations de balise code-golf .

[""]renvoie le premier caractère de la chaîne ( ""est converti en 0). Le unary plus opeartor ( +) convertit le caractère en entier.

Danko Durbić
la source
1
Selon codegolf.stackexchange.com/tags/code-golf/info , il devrait compter 9 caractères.
Konrad Borowski
@ GlitchMr, merci, j'ai corrigé ma réponse.
Danko Durbić
3
Le ['']est un bon tour. J'ai l'habitude de l'utiliser [char]mais c'est effectivement plus court :)
Joey
27

Scala REPL - 6 caractères

"?="##

( ##est le symbole de Scala hashCode, et la chaîne Java"?=" hache jusqu'en 2014.)

Scala REPL - 4 caractères, 5 octets

+'ߞ'

Math sur notre personnage préféré unicode produit un Int.

Rex Kerr
la source
27

Javascript, 18 caractères

alert(btoa('ÛMx'))

Mise à jour: dans ES6, l'utilisation d'un littéral de modèle peut enregistrer deux caractères:

alert(btoaMx`)

Le code ci-dessus est assez facile à comprendre en gardant à l’esprit que btoa la chaîne est convertie en une autre chaîne selon un ensemble de règles bien définies ( RFC 4648). ). Pour voir comment la conversion fonctionne, nous allons écrire la chaîne d'entrée "ÛMx" sous la forme d'une séquence de chiffres binaires, où chaque caractère est rendu sous la forme d'un code de caractère à 8 bits.

Caractère d'entrée | Û | M | X
Code de caractère (décimal) | 219 | 77 | 120
Code de caractère (binaire) | 11011011 | 01001101 | 01111000

Après avoir réorganisé les chiffres binaires de la dernière ligne en groupes de 6, nous obtenons la représentation binaire de 4 nouveaux nombres, correspondant aux index Base64 des 4 caractères de la chaîne "2014".

Index Base64 (binaire) | 110110 | 110100 | 110101 | 111000
Index Base64 (décimal) | 54 | 52 | 53 | 56
Caractère de sortie | 2 | 0 | 1 | 4

Selon la spécification HTML, les caractères de sortie peuvent être extraits de leurs index Base64 conformément à ce tableau: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Si vous ne vous souciez pas des détails, vous pouvez laisser le navigateur faire les calculs pour vous et découvrir que "ÛMx" est le résultat d'une évaluation atob('2014')en Javascript.

GOTO 0
la source
la question mentionne l'impression du numéro. Je sais qu'une évaluation dans une console aboutira au résultat, mais sur Code Golf , on s'attend généralement à ce que les réponses JS incluent une forme quelconque d'E / S (le alertplus courant).
ZzzzBov
@zzzzBov Oui, ma réponse initiale incluait un alertappel.
GOTO 0
Il indique que la communauté a supprimé le fichier alert. Je me demande si les normes ont changé pour JS codegolf ou s'il s'agit simplement d'un changement adopté par Community.
ZzzzBov
@zzzzBov: C'était un changement d'utilisateur anonyme accepté par SHiNKiROU et luser droog. Quoi qu'il en soit, cette modification a déclenché une discussion sur Meta ( meta.codegolf.stackexchange.com/questions/803/… ).
Konrad Borowski
@xfix, ce n'est pas ce montage à lui seul qui m'a amené à poser cette question sur la méta, j'ai vu suffisamment de codes de golf où les gens se disputent pour savoir si la console de développement compte comme une impression, ce qui, à mon avis, valait la peine de demander une norme.
ZzzzBov
24

Encore une autre entrée GolfScript, 9 caractères imprimables

Je pense que cela est plus court que toutes les entrées imprimables de GolfScript jusqu'à présent:

"!="{*}*)

( L'entrée à 7 caractères de Peter Taylor le bat, mais comprend des caractères de contrôle non imprimables.)

J'appelle cela le "c'est tellement l'année dernière!" car elle génère le nombre 2013 en 8 caractères, comme 33 × 61, puis l’incrémente d’un chiffre . ;-)

Ilmari Karonen
la source
Vous gagnez (pour 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
la source
"%x"Et juste et 'b'*'S'? C'est 8212 déc ou 2014 hex. Enregistre un caractère, un littéral et deux sur la chaîne de format.
MSalters
@MSalters No, 'b'*'S'is 8134. La factorisation première de 8212 est 2 * 2 * 2053, donc je ne vois pas un moyen facile de la produire.
fredoverflow
Bah, vérifié avec la division entière que 8212/'b' == 'S':(
MSalters
et octal ne fonctionne pas non plus (02014 = 1036 = 37 * 28, 28 n'est pas imprimable)
MSalters
1
@FredOverflow, qu'en est-il de ma solution à 28 caractères? main () {met (__ DATE __ + '\ a');}
Arunprasad Rajkumar
20

14ème

'> '" * '^ - .      
Darren Stone
la source
1
Pouvez-vous expliquer comment cela fonctionne?
ProgramFOX
1
J'exprime des constantes entières sous forme de littéraux de caractères à l'aide de leurs valeurs ordinales (ASCII). Donc, ceci est: 62 34 * 94 - . Si vous ne parlez pas Forth, cela signifie print (62 * 34 - 94).
Darren Stone
Forth (Gforth 0.7.0), 5 octets, 4 caractères: Imprime 'ߞ .le caractère.
18446744073709551615
20

GolfScript, 14

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

Comment ça marche: ASCII se passe comme ça:

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

Donc, cela prend les codes ASCII de chaque caractère, en soustrait cinq et les colle dans une chaîne.

{...}%donne un tableau des caractères d'une chaîne mappée, quand une chaîne est donnée en argument. Ainsi, il incrémente chaque caractère de 5 ( )signifie incrémente).

Poignée de porte
la source
La +fin est inutile. En outre, plutôt que d’augmenter 5 fois, il suffit d’en ajouter cinq. Économies totales: 4 caractères. '-+,/'{5+}%
Justin
15
@Quincunx, 5est un nombre.
Peter Taylor
5
@PeterTaylor Je ne cesse d'oublier.
Justin
Clever solution
Sumurai8
La version CJAM de ceci: "-+,/"_,)f+. :) (Encore une fois, CJam a KD.)
Martin Ender
19

Python, 32 caractères

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

Probablement possible de le réduire en utilisant le caractère Unicode 2014 ߞ, mais je n'ai pas essayé.

Quincunx note que

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

est plus court de trois caractères.

Bruno Le Floch
la source
La version unicode fonctionne, au moins en Python 3 avec IDLE: print(ord("ߞ")). Cela ne semble pas fonctionner en Python 2; Python 2 ne prend probablement pas en charge l’unicode.
Justin
3
De plus, avec votre version, a=ord('.');print(a*a-ord('f'))2 caractères sont plus courts.
Justin
@Quincunx Il prend en charge, cependant, vous devez avoir un encodage spécifique défini dans votre fichier et l'ajouter uà la fin de la chaîne (serait "ߞ"u)
Kroltan
2
@Kroltan En fait, je suis à peu près sûr que la deuxième partie n'est pas vraie. En Python 2, vous deviez préfixer des chaînes avec upour indiquer qu'elles étaient unicode, mais en Python 3, toutes les chaînes sont automatiquement unicode
murgatroid99
1
Semblable à commenté ci-dessus, sans Unicode print ord('.')**2-ord('f')est légèrement plus courte.
MLS le
18

APL (6 octets, 4 caractères)

⊃⎕TS

Ne fonctionne que cette année si.

Pourquoi ça marche:

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

Sans compter sur la date du système, il s'agit de 10 octets (7 caractères):

⎕UCS'ߞ'
marinus
la source
6
Malheureusement, les réponses qui ne fonctionnent que pour cette année sont invalides.
Joe Z.
Je ne sais pas APL: cette case est-elle un caractère APL ou manque-t-il une représentation de la police (Chrome)?
Carl Witthoft
@JoeZ: La question ne dit pas cela, mais j'en ai ajouté une qui ne dépend pas de 2014.
marinus
4
@CarlWitthoft: Cela s'appelle un quad ( ), c'est censé ressembler à ça.
marinus
18

Python 32 10 octets, 91 à 85 (66 avec mathimportés par défaut) octets mathématiques pures

J'ai eu du plaisir à écrire ceci:

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)

Imprime toutes les manières possibles que je peux écrire en 2014utilisant la méthode de Bruno Le Floch (32 caractères):

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

Mais ceci est évidemment redondant, donc si votre interprète est configuré par défaut sur utf-8, alors tout ce qu'il faut est:

>>> ord(u'ߞ')
2014

Aussi, grâce à AmeliaBR (pour l'idée), j'ai fait de mon mieux pour implémenter une version mathématique pure:

from math import*
a,b,c=int(e),round(e),ceil(pi);print int(a**(b*c-(c-b))-a*a**c-a)
Deneb
la source
ord (',') ** 2 + ord ('N')
MLS le
6
@MLS Eh bien, cela a un chiffre :)
Joachim Isaksson
2
J'ai un peu optimisé votre version mathématique: a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-aet vous pouvez éliminer complètement l'importation mathématique en utilisant le fait que TruePython 2.x est identique à l'entier 1 utilisé , ce qui la réduit à 50 caractères:o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
Ponkadoodle
Vous pouvez sauvegarder un personnage si vous utilisez Python 3:ord('ߞ')
asmeurer
@JoachimIsaksson Un chiffre n'est pas un nombre;)
Mega Man
17

R (20 caractères)

@popojan (il n'est pas autorisé à poster une réponse ici) a fourni la solution avec 20 caractères maximum.

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

Sortie:

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

R (22 caractères)

Utilisateur anonyme a suggéré une solution plus courte.

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

2014est BBCen base 13. pi*pi+pi(= 13.0112) est traité par R dans ce contexte comme le nombre entier 13. Résultat:

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

R (30 caractères)

Merci à @Tomas!

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

Sortie:

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

R (31 caractères)

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

Inspiré de la réponse d'AmeliaBR . Sortie:

> cat(T+T,T-T,T/T,T+T+T+T,sep="")
2014
Djhurio
la source
Wow, +1! Et j'espérais que ma solution en chiffres romains serait la meilleure ... :( ;-)
Tomas
Les variantes ci-dessous peuvent être réduites: cat(a<-T+T,T-T,T/T,a^a,sep="")(30 caractères), paste0(aT+T,T-T,T/T,a^a)(26 caractères)
Tomas
@Tomas, la fonction paste0n'est pas autorisée car elle contient le symbole 0. Votre solution fait 30 caractères si vous utilisez cat.
djhurio
créer un fichier 2014dans le répertoire courant et écrire list.files()- 12 caractères
Zbynek le
@Zbynek, je m'attends à ce que votre solution ne soit pas valable dans le cadre général des règles de codegolf.
djhurio
15

Java - 77 75 caractères

75 caractères si printest ajouté dans une classe avec la méthode main:

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

Cela signifie 35*60-86ce qui est égal à 2014

True Soft
la source
2
J'aime ta formule.
Johannes
7
En réalité, cela doit être plus long, car la définition de classe doit être présente pour s'exécuter. Plus court chemin que je connaisse (avec Java 6):class a{static{System.out.println('#'*'<'-'V');}}
Justin
1
@Quincunx, avec Java 7, une méthode principale est nécessaire
True Soft
2
@TrueSoft Note j'ai dit "avec Java 6". Vous devez choisir le plus court possible de Java.
Justin
2
Vous pouvez supprimer "ln" dans println pour réduire les caractères ...
Laksys