Найдите пять друзей, чтобы поесть курицу с Полом


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

Я «легкомысленно» намекнул в вопросе, как я ожидаю, что это будет решено, но как знать? Может быть, есть лучший способ ... Надеюсь, вам весело.

Это код-гольф: выигрывает самая низкая оценка в байтах.


3
Связанная последовательность OEIS .
Эминья

5
Я не могу понять, как Пол или куры имеют к этому отношение.
Волшебная Урна Осьминога

6
@carusocomputing: Общительная цепочка '12496 => 14288 => 15472 => 14536 => 14264 "была найдена Полом Пуле в 1918 году (бельгийский математик). А" poulet "означает" курица "на французском языке. Также 6 является совершенное число в том смысле, что сумма его делителей равна 6.
Jylo

8
Подождите, значит, в 1918 году человек обнаружил последовательность чисел ... и нас больше интересует последовательность чисел, чем математический человек по имени Пол?
Волшебная Урна Осьминога

1
@ Dennis, ну, это правда, я не ожидал 4-байтового ответа bruteforce, вы всегда удивляетесь: 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функции не включает в себя само число , ни 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'когда 12 добавляется к ASCII-значениям. Теперь введите эту строку, вычтите 6+6и объедините с пустой строкой, ''чтобы преобразовать ее в массив символов.


Да, извините, я хотел предотвратить жесткое кодирование числа, но это, безусловно, дает преимущество языку «гольфа». Там нет шаблона, хотя каждое число является суммой делителя предыдущего.
Жило

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

Рубин, 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.
Смс

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 из блока Arabic-Indic (2 байта каждая)! { } струнной интерполяции убедитесь , что они разбираются как Perl 6 числовых литералы, а затем строковые их ASCII - представления.

Хорошо, это обман - вот почему я не использовал его в качестве основного ответа ... :)


Поскольку у меня нет доступа к интерпретатору Perl 6, работает ли он для записи --$/*$/?
Нил

@ Нил: Это так. Благодарность! На самом деле, это даже работает, если я вписываю назначение, как --($/=6)*$/).
смс

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.

Каково смещение в байтах требуемой строки в выводе?
Нил

Есть ли какие-либо доказательства, подтверждающие, что какая-либо из требуемых строк действительно напечатана?
Эрик Outgolfer

1
@Neil Смещение символа должно быть 48049051056053060061048051049055055060061048052051054049060061048051052050053060061048051049053051000 . Не уверен насчет байтов.
Деннис

@EriktheOutgolfer Если на самом деле вы имеете в виду разумные ограничения по времени и памяти, то нет. Задача, однако, не определяет никаких ограничений, и они по умолчанию не ограничены.
Деннис

@ Денис Нет, я имею в виду когда-либо. Конечно, подразумевается, что он не закончит свою работу в ближайшее время. Однако, судя по коду, я думаю, что вряд ли когда-нибудь будет напечатана какая-либо из этих строк. Затем, опять же, я просто подумал о некоторых разумных доказательствах ...
Эрик Аутгольфер

2

C 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

Объяснение:

Каждая из пятизначных целочисленных секций кодируется как беззнаковый короткий прямой порядок байтов, затем объединяется вместе, и результат распаковывается. Это происходит, чтобы произвести поток байтов, который не имеет оскорбительных цифровых символов, который затем жестко закодирован в строку. Для извлечения распакуйте поток, распакуйте двухбайтовые шорты, интерпретируйте каждый как строку и соединитесь с >=.


как насчет поломки?
Титус

1

Java 8, 134 байта

Golfed:

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

Ungolfed, полная программа:

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 байта, поэтому я выигрываю, вычисляя дружественную цепочку. Кроме того, я думаю, что пять %секунд подряд - это рекорд для меня. Кроме того, аккуратный пакетный трюк: %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, что означает, что вам придется считать два байта на символ.
Стьюи Гриффин

Я вижу, я не считал символы "=>".
GB
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.