Створіть номер 2014 без жодних чисел у вихідному коді


579

Зауважте, щоб кинути виклик авторам відповідно до мета-консенсусу : Це питання було добре прийнято під час його опублікування, але такі проблеми, як прохання відповідачів зробити Do X без використання Y , швидше за все, будуть погано отримані. Спробуйте скористатися пісочницею, щоб отримати зворотній зв'язок, якщо ви хочете опублікувати подібне завдання.


Це вже 2017 2018 2019 роки, люди, йдіть додому.

Отже, тепер, коли настає 2014 рік, прийшов час кодового питання, що стосується числа 2014.

Ваше завдання - створити програму, яка друкує число 2014, не використовуючи жодного символу 0123456789у вашому коді, і незалежно від будь-яких зовнішніх змінних, таких як дата або час, або випадкове насіння.

Виграє найкоротший код (рахуючи в байтах) будь-якою мовою, якою числа є дійсними лексемами.


Табло:


10
Незважаючи на те, що цифри ігноруються у головному моєму думці, я все одно подумав. 32 символи:++++++[>++++++++<-]>++.--.+.+++.
Бреден Кращий

4
Brainfuck не є дійсною мовою для цього виклику.
Джо З.

8
Цікаво, чи отримає це запитання невеликий стрибок популярності навколо новорічних.
Джо Z.

3
Очікуючи "Давай, люди, ти не розумієш, що це 2016 рік?" :)
padawan

1
@BradenBest Це можна зробити в 31 символі як мінімум двома різними способами: +++++++ [> +++++++ <-]> + .--. +. +++. і ++++++++++ [> +++++ <-]> .--. +. +++.
Зубін Мукерджі

Відповіді:


126

Миша-2002 , 4 байти.

Це 4 байти чистого, солодкого ASCII.

У миші літери алфавіту ініціалізуються до значень 0-25. !є оператором для друку цілих чисел, тому він друкує 20тоді 14(немає переривчастого нового рядка).

U!O!

Інтерпретатора в Інтернеті немає, але тут ви знайдете перекладача, написаного на мові C (потрібні певні налаштування, перш ніж можна примусити gccйого скласти) та той самий компільований інтерпретатор, Win32але який ідеально працює з Linux wine.

Тут ви можете знайти виправлену версію інтерпретатора, яка компілює.


7
Ого, це дивовижна знахідка набагато пізніше після виклику. І з такою езотеричною мовою тут ніхто ще не чув про неї!
Джо Z.

3
BTW: це робить те саме, що і CJam KE, але насправді діє, тому що мова йде до 2014 року.
Джо Z.

7
Самодовольний погляд на моєму обличчі зараз нагадує погляд майстра Fortran-77 після того, як найшвидше побив якогось прихильника Python .
кіт

55
Ця гра @cat and Mouse-2002.
Цифрова травма

5
@DigitalTrauma дійсно: 3
кіт

1300

Пітон, 52 байти

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

Оновлено до 2015 року завдяки @Frg:

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

Наведіть курсор, щоб переглянути версію 2016 року:

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

Спробуйте в Інтернеті!


185
Ви заслужили нагороду за кмітливість
Carter Pape

166
вау - це так у дусі цього питання. <3
Йоганнес

80
Я трохи здивувався, що це лише четверта фраза, яку я спробував після "З новим роком!", Яка була б ідеальною для року 1374.
dansalmo

55
print sum(ord(c) for c in 'HAPPY NEW YEAR To you too.') О зачекайте, я запізнився на рік. Ось 2013.
Warren P

163
sum(map(ord,'Happy new year to you!'))врятувало б 7 символів.

243

Befunge 98 - 17 11 9 8 байт

'-:*b-.@

Схожа на стару версію, але я згадав о '

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

Цікаво, що 45 2 -11 - це єдине сполучення чисел a, b, де Значення цих множин полягає в тому, що [32,126] - це набір символів для друку ascii і [10,15] - це набір легкодоступних номерів Befunge. Я знайшов цю пару з цією програмою 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))

Або якщо ваш перекладач підтримує unicode, це працює:

Befunge 98 - 5 байт (4 символи)

'ߞ.@

Він принаймні працює на http://www.quirkster.com/iano/js/befunge.html із наступним кодом (Befunge 93 - 6 байт / 5 символів):

"ߞ".@

Стара версія

cdd**e-.@

обчислює число, потім виводить його:

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

Старіша версія:

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

Висуває значення ascii за 2014 рік, -10. Потім друкується кожен після додавання до нього 10.


78
en.wikipedia.org/wiki/Befunge ... що це я навіть не знаю ...
Платон

36
«Мова був спочатку створений Кріс Пресси в 1993 році як спроба винайти мову , який , як важко зібрати , як можна більше ...»
буде

7
@ 11684 Вихід досить чітко визначений у питанні. Якщо програма надрукована: randomstuff2randomstuff0randomstuff1randomstuff4я б не вважав це правильним рішенням.
Cruncher

7
@Plato Замість того, щоб прочитати статтю у Вікіпедії (яка включає лише Befunge 93), якщо ви хочете дізнатися про Befunge 98, прочитайте офіційні характеристики
Джастін

3
Вікі: "Мова спочатку була створена Крісом Пресі у 1993 році як спроба розробити мову, якою важче скластися" ... але чому?
CousinCocaine

239

Рубі, 15

p Time.new.year

Тимчасовий;)


Зауважте, що розділ питання

незалежно від будь-яких зовнішніх змінних, таких як дата або час, або випадкове насіння

не було відредаговано, поки я не опублікував свою відповідь ...


Ян Дворак пропонує чудову альтернативу в коментарях :

Happy = Time
Happy.new.year

Але це так не захоплено. Я віддаю перевагу:

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

Happy.new.year!

Або навіть:

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!

І ось правильна англійська пунктуація:

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!

Гаразд гаразд, я не міг допомогти:

def noop x = nil; end
eval %w[we wish you a merry christmas! christmas and a happy new].map{|x|"alias #{x} noop"}*"\n"
def year!; p Time.new.year; end

we wish you a merry christmas! we wish you a merry christmas!
we wish you a merry christmas and a happy new year!

167
Happy = Time; Happy.new.year
Іван Дворак

5
@hobbs Ні, це не так; питання нічого не говорить про це
Doorknob

12
Це буде працювати правильно лише деякий час.
hippietrail

119
Він добре працював у всіх тестах на сьогодні
CoderTao

7
Я вважаю, що суть питання полягала в тому, щоб сказати поточний рік [який, мабуть, буде 2014 цього року]. Тому це рішення є більш "портативним" у часі, ніж прийняте;). Ви (та Ян Дворак) отримуєте мій голос!
Олів'є Дулак

223

Перейти, 2 байти (UTF-16)

Один однокодовий символ (2 байти в UTF-16, 3 байти у форматі UTF-8), вивести 2014 як частину помилки

http://ideone.com/dRgKfk

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

7
Це дуже розумно, але питання вимагає програми, яка друкує номер.
HelloGoodbye

40
Якщо розраховані друковані коди помилок, це повідомлення має виграти
ToastyMallows

36
+1. Питання не говорить: "друкується лише число і більше нічого".
Каз

1
Мені все одно, чи дійсно це чи ні, це досить приголомшливо.
Програми Redwolf


177

Пітона, 26

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

53
bbc - 2014 рік у базі 13
Даррен Стоун

70
Я припускаю, що використання символів 'bbc', а використання бази 13 - данина Дугласу Адамсу. "Мені може бути шкода, але я не пишу жартів у базі 13".
Брайан Мінтон

10
13 років тому. RIP.
Даррен Стоун

4
ІМО, ця відповідь є у "Істинному пітонезі"
kmonsoor

8
@BrianMinton: Використання бази 13, ймовірно, тому, що це єдина база між 2 і 36, яка дозволяє представити число 2014 без жодного символу 0- 9.
dan04

146

MATLAB, Scala (4 символи, 5 байт)

Тут ви можете скористатися відносно слабкою системою MATLAB (і Scala). Трюк полягає в застосуванні одинарної +операції на рядку, що складається лише з символу ߞ(кодової точки UTF-8 U + 07DE або 2014 у десятковій кількості). Ця операція неявно перетворює рядок у подвійний (у MATLAB) та в Int(у Scala):

+'ߞ'

Деталі підрахунку байтів:

  • + є ASCII і нараховує 1 байт
  • ' є ASCII і нараховує 1 байт (але у виразі відображається двічі)
  • ߞ є двобайтовим символом UTF-8

Всього: 5 байт

TeX (32 26 символів, стільки ж байтів)

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

Ще коротша альтернатива (запропонована Джозефом Райт )

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

XeTeX / LuaTeX (13 символів, 14 байт)

Якщо дозволено використання XeTeX або LuaTeX, введення UTF-8 можна використовувати безпосередньо (як запропонував Джозеф Райт ):

\number`ߞ\bye

\let~\number~`^^T~`^^N\bye25 символів / байт. Ви неправильно рахуєте ІМХО, це також 25 для вашого рішення.
йо '

1
@tohecz Я думаю, що обидва наші рішення насправді мають довжину 26 байт.
jub0bs

1
Якщо поточний рік розшукується, то 13 байт:\the\year\bye
Yo »

2
+'ߞ'також працює у Scala (та ще декількох інших мовах, які я уявляю)
theon

118

постійний струм, 6 символів

DiBBCp
  • D натискає 13 на стек, навіть рівний вхідний радіус 10 спочатку
  • i змінює вхідний радіус (до 13 з 10)
  • BBC є 2014 рік 13.
  • p відбитки.

Вихід консолі:

$ dc <<< "DiBBCp"
2014

10
Щоправда, але фактична програма постійного струму все ж DiBBCp(6 символів), решта - це лише спосіб її запуску.
daniero

11
Я збирався підтримати це, але він має 42 бали! використовує базу 13 і слово BBC. Як класно це! Здається, цього року ми знайдемо питання до життя, всесвіту та вічності ;-) en.wikipedia.org/wiki/Base_13 . Я замість цього закликаю коментар @ daniero і залишаю відповідь з цією чудовою репутацією 42 ;-)
Пабло Марін-Гарсія

4
@ PabloMarin-Garcia, на жаль, якась невідома людина зламала його ... Має 43 голоси зараз. Будь ласка, поверніться та скажімо! :)
Томаш

3
@Tomas Vogons завжди є Vogons. Опір марний проти міжгалактичної бюрократії.
Пабло Марін-Гарсія

2
Я навіть не можу знайти Dкоманду на сторінці man. Що це робить? Неважливо ... D є шестигранним на 13.
kzh

93

Код Морзе, 23

;)

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

21
"будь-якою мовою, якою номери є дійсними лексемами"
Doorknob

14
"..---" є дійсним жетоном у 5 штрихів для номера два, правда? Так само, як "4" є дійсним жетоном у три штрихи для числа "чотири".
DavidC

8
Брайля може бути коротшим :)
Доктор belisarius

31
Влучне зауваження. До речі, мені було полегшено, що ніхто не запитав, як я змушую Морзе Код працювати на моєму комп’ютері.
DavidC

14
@DavidCarraher Що ти маєш на увазі? Я, природно, припускав, що ви використовували це репо, щоб розшифрувати його. github.com/Nyubis/mspa-morse-decoder Всі це роблять ...
Майкл Дж. Калкінс

88

72 45 символів у коді; Нульові коди символів

Це далеко не найкоротша відповідь, опублікована, але відповіді ніхто ще не опублікував

  • не використовує коди символів як заміну чисел, і
  • не називає системну дату.

Використовуючи чисту математику (добре, і автоматичне буле перетворення) в R, з консолі R:

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

Виводить число 2014. T- це заздалегідь визначений синонім істинної у R. Функції floorта expфункції безпосередньо доступні в базовому пакеті, як і piконстанта. R не має оператора приросту, але повторення (x*x)виявилося меншим числом символів, які роблять приріст і декремент двічі кожен.


Оригінальна версія Javascript (72 символи)

З тієї простої причини, що я міг перевірити консоль, і це не проти повної відсутності пробілу:

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

запустіть у вашій консолі, і вона надрукує номер 2014.


Реквізит xkcdтакож ) для того, щоб змусити мене думати про exp (pi): e to the pi Minus pi

PS Якщо ви можете зробити той самий алгоритм коротшим на іншій мові, опублікуйте коментар до нього.


1
o =! ""; (o + o) + "" + (oo) + (o + oo) + (o + o + o + o)
Кернель Джеймс

4
25 байт: alert ('ߞ'. CharCodeAt ())
oberhamsi

1
+1. Однак ви стверджуєте, що ваша відповідь була першою відповіддю, що "не використовує коди символів як заміну чисел і не називає системну дату". Це насправді помилково. У моїй відповіді є таке рішення cdd**e-.@(розміщене перед вашим), яке не використовує символьні коди чи системну дату. Він обчислює число 2014. c, dі eце шістнадцяткове число цифр. a, b..., fпоштовх (відповідно) 10,11, ... 15 , так 12 * 13 * 13 - 14це обчислення.
Джастін

Це була не перша відповідь на використання символьних кодів; У мене є кілька більш ранніх.
Timtech

1
@Quincunx: ти маєш рацію; Я не зрозумів, що у вашій версії використовуються шістнадцяткові цифри, а не коди символів.
AmeliaBR

85

Scala REPL

34 29 символів.

+"Happy new year to you!".sum

Ну добре, якщо ви дійсно хочете, щоб це було в гольф з будь-якими символами, ви можете використовувати:

'@'*' '-'"'

або

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

які мають 11 та 22 символи відповідно.


4
Цікава ідея, навіть якщо це не особливо гольф. Але сам рядок робить його цікавішим, ніж те, що використовує високі байти чи щось подібне.
Конрад Боровський

Я додав версію для гольфу.
Mikaël Mayer

Ви можете врятувати пару персонажів з toIntподібного: +"Happy new year to you!".sum Тест
theon

Оновлено. Я не знав, що + також може бути префіксом.
Mikaël Mayer

68

PHP, 9 байт

Для цього потрібно PHP 7.1 або нижче. Він буде працювати в PHP 7.2, але це призведе до попередження. Ніяких гарантій для будь-якої майбутньої версії.

xxdпотрібні через двійкові дані (тому копіювання та вставлення було б простіше). Може повернутися E_NOTICE, але це насправді не має значення, чи не так?

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

Крім того, збережіть це за допомогою кодування ISO-8859-1.

<?=~ÍÏÎË;

@Quincunx: Завантаження цього було досить складним, але ось Ideone - ideone.com/APHKhn .
Конрад Боровський

1
Це виглядає цікаво; що воно робить?
Джастін

7
@Quincunx: Це побіжно не (0x00 змінюється на 0xFF, а 0x7F змінюється на 0x80) на кожному символі рядка. Оскільки рядок є дійсним ідентифікатором (що завгодно з високим набором бітів є ідентифікаційним символом для PHP, можливо, для підтримки інших кодувань), PHP вважає, що це константа, але оскільки вона не визначена, вона трактує її як рядок.
Конрад Боровський

2
Оскільки питання було "Тепер, коли це 2014 рік ...", як бути echo date('Y');?
Іван

6
@John: Ні. Якщо ви прочитаєте коментарі до питання, ви помітили б, що ОП не хоче отримати відповідь поточного року. Крім того, <?=date(Y);було б 11 символів, і я маю рішення в 9 символів.
Конрад Боровський

67

C, 33 байти

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

19
Як прикро, що для основної факторизації 2014 року потрібен ASCII 5!
Бен Джексон

Я отримав (int a; ТАК; a ++) {NSLog (@ "% i", a);} для мети C Cocoa Touch, але поки не можу додати (недостатньо оцінено). Це в кінцевому підсумку показує 2014 рік, і він має помилку компілятора, і можливо, він може не працювати взагалі, і компільований, ймовірно, близько 4,2 мега - але ей.
Переробили сталь

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

1
@mjy Byte порядок багато символьних літералів не гарантується.
Джонатан Райнхарт

Багатоканальні літерали @JonathonReinhart повністю залежать від впровадження.
FUZxxl

54

Mathematica, 14 символів (або 15, якщо ви вважаєте растрову карту символом)

TextRecognize @enter image description here


50
Насправді вам слід порахувати байти, так що це 14 + розмір растрового зображення.
Сільвестер

22
Растрова карта, мабуть, налічує 7357 символів.
Джо З.

5
Також я вважаю, що деякі байти зображення потрапляють у \dдіапазон. А саме, якщо це GIF, то сам заголовок гарантовано містить.
Іван Дворак

13
Ви всі вбивці. Добре, використовуйте First @ ToCharacterCode @ "ߞ" для 25 символів, 26 байт.
Майкл Стерн

9
Як бонус, ось рішення Mathematica у 30 символів --URLFetch @ " goo.gl/miVwHe "
Майкл Стерн

53

Python3.4.0b2 (0 байт)

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

Це не спрацює, коли люди оновлюватимуть свою версію Python 3 на рік відтепер.
Джо З.

21
Ось чому я згадав python3.4.0b2 , Це звичайно не трапляється двічі. Дата його випуску, а не системна дата.
ВИ

6
Це змусило мене посміхнутися!
Метт Флетчер

2
Також працює в Python 3.4.2.
Erik the Outgolfer

Вам не дозволяється додавати сторонній вихід.
MilkyWay90

48

Javascript, 23 байти

Перетворення на основі бази 64

alert(atob("MjAxNA=="))

23 символи (16 з атобом)

Або

alert("MMXIV") // ;)

27
MMXIVне має спільних символів 2014, востаннє я перевірив ...// ;)
Joe Z.

23
Стародавні римляни можуть не погодитися. Перший виробляє 2014 рік, проте, сучасною англійською мовою.
логіка8

1
Ваш перший не виходить, хоча ...
Doorknob

1
якщо відкрити консоль у хромі, вставити її і натиснути клавішу Enter, вона повертає значення - я додаю сповіщення про нього як його довше, ніж інші.
логіка8

5
@ logic8: Приємний +1. Ще одна версія JavaScript, яка також працює: (4 байти) [!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]- alert([!+[]+!+[]]+[+[]]+[+!+[]]+[!+[]+!+[]+!+[]+!+[]]);Хоча я не впевнений, що відповідає Joe Zвимогам.
Nope

41

Perl - 10 символів

Це рішення є люб'язністю BrowserUK на PerlMonks , хоча я викреслив непотрібні розділові знаки та пробіли з рішення, яке він опублікував. Це бітове "не" на чотири символі бінарного рядка.

say~"ÍÏÎË"

Символи, що відображаються вище, представляють двійкові октети cd: cf: ce: cb, і як вони відображаються в ISO-8859-1 та ISO-8859-15.

Ось весь сценарій у шістнадцятковій версії, а також приклад запуску:

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

Perl (без великих біт) - 14 символів

say'````'^RPQT

Для цього використовується побітове "або" на двох чотирьох символьних рядках "RPQT"і "````"(тобто, чотири зворотні).

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

(У мене спочатку були два рядки навпаки, що вимагало пробілу між printі RPQTрозділити лексеми. @DomHastings вказував, що перемикаючи їх навколо, я міг би зберегти персонаж.)

Perl (обман) - 8 символів

Це, мабуть, не в дусі конкуренції, але hdb на PerlMonks вказав, що Perl надає змінну, яка називається, $0що містить ім'я поточної програми, що виконується. Якщо нам дозволять назвати файл, що містить сценарій "2014", тоді $0він буде дорівнює 2014. $0Містить цифру, тому ми не можемо використовувати його безпосередньо, але ${...}містити вираз, який оцінює до 0, буде добре; наприклад:

say${$|}

Для послідовності давайте зробимо справу hexcat-then-perl з цим:

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

Я думаю, що це обман, але все-таки цікаве рішення, тому варто згадати.


2
Ей там, якщо ви перевернете рядок та бареври, ви можете зберегти char : print"````"^RPQT. Можливо, можна використовувати sayі на 5.10+, використовуючи -E замість -e, але я не знаю, якщо це спричиняє +2 штраф за різні аргументи командного рядка?
Дом Гастінгс

2
Вважається прийнятним вказати, що ви використовуєте Perl 5 та використовуєте sayбез штрафних санкцій.
Пітер Тейлор

@DomHastings, особисто я думаю, якщо ви збираєтеся це робити з "-e" або "-E", я б сказав, що тоді вам слід буде включити всю команду, включаючи "perl -E" у свій рахунок символів .
Tobyink


4
Ви також можете зберегти інший байт, використовуючи рядкові рядки, які не потребують лапок, наприклад say ABCD^srrp.
примо

40

Рубі, 20

p 'bbc'.to_i ?\r.ord

Пояснення: bbcзнаходиться 2014в базі 13. Коротше, ніж Python. Не такий короткий, як Forth.


23
"Жарти в базі 13 ніхто не пише!"
Jean-Michaël Celerier

1
? Ш = $, "^ XA [_AXeMFGIAHJLjKNAEFEJJNHQHNKLAEMINJOJOHLAGKHOJOJ [AG [HQHRFJAH} IHAIGGwIIAHHGwKHAHGHrEUAGQFiGVAGQGfIPAFHKHHbJHAQII] MGASHNSOHATIdIAUJJRLIAWLIQGKAZOFUA] ZAeSAiPAjOAkLA" .codepoints {| г | r- = 68; $> << (г <0 ?? \ п (ш = ш = =? $? '':? $) * r)}
Даррен Стоун

1
p 'ߞ'.ordдля повністю функціональної програми, 'ߞ'.ordвсередині irb. Працює на версії 1.9+
Рікардо Панаджо

1
Без "дивних" символів unicode: ?-*?--?\v(45 * 45 - 11) (Ruby 1.8)
Рікардо Панаджо

На один символ менше: ?.*?.-?f(46 * 46 - 102) (лише знову Ruby 1,8)
Рікардо Панаджо

29

Powershell, 9

+"ߞ"[""]

ߞ( U + 07DE NKO LETTER KA ) вважається двома байтами відповідно до інформації про тег коду-гольфу .

[""]повертає перший символ із рядка ( ""перетворюється в 0). Унар плюс opeartor ( +) перетворює символ на ціле число.


1
Згідно codegolf.stackexchange.com/tags/code-golf/info , він повинен нараховувати як 9 символів.
Конрад Боровський

@GlitchMr, дякую, я виправив свою відповідь.
Данько Дурбич

3
Це ['']приємна хитрість. Я зазвичай використовував, [char]але це справді коротше :)
Joey

27

Scala REPL - 6 символів

"?="##

( ##означає символ Scala hashCode, а рядок Java "?="хеширується на 2014 рік)

Scala REPL - 4 символи, 5 байт

+'ߞ'

Математика на нашому улюбленому символі Unicode виробляє Int.


27

Javascript, 18 символів

alert(btoa('ÛMx'))

Оновлення: в ES6 за допомогою буквального шаблону можна зберегти два символи:

alert(btoaMx`)

Код, наведений вище, досить легко зрозуміти, маючи на увазі це btoa перетворює рядок в інший рядок відповідно до набору чітко визначених правил ( RFC 4648 ). Щоб побачити, як працює перетворення, ми запишемо рядок введення "xMx" як послідовність двійкових цифр, де кожен символ відображається як 8-бітний код символів.

Символ введення | Û | М | х
Код символів (десятковий) | 219 | 77 | 120
Код символів (двійковий) | 11011011 | 01001101 | 01111000

Після реорганізації двійкових цифр в останньому рядку в групи по 6, ми отримуємо двійкове представлення чотирьох нових чисел, що відповідають індексам Base64 чотирьох символів у рядку "2014".

Індекс Base64 (двійковий) | 110110 | 110100 | 110101 | 111000
Базовий індекс (десятковий) | 54 | 52 | 53 | 56
Вихідний символ | 2 | 0 | 1 | 4

Відповідно до специфікації HTML, вихідні символи можна отримати з індексів Base64 відповідно до цієї таблиці: http://dev.w3.org/html5/spec-LC/webappapis.html#base64-table .

Якщо вас не цікавлять деталі, ви можете дозволити веб-переглядачу робити обчислення за вас і дізнатися, що "ÛMx" є результатом оцінки atob('2014')в Javascript.


у питанні згадується друк номера. Я знаю, що оцінка в консолі призведе до повернення результату, але в Code Golf , як правило, очікується, що відповіді JS включатимуть якусь форму IO ( alertнайчастіше).
zzzzBov

@zzzzBov Так, моя оригінальна відповідь включала alertдзвінок.
GOTO 0

У ньому перелічено Спільноту як видалену alert. Цікаво, чи змінилися стандарти для кодового гольфу JS чи це просто зміна, яка була прийнята Спільнотою.
zzzzBov

@zzzzBov: Це була зміна анонімного користувача, прийнятого SHiNKiROU та luser droog. У будь-якому випадку, це редагування викликало дискусію на Meta ( meta.codegolf.stackexchange.com/questions/803/… ).
Конрад Боровський

@xfix, не тільки ця редакція змусила мене задати це питання на мета. Я бачив достатньо гольфів з кодом, де люди вступають у суперечки щодо того, чи вважається консоль розробника друком, що я вважав, що варто запитати стандарт.
zzzzBov

24

Ще один запис GolfScript, 9 символів для друку

Я вважаю, що це коротше, ніж будь-яка з публікацій GolfScript для друку досі:

"!="{*}*)

( 7-картка Пітера Тейлора перемагає його, але включає контрольні символи, що не друкуються.)

Я називаю це " так це минулого року!" запис, оскільки те, що він насправді робить, генерує число 2013 у 8 символах як 33 × 61, а потім збільшує його на одиницю. ;-)


Ви виграєте (для 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');}

Як щодо справедливих "%x"і 'b'*'S'? Це 8212 декабря або 2014 шістнадцятковий. Зберігає один символ один буквальний та два у форматі рядка.
MSalters

@MSalters Ні, 'b'*'S'це 8134. Основна факторизація 8212 становить 2 * 2 * 2053, тому я не бачу простого способу її отримання.
fredoverflow

Ба, перевірено цілим поділом, що 8212/'b' == 'S':(
MSalters

і восьмери восьми не працюють (02014 = 1036 = 37 * 28, 28 не можна
друкувати

1
@FredOverflow, що робити з моїм рішенням 28 char? main () {put (__ ДАТА __ + '\ a');}
Arunprasad Rajkumar

20

По-четверте, 14

'> '" * '^ - .      

1
Чи можете ви пояснити, як це працює?
ProgramFOX

1
Я виражаю цілі константи як буквені символи, використовуючи їх порядкові (ASCII) значення. Отже, це так: 62 34 * 94 - . Якщо ви не говорите далі, це означає print (62 * 34 - 94).
Даррен Стоун

Forth (Gforth 0.7.0), 5 байт, 4 символи: 'ߞ .він друкує символ.
18446744073709551615

20

GolfScript, 14

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

Як це працює: ASCII працює так:

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

Отже, для цього беруть ASCII-коди кожного символу, віднімають п'ять і вставляють його в рядок.

{...}%виводиться масив символів рядка, відображений у вигляді аргументу, як аргумент. Отже, він збільшує кожен символ по 5 ( )означає приріст).


В +кінці непотрібне. Крім того, замість збільшення 5 разів, просто додайте п'ять. Загальна економія: 4 символи. '-+,/'{5+}%
Джастін

15
@Quincunx, 5це число.
Пітер Тейлор

5
@PeterTaylor Я продовжую забувати.
Джастін

Розумне рішення
Sumurai8

Версія CJam цього: "-+,/"_,)f+. :) (Потім знову CJam KD.)
Мартін Ендер

19

Пітон, 32 символи

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

Можливо, можливо зменшити його за допомогою символу Unicode 2014 року ߞ , але я не намагався.

Quincunx зазначає це

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

коротше на три символи.


Версія Юникода працює, по крайней мере , в Python 3 з IDLE: print(ord("ߞ")). Схоже, це не працює в Python 2; Python 2, ймовірно, не підтримує unicode.
Джастін

3
Крім того, у вашої версії a=ord('.');print(a*a-ord('f'))вона на 2 символи коротша.
Джастін

@Quincunx Він підтримує, проте вам потрібно встановити для вашого файлу специфічне кодування та додати uв кінці рядка (було б "ߞ"u)
Kroltan

2
@Kroltan Власне, я впевнений, що друга частина не відповідає дійсності. У Python 2 вам довелося додати рядки, uщоб сказати, що вони були unicode, але в Python 3 всі рядки автоматично є unicode
murgatroid99

1
Подібно до коментарів вище, без унікоду print ord('.')**2-ord('f')трохи коротше.
MLS

18

APL (6 байт, 4 символи)

⊃⎕TS

Однак працює лише цього року.

Чому це працює:

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

Не покладаючись на системну дату, це 10 байт (7 символів):

⎕UCS'ߞ'

6
На жаль, відповіді, що лише робота на цей рік є недійсною.
Джо З.

Я не знаю APL: це квадратна скринька APL, чи мені не вистачає представлення шрифту (Chrome)?
Карл Віттофт

@JoeZ. Питання не говорить про це, але я додав той, який не покладається на нього з 2014 року.
marinus

4
@CarlWitthoft: Це називається quad ( ), це має виглядати так.
Марина

18

Python 32 10 байт, 91 85 (66 із mathімпортним способом за замовчуванням) байт чистої математики

Приємно писати це:

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)

Друкує всі можливі способи написання, 2014використовуючи метод Бруно Ле Флоха (32 символи):

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

Але це, очевидно, зайве, тому якщо для вашого перекладача за замовчуванням встановлено utf-8, тоді все, що потрібно:

>>> ord(u'ߞ')
2014

Також, завдяки AmeliaBR (за ідею), я постарався зробити все можливе з чистої математичної версії:

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 Добре, що в ньому є цифра :)
Йоахім Ісакссон

2
Я трохи оптимізував вашу математичну версію: a,b=int(e),int(pi);c=a+a;print a**(b*c-c+b)-a*a**c-aі ви можете повністю усунути імпорт математики, скориставшись тим, що Trueв Python 2.x ідентичний цілому числу 1 в операційній системі, знизивши його до 50 символів:o=True;a=o+o;b=a+o;c=b+o;print a**(b*c-o)-a*a**c-a
Ponkadoodle

Ви можете зберегти персонажа, якщо використовуєте Python 3:ord('ߞ')
asmeurer

@JoachimIsaksson Цифра - це не число;)
Mega Man

17

R (20 символів)

@popojan (йому поки що не дозволяють публікувати відповідь) запропонував рішення у межах 20 символів.

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

Вихід:

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

R (22 символи)

Анонімний користувач запропонував коротше рішення.

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

2014 є BBC в базі 13. pi*pi+pi(= 13.0112) трактується R у цьому контексті як ціле число 13. Вихід:

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

R (30 символів)

Дякуємо @Tomas!

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

Вихід:

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

R (31 символ)

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

Натхненний відповіддю AmeliaBR . Вихід:

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

Нічого, +1! І я сподівався, що рішення моїх римських цифр стане найкращим ... :( ;-)
Томаш

Варіанти нижче можна скоротити: cat(a<-T+T,T-T,T/T,a^a,sep="")(30 годин), paste0(aT+T,T-T,T/T,a^a)(26 годин)
Томаш

@Tomas, функція paste0заборонена, оскільки вона містить символ 0. При використанні рішення містить 30 символів cat.
djhurio

створити файл 2014у поточному каталозі та записати list.files()- 12 символів
Zbynek

@ Zbynek, я очікую, що ваше рішення не буде дійсним у загальній області правил кодегольфа.
djhurio

15

Java - 77 75 символів

75 символів, якщо printїх додано до класу з основним методом:

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

Це означає, 35*60-86що дорівнює 2014 року


2
Мені подобається ваша формула.
Йоганнес

7
Це насправді повинно бути довше, тому що визначення класу має бути в ньому для запуску. Найкоротший спосіб, з якого я знаю (з Java 6):class a{static{System.out.println('#'*'<'-'V');}}
Джастін

1
@Quincunx, для Java 7 потрібен основний метод
True Soft

2
@TrueSoft Примітка. Я сказав "з Java 6". Вам слід вибрати найкоротший можливий Java.
Джастін

2
Ви можете видалити 'ln' у println, щоб зменшити число ...
laksys
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.