Znajdź pięciu przyjaciół, którzy będą jeść kurczaka z Paulem

15

Paul jest jednym z twoich belgijskich znajomych i chciałby, abyś stworzył program, który generuje co najmniej jeden z następujących pięciu ciągów :

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

Przedstawia przyjaciół, z których jest najbardziej dumny i chciałby z nimi zjeść. Paul uważa również, że liczba 6 jest idealna i jest to jedyna liczba, którą warto użyć. Nie możesz więc używać w kodzie żadnej innej cyfry niż „6” (od 0 do 5 i od 7 do 9 są zabronione). Twój program nie może przyjmować żadnych danych wejściowych. Dane wyjściowe mogą zawierać śmieci przed i / lub po ciągu, ale powinny zawierać co najmniej jeden z powyższych ciągów.

Na przykład jest to poprawny wynik:

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

„Bezczelnie” podpowiedziałem w pytaniu, jak mam się tego spodziewać, ale skąd to wie? Może jest lepszy sposób ... Mam nadzieję, że dobrze się bawisz.

To jest golf-golf: wygrywa najniższy wynik w bajtach.

Jylo
źródło
3
Powiązana sekwencja OEIS .
Emigna
5
Nie mogę zrozumieć, co Paul lub kurczaki mają z tym wspólnego.
Magic Octopus Urn
6
@carusocomputing: Towarzyski łańcuch „12496 => 14288 => 15472 => 14536 => 14264” został znaleziony przez Paula Pouleta w 1918 roku (belgijski matematyk). A „poulet” oznacza po francusku „kurczak”. Również 6 to liczba idealna w tym sensie, że suma dzielnika wynosi 6.
Jylo
8
Chwila, więc w 1918 roku mnich znalazł sekwencję liczb ... a my bardziej zależy nam na sekwencji liczb niż matematyczny Paul o nazwisku Paul?
Magic Octopus Urn
1
@Dennis, cóż, to prawda, nie spodziewałem się odpowiedzi 4-bajtowej bruteforce, zawsze jesteś niespodzianką: p Dodałem tę zasadę, ponieważ miałem nadzieję dać przewagę, jeśli ktoś iterowałby nad liczbami całkowitymi i wysyłał wszystkie uznane za towarzyskie łańcuchy bez twardego kodowania najpierw skomplikowanej liczby. Ale ostatecznie wydaje się, że sprzyja to bardzo podstawowej konwersji i konwersji postaci nawet w języku innym niż golfowy. Myślę, że zaprojektowanie pytania jest naprawdę trudne! Mimo to Enigma używał właściwości wyjścia i jak dotąd ma wyższy wynik :)
Jylo

Odpowiedzi:

12

05AB1E , 18 17 bajtów

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

Wypróbuj online!

Wyjaśnienie

•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 "=>"

W skrócie, każdą liczbę obliczamy jako f(n+1) = sum(divisors(f(n)) - f(n)

Emigna
źródło
5

Pyke, 16 bajtów

wヰw$VDlsh)J"=>

Wypróbuj tutaj!

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

Za każdym razem, gdy literał łańcuchowy znajduje się na końcu programu, zamienia go na token tuż przed nim, oszczędzając 1 bajt w takich przypadkach. factorsFunkcja Pyke nie obejmuje samego numeru ani 1. Gdyby liczby były dozwolone, 1 bajt można zapisać, zastępując w$go4

Pyke, 21 bajtów

uバ㟐㱰㣈㞸J"=>

Wypróbuj tutaj!

Utwórz listę wymaganych numerów i dołącz do nich. Niezbyt interesujące oprócz sztuczki ze sznurkami.

niebieski
źródło
4

MATLAB, 44 bajty

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

Wypróbuj online!

Nie znalazłem wzoru w liczbach (i tak trudno byłoby użyć wzoru do niczego, ponieważ nie mogę używać liczb), więc po prostu pójdę na naiwne podejście.

'=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@'jest łańcuchem, '12496=>14288=>15472=>14536=>14264'gdy do wartości ASCII dodawane jest 12. Teraz wprowadź ten ciąg, odejmij 6+6i połącz z pustym ciągiem, ''aby przekształcić go w tablicę znaków.

Stewie Griffin
źródło
Tak, przepraszam, chciałem zapobiec twardemu kodowaniu liczb, ale z pewnością daje przewagę językowi „golfy”. Nie ma wzorca, chociaż każda liczba jest sumą dzielnika poprzedniego.
Jylo
1
Podoba mi się sposób, w jaki wciąż zawiera kodowany ciąg =>.
Neil,
3

JavaScript (ES6), 57 bajtów / 47 znaków (UTF-8)

Dzięki user5090812 za 10 B oszczędzania

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

Wyjaśnienie

Najpierw tworzymy tablicę i wypełniamy ją znakami w ciągu バ㟐㱰㣈㞸. Następnie zapętlamy ciąg ( ama wartość bieżącego elementu) i zmieniamy znak w kod znaku. Następnie łączymy wszystkie wartości w tablicy przez =>.

Stare: 67 bajtów

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

Wyjaśnienie

Najpierw tworzymy tablicę o długości 5. Następnie zmieniamy wartości tablicy przy każdym indeksie dla kodu znakowego znaku o tym samym indeksie w ciągu バ㟐㱰㣈㞸, które są liczbami wszystkich przyjaciół Paula w kolejności. Kiedy to otrzymaliśmy, łączymy tablicę razem i używamy =>jako separatora.

Stosowanie

Aby go użyć, po prostu uruchom to:

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

Wynik

12496=>14288=>15472=>14536=>14264
Łukasz
źródło
Co powiesz na _ => [... 'バ 㟐 㱰 㣈 㞸'] .map (s => s.charCodeAt ()). Join` => `
user5090812
@ user5090812 Dzięki za sugestię!
Łukasz
3

Rubinowy, 36 bajtów (26 znaków)

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

Bo czemu nie. Nudne jak diabli.

starsza wersja - 53 bajty

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

Objaśnienie: kodowanie liczb w bazie 25 daje 5 sześcio-wolnych łańcuchów, aby je zdekodować, muszę tylko reprezentować liczbę 25, używając tylko 6: (6-1) (6-1) => ~ -6 ~ -6

GB
źródło
Liczę 36 bajtów z UTF8, a nie 26.
sml
1
Myślę, że policzył znaki, a nie bajty. Zawsze używam tej strony do liczenia bajtów.
Łukasz
Poprawiono teraz.
GB
3

Perl 6 , 63 59 bajtów

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

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

Dekoduje liczby z podstawy 25, ponieważ jest to jedyna podstawa obsługiwana przez .parse-base(od 2 do 36), gdzie żadna z nich nie ma nieprawidłowych cyfr.

Dzięki Neil za -3 bajty.

Perl 6 , 82 75 bajtów

{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)}

Dekoduje liczbę 15472w podstawie 36, a następnie generuje sekwencję, obliczając każdą liczbę jako sumę właściwych dzielników poprzedniej liczby.

Perl 6 , 69 bajtów (47 znaków) - niekonkurencyjny

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

Nie używa żadnej z zabronionych cyfr ASCII, zamiast tego używa cyfr Unicode z bloku arabskiego (po 2 bajty)! Te { }interpolacje strunowe mieć pewność, że analizowany jako Perl 6 Liczba literały, a następnie stringified ich reprezentacje ASCII.

Okej, to oszustwo - dlatego nie użyłem go jako mojej głównej odpowiedzi ... :)

smls
źródło
Ponieważ nie mam łatwego dostępu do interpretera Perla 6, czy działa pisanie --$/*$/?
Neil
@Neil: Tak. Dzięki! W rzeczywistości działa nawet, jeśli wstawię zadanie, na przykład --($/=6)*$/).
smls
3

Galaretka , 5 4 bajtów

ȷṗȷỌ

Drukuje wszystkie pięć ciągów. Wykorzystuje fakt, że wyjście „śmieci” jest dozwolone i chowa pięć ciągów znaków w 10 3003 znakach wyjścia.

Jak to działa

ȷṗȷỌ  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.
Dennis
źródło
Jakie jest bajtowe przesunięcie wymaganego ciągu w danych wyjściowych?
Neil
Czy istnieje dowód potwierdzający, że którykolwiek z wymaganych ciągów jest faktycznie drukowany?
Erik the Outgolfer,
1
@Neil Przesunięcie znaku powinno wynosić 48049051056053060061048051049055055060061048052051054049060061048051052050053060061048051049053051000 . Nie jestem pewien co do bajtów.
Dennis
@EriktheOutgolfer Jeśli faktycznie masz na myśli rozsądne ograniczenia czasowe i pamięciowe, to nie. Wyzwanie nie określa jednak żadnych ograniczeń i domyślnie są one nieograniczone.
Dennis
@Dennis Nie, to znaczy zawsze. Oczywiście oznacza to, że wkrótce nie zakończy swojej pracy. Sądząc jednak po kodzie, myślę, że naprawdę mało prawdopodobne jest wydrukowanie któregokolwiek z tych ciągów. Potem znowu pomyślałem o jakimś rozsądnym dowodzie ...
Erik Outgolfer
2

C, 94 84 77 bajtów

Głupie proste. Specjalne podziękowania @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 ');}

cleblanc
źródło
Przynajmniej na ideone, możesz przesunąć char*mwnętrze, for()aby zapisać bajt, a także sprawia, że ​​funkcja może być ponownie użyta (niezbędny warunek funkcji). Ponadto wyprowadzasz końcowy null; *++mnaprawiłoby to. Ponadto, można zaoszczędzić kilka bajtów przez odjęcie 60 zamiast 66: g(){for(char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";*++m;)putchar(*m-66+6);}.
Neil
Lub możesz skopiować podejście z odpowiedzi MATLAB, co dodatkowo uratuje kolejny bajt.
Neil,
@Neil mój kompilator nie pozwala mi zadeklarować wewnątrz pętli for, initial declaration used outside C99 modeale z przyjemnością upraszczam putchar. Dzięki!
cleblanc
1

PHP, 73 63 60 bajtów

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

Uruchom z -nr.

trochę mniej leniwy: wziął ciąg lista =>1(ascii)(ascii)
IE: 124, 96, =>1, 42, 88, =>1,54 , 72, =>1, 45, 36, =>1, 42, 64;
drukuj =>1według indeksu ciągów, dołącz kod ascii

awaria

            # 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
Tytus
źródło
1

C ++, 92 bajty

#include <cstdio>
int main(){for(char c:"UVX]ZabUXV\\abUYX[VabUXYWZabUXVZX")putchar(c-6*6);}
Ralph Tandetzky
źródło
1

PHP, 53 bajty

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

Zrzut szesnastkowy:

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                             ')));

Wynik:

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

Wyjaśnienie:

Każda z pięciocyfrowych sekcji liczb całkowitych jest kodowana jako krótki znak endianu bez znaku, a następnie łączona razem, a wynik jest zgrywany. Zdarza się to wytwarzać parę bajtów, która nie ma żadnych obrażających cyfr, które są następnie zakodowane na stałe w ciągu. Aby wyodrębnić, rozpakuj strumień, rozpakuj dwubajtowe skróty, zinterpretuj każdy z nich jako ciąg i połącz się z nim >=.

Alex Howansky
źródło
co powiesz na awarię?
Tytus
1

Java 8, 134 bajty

Gra w golfa:

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

Niegolfowany, pełny program:

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();
  }

}

źródło
1

Partia, 191 bajtów

@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%

Szacuję, że obliczenie każdej liczby wymagałoby co najmniej 32 bajtów, używając tylko 6s plus kolejne 32, aby wydrukować je wszystkie, czyli już 192 bajty, więc wygrywam, obliczając polubowny łańcuch. Myślę też, że pięć %sekund z rzędu to dla mnie rekord. Również zgrabna sztuczka wsadowa: %n%jest podstawiana przed forobliczeniem pętli, więc pętla oblicza wszystkie współczynniki ni odejmuje je n, co powoduje negację pożądanego wyniku.

Neil
źródło
1

Galaretka , 12 bajtów

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

Wyświetla czwarty ciąg i nic więcej.

Wypróbuj online!

Jak to działa

“<ọ’ÆṣÐĿ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 "=>".
Dennis
źródło
0

Python 2, 78 72 bajtów

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

Edycja - Dzięki Stewie Griffin za uratowanie 6 bajtów!

Innym rozwiązaniem byłoby wyprowadzenie wszystkich możliwych permutacji. OP twierdzi, że śmieci są w porządku.

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

Nadmiarowość jest zbyt duża w konwersji z intlub listna str. Myślę, że byłoby to łatwiejsze w niektórych ezoterycznych językach, ale nie znam żadnego z nich.

Gurupad Mamadapur
źródło
Czy możesz dodać 66 zamiast 12? Pozwoliłoby to zaoszczędzić kolejny bajt.
GB
Wyjdzie poza normalny zakres ASCII @ GB, co oznacza, że ​​będziesz musiał policzyć dwa bajty na znak.
Stewie Griffin
Rozumiem, nie liczyłem znaków „=>”.
GB