Створюйте програми, які друкують n разів більше їх довжини


16

Враховуючи невід'ємне ціле число n, ваше рішення повинно виводити програму на обраній вами мові, вихід якої має в nрази більше байтів, ніж виведена програма.

Правила

  • Ви повинні вказати мову та кодування програм, які виводить ваше рішення, і ви не можете вибирати різні мови чи кодування для різних входів до свого рішення. Мова вашої вихідної програми може бути або не збігатися з мовою вашого рішення.
  • У вашій заяві потрібно обробляти лише цілі числа в діапазоні вашої мови, але, будь ласка, не зловживайте цим правилом.

Це тому виграє найкоротше подання в байтах.

Приклад

Припустимо n, 4. Моє рішення тоді виводить f_8програму, яка моєю (уявною) мовою виводитьj3 1s+/2]!mz . Вихід програми має довжину 3, а його вихід має довжину 3 * 4 = 12, тому рішення є правильним для введення 4.

Припустимо, натомість nце 1, а моя програма виводить ffffpfpffp(10 байт). Програма ffffpfpffpмоєю обраною мовою повинна була б отримати вихід 10 * 1 = 10 байт.


На даний момент це досить недооцінено. Чи можете ви навести кілька прикладів?
DJMcMayhem

3
Я думаю, що я знаю, що нам робити, але щоразу, коли я читаю специфікацію, я стаю менш впевненою. виведення тексту, який має n разів більше байтів, ніж видана програма, мабуть, означає, що ми повинні виводити текст і програму. Набір символів і мова повинні відповідати всім цілим числам. На який "набір символів" йдеться?
Денніс

Nevermind, я на самому ділі зробив неправильно, і так зробив все , але один з відповідей.
Денніс

1
@Dennis Це не допоможе, щоб заголовок суперечив тілу. Можливо, виведіть програму, яка виводить n разів більше її довжини , буде кращою назвою, якщо я правильно зрозумію виклик (я не впевнений, що це роблю)
Сизіф

1
Чи можемо ми взяти nза рядок?
Кудлатий

Відповіді:


7

JavaScript (ES6), 38 байт

n=>`(x="${n}")=>(x+1/7+1e9).repeat(x)`

Демо



3

мозковий ебать , 348 байт

--[>+<++++++]>>--[>+<++++++]>++[-<+>]----[>+<----]>---[-<+>]----[>+<----]>-[-<+>]-[>+<---]>++++++[-<+>]-[>+<---]>++++++++[-<+>]--[>+<++++++]>+++[-<+>]<[<],[->.<]>>>>>.<<<.>>.<<<.>>>.<<<.>>>.<<<.>>...>>>.<<....<<.>>>.<<..<<.>>>..<<.......>>>>.<<<..<<.>.....>>>.<<.>>.>>.<<<<<.>>>>.<<.<<.>>.>.<<<.>>.<<<.>>...<<.>>>..>>.<<.>.<<<.>.<<.>>>.>>.<<<..>>>.

Спробуйте в Інтернеті! Або переглянути версію Ungolfed (тобто з чим мені довелося працювати)


Відмова від відповідальності

Я витратив більше часу на це, ніж вважав, що це по-людськи можливо. Я хотів би подякувати моїй дівчині за те, що дозволив мені її змусити працювати над цим; а також мій рятівник .

Як це навіть працює?

Ніякої підказки.

Як це працює?

Усі вихідні дані мають кодовий фрагмент коду, який однаковий:

[->+>+>+<<<]>>>>-[<<+>>-------]<<+-----[<[.-]>->[->+<<<+>>]>[-<+>]<<]

Розбимо його на три частини, що називаються a,b,c

a : [->+>+>+<<<]>>>>               THE DUPLICATOR
b : -[<<+>>-------]<<+-----        THE ADJUSTER
c : [<[.-]>->[->+<<<+>>]>[-<+>]<<] THE PRINTER

Вхід iпросто наклеюється на передню частину в одинарному режимі:

iabc

(наприклад, якщо вхід був 10, то i = '++++++++++')

Копіювач - Розбиває вхід на два однакові числа m, n, еквівалентні вводу

Настроювач - Налаштовує , nщо він дорівнює довжині програми

Принтер - друкує m*nсимволи ASCII


Зауважимо, що вхід у прикладі є a newline, що як ASCII значення 10, тому вхід є 10. Якщо ви хочете перевірити інші невеликі числа, замініть на ,скільки +завгодно бажаєте.



2

Хаскелл , 55 байт

f n=(++)<*>show$"main=putStr$[1.."++show n++"*2]>>'#':"

Спробуйте в Інтернеті! Приклад використання: f 1дає наступні 54 байти програми:

main=putStr$[1..1*2]>>'#':"main=putStr$[1..1*2]>>'#':"

Спробуйте в Інтернеті! який виробляє наступні 54 байтові вихідні дані:

#main=putStr$[1..1*2]>>'#':#main=putStr$[1..1*2]>>'#':

1

Python 3 -> HQ9 +, 11 байт

'Q'.__mul__

Це треба було зробити

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


Де я можу перевірити штаб?
Тит

1
Ну Qпросто виводить власний вихідний код. Ви можете перевірити це тут: hq9plus.alwaysdata.net . Це ніколи не повинно було бути серйозним записом
michi7x7

Це не працює. Якщо я ввожу 1, то ви виходите Q, що в свою чергу виводить Q. Qмає довжину 1, але ваш код має довжину 11.
NoOneIsHere

@NoOneIsHere ', вихід якого має в n рази більше байтів, ніж виведена програма.' (не подана програма)
michi7x7

1
@NoOneIsHere це не так: almnet.de/esolang/hq9plus.php (У специфікації мови зазначено лише "Друкує весь текст файлу вихідного коду")
michi7x7

1

Java 8, 175 174 байт

interface M{static void main(String[]a){System.out.printf("interface M{static void main(String[]a){int i=(88+%s)*%s;for(;i-->0;System.out.print(0));}}",a[0].length(),a[0]);}}

Приклади:

n=1Виходи :

interface M{static void main(String[]a){int i=(88+1)*1;for(;i-->0;System.out.print(0));}}

(довжина = 89), яка виводить 89 нулів :

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

n=10Виходи :

interface M{static void main(String[]a){int i=(88+2)*10;for(;i-->0;System.out.print(0));}}

(довжина = 90), яка видає 900 нулів :

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

n=100Виходи :

interface M{static void main(String[]a){int i=(88+3)*100;for(;i-->0;System.out.print(0));}}

(довжина = 91), яка виводить 9100 нулів :

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Пояснення:

interface M{                                // Class:
  static void main(String[]a){              //  Mandatory main method
    System.out.printf("interface M{static void main(String[]a){
                                            //   Print a new program with:
      int i=(88+%s)*%s;                     //    Integer containing (88*A)+B
      for(;i-->0;System.out.print(0));}}",  //    And print that many zeroes
        a[0].length(),                      //     Where A is the length of the number
                                            //     (0-9 = 1; 10-99 = 2; 100-999 = 3; etc.)
        a[0]);}}                            //     and B is the number itself

0

RProgN 2 , 7 5 байт

«•.* 

З заднім простором

Пояснив

«•.* 
«    # Yield a function from the remaining string.
 •.  # Append a space and stringify, which builds the original program (Because stringifying a function removes noops, which spaces are)
   * # Repeat the implicit input times.

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


0

CJam, 8 13 байт

q_,S\" 8+*S*"

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

Створена програма виводить пробіли, тому їх важко сказати.


Я думаю, що це єдина відповідь, яка інтерпретує частину про виведення програми, яка виводить текст правильно, але співвідношення вимкнено, якщо вхід має більше однієї цифри.
Денніс

О так, да, ,,
geokavel


0

Python → TECO, 20 байт

Відповідь - в Python, а згенерований код - у TECO. Python - це функція, що повертається VV12345\VVповторно n разів. Дивіться тут для пояснення TECO.

'VV12345\VV'.__mul__

0

PHP, 47 + 1 байт

<?="<?=str_pad(_,",strlen($argn)+18,"*$argn);";

друкує один підкреслення з подальшим пробілом.
Виконати як труба з -F; запустити виведену програму з -fабо -F.

Це не зможе ввести більше 64 цифр,
що набагато вище, ніжPHP_INT_MAX ( ).

Однак він не вдається для введення більше, ніж PHP_INT_MAX-18 ... чи все ж таки він може кваліфікуватися?


@HyperNeutrino: не вдасться ввести більше, ніж PHP_INT_MAX-18. Це дискваліфікує?
Тит

Ні, я скажу, що це добре :)
HyperNeutrino

0

PHP → Python 2, 40 + 1 байт

print "A"*<?=13+strlen($argn),"*",$argn;

друкує програму Python, яка друкує повторні As. Запустити як труба -F.


0

Пакет → Деревне вугілля, 22 байти

Я не впевнений, яке кодування я повинен використовувати, оскільки це байти. Ось байти, інтерпретовані як Windows-1252:

@set/p=Á%1ñªÉñ«Ìñ¹<nul

Ті ж байти, що і PC-850:

@set/p=┴%1±¬╔±½╠±╣<nul

Ті самі байти на кодовій сторінці деревного вугілля:

@set/p=A%1θ×Iθ⁺Lθ⁹<nul

Отримана програма деревного вугілля має Plus(Length(Cast(n)), 9)байти довгі:

A       Assign
 %1      (String representation of n)
   θ      To variable q
        Implicitly print a number of `-`s equal to:
×        Product of:
 Iθ       Cast of q to integer
 ⁺        Sum of:
  Lθ       Length of q
  ⁹        Integer constant 9


0

JavaScript (ES8), 43 41 39 байт

n=>`f=_=>"".padEnd(${n}*(88+f).length)`

Перевірте це

Виведення згенерованої функції - це рядок пробілів, які замінені на *s у цьому фрагменті.

g=
n=>`f=_=>"".padEnd(${n}*(88+f).length)`

o.innerText=(h=n=>`Function: ${x=g(n)}\nLength:   ${x.length}\nOutput:   "${x=eval(x)().replace(/./g,"*")}"\nLength:   `+x.length)(i.value=10);oninput=_=>o.innerText=h(+i.value)
<input id=i type=number><pre id=o>


0

R , 46 байт

function(n)sprintf("cat(rep('a',%d*23),'')",n)

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

Анонімна функція, яка повертає рядок

cat(rep('a',n*23),'')

Які відбитки a(за якими aслід пробіл) 23 nрази. Мені це було потрібно, ''тому що в іншому випадку catне було б надруковано останній пробіл.


0

C, 94 байти

main(int c,char**a){if(c>1){c=atoi(a[1]);if(c>0&&c<0xFFFFFF){c*=94;while(c--)printf("r");}}}

це буде 94 байти, включаючи останнє \ n, яке в стандарті C каже, що його слід записати. повернути як символи 'r' як (довжина програми) * (аргумент програми), якщо аргумент програми не існує або він <= 0 або він> 0xFFFFF не надрукувати нічого прикладу

C:\>nameProg.exe 1
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

0

MATLAB (63 байти)

a=@(n)['repmat(''a'',1,',num2str(n*(15+numel(num2str(n)))),')']

Наприклад:

>> a(5)

ans =

repmat('a',1,80)

і:

>> repmat('a',1,80)

ans =

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