Temukan lima teman untuk makan ayam bersama Paul

15

Paul adalah salah satu kenalan Belgia Anda, dan dia ingin Anda membuat program yang menghasilkan setidaknya satu dari lima string berikut :

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

Itu mewakili teman-teman yang paling dia banggakan, dan dia ingin makan bersama mereka. Paul juga berpikir bahwa angka 6 itu sempurna, dan itu adalah satu-satunya angka yang layak digunakan. Jadi, Anda tidak dapat menggunakan angka selain "6" dalam kode Anda (0 hingga 5 dan 7 hingga 9 dilarang). Program Anda tidak dapat mengambil input apa pun. Output dapat berisi sampah sebelum dan / atau setelah string tetapi harus mengandung setidaknya satu dari string di atas.

Misalnya ini adalah output yang valid:

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

Saya "ligthly" mengisyaratkan dalam pertanyaan seperti bagaimana saya mengharapkan ini diselesaikan, tetapi bagaimana saya tahu? Mungkin ada cara yang lebih baik ... Semoga Anda bersenang-senang.

Ini adalah kode-golf: skor terendah dalam byte menang.

Jylo
sumber
3
Urutan OEIS terkait .
Emigna
5
Saya tidak tahu apa yang harus dilakukan oleh Paul atau ayam dengan ini.
Magic Gurita Guci
6
@carusocomputing: Rantai sosial '12496 => 14288 => 15472 => 14536 => 14264 "ditemukan oleh Paul Poulet , pada tahun 1918 (seorang ahli matematika Belgia). Dan" poulet "berarti" ayam "dalam bahasa Prancis. Juga 6 adalah angka sempurna dalam arti bahwa jumlah pembagi nya adalah 6.
Jylo
8
Tunggu, jadi manchicken menemukan urutan angka pada tahun 1918 ... dan kami lebih peduli pada urutan angka daripada manchicken matematika bernama Paul?
Magic Octopus Mm
1
@ Dennis, well ini benar, saya tidak mengharapkan jawaban 4 byte bruteforce, Anda selalu terkejut: p Saya menambahkan aturan ini karena saya berharap untuk memberikan keunggulan jika seseorang beralih pada bilangan bulat dan mengeluarkan semua yang ditemukan ramah rantai tanpa pengkodean angka rumit terlebih dahulu. Tetapi pada akhirnya tampaknya sangat mendukung konversi basis, dan konversi karakter bahkan dalam bahasa non golf. Saya pikir merancang pertanyaan sangat sulit! Namun, Enigma menggunakan properti output dan memiliki skor yang lebih tinggi sejauh ini :)
Jylo

Jawaban:

12

05AB1E , 18 17 byte

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

Cobalah online!

Penjelasan

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

Singkatnya, kami menghitung setiap angka sebagai f(n+1) = sum(divisors(f(n)) - f(n)

Emigna
sumber
5

Pyke, 16 byte

wヰw$VDlsh)J"=>

Coba di sini!

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

Kapan saja string literal berada di akhir program, itu bertukar dengan token sebelum itu, menghemat 1 byte dalam kasus-kasus seperti ini. Pyke ini factorsfungsi tidak termasuk jumlah itu sendiri atau 1. Jika angka diizinkan, 1 byte bisa diselamatkan dengan mengganti w$dengan4

Pyke, 21 byte

uバ㟐㱰㣈㞸J"=>

Coba di sini!

Buat daftar angka yang diperlukan dan gabungkan. Tidak terlalu menarik terlepas dari trik dengan senar.

Biru
sumber
4

MATLAB, 44 byte

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

Cobalah online!

Saya belum menemukan pola dalam angka (dan itu akan sulit untuk menggunakan pola untuk apa pun, karena saya tidak dapat menggunakan angka), jadi saya hanya akan pergi untuk pendekatan naif.

'=>@EBIJ=@>DDIJ=A@C>IJ=@A?BIJ=@>B@'adalah string '12496=>14288=>15472=>14536=>14264'ketika 12 ditambahkan ke nilai-nilai ASCII. Sekarang, masukkan string itu, kurangi 6+6, dan gabungkan dengan string kosong ''untuk mengubahnya menjadi array karakter.

Stewie Griffin
sumber
Ya, maaf, saya ingin mencegah pengkodean angka yang sulit, tetapi pasti memberikan keunggulan untuk bahasa 'golf'. Tidak ada pola meskipun setiap nomor adalah jumlah dari pembagi yang sebelumnya.
Jylo
1
Saya suka cara string kode masih mengandung =>.
Neil
3

JavaScript (ES6), 57 byte / 47 (UTF-8) karakter

Terima kasih kepada user5090812 untuk menghemat 10 B

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

Penjelasan

Pertama kita membuat sebuah array dan mengisinya dengan karakter dalam string バ㟐㱰㣈㞸. Kemudian kita mengulangi string ( amemiliki nilai elemen saat ini) dan kita mengubah karakter menjadi kode karakternya. Lalu kita gabungkan semua nilai dalam array dengan =>.

Lama: 67 byte

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

Penjelasan

Pertama kita membuat array dengan panjang 5. Kemudian kita mengubah nilai array pada setiap indeks untuk kode karakter dari karakter pada indeks yang sama dalam string バ㟐㱰㣈㞸, yang merupakan jumlah semua teman Paul secara berurutan. Ketika kami mendapatkannya, kami menggabungkan array, dan kami gunakan =>sebagai pemisah.

Pemakaian

Untuk menggunakannya, cukup jalankan ini:

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

Keluaran

12496=>14288=>15472=>14536=>14264
Luke
sumber
Bagaimana dengan _ => [... 'バ 㟐 㱰 㣈 㞸'] .map (s => s.charCodeAt ()). Join` => `
user5090812
@ user5090812 Terima kasih atas sarannya!
Luke
3

Ruby, 36 byte (26 karakter)

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

Karena mengapa tidak. Membosankan sekali.

versi yang lebih lama - 53 byte

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

Penjelasan: penyandian angka-angka pada basis 25 memberikan 5 string enam-bebas, untuk memecahkan kode saya hanya harus mewakili angka 25 hanya menggunakan 6: (6-1) (6-1) => ~ -6 ~ -6

GB
sumber
Saya menghitung 36 byte dengan UTF8, bukan 26.
smls
1
Saya kira dia menghitung karakter, dan bukan byte. Saya selalu menggunakan situs ini untuk jumlah byte.
Luke
Jumlah terkoreksi sekarang.
GB
3

Perl 6 , 63 59 byte

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

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

Memecahkan angka-angka dari basis 25, karena itulah satu-satunya basis yang didukung oleh .parse-base(2 hingga 36) di mana tak satu pun dari mereka memiliki angka yang tidak valid.

Terima kasih kepada Neil untuk -3 byte.

Perl 6 , 82 75 byte

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

Memecahkan angka 15472di basis 36, dan kemudian menghasilkan urutan dengan menghitung setiap angka sebagai jumlah pembagi yang tepat dari angka sebelumnya.

Perl 6 , 69 byte (47 karakter) - tidak bersaing

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

Tidak menggunakan digit ASCII terlarang, gunakan digit Unicode dari blok Arab-Indic sebagai gantinya (masing-masing 2 byte)! The { }interpolasi string yang memastikan mereka diuraikan sebagai Perl 6 nomor literal, dan kemudian stringified untuk representasi ASCII mereka.

Oke, ini curang - itu sebabnya saya tidak menggunakannya sebagai jawaban utama saya ... :)

seseorang
sumber
Karena saya tidak siap memiliki akses ke penerjemah Perl 6, apakah itu berfungsi untuk menulis --$/*$/?
Neil
@ Neil: Ya. Terima kasih! Bahkan, itu berfungsi jika saya sebariskan tugasnya --($/=6)*$/).
sml
3

Jelly , 5 4 byte

ȷṗȷỌ

Mencetak semua lima string. Mengambil keuntungan dari kenyataan bahwa output "sampah" diperbolehkan dan mengubur lima string 10 3003 karakter output.

Bagaimana itu bekerja

ȷṗȷỌ  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
sumber
Apa byte offset dari string yang diperlukan dalam output?
Neil
Apakah ada bukti untuk mendukung salah satu dari string yang diperlukan benar-benar dicetak?
Erik the Outgolfer
1
@Neil Offset karakter harus 48049051056053060061048051049055055060061048052051054049060061048051052050053060061048051049053051000 . Tidak yakin tentang byte.
Dennis
@EriktheOutgolfer Jika dengan benar-benar Anda maksud dengan waktu dan memori yang wajar kendala, maka tidak ada. Tantangannya tidak menentukan batas apa pun, dan secara default tidak terbatas.
Dennis
@ Dennis Tidak, maksudku pernah. Tentu saja itu tersirat itu tidak akan menyelesaikan pekerjaannya dalam waktu dekat. Dilihat oleh kode, meskipun, saya pikir itu benar-benar tidak mungkin untuk mencetak string itu. Kemudian, sekali lagi, saya hanya memikirkan beberapa bukti yang masuk akal ...
Erik the Outgolfer
2

C, 94 84 77 Bytes

Sederhana sederhana. Terima kasih khusus @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
sumber
Setidaknya pada ideone, Anda dapat memindahkan bagian char*mdalam for()untuk menyimpan byte, dan itu juga membuat fungsi dapat digunakan kembali (diperlukan kondisi fungsi). Juga, Anda menghasilkan nol trailing; *++makan memperbaikinya. Juga, Anda dapat menyimpan beberapa byte dengan mengurangkan 60 bukan 66: g(){for(char*m="!mnpuryzmpnttyzmqpsnyzmpqoryzmpnrp";*++m;)putchar(*m-66+6);}.
Neil
Atau Anda bisa menyalin pendekatan dari jawaban MATLAB, yang akan menghemat byte lain di atasnya.
Neil
@Neil kompiler saya tidak akan membiarkan saya mendeklarasikan dalam for for loop initial declaration used outside C99 modetapi saya senang untuk menyederhanakan putchar. Terima kasih!
Cleblanc
1

PHP, 73 63 60 byte

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

Jalankan dengan -nr.

sedikit kurang malas: mengambil string sebagai daftar =>1(ascii)(ascii)
yaitu: 124, 96, =>1, 42, 88, =>1, 54, 72, =>1, 45, 36, =>1, 42, 64;
cetak =>1dengan indeks string, tambahkan kode ascii

kerusakan

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

C ++, 92 byte

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

PHP, 53 byte

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

Keluaran:

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

Penjelasan:

Masing-masing bagian bilangan bulat lima digit dikodekan sebagai endian pendek pendek yang tidak ditandatangani, kemudian digabungkan bersama-sama dan hasilnya di-gzip. Ini terjadi untuk menghasilkan uap byte yang tidak memiliki karakter digit yang menyinggung, yang kemudian hard-coded menjadi string. Untuk mengekstrak, un-gzip stream, buka paket dua byte pendek, tafsirkan masing-masing sebagai string, dan bergabunglah dengan >=.

Alex Howansky
sumber
bagaimana dengan gangguan?
Titus
1

Java 8, 134 byte

Golf:

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

Tidak lengkap, program lengkap:

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

}

sumber
1

Batch, 191 byte

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

Saya memperkirakan bahwa akan diperlukan minimal 32 byte untuk menghitung setiap angka hanya menggunakan 6ditambah 32 lainnya untuk mencetak semuanya, yang sudah 192 byte, jadi saya menang dengan menghitung rantai damai. Juga, saya pikir lima %s berturut-turut adalah catatan bagi saya. Juga, Trik batch rapi: %n%diganti sebelum forloop dievaluasi, sehingga loop menghitung semua faktor n, dan mengurangi mereka dari n, sehingga menghasilkan negasi dari hasil yang diinginkan.

Neil
sumber
1

Jelly , 12 byte

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

Mencetak string keempat dan tidak ada yang lain.

Cobalah online!

Bagaimana itu bekerja

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

Python 2, 78 72 byte

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

Sunting - Terima kasih kepada Stewie Griffin karena telah menghemat 6 byte!

Juga, solusi lain adalah untuk mengeluarkan semua permutasi yang mungkin. OP mengatakan sampah baik-baik saja.

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

Ada terlalu banyak redundansi dalam mengkonversi dari intatau listke str. Saya kira ini akan lebih mudah dalam beberapa bahasa esoteris, tetapi saya tidak tahu satu pun dari mereka.

Gurupad Mamadapur
sumber
Bisakah Anda menambahkan 66 bukannya 12? Ini akan menghemat byte lain.
GB
Ini akan keluar dari ASGBII-range normal @GB, yang berarti Anda harus menghitung dua byte per karakter.
Stewie Griffin
Begitu ya, saya tidak menghitung karakter '=>'.
GB