Знайдіть п’ятьох друзів, щоб з’їсти курку з Полом


15

Пол - один із ваших бельгійських знайомих, і він хотів би, щоб ви створили програму, яка виводить принаймні одну з наступних п'яти рядків :

12496=>14288=>15472=>14536=>14264

14264=>12496=>14288=>15472=>14536

14536=>14264=>12496=>14288=>15472

15472=>14536=>14264=>12496=>14288

14288=>15472=>14536=>14264=>12496

Він представляє друзів, якими він найбільше пишається, і він хотів би поїсти з ними. Пол також вважає, що число 6 є ідеальним, і це єдине число, яке варто використовувати. Таким чином, ви не можете використовувати будь-яку іншу цифру, ніж "6" у своєму коді (від 0 до 5 та 7 до 9 заборонено). Ваша програма не може приймати будь-які дані. Вихід може містити сміття до та / або після рядка, але повинен містити принаймні один з вищезазначених рядків.

Наприклад, це дійсний вихід:

220frefze
f**14288=>15472=>14536=>14264=>12496**fczfe fz**15472=>14536=>14264=>12496=>14288**zfe
fzehth

Я "ligthly" натякнув у питанні, як я очікую, що це буде вирішено, але як знаю? Можливо, є кращий спосіб ... Сподіваюся, вам весело.

Це код-гольф: найнижчий бал у виграші байтів.


3
Пов'язана OEIS послідовність.
Емінья

5
Я не можу зрозуміти, що Павло чи кури мають до цього стосунки.
Чарівний восьминога Урна

6
@carusocomputing: Комунікабельний ланцюг '12496 => 14288 => 15472 => 14536 => 14264 "був знайдений Полом Пуле , в 1918 році (бельгійський математик). ідеальне число в тому сенсі, що сума його дільника - 6.
Jylo

8
Зачекайте, значить, манчікен знайшов послідовність чисел у 1918 році ... і нас більше хвилює послідовність чисел, ніж математичний манчікен на ім'я Пол?
Чарівний восьминога Урна

1
@ Денніс, ну це правда, я не очікував, що брутальна сила 4-байтної відповіді, ти завжди несподіванка: p Я додав це правило, тому що я сподівався дати перевагу, якщо хтось перебирає цілі числа та видає все знайдене товариське ланцюги без жорсткого кодування спочатку складного числа. Але врешті-решт, це, здається, надає перевагу значній конверсії та перетворенню персонажів навіть у мові, яка не є головою. Я думаю, що проектувати питання справді важко! І все-таки Enigma використовував властивість виводу і має більш високий бал досі :)
Jylo

Відповіді:


12

05AB1E , 18 17 байт

•w[•Y·FDѨO})„=>ý

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

Пояснення

•w[•                # base 214 encoding of 12496
    Y·F             # loop 2*2 times
       D            # duplicate top of stack
        Ñ           # push divisors
         ¨          # remove the last element (itself)
          O         # sum
           }        # end loop
            )       # wrap in list
             „=>ý   # join list on "=>"

Коротше кажучи, ми обчислюємо кожне число як f(n+1) = sum(divisors(f(n)) - f(n)


5

Пайк, 16 байт

wヰw$VDlsh)J"=>

Спробуйте тут!

wヰ             -  12496
  w$            -   4
    V    )      -  repeat ^:
     D          -   duplicate(^)
      l         -     factors(^)
       s        -    sum(^)
        h       -   ^ + 1
          J     - v.join(^)
           "=>  -  "=>"

Кожен раз, коли рядковий літерал знаходиться в кінці програми, він заміняє його маркером безпосередньо перед ним, економлячи 1 байт у таких випадках. factorsФункція Pyke не включає в себе ні число, ні 1. Якщо числа було дозволено, 1 байт можна зберегти, замінивши w$на4

Пайк, 21 байт

uバ㟐㱰㣈㞸J"=>

Спробуйте тут!

Створіть список необхідних номерів та приєднайтесь до них. Не дуже цікавий крім трюку з струнами.


4

MATLAB, 44 байти

['','=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@'-6-6]

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

Я не знайшов схему в цифрах (і було б важко використовувати шаблон ні до чого, оскільки я не можу використовувати цифри), тому я просто піду на наївний підхід.

'=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@'- рядок, '12496=>14288=>15472=>14536=>14264'коли до значень ASCII додано 12. Тепер введіть цей рядок, відніміть 6+6і з'єднайте з порожнім рядком, ''щоб перетворити його в масив символів.


Так, вибачте, я хотів запобігти жорсткому кодуванню числа, але це, безумовно, дасть перевагу "гофрованій" мові. Немає шаблону, хоча кожне число є сумою дільника попереднього.
Jylo

1
Мені подобається те, як все ще міститься закодована рядок =>.
Ніл

3

JavaScript (ES6), 57 байт / 47 (UTF-8) символів

Завдяки користувачеві5090812 за 10 B збережіть

_=>[...'バ㟐㱰㣈㞸'].map(a=>a.charCodeAt()).join`=>`

Пояснення

Спочатку ми створюємо масив і заповнюємо його символами в рядку バ㟐㱰㣈㞸 . Потім переводимо цикл на рядок ( aмає значення поточного елемента) і змінюємо символ у його код символу. Потім ми приєднуємо всі значення в масиві на=> .

Старий: 67 байт

_=>[6,6,6,6,6].map((_,a)=>`バ㟐㱰㣈㞸`.charCodeAt(a)).join`=>`

Пояснення

Спочатку ми створюємо масив довжиною 5. Потім ми змінюємо значення масиву в кожному індексі для коду символу символу на той самий індекс у рядку バ㟐㱰㣈㞸 , який є порядком усіх друзів Павла. Коли ми це отримаємо, ми приєднуємось до масиву разом і використовуємо =>як роздільник.

Використання

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

f=_=>[...'バ㟐㱰㣈㞸'].map(a=>a.charCodeAt()).join`=>`;alert(f())

Вихідні дані

12496=>14288=>15472=>14536=>14264

Як щодо _ => [... 'バ 㟐 㱰 㣈 㞸'] .map (s => s.charCodeAt ()). Join` => `
user5090812

@ user5090812 Дякую за пропозицію!
Лука

3

Ruby, 36 байт (26 символів)

p"バ㟐㱰㣈㞸".unpack("U*")*"=>"

Бо чому б і ні. Нудно, як пекло.

старша версія - 53 байти

p %w(jol mld oim n6b mke).map{|x|x.to_i ~-6*~-6}*'=>'

Пояснення: кодування чисел у базі 25 дає 5 шести вільних рядків, для їх розшифровки я повинен лише представляти число 25, використовуючи лише 6: (6-1) (6-1) => ~ -6 ~ -6


Я рахую 36 байт з UTF8, а не 26.
smls

1
Я здогадуюсь, він рахував символів, а не байтів. Я завжди використовую цей сайт для підрахунку байтів.
Лука

Виправлена ​​кількість зараз.
GB

3

Perl 6 , 63 59 байт

{$/=6;$/--;join "=>",<JOL MLD OIM N6B MKE>».parse-base($/*$/)}

{join "=>",<JOL MLD OIM N6B MKE>».parse-base(--($_=6)*$_)}

Розшифровує числа з бази 25, оскільки це єдина база, підтримувана .parse-base(2 до 36), де жодна з них не має недійсних цифр.

Завдяки Нілу за -3 байти.

Perl 6 , 82 75 байт

{my \a="BXS".parse-base(6*6);join "=>",(a,{sum grep $_%%*,^$_}...^{$_==a if $++})}

{my \a="BXS".parse-base(6*6);join "=>",({$/=$_//a;sum grep $/%%*,^$/}...a)}

Розшифровує число 15472в базі 36, а потім формує послідовність, обчислюючи кожне число як суму правильних дільників попереднього числа.

Perl 6 , 69 байт (47 символів) - неконкурентоспроможний

{"{١٢۴۹6}=>{١۴۲۸۸}=>{١۵۴۷۲}=>{١۴۵۳6}=>{١۴۲6۴}"}

Не використовує жодної із заборонених цифр ASCII, використовує натомість цифри Unicode з арабсько-індійського блоку (2 байти кожен)! The{ } струнної інтерполяції переконайтеся , що вони розбираються як Perl 6 числових літерали, а потім рядкові їх ASCII - уявлення.

Гаразд, це обман - тому я не використовував це як свою основну відповідь ... :)


Оскільки я не маю доступу до перекладача Perl 6, чи працює це для написання --$/*$/?
Ніл

@Neil: Це так. Спасибі! Насправді це навіть спрацьовує, якщо я вставте завдання, як --($/=6)*$/).
smls

3

Желе , 5 4 байти

ȷṗȷỌ

Друкує всі п’ять рядків. Користується тим, що "сміття" дозволено і поховає п'ять рядків у 10 3003 символів виводу.

Як це працює

ȷṗȷỌ  Main link. No arguments.

ȷ     Set the return value to 1000.
 ṗȷ   Cartesian power; form all arrays of length 1000 that consist of integers in
      [1, ..., 1000].
   Ọ  Unordinal; convert all integers to characters.

Яке зміщення байтів необхідного рядка у виході?
Ніл

Чи є якісь докази на підтримку будь-якого з необхідних рядків, насправді надрукованих?
Ерік Аутгольфер

1
@Neil Зміщення символів має бути 48049051056053060061048051049055055060061048052051054049060061048051052050053060061048051049053051000 . Не впевнений у байтах.
Денніс

@EriktheOutgolfer Якщо насправді ви маєте на увазі розумні обмеження часу та пам'яті, то ні. У виклику не вказано жодних обмежень, і вони за замовчуванням необмежені.
Денніс

@Dennis Ні, я маю на увазі коли-небудь. Звичайно, мається на увазі, що вона не закінчить свою роботу незабаром. Судячи з коду, я думаю, що насправді навряд чи надрукує жоден із цих рядків. Потім я знову подумав про якісь обґрунтовані докази ...
Ерік Аутгольфер

2

С, 94 84 77 байт

Стеопід простий. Особлива подяка @Neil

g(){char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";for(;*++m;)putchar(*m-66+6);}

f () {printf ("% d =>% d =>% d =>% d =>% d", '~' 'r' - 'd', '~' 'd' - 'h', ' ~ ' ' r '-' L ',' ~ ' ' z '+' d ',' ~ '*' t '-' P ');}


Принаймні, на ideone, ви можете перемістити char*mвсередину, for()щоб зберегти байт, і це також зробить функцію багаторазовою (необхідна умова функцій). Крім того, ви виводите кінцеву нуль; *++mвиправив би це. Крім того , ви можете зберегти кілька байт шляхом віднімання 60 замість 66: g(){for(char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";*++m;)putchar(*m-66+6);}.
Ніл

Або ви можете скопіювати підхід з відповіді MATLAB, що б зберегти ще один байт поверх цього.
Ніл

@Neil мій компілятор не дозволить мені оголосити всередині циклу for, initial declaration used outside C99 modeале я радий спростити путчар. Спасибі!
cleblanc

1

PHP, 73 63 60 байт

for(;$c="|`*X6H-$*@"[$i];)echo!!$i&++$i?"=>".!!6:"",ord($c);

Бігайте з -nr.

трохи менше ліниві: взяли рядок в списку , =>1(ascii)(ascii)
тобто .: 124, 96, =>1, 42, 88, =>1, 54,72 , =>1, 45, 36, =>1, 42, 64;
друк =>1за рядковим індексом, додавання коду ascii

зламатися

            # loop through string with index $i
for(;$c="|`*X6H-$*@"[$i];)echo
            # string ascii values: 124,96,42,88,54,72,45,36,42,64
    !!$i        # true if $i>0
    &++$i       # odd if (old) $i is 0,2,4,6,8
                # -> true for 2,4,6,8
        ?"=>".!!6   # if true, print "=>1"
        :"",        # else print nothing
    ord($c);    # print ascii value


1

PHP, 53 байти

<?=join('=>',unpack('v*',gzinflate('�`p������s')));

Шістнадцятковий дамп:

00000000: 3c3f 3d6a 6f69 6e28 273d 3e27 2c75 6e70  <?=join('=>',unp
00000010: 6163 6b28 2776 2a27 2c67 7a69 6e66 6c61  ack('v*',gzinfla
00000020: 7465 2827 bb60 70c1 bcc0 e684 c50e 7300  te('.`p.......s.
00000030: 2729 2929 3b                             ')));

Вихід:

12496=>14288=>15472=>14536=>14264

Пояснення:

Кожен з п'ятизначних цілих розділів кодується як ненаписаний короткий маленький ендіан, потім з'єднується разом і результат gzipped. Це трапляється для отримання байтової пари, яка не має символів, що порушують цифру, а потім жорстко закодована в рядок. Щоб витягнути, відстебніть потік, розпакуйте двобайтові шорти, інтерпретуйте їх як рядок та з'єднайтеся >=.


як щодо поломки?
Тит

1

Java 8, 134 байти

Гольф:

()->{String s="";for(String a:new String[]{"JOL","MLD","OIM","N6B","MKE"}){if(!s.isEmpty())s+=("=>");s+=Long.valueOf(a,25);}return s;}

Безголовка, повна програма:

import java.util.function.*;

public class FindFiveFriendsToEatChickenWithPaul {

  public static void main(String[] args) {
    System.out.println(toString(() -> {
      String s = "";
      for (String a : new String[] { "JOL", "MLD", "OIM", "N6B", "MKE" }) {
        if (!s.isEmpty()) s += ("=>");
        s += Long.valueOf(a, 25);
      }
      return s;
    }));

  }

  private static String toString(Supplier<String> s) {
    return s.get();
  }

}

1

Пакет, 191 байт

@set/as=n=66*(66+66+66+6*6)+66/6+66/6+6,u=6/6
@call:t
@call:t
@echo %s: ==^>%
@exit/b
:t
@call:c
:c
@for /l %%i in (%u%,%u%,%n%)do @set/an-=%%i*!(%n%%%%%i)
@set/an=-n
@set s=%s% %n%

Я вважаю, що для обчислення кожного числа знадобиться як мінімум 32 байти, використовуючи лише 6s плюс ще 32, щоб вивести їх все, що вже складає 192 байти, тому я виграю, обчислюючи дружній ланцюжок. Крім того, я думаю, п'ять %s поспіль - це рекорд для мене. Крім того, чіткий фокус Batch: %n%підстановка перед forоцінкою циклу підміняється , тому цикл обчислює всі чинники nта віднімає їх n, тим самим призводячи до заперечення бажаного результату.


1

Желе , 12 байт

“<ọ’ÆṣÐĿj“=>

Друкує четвертий рядок і більше нічого.

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

Як це працює

“<ọ’ÆṣÐĿj“=>  Main link. No arguments.

“<ọ’          Yield the 1-based indices of '<' and 'ọ' in Jelly's code page, i.e.,
              [61, 222], and convert the array from base 250 to integer.
              This yields 15472.
      ÐĿ      Iteratively call the link to the left until the results are no longer
              unique and return the array of all unique results.
    Æṣ        Compute the proper digit sum of the previous value (initially 15472).
        j“=>  Join, separating by the string "=>".

0

Python 2, 78 72 байти

print''.join(chr(ord(x)-6-6)for x in'=@>DDIJ=A@C>IJ=@A?BIJ=@>B@IJ=>@EB')

Редагувати - Завдяки Стюі Гріффін за збереження 6 байт!

Також іншим рішенням було б вивести всі можливі перестановки. ОП каже, що сміття добре.

from itertools import permutations
print str(list(permutations(''.join(str(x)+'.'for x in range(int('9'*5)).replace(',','').replace('\'','') 
# also 9 and 5 need to be converted using ord and chr

Занадто багато надмірності в перетворенні з intабо listв str. Я думаю, що це було б простіше в деяких езотеричних мовах, але я не знаю жодної з них.


Чи можете ви додати 66 замість 12? Це врятувало б ще один байт.
GB

Він вийде із звичайного діапазону ASCII @GB, тобто вам доведеться рахувати два байти на символ.
Стюі Гріффін

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