Finde fünf Freunde, die mit Paul Hühnchen essen

15

Paul ist einer Ihrer belgischen Bekannten und möchte, dass Sie ein Programm erstellen, das mindestens eine der folgenden fünf Zeichenfolgen ausgibt :

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

Es stellt die Freunde dar, auf die er am stolzesten ist, und er möchte mit ihnen essen. Paul denkt auch, dass die Zahl 6 perfekt ist, und das ist die einzige Zahl, die es wert ist, benutzt zu werden. So Sie keine andere Ziffer als „6“ können in Ihrem Code (0 bis 5 und 7 bis 9 sind verboten). Ihr Programm kann keine Eingaben vornehmen. Die Ausgabe kann vor und / oder nach der Zeichenfolge Garbage enthalten, sollte jedoch mindestens eine der oben genannten Zeichenfolgen enthalten.

Dies ist zum Beispiel eine gültige Ausgabe:

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

Ich habe in der Frage "leichtfertig" angedeutet, wie ich damit rechne, aber wie weiß? Vielleicht gibt es einen besseren Weg ... Ich hoffe, Sie haben Spaß.

Dies ist Code-Golf: Die niedrigste Punktzahl in Bytes gewinnt.

Jylo
quelle
3
Verwandte OEIS- Sequenz.
Emigna
5
Ich kann nicht herausfinden, was Paul oder Hühner damit zu tun haben.
Magic Octopus Urn
6
@carusocomputing: Die gesellige Kette "12496 => 14288 => 15472 => 14536 => 14264" wurde 1918 von Paul Poulet (einem belgischen Mathematiker) gefunden. Und "poulet" bedeutet auf französisch "Huhn" perfekte Zahl in dem Sinne, dass die Summe seines Teilers 6 ist.
Jylo
8
Warten Sie, also fand ein Manchicken 1918 eine Folge von Zahlen ... und wir interessieren uns mehr für die Zahlenfolge als für das mathematische Manchicken mit dem Namen Paul?
Magic Octopus Urn
1
@Dennis, nun, das stimmt, ich habe keine Antwort mit Bruteforce 4 Bytes erwartet, Sie sind immer überrascht: p Ich habe diese Regel hinzugefügt, weil ich gehofft habe, einen Vorteil zu erzielen, wenn jemand über Ganzzahlen iteriert und alle gefundenen geselligen Werte ausgibt Ketten, ohne zuerst eine komplizierte Zahl fest zu codieren. Aber am Ende scheint es, als würde es die Grundkonvertierung und die Zeichenkonvertierung sogar in einer nichtgolferischen Sprache stark begünstigen. Ich denke, dass es sehr schwer ist, eine Frage zu entwerfen! Trotzdem hat Enigma die Eigenschaft der Ausgabe verwendet und hat die höhere Punktzahl bisher :)
Jylo

Antworten:

12

05AB1E , 18 17 Bytes

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

Probieren Sie es online!

Erläuterung

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

Kurz gesagt, wir berechnen jede Zahl als f(n+1) = sum(divisors(f(n)) - f(n)

Emigna
quelle
5

Pyke, 16 Bytes

wヰw$VDlsh)J"=>

Probieren Sie es hier aus!

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

Immer wenn sich ein Zeichenfolgenliteral am Ende eines Programms befindet, wird es mit dem Token unmittelbar davor ausgetauscht, wodurch in solchen Fällen 1 Byte gespart wird. Pykesfactors Funktion enthält weder die Nummer selbst noch 1. Wenn Nummern zulässig wären, könnte 1 Byte durch Ersetzen gespeichert werdenw$ mit4

Pyke, 21 Bytes

uバ㟐㱰㣈㞸J"=>

Probieren Sie es hier aus!

Erstellen Sie eine Liste der erforderlichen Nummern und fügen Sie sie hinzu. Nicht sehr interessant, abgesehen vom Trick mit den Saiten.

Blau
quelle
4

MATLAB, 44 Bytes

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

Probieren Sie es online!

Ich habe in den Zahlen kein Muster gefunden (und es wäre sowieso schwierig, das Muster für irgendetwas zu verwenden, da ich keine Zahlen verwenden kann), also werde ich mich einfach für den naiven Ansatz entscheiden.

'=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@'ist die Zeichenfolge, '12496=>14288=>15472=>14536=>14264'wenn 12 zu den ASCII-Werten hinzugefügt wird. Geben Sie nun diese Zeichenfolge ein, subtrahieren Sie sie 6+6und verknüpfen Sie sie mit der leeren Zeichenfolge '', um sie in ein Zeichenarray zu konvertieren.

Stewie Griffin
quelle
Ja, tut mir leid, ich wollte die harte Kodierung von Zahlen verhindern, aber es ist sicher, der "Golf" -Sprache einen Vorteil zu geben. Es gibt kein Muster, obwohl jede Zahl die Summe des Divisors der vorherigen Zahl ist.
Jylo
1
Mir gefällt die Art und Weise, wie die codierte Zeichenfolge noch enthält =>.
Neil
3

JavaScript (ES6), 57 Byte / 47 (UTF-8) Zeichen

Dank user5090812 für 10 B sparen

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

Erläuterung

Zuerst erstellen wir ein Array und füllen es mit den Zeichen in der Zeichenfolge バ㟐㱰㣈㞸. Dann durchlaufen wir den String ( ahat den Wert des aktuellen Elements) und ändern das Zeichen in seinen Zeichencode. Dann verbinden wir alle Werte im Array durch=> .

Alt: 67 Bytes

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

Erläuterung

Zuerst erstellen wir ein Array mit der Länge 5. Dann ändern wir die Werte des Arrays an jedem Index für den Zeichencode des Zeichens an demselben Index in der Zeichenfolge バ㟐㱰㣈㞸. Dies sind die Nummern aller Freunde von Paul in der Reihenfolge. Wenn wir das haben, verbinden wir das Array miteinander und verwenden es =>als Trennzeichen.

Verwendung

Um es zu benutzen, führe einfach folgendes aus:

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

Ausgabe

12496=>14288=>15472=>14536=>14264
Luke
quelle
Wie wäre es mit _ => [... 'バ バ 㱰 㣈 㣈'] .map (s => s.charCodeAt ()). Join` => `
user5090812 13.01.17
@ user5090812 Danke für den Vorschlag!
Luke
3

Ruby, 36 Bytes (26 Zeichen)

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

Weil warum nicht. Höllisch langweilig.

ältere Version - 53 Bytes

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

Erklärung: Das Kodieren der Zahlen in der Basis 25 ergibt die 5 sechs freien Zeichenketten. Um sie zu dekodieren, muss ich nur die Zahl 25 mit nur 6 darstellen: (6-1) (6-1) => ~ -6 ~ -6

GB
quelle
Ich zähle 36 Bytes mit UTF8, nicht 26.
smls 13.01.17
1
Er hat wohl die Zeichen gezählt und nicht die Bytes. Ich benutze diese Seite immer für die Anzahl der Bytes.
Luke
Anzahl jetzt korrigiert.
GB,
3

Perl 6 , 63 59 Bytes

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

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

Dekodiert die Zahlen von der Basis 25, da dies die einzige von .parse-base(2 bis 36) unterstützte Basis ist, bei der keine von ihnen ungültige Ziffern hat.

Vielen Dank an Neil für -3 Bytes.

Perl 6 , 82 75 Bytes

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

Dekodiert die Zahl 15472in der Basis 36 und generiert dann die Folge, indem jede Zahl als die Summe der richtigen Teiler der vorherigen Zahl berechnet wird.

Perl 6 , 69 Bytes (47 Zeichen) - nicht konkurrierend

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

Verwendet keine der verbotenen ASCII-Ziffern, sondern Unicode-Ziffern aus dem arabisch-indischen Block (jeweils 2 Byte)! Das{ } Zeichenfolgeninterpolationen stellen sicher, dass sie als Perl 6-Zahlenliterale analysiert und dann in ihre ASCII-Darstellungen umgewandelt werden.

Okay, das ist Schummeln - deshalb habe ich es nicht als meine Hauptantwort benutzt ... :)

smls
quelle
Funktioniert das Schreiben, da ich keinen einfachen Zugriff auf einen Perl 6-Interpreter habe --$/*$/?
Neil
@ Neil: Das tut es. Vielen Dank! Tatsächlich funktioniert es sogar, wenn ich die Zuordnung inline, wie --($/=6)*$/).
smls
3

Gelee , 5 4 Bytes

ȷṗȷỌ

Druckt alle fünf Zeichenfolgen. Nutzt die Tatsache aus, dass "Garbage" -Ausgabe zulässig ist und vergräbt die fünf Zeichenfolgen in 10 3003 Zeichen Ausgabe.

Wie es funktioniert

ȷṗȷỌ  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
quelle
Wie groß ist der Byte-Versatz der erforderlichen Zeichenfolge in der Ausgabe?
Neil
Gibt es einen Beweis dafür, dass eine der erforderlichen Zeichenfolgen tatsächlich gedruckt wurde?
Erik der Outgolfer
1
@Neil Der Zeichenversatz sollte 48049051056053060061048051049055055060061048052051054049060061048051052050053060061048051049053051000 betragen . Ich bin mir nicht sicher, was Bytes betrifft.
Dennis
@EriktheOutgolfer Wenn du mit eigentlich vernünftigen Zeit- und Speicherbeschränkungen meinst, dann nein. Die Herausforderung gibt jedoch keine Grenzen vor und sie sind standardmäßig unbegrenzt.
Dennis
@ Tennis Nein, ich meine schon mal. Natürlich ist es impliziert, dass es seinen Job nicht so schnell beenden wird. Nach dem Code zu urteilen, denke ich jedoch, dass es wirklich unwahrscheinlich ist, dass jemals eine dieser Zeichenfolgen gedruckt wird.
Andererseits habe
2

C 94, 84 77 Bytes

Blöd einfach. Besonderer Dank an @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
quelle
Zumindest auf ideone können Sie das char*mInnere von verschieben for(), um ein Byte zu speichern, und es macht die Funktion wiederverwendbar (notwendige Bedingung für Funktionen). Außerdem geben Sie eine nachgestellte Null aus. *++mwürde das beheben. Sie können aber auch einige Bytes speichern von 60 statt 66 subtrahiert: g(){for(char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";*++m;)putchar(*m-66+6);}.
Neil
Oder Sie kopieren den Ansatz aus der MATLAB-Antwort, wodurch zusätzlich ein weiteres Byte eingespart wird.
Neil
@Neil Mein Compiler lässt mich nicht innerhalb der for-Schleife deklarieren, initial declaration used outside C99 modeaber ich bin glücklich, den Putchar zu vereinfachen. Vielen Dank!
Cleblanc
1

PHP, 73 63 60 Bytes

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

Laufen Sie mit -nr.

etwas weniger faul: nahm String als Liste =>1(ascii)(ascii)
dh: 124, 96, =>1, 42, 88, =>1, 54, 72, =>1, 45, 36, =>1, 42, 64;
Drucken =>1nach String-Index, ASCII-Code anhängen

Nervenzusammenbruch

            # 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
quelle
1

C ++, 92 Bytes

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

PHP, 53 Bytes

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

Hex-Dump:

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

Ausgabe:

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

Erläuterung:

Jeder der fünfstelligen Ganzzahlabschnitte wird als vorzeichenloser kleiner Endian codiert, dann miteinander verkettet und das Ergebnis wird komprimiert. Dies geschieht, um einen Bytedampf zu erzeugen, der keine störenden Ziffernzeichen enthält, die dann in eine Zeichenfolge fest codiert werden. Zum Extrahieren entpacken Sie den Stream, entpacken die Zwei-Byte-Shorts, interpretieren sie als Zeichenfolge und verbinden Sie sich mit >=.

Alex Howansky
quelle
Wie wäre es mit einer Panne?
Titus
1

Java 8, 134 Bytes

Golf gespielt:

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

Ungolfed, volles Programm:

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

}

quelle
1

Batch, 191 Bytes

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

Ich schätze, dass es mindestens 32 Bytes dauern würde, um jede Zahl nur unter Verwendung von zu berechnen 6 s und weiteren , um sie alle auszudrucken. Das sind bereits 192 Bytes. Außerdem denke ich, dass fünf %Sekunden hintereinander ein Rekord für mich sind. Ordentlicher Batch-Trick: Der Trick %n%wird ersetzt, bevor die forSchleife ausgewertet wird, sodass die Schleife alle Faktoren von berechnet nund von diesen subtrahiert n, wodurch das gewünschte Ergebnis negiert wird.

Neil
quelle
1

Gelee , 12 Bytes

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

Druckt die vierte Zeichenfolge und sonst nichts.

Probieren Sie es online!

Wie es funktioniert

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

Python 2, 78 72 Bytes

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

Bearbeiten - Danke an Stewie Griffin für das Speichern von 6 Bytes!

Eine andere Lösung wäre auch, alle möglichen Permutationen auszugeben. OP sagt, Müll ist in Ordnung.

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

Das Konvertieren von intoder listnach ist zu redundant str. Ich denke, das wäre in einigen esoterischen Sprachen einfacher, aber ich kenne keine von ihnen.

Gurupad Mamadapur
quelle
Könnten Sie 66 statt 12 hinzufügen? Dies würde ein weiteres Byte sparen.
GB,
Es verlässt den normalen ASCII-Bereich @GB, was bedeutet, dass Sie zwei Bytes pro Zeichen zählen müssten.
Stewie Griffin
Ich habe die Zeichen '=>' nicht gezählt.
GB