Compiti diversi, stessi personaggi


36

In questa sfida, devi risolvere 4 compiti diversi utilizzando lo stesso set di caratteri. È possibile riorganizzare i caratteri, ma non è possibile aggiungere o rimuovere caratteri.

Il vincitore sarà l'invio che risolve tutti i compiti usando il minor numero di personaggi. Tutte le attività devono essere risolte nella stessa lingua.

Nota che è il numero più piccolo di caratteri, non il numero più piccolo di caratteri univoci .

Compito 1:

Stampa i primi Nnumeri di ogni terzo numero composto . Il blocco di codice in basso mostra i primi 19 numeri compositi nella prima riga e ogni terzo numero composito nella riga in basso.

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

Se N=5quindi l'output dovrebbe essere 4, 9, 14, 18, 22. Devi sostenere 1<=N<=50.

I numeri compositi sono numeri positivi che non sono numeri primi o 1.

Il risultato per N=50è:

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

Compito 2:

Emette una N-by-Ntabella di moltiplicazione. Devi sostenere1<=N<=20

Esempio:

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

Il formato di output è facoltativo, il seguente è output accettabile [[1,2,3,4],[2,4,6,8],[3,6,9,12],[4,8,12,16]].

Compito 3:

Determina se un numero è un numero di Fibonacci . Devi supportare positivo Nfino al limite intero predefinito della tua lingua. Se sono presenti sia numeri interi a 32 bit sia numeri interi a 64 bit, è possibile scegliere di utilizzare quello che richiede il codice più breve. Ad esempio, utilizzare intinvece di long intse si ha la scelta. Non è possibile scegliere numeri interi inferiori a 32 bit a meno che non sia predefinito (non è possibile utilizzare numeri interi a 8 bit se 32 bit è predefinito).

true/false, false/true, 1/0, 1/-1, a/bSono tutti uscita accettabile finché è coerente.

Compito 4:

Prendi Ncome input e output il risultato di 1^1+2^2+3^3+...N^N. Devi sostenere 1<=N<=10.

I 10 risultati diversi sono:

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

Si tratta di , quindi vince l'invio più breve in ogni lingua!

Questo frammento di stack ti aiuterà a verificare la tua soluzione. Misura il set minimo di caratteri necessario per includere tutte e quattro le soluzioni e mostra i caratteri rimanenti.


1
Binario: due personaggi
coredump

@coredump Sì, due personaggi unici ...
Stewie Griffin,

Risposte:


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

Non ha fatto troppi sforzi per condividere i personaggi o i golf stessi, questo sarà quasi sicuramente battuto.


1
Conterrà range(11*n)sempre abbastanza compositi?
FlipTack

1
@FlipTack Sì, 5*nè sufficiente.
Martin Ender,

12

Jelly , 19 18 17 caratteri

Compito 1

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

Provalo online!

Compito 2

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

Provalo online!

Compito 3

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

Provalo online!

Compito 4

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

Provalo online!

Come funziona

Ogni riga in un programma Jelly definisce un collegamento (funzione) separato . L'ultimo è il collegamento principale e viene chiamato automaticamente quando viene eseguito il programma. A meno che quel link principale non faccia riferimento in qualche modo agli altri, non hanno alcun effetto. Si noti che anche i collegamenti non richiamati potrebbero non contenere errori del parser.

Compito 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.

Compito 2

Questo è banale: ×è l'atomo di moltiplicazione e la rapida þ(tabella) si applica ×a ciascuna combinazione di elementi nell'argomento sinistro e nell'argomento destro. Se gli argomenti sono numeri interi (che sono qui), li proietta anche nell'intervallo prima.

Compito 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.

Compito 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.

Sono contento di vedere che si ÆḞsta già dimostrando utile!
Lynn

9

Mathematica, 60 personaggi

Attività 1: Compositi

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

Attività 2: tabella di moltiplicazione

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

Compito 3: Fibonacci

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

Compito 4: somma dei poteri

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

Ogni invio è un insieme di espressioni che vengono ignorate, seguito da una funzione senza nome che implementa il compito dato.

Ho scritto un semplice script di CJam che "in modo ottimale" combina soluzioni grezze anteponendo un commento. Ho quindi finito per salvare tre byte in più eliminando manualmente ogni commento (che ha richiesto un po 'di riorganizzazione per ottenere una sintassi valida in ogni caso). Lo script ha reso molto più semplice provare semplici variazioni delle soluzioni per vedere se avrebbero ridotto il punteggio complessivo. Sentiti libero di usare lo script da solo.


Ho un commento, ma non riguarda il codice stesso: P. (Bella risposta, tra l'altro). Il tuo script CJam si affaccia su un semplice difetto: se entro abe bacome script, mi darà (**)abe (**)ba, invece di abe ba.
HyperNeutrino

@AlexL. Sì, inoltre, non considera il fatto che esso (**)stesso potrebbe essere usato per coprire alcuni personaggi se fossero usati in uno degli altri programmi.
Martin Ender,

9

MATL , 29 28 26 caratteri

Attività 1 (ogni terzo numero composto)

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

Provalo online!

Attività 2 (tabella di moltiplicazione)

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

Provalo online!

Task 3 (rivelatore di Fibonacci)

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

Questo mostra 1/ 0per Fibonacci / non-Fibonacci rispettivamente.

Provalo online!

Compito 4 (somma di poteri)

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

Provalo online!

Dai un'occhiata

Questo programma inserisce le quattro stringhe e le visualizza ordinate, per verificare visivamente che utilizzino gli stessi caratteri.

spiegazioni

%è il simbolo del commento. Tutto alla sua destra viene ignorato.

Attività 1 (ogni terzo numero composto)

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

Attività 2 (tabella di moltiplicazione)

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

Task 3 (rivelatore di 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

Compito 4 (somma di poteri)

:     % Implicitly input N. Push [1 2 ... N]
t     % Duplicate
^     % Power, element-wise
s     % Sum of array. Implicitly display

Quando ho visto la sfida per la prima volta, ho pensato Hey MATL would be perfect for this!che mi avessi battuto. +1
DJMcMayhem

@DJMcMayhem Mi dispiace, tendo a rispondere molto. La prossima volta fammi un rumore metallico e mi trattengo se ci stai lavorando :-) Comunque, perché non andare avanti? Forse puoi superarlo
Luis Mendo l'

3
@DJMcMayhem, per favore pubblica anche una risposta, anche se non riesci a superare Luis. Vorrei che più persone avrebbero pubblicato le risposte nelle lingue che sono già utilizzate, anche se non riescono a superare il primo.
Stewie Griffin,

@stewiegriffin Haha, okay certo. Non ho ancora una risposta valida, ma se ne ottengo una (ed è sufficientemente diversa) la posterò.
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

Il secondo ritorna ((1,2,3,4),(2,4,6,8),(3,6,9,12),(4,8,12,16))quando viene dato4

Perl 6 non ha davvero un numero intero massimo, ma il terzo funziona istantaneamente con un input di 15156039800290547036315704478931467953361427680642. Gli unici fattori limitanti sarebbero la memoria e il tempo.

Altrimenti funzioneranno tutti "istantaneamente" per input ben oltre ciò che è necessario.

Provalo online


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

Modifica: 1 byte salvato non supportato 0come numero di Fibonacci. Salvato 5 byte più altri 2 byte (1 grazie a @Arnauld) rinominando le variabili. Salvato 2 byte passando tra +1, ++e +=1.


La sostituzione di tutte le occorrenze della cvariabile con Adovrebbe salvare un byte.
Arnauld,

(Stavo per suggerire che si può anche sostituire dcony , ma dnon è definito nella versione attuale, quindi probabilmente si vuole risolvere quella prima)
Arnauld

@Arnauld Grazie per averlo sottolineato, ma sono riuscito a sistemare le cose e salvare un ulteriore byte rinominandolo ain m.
Neil

4

MATL , 30 caratteri

Il set di caratteri con cui sono andato è:

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

Non sono riuscito a superare l'altra risposta MATL, ma mi sono divertito a trovare questa soluzione.

Compito 1:

Terzo numero composto.

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

Provalo online!

Compito 2:

Tabellina. Sicuramente il compito più semplice, grazie al modo in cui funziona MATL

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

Provalo online!

Compito 3:

Tester di Fibonacci. Stampa un numero intero positivo (1 o 2) per input veritieri e 0 per input falsi.

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

Provalo online!

Compito 4:

Somma di poteri

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

Provalo online!

In seguito posterò una spiegazione più approfondita, ma per ora, dovresti notare che %è il carattere di commento, quindi i programmi sono davvero:

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

4

PowerShell , 95 94 byte

( TimmyD mi sta salvando di nuovo la pancetta)

Compito 1:

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

Provalo online!


Compito 2:

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

Provalo online!


Compito 3:

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

Provalo online!


Compito 4:

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

Provalo online!


Oh, quella stringa "$args"invece che $args[0]è geniale. Lo userò da qui in poi.
AdmBorkBork,

@TimmyD Sì, lo sto usando per risparmiare un singolo byte su qualsiasi cosa con un singolo parametro.
Briantist

@TimmyD buon punto! Dovrei riscriverli tutti per essere sicuro, potrei rivisitarlo e applicarlo. Una volta che ho finito tutti e 4, mi sono quasi esaurito in termini di ottimizzazione.
Briantist

Bene, intendevo rifare i collegamenti TIO e simili, ma FINE @TimmyD Smetterò di essere pigro e userò il tuo generoso suggerimento che non è affatto tanto lavoro quanto sto realizzando! (a cura di) :-p
briantist

È possibile eliminare il ;da Task 4 manipolando il calcolo con ("$args"..1|%{$s+="$_*"*$_+1|iex})-(-$s)per salvare un altro byte complessivo.
AdmBorkBork,

3

Haskell , 77 76 caratteri

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

Provalo online!

--inizia un commento di riga, quindi tutti e quattro i programmi sono nel modulo <program>--<unused chars>.

Compito 1:

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

Il programma più lungo [x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]produce un elenco infinito di numeri compositi più un inizio 1che corregge l'indicizzazione 0. Uso:

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

Compito 2:

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

Uso:

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]]

Compito 3:

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

Ritorna [0]per la verità e []per la falsità. Uso:

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

Compito 4:

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

Uso:

Prelude> o 5
3413

3

05AB1E , 21 byte

Compito 1

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

Provalo online!

Compito 2

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

Provalo online!

Compito 3

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

Provalo online!

Compito 4

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

Provalo online!

spiegazioni

Per tutte le attività, il q termina il programma in modo che il codice che segue non venga mai eseguito.

Compito 1

Questo è il più grande byte-hog. Un piccolo miglioramento qui potrebbe fare molto.

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

Compito 2

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

Compito 3

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

Compito 4

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

1

Rubino, 83 82 80 78 caratteri

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

Nota: rilevatore di numeri Fibonacci utilizzando il metodo quadrato perfetto descritto su Wikipedia: https://en.wikipedia.org/wiki/Fibonacci_number#Recognizing_Fibonacci_numbers


se hai caratteri da masterizzare, perché non usare un commento alla fine invece di una stringa? Esso consente di risparmiare 2 caratteri per riga '';vs#
Alexis Andersen

Grazie, ma per me è come imbrogliare.
GB
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.