Рассчитать 6 * 9 в разных базах

16

Выведите следующий результат (который является результатом вычисления 6 * 9 в базах от 2 до 36). Убедитесь, что буквы в верхнем регистре, а само умножение выводится в каждой строке.

6 * 9 = 110110
6 * 9 = 2000
6 * 9 = 312
6 * 9 = 204
6 * 9 = 130
6 * 9 = 105
6 * 9 = 66
6 * 9 = 60
6 * 9 = 54
6 * 9 = 4A
6 * 9 = 46
6 * 9 = 42
6 * 9 = 3C
6 * 9 = 39
6 * 9 = 36
6 * 9 = 33
6 * 9 = 30
6 * 9 = 2G
6 * 9 = 2E
6 * 9 = 2C
6 * 9 = 2A
6 * 9 = 28
6 * 9 = 26
6 * 9 = 24
6 * 9 = 22
6 * 9 = 20
6 * 9 = 1Q
6 * 9 = 1P
6 * 9 = 1O
6 * 9 = 1N
6 * 9 = 1M
6 * 9 = 1L
6 * 9 = 1K
6 * 9 = 1J
6 * 9 = 1I

Самый короткий код выигрывает.

Конрад Боровски
источник
1
@ Ховард: исправлено. Я думал об изменении 2 на 10, но забыл об этом редактировании, исправляя что-то еще в результате, поэтому я случайно оставил его неправильно.
Конрад Боровски
2
Calculate 6*9 in different basesИнтересно, почему утверждение сформулировано так, почему, 6*9а не просто 54? Возможно, изначально предполагаемое значение было то , что 6и 9должно быть истолковано не всегда десятичным , но в разных базах? Это сделало бы утверждение более логичным, а проблему - более интересной (но тогда мы должны начать с базы с 10 по 36)
leonbloy
2
@leonbloy: 6и 9являются однозначными числами. Они означают то же самое в каждой базе, в которой эти цифры действительны.
Илмари Каронен
1
@IlmariKaronen: Правильно, но 6 * 9 = 110110не имеет большого смысла ...
Деннис
3
Это ссылка на «Автостопом по серии Galaxy» Дугласа Адамса. В серии «Ответ на главный вопрос жизни, Вселенной и всего» - «42». Позже выяснилось, что Главный Вопрос Жизни, Вселенной и Всего: «Что вы получаете, когда умножаете шесть на девять?», Который работает в базе 13. Примечание: Дуглас Адамс сказал, что это было непреднамеренно; «Я не пишу анекдоты в базе-13» .
р джимбоб

Ответы:

1

05AB1E , 21 20 байт

36G54N>B"6 * 9 = ÿ",

Попробуйте онлайн!

Урна волшебного осьминога
источник
Я предполагаю, что это не конкурирует только потому, что язык новее, чем вызов? Маркировка как принятая, так как правила на данный момент позволяют это.
Конрад Боровски
@xfix в значительной степени ха-ха
Волшебный осьминог Урна
7

GolfScript, 39 символов

35,{2+'6 * 9 = '54@base{.9>7*+48+}%n+}/

Результат можно увидеть здесь .

Говард
источник
7

Октава, 49

for i=2:36printf("6 * 9 = %s\n",dec2base(54,i))end

Санджив Мурти
источник
6

Javascript, 57 55 байт

for(i=2;++i<37;)console.log('6 * 9 = '+54..toString(i))

Можно сократить до 49 с alert, но я не хочу никому подчиняться этому ...

Иоахим Исакссон
источник
3
Вывод должен быть в верхнем регистре и (54)может быть заменен на 54.(для записи 54..toString).
Конрад Боровски
2
for(i=1;++i<37;)также сохраняет характер.
grc
Можете ли вы игнорировать 37? Это приведет к ошибке и остановке
l4m2
4

Рубин (47)

2.upto(36){|t|puts"9 * 6 = "+54.to_s(t).upcase}

Ну, я знаю, что решение GolfScript лучше, но, по крайней мере, это не эзотерика ...

переписан
источник
2.step{|t|puts"9 * 6 = "+54.to_s(t).upcase}сохраняет несколько байтов. Он выходит с ошибкой, но это нормально: D .
m-chrzan
4

Python, 89

B=lambda x:x*'.'and B(x/b)+chr(x%b+7*(x%b>9)+48)
b=2
while b<37:print'6 * 9 =',B(54);b+=1
Бутби
источник
Brilliant. Довольно заметно, что я полный нуб-питон в сравнении :)
Йоахим Исакссон
@JoachimIsaksson Спасибо ... У меня есть куча новых уроков.
Boothby
Вы можете сбрить один символ, используя вместо этого цикл while: b=2<перевод строки> while b<37:print'6 * 9 =',B(54);b+=1(при условии, что для переноса строки * nix используется один символ)
Боб
@Bob Каждый раз, когда я пробую цикл времени, это слишком дорого. Тогда я забуду попробовать в следующий раз. ;) Благодарность!
Boothby
3

Python 2.7 ( 124 114)

РЕДАКТИРОВАТЬ: сократить пух благодаря комментарию @ Boothby ниже

Я думаю, что у Python все в порядке, учитывая, что у него нет встроенного (насколько мне известно) базового преобразования, поэтому это должно быть сделано в коде;

for b in range(2,37):print'6 * 9 = '+''.join(chr((54/b**y%b>9)*7+48+54/b**y%b)for y in range(4,-1,-1)).lstrip('0')
Иоахим Исакссон
источник
Я должен постоянно напоминать себе об этом: print'\n'.join(...for x in y)гораздо дольше, чем for x in y:print....
Boothby
@boothby Спасибо, обновлено твоим предложением :)
Йоахим Исакссон
1

Mathematica 40

Не в споре (используются строчные буквы):

Print["6*9 = ",54~BaseForm~#]&/@2~Range~36

базовый выход

DavidC
источник
1

Юлия, 61

для b = 2: 36; @printf ("6 * 9 =% s \ n", прописные буквы (основание (b, 54))); конец

Довольно безболезненно, если не считать использования макроса @printf против printf.

База импорта; не нужно ...

Джо
источник
for b=2:36;println("6 * 9 = $(uppercase(base(b,54)))");endэто тоже хорошо ...
cormullion
1

Perl

Пришлось использовать модуль Math :: BaseCnv

35 символов без useутверждения:

map{say"6 * 9 = ",cnv(54,$_)}2..36

54 символа с useутверждением:

use Math::BaseCnv;
map{say"6 * 9 = ",cnv(54,$_)}2..36

Не уверен, как ты оценил бы это, так что оба включены.

Была использована структура BLOCK LIST карты. Список - это диапазон от 2 до 36, который был запрошен. Мясо находится в cnv($NUMBER, $BASE)функции, а карта представляет собой неявную петлю.

Джо
источник
1
Посчитай useутверждение. Первый не работает в моем Perl.
Boothby
1

J - 78 70

'6 * 9 = ',"1>;/(a.#~48 10 7 26 165#0 1 0 1 0){~<&.>(2+i.35)#.inv&.>54

Haskell - 137

let s=['0'..'9']++['A'..'Z'];t _(0,r)=[s!!r];t b(q,r)=(t b$b q)++[s!!r]in mapM_(putStrLn.("6 * 9 = "++).(\b->t b$b 54).flip divMod)[2..36]
рассекать
источник
1

С ( 166 151)

Избавился от некоторых ненужных символов и изменил некоторые объявления. Предполагается, что вы запускаете программу без аргументов.

p[7],i,l,v,r;main(b){for(r=2;r<37;r++){b++;printf("6 * 9 = ");v=54;while(v>0)l=v%b,p[i++]=l>9?l+55:l+48,v/=b;while(i^0)printf("%c",p[--i]);puts("");}}
cardinaliti
источник
1

Clojure, 75

(for[i(range 2 37)](println"6 * 9 ="(.toUpperCase(Integer/toString 54 i))))

OpenSauce
источник
1

Python 3, 83 байта

import numpy;print('\n'.join('6 * 9 = '+numpy.base_repr(54,i)for i in range(2,37)))
Кормак
источник
1
Вы можете использовать '\n'.join('6 * 9 = '+numpy.base_repr(54,i)for i in range(2,37))вместо того, *['6 * 9 = '+numpy.base_repr(54,i)for i in range(2,37)],sep='\n'чтобы сохранить байт.
Пост Рок Гарф Хантер
Вы, вероятно, должны указать «Python 3 с Numpy», так как это не стандартная библиотека
FlipTack
1

Дротик, 75 байт

for(int x=2;x<37;x++)print("6 * 9 = ${54.toRadixString(x).toUpperCase()}");

Дарт немного многословен, когда дело доходит до stdlib, но эй ... по крайней мере, вы можете прочитать это: P

Дуэйн Слэйтер
источник
0

Скала, 71

2 to 36 map(i=>println("6 * 9 = "+Integer.toString(54,i).toUpperCase))
gourlaysama
источник
0

Общий Лисп: 56 символов

(do((b 2(1+ b)))((> b 36))(format t"6 * 9 = ~vr~%"b 54))
Сванте
источник
0

Мудрец, 48:

Стыд Sage печатает в нижнем регистре ... Я был бы только один над Говардом. Или, я думаю, неправильно и связан с Дэвидом Каррахером.

for i in[2..36]:print'6 * 9 =',54.str(i).upper()
Бутби
источник
0

Далее 54

: f 54 37 2 do ." 6 * 9 = " dup i base ! . cr loop ; f
Даррен Стоун
источник
0

SpecBAS - 48 байт

1 FOR i=2 TO 36: ?"6 * 9 = ";BASE$(54,i): NEXT i

SpecBAS на самом деле вполне конкурентоспособен за изменения :-)

Брайан
источник
0

8 , 65 62 байта

Это полная программа. Выход после исполнения

( "6 * 9 = " . #54 swap base drop >s s:uc . cr ) 2 36 loop bye 

объяснение

( 
   "6 * 9 = " .   \ Print the first part of the formula
    #54 swap base \ Enter into the base provided by loop index and                
                  \ convert 54 (which is always expressed in base 10)
    drop          \ Get rid of previous base
    >s s:uc       \ Convert number into an upper case string
    . cr          \ Print result and newline
) 2 36 loop       \ Provide base from 2 to 36
bye               \ Quit
Усадьба Хаоса
источник