Produci il numero 2014 senza numeri nel codice sorgente


579

Nota per sfidare gli scrittori secondo il meta consenso : questa domanda è stata ben accolta quando è stata pubblicata, ma è probabile che le sfide come questa, chiedendo ai rispondenti di fare X senza usare Y, siano scarsamente ricevute. Prova a utilizzare la sandbox per ricevere feedback su se desideri pubblicare una sfida simile.


È già il 2017 2018 2019, gente, andate a casa.

Quindi, ora che è il 2014, è tempo di una domanda sul codice che coinvolga il numero 2014.

Il tuo compito è creare un programma che stampa il numero 2014, senza usare nessuno dei caratteri 0123456789nel tuo codice e indipendentemente da qualsiasi variabile esterna come la data o l'ora o un seme casuale.

Vince il codice più breve (conteggio in byte) per farlo in qualsiasi lingua in cui i numeri sono token validi.


Classifica:


10
Anche se i numeri sono ignorati in Brainfuck, ho pensato di pubblicarne uno comunque. 32 caratteri:++++++[>++++++++<-]>++.--.+.+++.
Braden migliore

4
Brainfuck non è un linguaggio valido per questa sfida.
Joe Z.

8
Mi chiedo se questa domanda abbia un piccolo picco di popolarità intorno a Capodanno.
Joe Z.

3
Aspettando "Forza gente, non ti rendi conto che è il 2016?" :)
padawan,

1
@BradenBest È possibile farlo in 31 caratteri in almeno due modi diversi: +++++++ [> +++++++ <-]> + .--. +. +++. e ++++++++++ [> +++++ <-]> .--. +. +++.
Zubin Mukerjee,

Risposte:


126

Mouse-2002 , 4 byte.

Sono 4 byte di ASCII puro e dolce .

Nel mouse , le lettere dell'alfabeto vengono inizializzate ai valori 0-25. !è l'operatore per la stampa di numeri interi, quindi stampa 20quindi 14(nessuna riga nuova intermittente).

U!O!

Non c'è un interprete online disponibile, ma qui troverai un interprete scritto in C (che necessita di alcune modifiche prima di poter forzare gccper compilarlo) e lo stesso interprete compilato per Win32ma che funziona perfettamente su Linux wine.

Qui puoi trovare la versione fissa dell'interprete, che viene compilata.


7
Wow, questa è una scoperta straordinaria molto più tardi dopo la sfida. E con una lingua così esoterica nessuno qui ne aveva ancora sentito parlare!
Joe Z.

3
A proposito: questo fa la stessa cosa di CJam KE, ma in realtà è valido perché è una lingua precedente al 2014.
Joe Z.

7
Lo sguardo compiaciuto sul mio viso ora assomiglia a quello di un mago Fortran-77 dopo aver battuto un sostenitore di Python in un codice più veloce .
cat

56
Questo è un gioco di @cat e Mouse-2002.
Trauma digitale

5
@DigitalTrauma in effetti: 3
cat

1300

Python, 52 byte

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

Aggiornato per il 2015 grazie a @Frg:

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

Passa il mouse sopra per vedere la versione 2016:

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

Provalo online!


186
Ti meriti il ​​premio di intelligenza
Carter Pape,

167
wow - è così nello spirito di questa domanda. <3
Johannes

80
Sono stato un po 'sorpreso che fosse solo la quarta frase che ho provato dopo "Happy new year!", Che sarebbe stata perfetta per l'anno 1374.
dansalmo

55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') Oh aspetta, sono in ritardo di un anno. È il 2013.
Warren P

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

243

Befunge 98 - 17 11 9 8 byte

'-:*b-.@

Simile alla vecchia versione, ma me ne sono ricordato '

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

È interessante notare che, 45 2 -11 è l'unico abbinamento di numeri a, b, dove Il significato di questi apparecchi è che [32.126] è l'insieme dei caratteri ASCII stampabili e [10,15] è l'insieme dei numeri Befunge facilmente accessibili. Ho trovato quella coppia con questo programma 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))

Oppure, se il tuo interprete supporta Unicode, allora funziona:

Befunge 98-5 byte (4 caratteri)

'ߞ.@

Funziona almeno su http://www.quirkster.com/iano/js/befunge.html con il seguente codice (Befunge 93 - 6 byte / 5 caratteri):

"ߞ".@

Vecchia versione

cdd**e-.@

calcola il numero, quindi lo stampa:

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

Versione precedente:

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

Spinge i valori ASCII per il 2014, -10. Quindi stampa ciascuno dopo aver aggiunto 10 ad esso.


78
en.wikipedia.org/wiki/Befunge ... cos'è questo non lo faccio nemmeno ...
Platone

36
"Il linguaggio è stato originariamente creato da Chris Pressey nel 1993 come tentativo di escogitare un linguaggio il più difficile da compilare" ...
sarà il

7
@ 11684 L'output è piuttosto ben definito nella domanda. Se un programma viene stampato: randomstuff2randomstuff0randomstuff1randomstuff4non lo considero una soluzione valida.
Cruncher

7
@Plato Piuttosto che leggere l'articolo di Wikipedia (che include solo Befunge 93), se vuoi conoscere Befunge 98, leggi le specifiche ufficiali
Justin,

3
Wiki: "Il linguaggio è stato originariamente creato da Chris Pressey nel 1993 come un tentativo di ideare un linguaggio che sia il più difficile da compilare possibile" ... ma perché?
Cugina Cocaina,

239

Ruby, 15

p Time.new.year

Temporaneo;)


Si noti che la sezione della domanda

indipendentemente da eventuali variabili esterne come la data o l'ora o un seme casuale

non è stato modificato fino a quando ho pubblicato la mia risposta ...


Jan Dvorak offre un'ottima alternativa nei commenti :

Happy = Time
Happy.new.year

Ma è così poco entusiasta. Preferisco:

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

Happy.new.year!

O anche:

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!

Ed ecco la punteggiatura inglese corretta:

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!

Va bene, non ho potuto farne a meno:

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 No non lo è; la domanda non dice nulla al riguardo
Maniglia della porta

12
Funzionerà correttamente solo alcune volte.
hippietrail

119
Fino ad oggi ha funzionato bene in tutti i test
Coder Tao

7
Credo che lo spirito della domanda fosse quello di dire l'anno in corso [che sembra essere il 2014 quest'anno]. Questa soluzione è quindi più "portabile" nel tempo rispetto a quella accettata;). Tu (e Jan Dvorak) ottenete il mio voto!
Olivier Dulac il

223

Vai, 2 byte (UTF-16)

Un carattere unicode (2 byte in UTF-16, 3 byte in formato UTF-8), output 2014 come parte di un errore

http://ideone.com/dRgKfk

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

7
È molto intelligente, ma la domanda richiede un programma che stampa il numero.
Ciao Arrivederci

40
Se i codici di errore stampati contano, questo invio dovrebbe vincere.
ToastyMallows

37
+1. La domanda non dice "stampa solo il numero e nient'altro".
Kaz,

1
Non mi importa se è valido o no, è davvero fantastico.
Programmi Redwolf

1
Questa è una scappatoia standard
MilkyWay90

177

Python, 26

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

53
bbc è il 2014 in base 13
Darren Stone

71
Presumo l'uso dei personaggi "bbc" e l'uso della base 13 è un tributo a Douglas Adams. "Potrei essere un caso spiacevole, ma non scrivo battute nella base 13."
Brian Minton,

10
13 anni fa. RIPOSA IN PACE.
Darren Stone,

4
IMO, questa risposta è in "True Pythonese"
kmonsoor

8
@BrianMinton: L'uso della Base 13 è probabilmente perché è l'unica base tra 2 e 36 che consente al numero 2014 di essere rappresentato senza nessuno dei personaggi 0- 9.
dan04,

146

MATLAB, Scala (4 caratteri, 5 byte)

Qui puoi trarre vantaggio dal sistema di tipo relativamente debole di MATLAB (e di Scala). Il trucco è applicare l' +operazione unaria su una stringa composta solo dal carattere ߞ(del punto di codice UTF-8 U + 07DE, o 2014 in decimale). Questa operazione converte implicitamente la stringa in un doppio (in MATLAB) e in un Int(in Scala):

+'ߞ'

Dettagli di conteggio byte:

  • + è ASCII e conta per 1 byte
  • ' è ASCII e conta per 1 byte (ma appare due volte nell'espressione)
  • ߞ è un carattere UTF-8 a 2 byte

Totale: 5 byte

TeX (32 26 caratteri, altrettanti byte)

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

Un'alternativa ancora più breve (proposta da Joseph Wright ) è

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

XeTeX / LuaTeX (13 caratteri, 14 byte)

Se XeTeX o LuaTeX sono consentiti, l'ingresso UTF-8 può essere utilizzato direttamente (come proposto da Joseph Wright ):

\number`ߞ\bye

\let~\number~`^^T~`^^N\bye25 caratteri / byte. ImHO conta male, sono 25 anche per la tua soluzione.
yo

1
@tohecz Penso che entrambe le nostre soluzioni siano in realtà lunghe 26 byte.
jub0bs

1
Se si desidera l'anno in corso, quindi 13 byte:\the\year\bye
yo '

2
+'ߞ'funziona anche a Scala (e poche altre lingue immagino)
Theon

118

dc, 6 caratteri

DiBBCp
  • D spinge 13 nello stack, anche se inizialmente la radice di input è 10
  • i cambia input radix (a 13 da 10)
  • BBC è la base 13 del 2014.
  • p stampe.

Uscita console:

$ dc <<< "DiBBCp"
2014

10
È vero, ma l'attuale programma DC è ancora DiBBCp(6 caratteri), il resto è solo un modo per eseguirlo.
daniero,

11
Stavo per votare questo, ma ha 42 punti! usa la base 13 e la parola BBC. Quant'è fico! Sembra che quest'anno troveremo la domanda sulla vita, sull'universo e su tutto ;-) en.wikipedia.org/wiki/Base_13 . Sto invece votando il commento di @ daniero e lascio la risposta con questa magnifica 42 reputazione ;-)
Pablo Marin-Garcia,

4
@ PabloMarin-Garcia, sfortunatamente una persona inconsapevole l'ha rotto ... Ha 43 voti adesso. Per favore, torna indietro e vota! :)
Tomas,

3
@Tomas Vogons sempre i Vogons. La resistenza è inutile contro la burocrazia intergalattica.
Pablo Marin-Garcia,

2
Non riesco nemmeno a trovare il Dcomando nella pagina man. Che cosa fa? Non importa ... D è esadecimale per 13.
kzh

93

Codice Morse, 23

;)

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

21
"in qualsiasi lingua in cui i numeri sono token validi"
Maniglia della porta

14
"..---" è un token valido, in 5 tratti, per il numero due, giusto? Proprio come "4" è un token valido, in tre tratti, per il numero "quattro".
DavidC,

8
Il Braille potrebbe essere più breve :)
Dr. belisarius,

31
Buon punto. A proposito, mi ha sollevato il fatto che nessuno mi chiedesse come faccio a far funzionare il codice Morse sul mio computer.
David C

14
@DavidCarraher Che vuoi dire? Ho naturalmente supposto che tu abbia usato questo repository per decodificarlo. github.com/Nyubis/mspa-morse-decoder Tutti lo fanno ...
Michael J. Calkins

88

72 45 caratteri nel codice; Codici zero caratteri

Questa è tutt'altro che la risposta più breve postata, ma nessuno ha ancora pubblicato una risposta

  • non usa i codici carattere come sostituto dei numeri e
  • non chiama la data di sistema.

Usando pure math (ok, e una conversione booleana automatica) in R, dalla console R:

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

Stampa il numero 2014. TÈ un sinonimo predefinito true in R. Le funzioni floore expsono direttamente disponibili nel pacchetto base, così come la picostante. R non ha un operatore di incremento, ma la ripetizione (x*x)si è rivelata essere un minor numero di caratteri che fanno incremento e decremento due volte ciascuno.


Versione originale in Javascript (72 caratteri)

Per la semplice ragione che ho potuto provare nella console, e non importa una completa mancanza di spazi bianchi:

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

eseguito nella tua console e stamperà il numero 2014.


Prop a xkcd (e anche ) per farmi pensare a exp (pi): e al pi Meno meno

PS Se puoi ridurre lo stesso algoritmo in una lingua diversa, pubblica un commento con esso.


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

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

1
+1. Tuttavia, affermi che la tua risposta è stata la prima risposta che "non utilizza i codici carattere come sostituto dei numeri e non chiama la data di sistema". Questo è in realtà falso. La mia risposta ha questa soluzione cdd**e-.@(pubblicata prima della tua) che non utilizza codici di caratteri o data di sistema. Calcola il numero 2014. c, de esono cifre numero esadecimale. a, b, ..., fspinta (rispettivamente) 10,11, ... 15 quindi 12 * 13 * 13 - 14è il calcolo.
Justin

Questa non è stata la prima risposta a non usare i codici carattere; Ne ho diversi precedenti.
Timtech,

1
@Quincunx: hai ragione; sfogliando non ho notato che la tua versione utilizzava cifre esadecimali, non codici di caratteri.
AmeliaBR,

85

Scala REPL

34 29 caratteri.

+"Happy new year to you!".sum

Bene ok se lo vuoi davvero giocare a golf con qualsiasi carattere, puoi usare:

'@'*' '-'"'

o

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

che hanno rispettivamente 11 e 22 caratteri.


4
Idea interessante, anche se non è particolarmente giocata a golf. Ma la stringa stessa la rende più interessante di qualcosa che usa byte alti o qualcosa del genere.
Konrad Borowski

Ho aggiunto una versione golf.
Mikaël Mayer

Puoi salvare un paio di personaggi toIntcome questo: +"Happy new year to you!".sum Test
theon

Aggiornato. Non sapevo che + potesse anche essere un prefisso.
Mikaël Mayer

68

PHP, 9 byte

Ciò richiede PHP 7.1 o versioni precedenti. Funzionerà in PHP 7.2, ma genererà un avviso. Nessuna garanzia per qualsiasi versione futura.

xxdnecessario a causa dei dati binari (quindi copiare e incollare sarebbe più facile). Può tornare E_NOTICE, ma non importa, vero?

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

In alternativa, salvalo utilizzando la codifica ISO-8859-1.

<?=~ÍÏÎË;

@Quincunx: caricare questo è stato relativamente complicato, ma ecco Ideone - ideone.com/APHKhn .
Konrad Borowski,

1
Questo sembra interessante; Che cosa fa?
Justin

7
@Quincunx: no bit a bit (0x00 cambia in 0xFF e 0x7F cambia in 0x80) su ogni carattere della stringa. Poiché la stringa è un identificatore valido (qualsiasi cosa con set di bit alti è un carattere identificativo per PHP, probabilmente per supportare altre codifiche), PHP pensa che sia una costante, ma poiché non è definita, la considera come una stringa.
Konrad Borowski

2
Poiché la domanda era "Ora che è il 2014 ...", che ne dici echo date('Y');?
Giovanni

6
@John: No. Se leggessi i commenti per la domanda, noteresti che OP non vuole che l'anno in corso riceva una risposta. Inoltre, <?=date(Y);sarebbero 11 caratteri e ho una soluzione in 9 caratteri.
Konrad Borowski il

67

C, 33 byte

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

19
Che fastidio che la scomposizione in fattori primi del 2014 richieda ASCII 5!
Ben Jackson,

Ho ottenuto per (int a; YES; a ++) {NSLog (@ "% i", a);} per Cocoa Touch obiettivo C ma non riesco ancora ad aggiungere (non abbastanza valutato). Alla fine mostra un 2014 e ha un errore del compilatore ed è possibile che potrebbe non funzionare affatto e la compilazione è probabilmente di circa 4,2 mega - ma ehi.
Acciaio riciclato

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

1
@mjy L'ordine in byte dei letterali multi-carattere non è garantito.
Jonathon Reinhart,

I letterali multi-personaggio di @JonathonReinhart sono completamente difesi dall'implementazione.
FUZxxl

54

Mathematica, 14 caratteri (o 15 se conti la bitmap come carattere)

TextRecognize @inserisci qui la descrizione dell'immagine


50
In realtà, dovresti contare i byte in modo che siano 14 + la dimensione dell'immagine bitmap.
Sylwester

22
La bitmap sarebbe probabilmente di 7.357 caratteri, davvero.
Joe Z.

5
Inoltre, credo che alcuni dei byte dell'immagine rientrino \dnell'intervallo. Vale a dire, se si tratta della GIF, allora l'intestazione stessa ne garantirà il contenuto.
John Dvorak,

13
Siete tutti killer. Bene, usa First @ ToCharacterCode @ "ߞ" per 25 caratteri, 26 byte.
Michael Stern,

9
Come bonus, ecco una soluzione Mathematica in 30 caratteri --URLFetch @ " goo.gl/miVwHe "
Michael Stern

53

Python3.4.0b2 (0 byte)

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

Questo non funzionerà una volta che le persone aggiorneranno la loro versione di Python 3 tra un anno.
Joe Z.

21
Ecco perché ho citato python3.4.0b2 , non succederà due volte. La data di rilascio, non la data di sistema.
TU

6
Questo mi ha fatto sorridere!
Matt Fletcher,

2
Funziona anche in Python 3.4.2.
Erik the Outgolfer,

Non è consentito aggiungere output estranei.
MilkyWay90

48

Javascript, 23 byte

Utilizza la conversione di base 64

alert(atob("MjAxNA=="))

23 caratteri (16 con atob da solo)

O

alert("MMXIV") // ;)

27
MMXIVnon ha personaggi in comune con 2014, ultimo ho controllato ...// ;)
Joe Z.

23
Gli antichi romani potrebbero non essere d'accordo. Il primo produce però il 2014, in inglese moderno.
logic8,

1
Il tuo primo non esce però ...
Maniglia della porta

1
se apri la console in Chrome, la incolli e premi invio restituisce il valore - aggiungerò comunque un avviso come più lungo degli altri.
logic8,

5
@ logic8: bello +1. Un'altra versione di JavaScript che funziona anche: (4 byte) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);Anche se non sono sicuro che soddisfi Joe Zi requisiti.
No,

41

Perl - 10 caratteri

Questa soluzione è stata gentilmente concessa da BrowserUK su PerlMonks , anche se ho eliminato alcuni segni di punteggiatura e spazi bianchi non necessari dalla soluzione che ha pubblicato. È un "non" bit a bit su una stringa binaria di quattro caratteri.

say~"ÍÏÎË"

I caratteri visualizzati sopra rappresentano gli ottetti binari cd: cf: ce: cb e sono come appaiono in ISO-8859-1 e ISO-8859-15.

Ecco l'intero script in esadecimale, più un esempio eseguendolo:

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

Perl (senza bit alti) - 14 caratteri

say'````'^RPQT

Questo utilizza un bit a bit "o" sulle due stringhe di quattro caratteri "RPQT"e "````"(cioè quattro backtick).

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

(Inizialmente avevo le due stringhe al contrario, il che richiedeva spazi bianchi tra printe RPQTper separare i token. @DomHastings ha sottolineato che cambiandoli potevo salvare un personaggio.)

Perl (barare) - 8 caratteri

Questo probabilmente non rientra nello spirito della competizione, ma hdb su PerlMonks ha sottolineato che Perl fornisce una variabile chiamata $0che contiene il nome del programma corrente in esecuzione. Se ci è permesso di nominare il file contenente lo script "2014", allora $0sarà uguale a 2014. $0contiene una cifra, quindi non possiamo usarlo direttamente, ma ${...}contenere un'espressione che valuta 0 sarà OK; per esempio:

say${$|}

Per coerenza, facciamo la cosa hexcat-then-perl con quella:

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

Penso che questo sia un imbroglio, ma è comunque una soluzione interessante, quindi vale la pena menzionarlo.


2
Ehi, se si inverte la stringa e le bareword, è possibile salvare un char: print"````"^RPQT. Potrebbe essere possibile usare sayanche su 5.10+ usando -E invece di -e, ma non so se questo incorre in una penalità di +2 per diversi argomenti della riga di comando?
Dom Hastings,

2
Si ritiene accettabile specificare che si sta utilizzando Perl 5 e sayche non si applica alcuna penalità.
Peter Taylor,

@DomHastings, personalmente penso che se lo farai con "-e" o "-E", direi che dovresti quindi includere l'intero comando, incluso "perl -E" nel conteggio dei personaggi .
tobyink


4
È inoltre possibile salvare un altro byte utilizzando valori letterali stringa che non richiedono virgolette, ad esempio say ABCD^srrp.
primo

40

Ruby, 20 anni

p 'bbc'.to_i ?\r.ord

Spiegazione: bbcè 2014nella base 13. Più corta di Python. Non basso come Forth.


23
"Nessuno scrive battute nella 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 'ߞ'.ordper un programma completamente funzionale, 'ߞ'.ordall'interno irb. Lavora su 1.9+
Ricardo Panaggio il

1
Senza "strani" personaggi unicode: ?-*?--?\v(45 * 45 - 11) (Ruby 1.8)
Ricardo Panaggio,

Un personaggio più piccolo: ?.*?.-?f(46 * 46 - 102) (Ruby 1.8 solo di nuovo)
Ricardo Panaggio,

29

Powershell, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) viene conteggiato come due byte in base alle informazioni del tag golf-code .

[""]restituisce il primo carattere dalla stringa ( ""viene convertito in 0). Unary plus opeartor ( +) converte il carattere in un numero intero.


1
Secondo codegolf.stackexchange.com/tags/code-golf/info , dovrebbe essere composto da 9 caratteri.
Konrad Borowski

@GlitchMr, grazie, ho corretto la mia risposta.
Danko Durbić,

3
Il ['']è un bel trucco. Di solito lo usavo, [char]ma in realtà è più breve :)
Joey

27

Scala REPL - 6 caratteri

"?="##

( ##è il simbolo di Scala che significa hashCode, e la stringa Java ha "?="hash al 2014.)

Scala REPL - 4 caratteri, 5 byte

+'ߞ'

La matematica sul nostro personaggio Unicode preferito produce un Int.


27

Javascript, 18 caratteri

alert(btoa('ÛMx'))

Aggiornamento: in ES6, l'utilizzo di un modello letterale può salvare due caratteri:

alert(btoaMx`)

Il codice sopra è abbastanza facile da capire tenendo presente che btoaconverte una stringa in un'altra stringa in base a una serie di regole ben definite ( RFC 4648 ). Per vedere come funziona la conversione, scriveremo la stringa di input "ÛMx" come una sequenza di cifre binarie, in cui ogni carattere viene visualizzato come codice carattere a 8 bit.

Carattere di input | Û | M | X
Codice carattere (decimale) | 219 | 77 | 120
Codice carattere (binario) | 11011011 | 01001101 | 01111000

Dopo aver riorganizzato le cifre binarie nell'ultima riga in gruppi di 6, otteniamo la rappresentazione binaria di 4 nuovi numeri, corrispondenti agli indici Base64 dei 4 caratteri nella stringa "2014".

Indice Base64 (binario) | 110110 | 110100 | 110101 | 111000
Indice Base64 (decimale) | 54 | 52 | 53 | 56
Carattere di output | 2 | 0 | 1 | 4

Secondo le specifiche HTML, i caratteri di output possono essere recuperati dai loro indici Base64 secondo questa tabella: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Se non ti interessano i dettagli, potresti lasciare che il browser esegua i calcoli per te e scoprire che "ÛMx" è il risultato della valutazione atob('2014')in Javascript.


la domanda menziona la stampa del numero. So che la valutazione in una console comporterà la restituzione del risultato, ma su Code Golf è generalmente previsto che le risposte di JS includano una qualche forma di IO ( alertè più comune).
zzzzBov,

@zzzzBov Sì, la mia risposta originale includeva una alertchiamata.
GOTO 0

Elenca Community come rimosso alert. Mi chiedo se gli standard sono cambiati per Jeg codegolf o se si tratta solo di un cambiamento adottato dalla Community.
zzzzBov

@zzzzBov: è stato un cambiamento da parte di un utente anonimo accettato da SHiNKiROU e da logog. Ad ogni modo, questa modifica ha innescato una discussione su Meta ( meta.codegolf.stackexchange.com/questions/803/… ).
Konrad Borowski il

@xfix, Non è solo questa modifica che mi ha fatto porre questa domanda su meta, ho visto abbastanza code golf in cui le persone si trovano in disaccordo sul fatto che la console di sviluppo contasse come stampa, che ho pensato che valesse la pena chiedere uno standard.
zzzzBov

24

Ancora un'altra voce GolfScript, 9 caratteri stampabili

Credo che questo sia più breve di qualsiasi voce GolfScript stampabile finora:

"!="{*}*)

( La voce di 7 caratteri di Peter Taylor lo batte, ma include caratteri di controllo non stampabili.)

Io chiamo questo "è così l'anno scorso!" voce, perché ciò che effettivamente fa è generare il numero 2013 in 8 caratteri, come 33 × 61, e quindi lo incrementa di uno. ;-)


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

Che ne dici di solo "%x"e 'b'*'S'? Sono 8212 dic o 2014 hex. Salva un carattere uno letterale e due sulla stringa di formato.
Salterio

@MSalters No, 'b'*'S'è 8134. La scomposizione in fattori primi di 8212 è 2 * 2 * 2053, quindi non vedo un modo semplice per produrlo.
Fredoverflow

Bah, verificò con una divisione intera che 8212/'b' == 'S':(
MSalter

e neanche ottale (02014 = 1036 = 37 * 28, 28 non è stampabile)
MSalters

1
@FredOverflow e la mia soluzione a 28 caratteri? main () {put (__ DATE __ + '\ a');}
Arunprasad Rajkumar

20

Avanti, 14

'> '" * '^ - .      

1
Puoi spiegare come funziona?
Programma FOX

1
Esprimo costanti intere come letterali di caratteri usando i loro valori ordinali (ASCII). Quindi questo è: 62 34 * 94 - . se non parli in futuro, questo significa print (62 * 34 - 94).
Darren Stone,

Forth (Gforth 0.7.0), 5 byte, 4 caratteri: 'ߞ .stampa il personaggio.
18446744073709551615

20

GolfScript, 14

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

Come funziona: ASCII va così:

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

Quindi, questo prende i codici ASCII di ogni carattere, ne sottrae cinque e lo inserisce in una stringa.

{...}%restituisce una matrice dei caratteri di una stringa mappata, quando viene fornita una stringa come argomento. Quindi, incrementa ogni carattere di 5 ( )significa incremento).


Alla +fine non è necessario. Inoltre, anziché incrementare 5 volte, basta aggiungerne cinque. Risparmio totale: 4 caratteri. '-+,/'{5+}%
Justin

15
@Quincunx, 5è un numero.
Peter Taylor,

5
@PeterTaylor Continuo a dimenticare.
Justin

Soluzione intelligente
Sumurai8

La versione CJam di questo: "-+,/"_,)f+. :) (Poi di nuovo, CJam ha KD.)
Martin Ender,

19

Python, 32 caratteri

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

Probabilmente è possibile ridurlo usando il char Unicode del 2014 ߞ, ma non ci ho provato.

Quincunx lo nota

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

è più corto di tre caratteri.


La versione Unicode funziona, almeno in Python 3 con IDLE: print(ord("ߞ")). Non sembra funzionare in Python 2; Python 2 probabilmente non supporta Unicode.
Justin

3
Inoltre, con la tua versione, a=ord('.');print(a*a-ord('f'))è più breve di 2 caratteri.
Justin

@Quincunx Supporta, tuttavia è necessario disporre di una codifica specifica impostata sul file e aggiungere ualla fine della stringa (sarebbe "ߞ"u)
Kroltan

2
@Kroltan In realtà, sono abbastanza sicuro che la seconda parte non sia vera. In Python 2, si doveva anteporre stringhe con ua dire che erano unicode, ma in Python 3, tutte le stringhe sono automaticamente unicode
murgatroid99

1
Simile come commentato sopra, senza Unicode print ord('.')**2-ord('f')è leggermente più breve.
MLS

18

APL (6 byte, 4 caratteri)

⊃⎕TS

Funziona solo quest'anno però.

Perché funziona:

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

Senza fare affidamento sulla data di sistema, è di 10 byte (7 caratteri):

⎕UCS'ߞ'

6
Sfortunatamente, le risposte che funzionano solo per quest'anno non sono valide.
Joe Z.

Non conosco APL: quella casella quadrata è un carattere APL o mi manca una rappresentazione dei caratteri (Chrome)?
Carl Witthoft,

@JoeZ .: La domanda non lo dice ma ne ho aggiunto uno che non si basa sul fatto che sia il 2014.
Marin

4
@CarlWitthoft: si chiama quad ( ), dovrebbe apparire così.
Marin

18

Python 32 10 byte, 91 85 (66 mathimportati per impostazione predefinita) byte matematica pura

Mi sono divertito a scrivere questo:

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)

Stampa tutti i modi possibili che posso scrivere 2014usando il metodo di Bruno Le Floch (32 caratteri):

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

Ma questo è ovviamente ridondante, quindi se il tuo interprete è impostato su utf-8 di default, allora tutto ciò che serve è:

>>> ord(u'ߞ')
2014

Inoltre, grazie ad AmeliaBR (per l'idea), ho fatto del mio meglio per implementare una versione matematica pura:

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 Beh, questo ha una cifra :)
Joachim Isaksson il

2
Ho ottimizzato un po 'la tua versione matematica: a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-ae puoi eliminare del tutto l'importazione matematica sfruttando il fatto che Truein Python 2.x è identico all'intero 1 in funzione, riducendolo a 50 caratteri:o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
Ponkadoodle

Puoi salvare un personaggio se usi Python 3:ord('ߞ')
asmeurer l'

@JoachimIsaksson Una cifra non è un numero;)
Mega Man

17

R (20 caratteri)

@popojan (non è ancora autorizzato a pubblicare una risposta qui) ha fornito la soluzione entro 20 caratteri.

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

Produzione:

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

R (22 caratteri)

L'utente anonimo ha suggerito una soluzione più breve.

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

2014è BBCin base 13. pi*pi+pi(= 13.0112) è trattato da R in questo contesto come intero 13. Output:

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

R (30 caratteri)

Grazie a @Tomas!

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

Produzione:

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

R (31 caratteri)

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

Ispirato dalla risposta di AmeliaBR . Produzione:

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

Wow, +1! E speravo che la mia soluzione di numeri romani fosse la migliore ... :( ;-)
Tomas

Le seguenti varianti possono essere abbreviate: cat(a<-T+T,T-T,T/T,a^a,sep="")(30 caratteri), paste0(aT+T,T-T,T/T,a^a)(26 caratteri)
Tomas

@Tomas, la funzione paste0non è consentita, poiché contiene il simbolo 0. La tua soluzione crea 30 caratteri se si utilizza cat.
djhurio,

crea il file 2014nella directory corrente e scrivi list.files()- 12 caratteri
Zbynek

@Zbynek, mi aspetto che la tua soluzione non sia valida nell'ambito generale delle regole di codegolf.
djhurio,

15

Java - 77 75 caratteri

75 caratteri se printviene aggiunto in una classe con il metodo principale:

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

Significa 35*60-86che è uguale al 2014


2
Mi piace la tua formula.
Johannes,

7
Questo in realtà deve essere più lungo, perché la definizione della classe deve essere presente per essere eseguita. Il modo più breve che conosco (con Java 6):class a{static{System.out.println('#'*'<'-'V');}}
Justin

1
@Quincunx, con Java 7, è necessario un metodo principale
True Soft

2
@TrueSoft Nota Ho detto "con Java 6". Dovresti scegliere il Java più corto possibile.
Justin

2
Puoi rimuovere 'ln' in println per ridurre i caratteri ...
laksys,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.