Надрукуйте купу нецікавих цифр!


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
Сейми

Відповіді:


38

05AB1E , 3 байти

Ы*

Пояснив

Ð    # triplicate input
 «   # conactenate
  *  # multiply

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


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

2
@Adnan Hehe. Помста за той час, коли ти мені це зробив: P
Емінья,

1
3 операції, 3 байти, я не думаю, що ви могли би зробити це коротше.
Лассе Мейер

2
@busukxuan Так. Concatenate автоматично перетворює число в strта *інтерпретує рядок як число. Дуже корисно :)
Emigna

2
@busukxuan Так, поєднання Pyth і 05AB1E могло зробити це в 2 байти :)
Emigna

29

JavaScript (ES6), 10 байт

_=>(_+_)*_

Необхідно викликати аргумент як a String, а не a 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 (c + "" + c) * c;


28
Ви повинні любити Java; навіть з лямбдами Java 8 та одним із найкоротших відповідей на Java, котрий є тут на кодегольфі, він все ще перевершив усі інші поточні відповіді. xD
Кевін Круїйсен

3
java - bae, лямбда
bae

3
@KevinCruijssen Я все ще маю надію, одного дня java виграє конкурс
codegolf

1
Після редагування ви перевершили @MartinEnder зі своєю відповіддю Retina на 1 байт! o.Ô
Кевін Круїйсен

1
@KevinCruijssen, але все одно недостатньо, щоб виграти або принаймні перемогти python :(
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 що? байт?
Insane

3
@Insane Bytes, якщо ви викликаєте його з командного рядка, натискайте клавіші, якщо ви робите це безпосередньо з vim. Зазвичай я опускаю одиницю з моїх відповідей vim, тому що вона може бути будь-якою.
Дверна ручка


Чи <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 і друкує його результат.

Приклад

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

  • |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
кіт

@cat краще? чи потрібен мені слід ;?
weston


12

Python 2.7, 21 байт:

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

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

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

Зауважте, що це працює лише для значень вгору і дорівнює 9223372036854775807тому, що будь-яке вище значення, і repr()ставить a Lв кінці цілого числа. Отже, для значень, більших за 9223372036854775807цю, 24-байтна версія буде такою, яка працює:

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

Спробуйте це в Інтернеті! (Ідеон)


Я все ще вважаю, що операції з фітонг-струнами є магічними ...
1616

@ Як стверджує?
busukxuan

Множення і додавання рядків Я не бачив цього часто.
січня

@ Напевне, я думаю, ви здебільшого маєте справу зі статичними мовами?
busukxuan

@busukxuan Зателефонуйте мені noob, якщо хочете: ^)
1616 року

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;}
Leaky Nun

Це не повинно працювати належним чином, не включаючи math.h, але ви забираєтеся з ним у GCC, де log10()і pow()вбудовані, і компілятор лише попереджає про "несумісне неявне декларування вбудованої функції", а не припускає (як слід), що вони обидва повертаються int.
Toby Speight

@Laaky - ти нічого не вкладав у a...
Toby Speight

1
Приємно бачити ще одну відповідь, яка повністю стоїть в арифметичному світі (не виконуючи конкатенацію рядків). :-)
Toby Speight

1
@Toby - Об'єднання рядків у C не сумісне з гольфом. ;-)
owacoder

9

Діалог APL , 7 байт

⊢×#⍎⍕,⍕

представлення рядків

⍕, подати рядкове подання

#⍎ внести в число (у просторі імен кореня)

⊢× помножити на початкове число


1
Ці розбиті бійці TIE - смішні!
Луїс Мендо


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

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

@ o11c Ви перевірили попереджувальне посилання на слово "байти", а саме. meta.codegolf.stackexchange.com/a/9429/43319 .
Adám

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
Вибачте, Java ....
Мартін Ендер

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"застосувати цю операцію над стеком"), але я нічого такого не бачу
Nic Хартлі





7

Матлаб / Октава, 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означає?
Лина монашка


Ага. Я шукав щось на зразок 42-ї функції.
Leaky Nun

Код просто будує рядок, об'єднуючи вхідний рядок двічі, потім *, потім рядок знову. Потім з'єднується рядок оцінюється. Я відредагую це у відповідь
Луїс Мендо


6

zsh, 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
Brad Gilbert 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

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

Число, вказане у формулі, повертає відповідь.

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

Подумайте про MsgBox та Sub. Це допоможе вам заощадити 13 байт, якщо правильно порахувати
GER_Moki

Мені знадобиться якась форма поля введення, щоб отримати значення, ні?
tjb1

Спробуйте Sub B (a) MsgBox (a & a) * a Кінець Sub
GER_Moki

Це вимагає, щоб інший суб передавав значення, я не впевнений, що це дозволено в гольфі.
tjb1

Функцію потрібно викликати теж;)
GER_Moki

6

Луа, 20 байт

Приймає аргумент командного рядка та виводить через STDOUT

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

І ungolfed як @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

DC, 11 10 байт

ddZAr^1+**

Я знав, що зрештою знайду користь для Zкоманди!

Операція досить проста - порахуйте цифри, візьміть 10 піднятих до цієї потужності і додайте одну. Це дає множник, який поєднує число з собою. Тоді просто помножте.

Введення / виведення використовує стек, як зазвичай для постійного струму.

Повна програма

Це те, що я використовував для тестів:

#!/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.

Слово обережності - оскільки аромат свинки, який я використовую (InterSystems Ensemble), не перегукується з поверненням каретки для stdin, вхідний та вихідний номер видаватимуться об'єднаними. Щоб виправити це / збільшити читабельність, вам потрібно буде додати два байти та додати вручну CR / LF:

R I W !,I_I*I

Однак, оскільки я не бачив цієї вимоги в правилах виклику, я майже впевнений, що мені добре з коротшим кодом. Якщо я помиляюсь, будь ласка, не соромтесь ЛАСИТИ мене, і я модифікую свою відповідь. :-)


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

Тестування (зберегти як нудне.ps1):

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

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

Однозначно не виграшна відповідь, але весело незалежно!


Якщо розмістити змінні навпаки, рядок int * неявно буде передавати рядок до int, і ви можете зберегти 5 байт кастингу. process{$_*"$_$_"}становить 18 байт і приймає дані від "stdin" (тобто конвеєра), наприклад174|script.ps1
TessellatingHeckler

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

Помилка, я повертаю це назад, моє на один байт довше!
ThePoShWolf

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

@TimmyD чому test.ps1файл не читає з конвеєра? Чи не враховується також читання сценарію bash shell від stdin?
TessellatingHeckler

4

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

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

Редагувати: Збережено 7 байт завдяки @TessellingHeckler. Збережено ще 2 байти завдяки @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.


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

@TessellatingHeckler Навіщо турбуватися призначати, якщо ви працюєте?
Ніл

@TessellatingHeckler Так, я вже робив цю хитрість шість тижнів тому, і я вже забув її ..
Ніл

@cmd/cset/a%1%1*%1для 18.
Ерік Аутгольфер

1
@Neil Ні, але я протестував її (на Windows 10!) cmd/cЧастина потрібна, оскільки інструмент для виконання пакетного файлу не є cmdсам по собі.
Ерік Аутгольфер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.