Распечатайте кучу неинтересных цифр!


40

Номер неинтересного (который я полностью не выдумывал только для этой задачи) создаются следующим образом:

  1. Возьмите положительное целое число N
  2. Создайте новое число O, добавив цифры N в конце N
  3. Финальный неинтересный номер O * N

Например, для N = 12:

  1. O = 1212
  2. O * N = 1212 * 12
  3. Финальный номер 14544

вход

Целое положительное число N (N> 0) или эквивалент вашего языка. Вам не нужно ловить неправильный ввод.

Выход

Соответствующий неинтересный номер.

Контрольные примеры

  1 -> 11
  2 -> 44
  3 -> 99
 10 -> 10100
174 -> 30306276

счет

Самый короткий код в байтах побеждает.


9
Там должна быть соответствующая запись OEIS ...
MKII

1
@Seims Это была шутка, основанная на «неинтересном» имени
MKII

7
@MKII мой плохой, я не говорю шутки
Seims

1
Является ли использование числа в качестве строкового аргумента слишком сложным правилом?
Дом Гастингс

1
Давай, нарушай правила! : P
Seims

Ответы:


38

05AB1E , 3 байта

Ы*

Разъяснения

Ð    # triplicate input
 «   # conactenate
  *  # multiply

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


2
Ах, хорошо! Ниндзя меня за секунды: с.
Аднан

2
@ Аднан Хе-хе. Месть за то время, что ты сделал это для меня: P
Эминья,

1
3 операции, 3 байта, я не думаю, что вы могли бы сделать это короче.
Лассе Мейер

2
@busukxuan Да. Concatenate автоматически преобразует число в strи *интерпретирует строку как число. Очень полезно :)
Emigna

2
@busukxuan Да, комбинация Pyth и 05AB1E могла бы сделать это за 2 байта :)
Emigna

29

JavaScript (ES6), 10 байт

_=>(_+_)*_

Должен быть вызван с аргументом как, а Stringне как Number.

Использование:

(_=>(_+_)*_)('3')
99

-3 байта благодаря предложению @Quill .


1
Если вы можете передать параметр в виде строки, вы можете вырезать два байта из этого решения:_=>(_+_)*+_
Quill

3
Как именно это работает? Если я правильно понимаю, вы используете _в качестве произвольного символа для переменной? (PS - (_+_)полностью похож на задницу)
charredgrass

@charredgrass $также будет работать
кот

11
злоупотребление кастингом одиннадцати
Downgoat

3
Из интереса лучшее, что я мог сделать чисто математически, это 30 байтов в ES7 n=>(1+10**-~Math.log10(n))*n*n(к сожалению -~, более высокий приоритет, чем **) или 31 в ES6 n=>-~`1e${-~Math.log10(n)}`*n*n. Даже рекурсия заняла у меня 32 байта:f=(n,m=1)=>n<m?-~m*n*n:f(n,m*10)
Нейл,

24

Java 8, 29 26 25 21 байт

Боже, благослови лямбду

c->new Long(c+""+c)*c

c-> Long.decode (с + "" + с) * с;


28
Вы должны любить Java; даже с лямбдами Java 8 и одним из самых коротких ответов Java, когда-либо здесь, на Codegolf, он по-прежнему превосходит все остальные текущие ответы. xD
Кевин Круйссен

3
Java является BAE, лямбда BAE
Seims

3
@KevinCruijssen У меня все еще есть надежда, однажды Ява выиграет конкурс
Codegolf

1
После редактирования вы переиграли @MartinEnder с ответом Retina на 1 байт! o.Ô
Кевин Круйссен

1
@KevinCruijssen, но все еще недостаточно, чтобы выиграть или хотя бы победить питона :(
user902383

20

VIM, 11

C<C-r>=<C-r>"<C-r>"*<C-r>"<cr>

crcrcrcrcr ...

C       change (delete and enter insert mode) until the end of the line
<C-r>=  insert an expression via the special "expression register"
<C-r>"  insert the contents of the default register (what we just C'd)
<C-r>"  ... again
*       multiplied by
<C-r>"  the input (again)
<cr>    insert the result of this expression

11 что? байт?
Безумный

3
@Insane Bytes, если вы вызываете его из командной строки, нажатия клавиш, если вы делаете это напрямую из vim. Я обычно опускаю единицу в моих ответах vim, потому что это может быть один из них.
Дверная ручка

v.tryitonline.net/#code=QxI9EiISIioSIgo&input=MTI Для плохих <C-r>непечатно.
DJMcMayhem

Является ли <C-r>возврат каретки?
Капитан Мэн

@CaptainMan Нет, <C-r>это контроль плюс r. Возврат каретки есть <cr>.
Ручка


15

Emacs, 17 байт

(*SPACEC-SPACEC-EM-YSPACEC-YC-Y)C-J

объяснение

  • (*SPACEдобавляет (*в точке (перед номером);
  • C-SPACEC-EM-Y Выберите и скопируйте номер;
  • SPACE добавляет символ пробела в точке (после числа);
  • C-YC-Y вставляет в два раза больше числа в точке;
  • )добавляет )в конце;
  • C-J интерпретирует строку как выражение LISP и печатает ее результат.

Exemple

Курсор представлен трубкой ( |)

  • |174
  • (*SPACE (* |174
  • C-SPACEC-EM-Y (* 174|
  • SPACE (* 174 |
  • C-YC-Y (* 174 174174|
  • ) (* 174 174174)|
  • C-J

Результат

(* 174 174174)
30306276|

3
Привет и добро пожаловать в PPCG! Хороший первый пост!
Rɪᴋᴇʀ

13

C #, 19 23 байта

n=>int.Parse(""+n+n)*n;

Без строк, 47 байт

n=>{int i=1;while(i<=n)i*=10;return(i+1)*n*n;};

4
Это фрагмент, а не полная программа или функция. Это было бы допустимо, например, с (n)=>{int.Parse(""+n+n)*n}2
кошка

@ кошка лучше? мне нужен трейлинг ;?
Уэстон

Я не знаю. См. Также значения по умолчанию для Code Golf и Советы по игре в гольф на C #
cat

12

Python 2.7, 21 байт:

lambda f:int(`f`*2)*f

Ну, это должен быть самый короткий ответ Python, который я когда-либо писал за самое короткое время. Это анонимная лямбда-функция, которую можно выполнить, назвав ее как угодно, а затем вызвав ее, как обычную функцию, заключенную вprint() . Например, если ваш ввод 12и функция была названа H, это будет называться как print(H(12)).

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

Обратите внимание, что это работает только для значений выше и равно 9223372036854775807любому более высокому значению и repr()ставит a Lв конце целого числа. Следовательно, для значений больше, чем 9223372036854775807эта 24-байтовая версия будет работать:

lambda f:int(str(f)*2)*f

Попробуйте это онлайн! (Ideone)


Я все еще нахожу магические операции с Phytons String ...
Seims

@ Каким образом?
Busukxuan

Умножение и сложение строк. Так часто не видел.
Сеил

@ Похоже, вы в основном имеете дело со статическими языками?
Busukxuan

@busukxuan Называй меня нубом, если хочешь: ^)
Сеил

11

Желе, 4 байта

;DḌ×

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

объяснение

;DḌ×    Main link. argument : N

 D      Decimal; Yield the digits of N
;       Concatenate N and its digits
  Ḍ     Convert to integer; We get O
   ×    Multiply O and N

1
Это действительно счастливое подмигивающее лицо с козлиной бородкой! ;DDx
кот

В какой кодировке занимает всего 1 байт? Обычно мы используем UTF-8, для которого требуется 3 (а × занимает 2, но это 1 байт, например, в ISO8859-1).
o11c

@ o11c Jelly использует собственную пользовательскую кодовую страницу, где эти символы по одному байту каждый.
спагетто

10

С 70 68 54 53 52 44

f(n){return(pow(10,(int)log10(n)+1)*n+n)*n;}

Предыдущая версия (48 байт, без математических функций), сэкономлено 16 байт благодаря @LeakyNun, 1 байт благодаря @FryAmTheEggman, 4 байта благодаря @TobySpeight:

f(n,d,i){for(i=d=n;d;d/=10)i*=10;return(i+n)*n;}

Вызов f() с одним аргументом номер, и он вернет соответствующий неинтересный номер.

Тестовая программа

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    while (*++argv) {
        int n = atoi(*argv);
        printf("%d -> %d\n", n, f(n));
    }
    return 0;
}

Результаты теста:

$ ./84712 1 2 3 4 10 174
1 -> 11
2 -> 44
3 -> 99
4 -> 176
10 -> 10100
174 -> 30306276

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


f(n){int b=1;while(a)b*=10,a/=10;return(n+n*b)*n;}
Дрянная Монахиня

Это не должно работать должным образом без включения math.h, но вам это сходит с рук в GCC, где log10()и pow()встроены, и компилятор просто предупреждает о «несовместимом неявном объявлении встроенной функции», а не предполагает (как это должно), что они оба возвращаются int.
Тоби Спейт

@Leaky - ты ничего не положил в a...
Тоби Спейт

1
Приятно видеть другой ответ, который полностью остается в арифметическом мире (без объединения строк). :-)
Тоби Спейт

1
@Toby - Конкатенация строк в C несовместима с игрой в гольф. ;-)
owacoder

9

Dyalog APL , 7 байтов

⊢×#⍎⍕,⍕

строковое представление

⍕, предварительное представление строки

#⍎ превратить в число (в корневом пространстве имен)

⊢× умножить на оригинальное число


1
Эти разбитые бойцы TIE забавны!
Луис Мендо


1
Вилка просыпается :-D
Луис Мендо

Я почти уверен, что это не байты в любой кодировке, так как они не похожи на буквы или очень распространены.
июня

@ o11c Вы проверили упреждающую ссылку для слова "байты", а именно. meta.codegolf.stackexchange.com/a/9429/43319 .
Адам

9

J 7 байт

*,~&.":

объяснение

*,~&.":  Input: n
     ":  Format n as a string
 ,~&.    Reflect and join the string to make "nn"
         and parse the string to get a number
*        Multiply that number by n

+1. Я даже не мог думать, что Underэто работает должным образом с конкатенацией строк. Какое великое открытие для меня! Спасибо.
Дэн Дуб

К сожалению, я думаю, что это должно быть в скобках, так как это крюк, который не работает, если напечатан напрямую * ,~ &.": n, и не может быть использован при формировании других глаголов.
Дэн Оук

1
@dahnoak Здесь, в PPCG, нам нужно только указать, что нужно для функции, и поэтому все, что необходимо для создания функции в J., это вышеупомянутое. Затем, чтобы вызвать ее с использованием некоторого ввода в качестве аргумента, оно будет либо в скобки или хранятся в переменной.
миль

Ах, я понял, ты.
Дэн Оук

9

Сетчатка , 27 20 байт

^
$_$*: $_
:
$_$*:
:

Становится немного медленным для больших входов, потому что перед последним этапом результат представляется в унарном виде.

Попробуйте онлайн! (Первая строка включает набор тестов, разделенных переводом строки.)

объяснение

Я буду использовать 2 в качестве примера ввода (потому что унарные представления становятся немного громоздкими для больших входов).

Этап 1: Замена

^
$_$*: $_

Сопоставляя начало строки с, ^мы просто добавляем некоторые вещи. $_относится к самой входной строке и $*:означает, что мы вставляем столько двоеточий. Итак, мы получаем:

:: 22

Этап 2: Замена

:
$_$*:

Теперь мы сопоставляем каждое :и снова заменяем его $_$*:. Конечно, в этот раз $_вычисляется не целое число (но :: 22в нашем примере), а $*просто выполняется поиск первого десятичного числа в строке, поэтому он оценивает входные данные, сцепленные с самим собой ( Oв спецификации вызова). В итоге мы N*Oполучим двоеточия, а затем O:

:::::::::::::::::::::::::::::::::::::::::::: 22

Этап 3: Матч

:

Осталось только посчитать :s для преобразования из унарного обратно в десятичное, что и делает этот этап.


Ох, так близко, чтобы быть так же долго, как Java. Обошел его всего на 2 байта. +1
Р. Кап

@ R.Kap На самом деле Java 8 превзошла его после удаления 3 байтов! o.Ô
Кевин Круйссен

4
Извините, Ява ....
Мартин Эндер

9

CJam , 8 байт

ri_`_+i*

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

r     e# Read input
i     e# Convert to integer
_     e# Duplicate
`     e# Convert to string
_     e# Duplicate
+     e# Concatenate
i     e# Convert to integer
*     e# Multiply. Implicitly display

2
Я собирался предложить не преобразовывать в тогда сразу обратно в строку, но наивный подход (то есть никогда не использовал CJam прежде) r__+i\i*, который имеет такую ​​же длину.
Фонд Моника иск

@QPaysTaxes Ах, хорошо. Я заметил то же самое, что и вы: зачем сначала преобразовывать его в int, а затем снова в строку. Я также никогда не использовал CJam и не слишком внимательно смотрел на все возможные операторы , поэтому я не смог найти решение на первый взгляд. Спасибо, что поделились своим подходом, не преобразовав его обратно в строку, даже если он имеет одинаковую длину в байтах.
Кевин Круйссен

Если есть способ , чтобы применить операцию на весь стек в два байта, это будет байт короче (что - то вроде r__+si*, где sесть «применить эту операцию через стек»), но я не вижу ничего подобного
Фонд Иск Моники


8

Awk, 13 байт

$0=($0$0)*$0

Установите строку на 2 из себя умножается на себя




7

Matlab / Octave, 20 байтов

@(x)eval([x x 42 x])

Это анонимная функция, которая принимает входные данные в виде строки.

Пример использования:

>> f = @(x)eval([x x 42 x])
f = 
    @(x)eval([x,x,42,x])
>> f('12')
ans =
       14544

Или попробуйте онлайн с ideone .

объяснение

Код строит строку, конкатенируя входную строку дважды, затем символ *(который имеет код ASCII 42), затем строку снова. Связанная строка затем оценивается.


Что 42значит?
Дрянная Монахиня

4
@LeakyNun Это ответ на главный вопрос жизни, Вселенной и всего остального " . Кроме того, это был код ASCII для*
Луис Мендо

Ах. Я искал что-то вроде 42-й функции.
Дрянная Монахиня

Код просто строит строку, дважды конкатенируя входную строку, затем *снова строку. Связанная строка затем оценивается. Я отредактирую это в ответ
Луис Мендо


6

зш, 13 байт

<<<$[$1$1*$1]

Принимает ввод в качестве аргумента командной строки, выводит в STDOUT.

Это работает только в Zsh, но вот 15 байт в Bash , используя echoвместо того , чтобы <<<:

echo $[$1$1*$1]

6

Perl, 11 байт

$_*=$_ x2

+ pиl флаги.

(беги с perl -ple '$_*=$_ x2')

-2 байта благодаря трубе.


Сохраните два байта:$_*=$_ x2
труба

Я не думаю, что вам нужно-l
Брэд Гилберт b2gills

@ BradGilbertb2gills Да, мне это нужно, потому что без него $_ x2будет производить, ...\n...\nкоторый при преобразовании в число с помощью perl заканчивается первым\n
Dada

Я тестировал его с Perl 5 и 6 и не заметил, что забыл удалить 6.
Брэд Гилберт b2gills

6

Excel VBA, 35 байт

Sub вызывается с номером, msgbox возвращает ответ

Sub B(a)
MsgBox (a & a) * a
End Sub

Альтернативный Excel VBA, 42 байта

Число, указанное в формуле, возвращает ответ.

Function B(a)
B = (a & a) * a
End Function

Подумайте о MsgBox и Sub. Это сэкономит вам 13 байт, если я
посчитаю

Мне нужна форма ввода, чтобы получить значение, не так ли?
tjb1

Попробуйте Sub B (a) MsgBox (a & a) * a End Sub
GER_Moki

Это требует другого саба, чтобы передать значение, я не уверен, что это разрешено в гольфе.
tjb1

Функция тоже должна быть вызвана;)
GER_Moki

6

Луа, 20 байт

Принимает аргумент командной строки и выводит через STDOUT

a=...print((a..a)*a)

И размазанный, как @LeakyNun спросил в комментарии :)

a=...       -- alias for the first argument
print(
     (a..a) -- concatenate a with itself, equivalent to a:rep(2)
     *a)    -- multiply the resulting number by a

Это может быть хорошей демонстрацией принуждения типов ... если вы добавите объяснение в.
Leaky Nun


5

PHP, 25 24 байта

Короткие открывающие бирки полезны для удивительно немногих испытаний в гольф, к счастью, это одна из них. К сожалению, приоритет оператора является противоположностью порядка, в котором вы должны их выполнять, поэтому необходимо много скобок.

<?=($a=$argv[1])*"$a$a";

изменить: я понял, что, видя, как я использую скобки в любом случае, я могу эффективно пропустить оператор конкатенации, изменив письменный порядок операций вокруг.


5

постоянный ток, 11 10 байт

ddZAr^1+**

Я знал, что в конце концов я найду применение для Zкоманды!

Операция довольно проста - посчитайте цифры, возьмите 10, возведенных в эту степень, и добавьте одну. Это дает множитель, который объединяет число с самим собой. Тогда просто умножьте.

Ввод / вывод использует стек, как обычно для DC.

Полная программа

Вот что я использовал для тестов:

#!/usr/bin/dc
?
ddZAr^1+**
p

Две дополнительные команды дают нам конвейерный ввод-вывод.

тесты

$ for i in 1 2 3 10 174; do printf '%d -> ' $i; ./84712.dc <<<$i; done
1 -> 11
2 -> 44
3 -> 99
10 -> 10100
174 -> 30306276

Спасибо сэру Байдену XVII (1 байт).


Вы можете заменить Aна , 10чтобы сохранить байт. Отлично сработано!
Джо

4

Свинка, 11 байт

R I W I_I*I

Это одна из тех редких проблем, связанных с гольфом, где особенности эпидемического паротита могут оказаться очень полезными. Во-первых, все переменные являются строками, и все математические уравнения строго оцениваются слева направо (как в: не PEMDAS), поэтому 1 + 2 * 4 = 12 в Mumps вместо = 9, как PEMDAS. Итак, (едва) не одураченный

R I ;     Read from stdin to variable I
W I_I*I ; Write out I concatenated with I, then multiplied by I.

Слово предостережения - поскольку используемая мной разновидность Mumps (InterSystems Ensemble) не повторяет возврат каретки для stdin, входной и выходной номер будут объединены. Чтобы исправить это / повысить читаемость, вам нужно добавить два байта и добавить CR / LF вручную, таким образом:

R I W !,I_I*I

Однако, поскольку я не видел этого требования в правилах испытания, я почти уверен, что у меня все хорошо с более коротким кодом. Если я ошибаюсь, пожалуйста, не стесняйтесь LART меня, и я изменю свой ответ. :-)


4

PowerShell, 25 , 18 байт

Спасибо TessellatingHeckler за напоминание, как сильно PS любит конвейер.

Новые 18 байтов:

process{$_*"$_$_"}

Старые 25 байтов:

param($a);[int]"$a$a"*$a

Объяснение:

# new
process{$_*"$_$_"}
process{         } # runs code block once for each passed item
        $_*        # multiple the first parameter
           "$_$_"  # concatenate as a string for ease
                   # in this case, the order does the typecasting for us
# old
param($a);[int]"$a$a"*$a
param($a)                 # assigns the first passed parameter to variable $a
         ;                # line terminator
          [int]           # type cast string "$a$a" to int32
               "$a$a"     # convert $a$a to string for easy concatenation
                     *$a  # multiply by $a

Тестирование (сохранить как boring.ps1):

# new
12 | .\boring.ps1
14544
174 | .\boring.ps1
30306276

# old
.\boring.ps1 12
14544
.\boring.ps1 174
30306276

Определенно не победный ответ, но веселье независимо!


Если вы поместите переменные наоборот, строка int * неявно приведёт строку к целому числу, и вы сможете сохранить 5 байтов приведения. process{$_*"$_$_"}18 байтов, и принимает входные данные от "stdin" (т.е. конвейер), например174|script.ps1
TessellatingHeckler

Хммм ... Интересный момент. Я также могу переключать их, используя мою структуру и достигать того же результата:param($a);$a*"$a$a"
ThePoShWolf

Э-э, я забираю это назад, мой на один байт длиннее!
ThePoShWolf

@TessellatingHeckler Осторожнее с этим ответом, поскольку среда REPL PowerShell не подходит для программы или функции по умолчанию . Нечто подобное param($n)$n*"$n$n"(то, что было у Дарта, без ;) такой же длины и не является REPL.
AdmBorkBork

@TimmyD, почему не считается test.ps1файл, который читает из конвейера? Чтение сценария bash shell из stdin тоже не считается?
TessellatingHeckler

4

Пакетный, 27 20 18 байт

@cmd/cset/a%1%1*%1

Редактировать: 7 байтов сохранено благодаря @TessellatingHeckler. Сохранено еще 2 байта благодаря @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.


set /aв командной строке выводит результат присваивания. -> @cmd/c set/a n=%1%1*%1для 22 байтов.
TessellatingHeckler

@TessellatingHeckler Зачем беспокоиться о назначении, если вы выводите?
Нил

@ TessellatingHeckler Да, я уже сделал этот трюк сам шесть недель назад, и я уже забыл это ..
Нил

@cmd/cset/a%1%1*%1для 18.
Эрик Outgolfer

1
@Neil Нет, но я проверял это (на Windows 10!) Эта cmd/cчасть необходима, потому что инструмент для выполнения командного файла не является cmdсам по себе.
Эрик Outgolfer
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.