Trouvez cinq amis pour manger du poulet avec Paul

15

Paul est l'une de vos connaissances belges, et il aimerait que vous créiez un programme qui génère au moins l'une des cinq chaînes suivantes :

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

Il représente les amis dont il est le plus fier et il aimerait manger avec eux. Paul pense également que le chiffre 6 est parfait, et c'est le seul chiffre qui mérite d'être utilisé. Donc , vous ne pouvez pas utiliser un autre chiffre que « 6 » dans votre code (0 à 5 et 7 à 9 sont interdits). Votre programme ne peut accepter aucune entrée. La sortie peut contenir des ordures avant et / ou après la chaîne mais doit contenir au moins une des chaînes ci-dessus.

Par exemple, ceci est une sortie valide:

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

J'ai "légèrement" laissé entendre dans la question comment je m'attendais à ce que cela soit résolu, mais comment le sait-on? Peut-être y a-t-il une meilleure façon ... J'espère que vous vous amuserez.

C'est le code-golf: le score le plus bas en octets l'emporte.

Jylo
la source
3
Séquence OEIS associée .
Emigna
5
Je ne peux pas comprendre ce que Paul ou les poulets ont à voir avec ça.
Urne de poulpe magique
6
@carusocomputing: La chaîne sociable '12496 => 14288 => 15472 => 14536 => 14264 "a été trouvée par Paul Poulet , en 1918 (un mathématicien belge). Et" poulet "signifie" poulet "en français. Aussi 6 est un nombre parfait dans le sens où la somme de son diviseur est 6.
Jylo
8
Attendez, donc un manchicken a trouvé une séquence de nombres en 1918 ... et nous nous soucions plus de la séquence de nombres que le manchicken mathématique nommé Paul?
Urne de poulpe magique
1
@ Dennis, eh bien c'est vrai, je ne m'attendais pas à une réponse bruteforce de 4 octets, vous êtes toujours une surprise: p J'ai ajouté cette règle parce que j'espérais donner un avantage si quelqu'un itérait sur des nombres entiers et produisait tous les résultats sociables chaînes sans codage en dur un nombre compliqué en premier. Mais à la fin, cela semble favoriser considérablement la conversion de base et la conversion de caractères, même dans un langage non golfique. Je pense que concevoir une question est vraiment difficile! Pourtant, Enigma a utilisé la propriété de la sortie et a obtenu le score le plus élevé jusqu'à présent :)
Jylo

Réponses:

12

05AB1E , 18 17 octets

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

Essayez-le en ligne!

Explication

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

En bref, nous calculons chaque nombre comme f(n+1) = sum(divisors(f(n)) - f(n)

Emigna
la source
5

Pyke, 16 octets

wヰw$VDlsh)J"=>

Essayez-le ici!

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

Chaque fois qu'un littéral de chaîne se trouve à la fin d'un programme, il l'échange avec le jeton juste avant lui, économisant 1 octet dans des cas comme celui-ci. La factorsfonction de Pyke n'inclut pas le nombre lui-même ni 1. Si les nombres étaient autorisés, 1 octet pourrait être enregistré en remplaçant w$par4

Pyke, 21 octets

uバ㟐㱰㣈㞸J"=>

Essayez-le ici!

Créez une liste des numéros requis et joignez-les. Pas très intéressant à part l'astuce avec les cordes.

Bleu
la source
4

MATLAB, 44 octets

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

Essayez-le en ligne!

Je n'ai pas trouvé de modèle dans les chiffres (et il serait difficile d'utiliser le modèle pour quoi que ce soit de toute façon, car je ne peux pas utiliser de nombres), alors je vais simplement opter pour l'approche naïve.

'=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@'est la chaîne '12496=>14288=>15472=>14536=>14264'lorsque 12 est ajouté aux valeurs ASCII. Maintenant, entrez cette chaîne, soustrayez 6+6et concaténez avec la chaîne vide ''pour la convertir en un tableau de caractères.

Stewie Griffin
la source
Oui, désolé, je voulais empêcher le codage en dur du nombre, mais c'est certainement donner un avantage au langage «golfy». Il n'y a pas de schéma bien que chaque nombre soit la somme du diviseur du précédent.
Jylo
1
J'aime la façon dont la chaîne codée contient toujours =>.
Neil
3

JavaScript (ES6), 57 octets / 47 (UTF-8) caractères

Merci à l'utilisateur 5090812 pour 10 B de sauvegarde

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

Explication

Nous créons d'abord un tableau et le remplissons avec les caractères de la chaîne バ㟐㱰㣈㞸. Ensuite, nous bouclons sur la chaîne ( aa la valeur de l'élément actuel) et nous changeons le caractère en son code de caractère. Ensuite, nous joignons toutes les valeurs du tableau par =>.

Ancien: 67 octets

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

Explication

Nous créons d'abord un tableau de longueur 5. Ensuite, nous modifions les valeurs du tableau à chaque index pour le code de caractère du caractère à ce même index dans la chaîne バ㟐㱰㣈㞸, qui sont les numéros de tous les amis de Paul dans l'ordre. Lorsque nous avons obtenu cela, nous joignons le tableau ensemble, et nous utilisons =>comme séparateur.

Usage

Pour l'utiliser, exécutez simplement ceci:

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

Production

12496=>14288=>15472=>14536=>14264
Luc
la source
Que diriez-vous de _ => [... 'バ 㟐 㱰 㣈 㞸'] .map (s => s.charCodeAt ()). Join` => `
user5090812
@ user5090812 Merci pour la suggestion!
Luke
3

Ruby, 36 octets (26 caractères)

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

Parce que pourquoi pas. Ennuyeux comme l'enfer.

ancienne version - 53 octets

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

Explication: l'encodage des nombres en base 25 donne les 5 chaînes de six libres, pour les décoder je n'ai qu'à représenter le nombre 25 en utilisant seulement 6: (6-1) (6-1) => ~ -6 ~ -6

GB
la source
Je compte 36 octets avec UTF8, pas 26.
smls
1
Je suppose qu'il a compté les caractères et non les octets. J'utilise toujours ce site pour le nombre d'octets.
Luke
Nombre corrigé maintenant.
GB
3

Perl 6 , 63 59 octets

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

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

Décode les nombres de la base 25, car c'est la seule base prise en charge par .parse-base(2 à 36) où aucun d'entre eux n'a de chiffres invalides.

Merci à Neil pour -3 octets.

Perl 6 , 82 75 octets

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

Décode le nombre 15472de la base 36, puis génère la séquence en calculant chaque nombre comme la somme des diviseurs appropriés du nombre précédent.

Perl 6 , 69 octets (47 caractères) - sans concurrence

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

N'utilise aucun des chiffres ASCII interdits, utilise à la place des chiffres Unicode du bloc arabe-indicateur (2 octets chacun)! Les { }interpolations de chaînes garantissent qu'elles sont analysées en tant que littéraux numériques Perl 6, puis stringidées en leurs représentations ASCII.

D'accord, c'est de la triche - c'est pourquoi je ne l'ai pas utilisé comme réponse principale ... :)

smls
la source
Comme je n'ai pas facilement accès à un interprète Perl 6, est-ce que ça fonctionne pour écrire --$/*$/?
Neil
@Neil: Oui. Merci! En fait, cela fonctionne même si j'insère l'affectation, comme --($/=6)*$/).
smls
3

Gelée , 5 4 octets

ȷṗȷỌ

Imprime les cinq chaînes. Profite du fait que la sortie "poubelle" est autorisée et enterre les cinq chaînes dans 10 3003 caractères de sortie.

Comment ça fonctionne

ȷṗȷỌ  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
la source
Quel est le décalage d'octet de la chaîne requise dans la sortie?
Neil
Existe-t-il une preuve pour soutenir que l'une des chaînes requises est réellement imprimée?
Erik the Outgolfer le
1
@Neil Le décalage de caractère doit être 48049051056053060061048051049055055060061048052051054049060061048051052050053060061048051049053051000 . Pas sûr des octets.
Dennis
@EriktheOutgolfer Si en fait vous voulez dire avec des contraintes de temps et de mémoire raisonnables, alors non. Le défi ne spécifie cependant aucune limite, et ils sont illimités par défaut.
Dennis
@Dennis Non, je veux dire jamais. Bien sûr, cela sous-entend qu'il ne terminera pas son travail de sitôt. À en juger par le code, cependant, je pense qu'il est très improbable d'imprimer une de ces chaînes. Puis, encore une fois, je viens de penser à une preuve raisonnable ...
Erik the Outgolfer
2

C, 94 84 77 octets

Stoopid simple. Remerciements spéciaux @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
la source
Au moins sur ideone, vous pouvez déplacer l' char*mintérieur for()pour enregistrer un octet, et cela rend également la fonction réutilisable (condition nécessaire des fonctions). En outre, vous produisez un null de fin; *++mréglerait cela. En outre, vous pouvez enregistrer quelques octets en soustrayant 60 au lieu de 66: g(){for(char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";*++m;)putchar(*m-66+6);}.
Neil
Ou vous pouvez copier l'approche de la réponse MATLAB, ce qui permettrait d'économiser un autre octet en plus de cela.
Neil
@Neil mon compilateur ne me laisse pas déclarer à l'intérieur de la boucle for initial declaration used outside C99 modemais je suis heureux de simplifier le putchar. Merci!
cleblanc
1

PHP, 73 63 60 octets

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

Courez avec -nr.

un peu moins paresseux: a string liste des à =>1(ascii)(ascii)
savoir: 124, 96, =>1, 42, 88, =>1, 54, 72, =>1, 45, 36, =>1, 42, 64;
imprimer =>1par index de chaîne, ajouter du code ascii

panne

            # 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
Titus
la source
1

C ++, 92 octets

#include <cstdio>
int main(){for(char c:"UVX]ZabUXV\\abUYX[VabUXYWZabUXVZX")putchar(c-6*6);}
Ralph Tandetzky
la source
1

PHP, 53 octets

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

Vidage hexadécimal:

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

Production:

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

Explication:

Chacune des sections entières à cinq chiffres est codée comme un petit endian court non signé, puis concaténée ensemble et le résultat est compressé. Cela se produit pour produire une vapeur d'octets qui n'a pas de caractères numériques incriminés, qui est ensuite codée en dur dans une chaîne. Pour extraire, décompressez le flux, décompressez les courts métrages à deux octets, interprétez chacun comme une chaîne et joignez-le >=.

Alex Howansky
la source
que diriez-vous d'une panne?
Titus
1

Java 8, 134 octets

Golfé:

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

Programme complet non golfé:

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

}

la source
1

Lot, 191 octets

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

J'estime qu'il faudrait au moins 32 octets pour calculer chaque nombre en utilisant uniquement 6 s plus 32 autres pour les imprimer tous, ce qui fait déjà 192 octets, donc je gagne en calculant la chaîne amiable. De plus, je pense que cinq %s d'affilée sont un record pour moi. En outre, astuce Batch soignée: le %n%est substitué avant l' forévaluation de la boucle, de sorte que la boucle calcule tous les facteurs de n, et les soustrait de n, entraînant ainsi la négation du résultat souhaité.

Neil
la source
1

Gelée , 12 octets

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

Imprime la quatrième chaîne et rien d'autre.

Essayez-le en ligne!

Comment ça fonctionne

“<ọ’ÆṣÐĿ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
la source
0

Python 2, 78 72 octets

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

Edit - Merci à Stewie Griffin pour avoir économisé 6 octets!

De plus, une autre solution serait de produire toutes les permutations possibles. OP dit que les ordures vont bien.

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

Il y a trop de redondance dans la conversion de intou listvers str. Je suppose que ce serait plus facile dans certaines langues ésotériques, mais je n'en connais aucune.

Gurupad Mamadapur
la source
Pourriez-vous ajouter 66 au lieu de 12? Cela permettrait d'économiser un autre octet.
GB
Il sortira de la plage ASCII normale @GB, ce qui signifie que vous devrez compter deux octets par caractère.
Stewie Griffin
Je vois, je n'ai pas compté les caractères '=>'.
GB