Tugas yang berbeda, karakter yang sama

36

Dalam tantangan ini, Anda harus menyelesaikan 4 tugas berbeda menggunakan set karakter yang sama. Anda dapat mengatur ulang karakter, tetapi Anda tidak dapat menambah atau menghapus karakter.

Pemenangnya adalah kiriman yang menyelesaikan semua tugas menggunakan jumlah karakter terkecil. Semua tugas harus diselesaikan dalam bahasa yang sama.

Perhatikan bahwa ini adalah jumlah karakter terkecil, bukan jumlah karakter unik terkecil .

Tugas 1:

Keluarkan Nangka pertama dari setiap angka komposit ketiga . Codeblock di bawah ini menunjukkan 19 angka komposit pertama di baris pertama, dan setiap angka komposit ketiga di baris di bawah ini.

4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30
4,       9,         14,         18,         22,         26,         30

Jika N=5kemudian output seharusnya 4, 9, 14, 18, 22. Anda harus mendukung 1<=N<=50.

Angka komposit adalah angka positif yang bukan angka prima atau 1.

Hasilnya N=50adalah:

4, 9, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 57, 62, 65, 69, 74, 77, 81, 85, 88, 92, 95, 99, 104, 108, 112, 116, 119, 122, 125, 129, 133, 136, 141, 144, 147, 152, 155, 159, 162, 166, 170, 174, 177, 182, 185, 188, 192

Tugas 2:

Output N-by-Ntabel perkalian. Anda harus mendukung1<=N<=20

Contoh:

N = 4
1   2   3   4
2   4   6   8
3   6   9  12
4   8  12  16

Format output adalah opsional, berikut ini adalah output yang dapat diterima [[1,2,3,4],[2,4,6,8],[3,6,9,12],[4,8,12,16]].

Tugas 3:

Tentukan apakah angka adalah angka Fibonacci . Anda harus mendukung positif Nhingga batas integer default bahasa Anda. Jika ada bilangan bulat 32-bit dan bilangan bulat 64-bit maka Anda dapat memilih untuk menggunakan yang membutuhkan kode terpendek. Misalnya, gunakan intalih-alih long intjika Anda punya pilihan. Anda tidak dapat memilih bilangan bulat yang lebih kecil dari 32-bit kecuali jika itu default (Anda tidak dapat menggunakan bilangan bulat 8-bit jika 32-bit adalah default).

true/false, false/true, 1/0, 1/-1, a/bSemua keluaran diterima asalkan konsisten.

Tugas 4:

Ambil Nsebagai input dan output hasil 1^1+2^2+3^3+...N^N. Anda harus mendukung 1<=N<=10.

10 hasil berbeda adalah:

1, 5, 32, 288, 3413, 50069, 873612, 17650828, 405071317, 10405071317

Ini adalah , jadi pengiriman terpendek di setiap bahasa akan menang!

Cuplikan Stack ini akan membantu memeriksa solusi Anda. Ini mengukur set karakter minimum yang diperlukan untuk memasukkan keempat solusi, dan menunjukkan karakter yang tersisa.

Stewie Griffin
sumber
1
Biner: dua karakter
coredump
@coredump Ya, dua karakter unik ...
Stewie Griffin

Jawaban:

12

Python, 88 87 byte

lambda n:[a for a in range(11*n)if any(a%b<1for b in range(2,a))][:3*n:3]#1,,,=====bd++
lambda n:[[a*b for b in range(1,n+1)]for a in range(1,n+1)]#,,::ybaaa(*i%n< =====2)d33f
f=lambda n,a=1,b=1:a<n and f(n,b,a+b)or n==a#2eerrrfo::((**iii11[[aannn+     ]]y))%33gg
f=lambda n,a=1:a<=n and a**a+f(n,a+1)#::ooeeiii]]      y))bbbgg,,rrrra((11[[nnnnf==2%33

Tidak berusaha terlalu banyak untuk berbagi karakter atau golf sendiri, ini hampir pasti akan mengalahkan.

orlp
sumber
1
Akan range(11*n)selalu mengandung cukup komposit?
FlipTack
1
@ Lipup Ya, 5*nsudah cukup.
Martin Ender
12

Jelly , 19 18 17 karakter

Tugas 1

Ḟþe*S
×5µḊḟÆRm3ḣ³

Cobalah online!

Tugas 2

5µḊḟÆRm3ḣ³Ḟe*S
×þ

Cobalah online!

Tugas 3

5µḊḟmḣþ*S
×3RÆḞ³e

Cobalah online!

Tugas 4

×5ḊḟÆm3ḣ³þe
Rµ*ḞS

Cobalah online!

Bagaimana itu bekerja

Setiap baris dalam program Jelly mendefinisikan tautan (fungsi) terpisah. Yang terakhir adalah tautan utama dan dipanggil secara otomatis ketika program dijalankan. Kecuali jika tautan utama mereferensikan yang lain, mereka tidak memiliki efek. Perhatikan bahwa bahkan tautan yang tidak dapat dipetakan mungkin tidak mengandung kesalahan parser.

Tugas 1

×5µḊḟÆRm3ḣ³  Main link. Argument: n

×5           Yield 5n.
  µ          Begin a new chain, with argument 5n.
   Ḋ         Dequeue; yield [2, ..., 5n].
     ÆR      Prime range; yield all primes in [1, ..., 5n].
    ḟ        Filter; remove the elements to the right from the ones to the left.
       m3    Pick every third element.
         ḣ³  Keep the first n results.

Tugas 2

Yang sepele ini: ×adalah atom multiplikasi, dan quick þ(tabel) berlaku ×untuk setiap kombinasi elemen di kiri dan di argumen yang benar. Jika argumennya adalah bilangan bulat (yang ada di sini), argumen itu juga akan melemparkannya ke rentang pertama.

Tugas 3

×3RÆḞ³e  Main link. Argument: n

×3       Yield 3n.
  R      Range; yield [1, ..., 3n].
   ÆḞ    Fibonacci; yield [F(1), ... F(3n)].
     ³e  Test if n exists in the result.

Tugas 4

Rµ*ḞS  Main link. Argument: n

R      Range; yield [1, ..., n].
 µ     Begin a new chain with argument [1, ..., n].
   Ḟ   Floor; yield [1, ..., n].
  *    Yield [1**1, ..., n**n].
    S  Take the sum.
Dennis
sumber
Senang melihat ÆḞsudah terbukti bermanfaat!
Lynn
9

Mathematica, 60 karakter

Tugas 1: Komposit

#/AFF^abcinoruy{};Select[Range[2,9#],!PrimeQ@#&][[;;3#;;3]]&

Tugas 2: Tabel Multiplikasi

!29;F@FPQRS[];a^b;c[c[e]];eeegiilmnnotu;Array[3##&,{#,#}]/3&

Tugas 3: Fibonacci

##&;239;A/PS[]^e[];lmrtuy;{,};!FreeQ[Fibonacci@Range[3#],#]&

Tugas 4: Jumlah kekuatan

!###&;23/39;A@F;F[P[Q[]]];Raabccegiilnnorrty;Sum[e^e,{e,#}]&

Setiap pengiriman adalah seperangkat ekspresi yang diabaikan, diikuti oleh fungsi tanpa nama yang mengimplementasikan tugas yang diberikan.

Saya menulis skrip CJam sederhana yang "secara optimal" menggabungkan solusi mentah dengan menambahkan komentar. Saya kemudian akhirnya menghemat tiga byte di atas itu dengan secara manual menyingkirkan setiap komentar (yang memerlukan beberapa pengaturan ulang untuk mendapatkan sintaks yang valid dalam setiap kasus). Script membuatnya lebih mudah untuk mencoba variasi sederhana dari solusi untuk melihat apakah mereka akan menurunkan skor keseluruhan. Jangan ragu untuk menggunakan skrip sendiri.

Martin Ender
sumber
Saya punya komentar, tapi ini bukan tentang kode Anda sendiri: P. (Jawaban yang bagus, btw). Skrip CJam Anda mengabaikan kesalahan sederhana: Jika saya memasukkan abdan basebagai skrip, skrip tersebut akan memberi saya (**)abdan (**)ba, alih-alih abdan ba.
HyperNeutrino
@AlexL. Ya, itu juga tidak mempertimbangkan fakta bahwa (**)itu sendiri dapat digunakan untuk menutupi beberapa karakter jika mereka digunakan di salah satu program lain.
Martin Ender
9

MATL , 29 28 26 karakter

Tugas 1 (setiap nomor komposit ketiga)

6*:tZp~)G:3*q)%G"$]vwm^sl+

Cobalah online!

Tugas 2 (tabel multiplikasi)

:l$*%6*tZp~)G:3q)G"]vwm^s+

Cobalah online!

Tugas 3 (Pendeteksi Fibonacci)

l6Zp~G:"3q$t+]vGwm%):*)^s*

Ini menampilkan 1/ 0untuk Fibonacci / non-Fibonacci masing-masing.

Cobalah online!

Tugas 4 (jumlah kekuatan)

:t^s%6*Zp~)G:3*q)G"$]vwml+

Cobalah online!

Memeriksa

Program ini memasukkan empat string dan menampilkannya diurutkan, untuk secara visual memeriksa apakah mereka menggunakan karakter yang sama.

Penjelasan

%adalah simbol komentar. Segala sesuatu di sebelah kanannya diabaikan.

Tugas 1 (setiap nomor komposit ketiga)

6*    % Input N. Multiply by 6
:     % Range [1 2 ... 6*N]. This is enough because every even number is composite,
      % so this contains at least 3*N composite numbers
t     % Duplicate
Zp    % Isprime
~     % Negate
)     % Use as index to select composite numbers, including 1, from [1 2 ... 6*N]
G:    % Push [1 2 ... N]
3*q   % Multiply by 3 and subtract 1: gives [2 5 ... 3*N-1]
)     % Pick those composite numbers. Implicitly display

Tugas 2 (tabel multiplikasi)

:     % Input N. Range [1 2 ... N]
l     % Push 1
$     % Specify that next function will take 1 input
*     % Product of array. With 1 input it produces all pair-wise products
      % Implicitly display

Tugas 3 (Pendeteksi Fibonacci)

l     % Push 1
6     % Push 6
Zp    % Isprime. Gives false
~     % Negate. Gives true, or 1
G:    % Push [1 2 ... N], where N is the input
"     % For each
  3q  %   3, subtract 1
  $   %   Specify that next function will take 2 inputs
  t   %   Duplicate the top two elements of the stack
  +   %   Add
]     % End
v     % Vertically concatenate the entire stack. This produces a column vector
      % with a sufficient amount of Fibonacci numbers
G     % Push input N
w     % Swap
m     % Ismember. Gives true if input is in the vector of Fibonacci numbers
      % Implicitly display

Tugas 4 (jumlah kekuatan)

:     % Implicitly input N. Push [1 2 ... N]
t     % Duplicate
^     % Power, element-wise
s     % Sum of array. Implicitly display
Luis Mendo
sumber
Ketika saya pertama kali melihat tantangan, saya pikir Hey MATL would be perfect for this!Anda mengalahkan saya untuk itu. +1
DJMcMayhem
@DJMcMayhem Maaf, saya cenderung banyak menjawab. Lain kali ping saya dan saya akan menahan diri jika Anda sedang mengusahakannya :-) Ngomong-ngomong, mengapa tidak melanjutkan saja? Mungkin Anda bisa mengalahkan ini
Luis Mendo
3
@DJMcMayhem, silakan posting jawaban juga, bahkan jika Anda tidak berhasil mengalahkan Luis. Saya berharap lebih banyak orang memposting jawaban dalam bahasa yang sudah digunakan, bahkan jika mereka tidak berhasil mengungguli yang pertama.
Stewie Griffin
@stewiegriffin Haha, oke tentu. Saya belum memiliki jawaban yang valid, tetapi jika saya mendapatkannya (dan itu cukup berbeda) saya akan mempostingnya.
DJMcMayhem
7

Perl 6 , 61 byte

{(4..*).grep(!*.is-prime)[0,3...^*>=$_*3]}#$$&+1==>X[]__oot{}
{[X*](1..$_,!0..$_).rotor($_)}#&***+-..334===>>[]^eegiimpps{}
{(1,&[+]...*>=$_)[*-!0]==$_}#$()**....334>X^_eegiimoopprrst{}
{[+]((1..$_)>>.&{$_**$_})}#!**,-....0334===X[]^eegiimoopprrst

Yang kedua kembali ((1,2,3,4),(2,4,6,8),(3,6,9,12),(4,8,12,16))saat diberikan4

Perl 6 tidak benar-benar memiliki integer maksimum, tetapi yang ketiga bekerja secara instan dengan input 15156039800290547036315704478931467953361427680642. Satu-satunya faktor pembatas adalah memori dan waktu.

Kalau tidak, mereka semua akan menjalankan "secara instan" untuk input yang melampaui apa yang diperlukan.

Cobalah online

Brad Gilbert b2gills
sumber
6

JavaScript (ES6), 101 100 95 93 91 byte

(n,r=[],a=(y,m)=>n?y%m?a(y,++m):a(y+1,2,y==m||n--%3||r.push(y)):r)=>a(4,2,n*=3)//>....p*A&&
n=>[...Array(n)].map((r,y,m)=>m.map((s,n)=>y*++n,y+=1))//22334(,,,,===ayy)??%%::||||--uh*&&
r=(n,y=1,a=2)=>n==y||n>y&&r(n,a,y+a)//2334((((,,,,r=[]ayymmmm))))>??%%++::||--.....ppush**A
r=y=>y&&y**y+r(y-1)//22334(((((nnnn,,,,,,,,r=====[]aaaaymmmm)))))>>??%%++::||||-.....ppushA

Sunting: Disimpan 1 byte dengan tidak mendukung 0sebagai nomor Fibonacci. Disimpan 5 byte plus 2 byte lebih lanjut (1 terima kasih kepada @Arnauld) dengan mengganti nama variabel. Disimpan 2 byte dengan beralih di antara +1, ++dan +=1.

Neil
sumber
Mengganti semua kemunculan cvariabel dengan Aharus menghemat satu byte.
Arnauld
(Saya baru saja menyarankan agar Anda juga bisa mengganti ddengany , tetapi dtidak terdefinisi dalam versi saat ini, jadi Anda mungkin ingin memperbaikinya terlebih dahulu)
Arnauld
@Arnauld Terima kasih telah menunjukkannya, tapi saya berhasil memperbaiki keadaan dan menyimpan byte lebih lanjut dengan mengganti nama amenjadi m.
Neil
4

MATL , 30 karakter

Set karakter yang saya gunakan adalah:

!%))*+001233::<=GGQZ\]^`pstvyy~

Saya tidak bisa mengungguli jawaban MATL lainnya, tetapi saya bersenang-senang dengan solusi ini.

Tugas 1:

Bilangan komposit ketiga.

4t^:QtZp~)G3*:3\1=)%!`yy+<]vGs

Cobalah online!

Tugas 2:

Tabel perkalian. Jelas tugas termudah, karena cara kerja MATL

:t!*%4QZp~)G3:3\1=)`yy+<]vGs^t

Cobalah online!

Tugas 3:

Penguji fibonacci. Mencetak bilangan bulat positif (1 atau 2) untuk input yang benar, dan 0 untuk input yang salah.

1t`yy+tG<]vG=s%4:QZp~)3*:3\)!^

Cobalah online!

Tugas 4:

Jumlah kekuatan

:t^s%1`yy+tG<]vG=4QZp~)3*:3\)!

Cobalah online!

Saya akan memposting penjelasan yang lebih menyeluruh nanti, tetapi untuk sekarang, Anda harus mencatat bahwa itu %adalah karakter komentar, sehingga programnya benar-benar:

4t^:QtZp~)G3*:3\1=)
:t!*
1t`yy+tG<]vG=s
:t^s
DJMcMayhem
sumber
4

PowerShell , 95 94 byte

( TimmyD 'bacon saya lagi)

Tugas 1:

(""..999|?{'1'*$_-match'^(?=(..+)\1+$)..'})[(0..("$args"-1)|%{$_*3})]#|$$$$===ss%``iiex!!nnnq;

Cobalah online!


Tugas 2:

($s=1.."$args")|%{"`$s|%{$_*`$_}"|iex}#0113999((((......??''''*$$$--match^===++))))\[]i!!nnnq;

Cobalah online!


Tugas 3:

!!(($i="$args")..($s=1)|?{($n=($s+=$n)-$n)-eq$i})#0113999......||?{''''**__match^+\}[""%%]``x;

Cobalah online!


Tugas 4:

"$args"..1|%{$s+="$_*"*$_+1|iex};$s#013999(((((......|??{''''$$$--match^===)))))\}[%]``i!!nnnq

Cobalah online!

briantis
sumber
Oh, pengetatan itu "$args"bukannya $args[0]brilian. Saya akan menggunakannya mulai sekarang.
AdmBorkBork
@TimmyD Ya Saya telah menggunakannya untuk penghematan satu byte pada apa pun dengan parameter tunggal.
briantis
@TimmyD poin bagus! Saya harus menulis ulang semuanya untuk memastikan, saya mungkin akan kembali dan menerapkannya. Setelah saya selesai semua 4 saya agak mereda dalam hal mengoptimalkan.
briantis
Yah maksud saya melakukan kembali tautan TIO dan semacamnya tapi HALUS @TimmyD saya akan berhenti menjadi malas dan menggunakan saran Anda yang murah hati yang sama sekali tidak banyak bekerja seperti yang saya bayangkan! (diedit) :-p
briantis
Anda dapat menghilangkan ;dari Tugas 4 dengan memanipulasi perhitungan dengan ("$args"..1|%{$s+="$_*"*$_+1|iex})-(-$s)untuk menyimpan byte keseluruhan lainnya.
AdmBorkBork
3

Haskell , 77 76 karakter

m n=[[x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]!!y|y<-[1,4..3*n]]--2 n===y();^
s n=[(*y)<$>[1..n]|y<-[1..n]]--0112234mmm  ====[[[xxxx||<<--..]]],,/uod!!y;^
n x|x<2=1|1<3=sum(n<$>[x-1,x-2]);d y=[0|m<-[1..y],y==n m]--4[[[....]]]/o!!*^
o n=sum[x^x|x<-[1..n]]--01112234mm  n====[[[[x||<<<--....]]]],,/d$>!!yyy*();

Cobalah online!

--memulai komentar baris, jadi keempat program tersebut berbentuk <program>--<unused chars>.

Tugas 1:

m n=[[x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]!!y|y<-[1,4..3*n]]

Program terpanjang. [x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]menghasilkan daftar angka komposit tak terbatas ditambah awal 1yang mengoreksi pengindeksan 0. Pemakaian:

Prelude> m 5
[4,9,14,18,22]

Tugas 2:

s n=[(*y)<$>[1..n]|y<-[1..n]]

Pemakaian:

Prelude> s 5
[[1,2,3,4,5],[2,4,6,8,10],[3,6,9,12,15],[4,8,12,16,20],[5,10,15,20,25]]

Tugas 3:

n x|x<2=1|1<3=sum(n<$>[x-1,x-2]);d y=[0|m<-[1..y],y==n m]

Pengembalian [0]untuk kebenaran dan []kepalsuan. Pemakaian:

Prelude> d 5
[0]
Prelude> d 6
[]

Tugas 4:

o n=sum[x^x|x<-[1..n]]

Pemakaian:

Prelude> o 5
3413
Laikoni
sumber
3

05AB1E , 21 byte

Tugas 1

3ÅFOL¦DâPÙï{3ôø¬¹£qåm

Cobalah online!

Tugas 2

LDâP¹ôq3m¦Ùï{3ø¬£ÅFåO

Cobalah online!

Tugas 3

3mÅF¹åqL¦DâPÙï{3ôø¬£O

Cobalah online!

Tugas 4

LDmOq3¦âPÙï{3ôø¬¹£ÅFå

Cobalah online!

Penjelasan

Untuk semua tugas, q akhir program sehingga kode yang mengikuti tidak pernah dijalankan.

Tugas 1

Ini adalah byte-hog terbesar. Perbaikan kecil di sini bisa sangat berarti.

3ÅFO                 # sum the first 4 fibonacci numbers
    L¦               # range [2 ... above]
      Dâ             # cartesian product with itself
        P            # product
         Ù           # remove duplicates
          ï{         # sort
            3ô       # split in pieces of size 3
              ø      # transpose
               ¬     # get the first lits
                ¹£   # get the first input-nr elements of the list

Tugas 2

L       # range [1 ... input]
 D      # duplicate
  â     # cartesian product
   P    # product
    ¹ô  # split in pieces of input size

Tugas 3

3m      # input**3
  ÅF    # get a list of that many (+1) fibonacci numbers
    ¹å  # check if input is in that list

Tugas 4

L     # range [1 ... input]
 D    # duplicate
  m   # elementwise power of ranges
   O  # sum
Emigna
sumber
1

Ruby, 83 82 80 78 karakter

->m{'*+-=';[*0..m-1].map{|b|(4..516).select{|p|(2...p).any?{|n|p%n==0}}[3*b]}}
->n{'()%**+--......00123456==?[[]]clmnsty{||}';(b=1..n).map{|e|b.map{|p|e*p}}}
->m{'%+-......001236bclnnpt[[]]{{||||}}';(1..e=m*m).any?{|p|(p*p-5*e).abs==4}}
->n{'%*.......023456=?[]abbceelnsty{{||||}}';((m=0)..n).map{|p|m+=p**p}[-1]-1}

Catatan: Pendeteksi angka-angka Fibonacci menggunakan metode kuadrat sempurna yang dijelaskan di Wikipedia: https://en.wikipedia.org/wiki/Fibonacci_number#Recognizing_Fibonacci_number

GB
sumber
jika Anda memiliki karakter untuk dibakar, mengapa tidak menggunakan komentar di akhir sebagai ganti string? Ini menghemat 2 karakter per baris '';vs#
Alexis Andersen
Terima kasih, tapi bagiku rasanya selingkuh.
GB