Różne zadania, te same postacie


36

W tym wyzwaniu musisz rozwiązać 4 różne zadania przy użyciu tego samego zestawu znaków. Możesz zmieniać układ znaków, ale nie możesz dodawać ani usuwać znaków.

Zwycięzcą zostanie zgłoszenie, które rozwiązuje wszystkie zadania przy użyciu jak najmniejszej liczby znaków. Wszystkie zadania muszą być rozwiązane w tym samym języku.

Pamiętaj, że jest to najmniejsza liczba znaków, a nie najmniejsza liczba unikalnych znaków.

Zadanie 1:

Wyprowadzaj pierwsze Nliczby co trzecią liczbę zespoloną . Poniższy kod pokazuje pierwsze 19 liczb zespolonych w pierwszym rzędzie i co trzecią liczbę złożoną w wierszu poniżej.

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

Jeśli N=5to wynik powinien być 4, 9, 14, 18, 22. Musisz wspierać 1<=N<=50.

Liczby złożone to liczby dodatnie, które nie są liczbami pierwszymi ani 1.

Wynik N=50jest następujący:

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

Zadanie 2:

Wyprowadź N-by-Ntabliczkę mnożenia. Musisz wspierać1<=N<=20

Przykład:

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

Format wyjściowy jest opcjonalny, poniższe są wyjściowymi akceptowalnymi [[1,2,3,4],[2,4,6,8],[3,6,9,12],[4,8,12,16]].

Zadanie 3:

Sprawdź, czy liczba jest liczbą Fibonacciego . Musisz wspierać dodatni Ndo domyślnego limitu liczb całkowitych swojego języka. Jeśli istnieją zarówno 32-bitowe liczby całkowite, jak i 64-bitowe liczby całkowite, możesz użyć tej, która wymaga najkrótszego kodu. Na przykład użyj intzamiast, long intjeśli masz wybór. Nie można wybrać mniejszych liczb całkowitych niż 32-bitowe, chyba że jest to ustawienie domyślne (nie można używać liczb całkowitych 8-bitowych, jeśli domyślny jest tryb 32-bitowy).

true/false, false/true, 1/0, 1/-1, a/bSą akceptowalne wyjście tak długo jak to jest spójne.

Zadanie 4:

Weź Njako dane wejściowe i wyjściowe wynik działania 1^1+2^2+3^3+...N^N. Musisz wspierać 1<=N<=10.

10 różnych wyników to:

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

To jest , więc wygrywa najkrótsze zgłoszenie w każdym języku!

Ten fragment kodu pomoże sprawdzić twoje rozwiązanie. Mierzy minimalny zestaw znaków potrzebny do uwzględnienia wszystkich czterech rozwiązań i pokazuje pozostałe znaki.


1
Binarny: dwie postacie
rdzeń

@coredump Tak, dwie unikalne postacie ...
Stewie Griffin

Odpowiedzi:


12

Python, 88 87 bajtów

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

Nie włożyłem zbyt wiele wysiłku w dzielenie się postaciami lub samymi golfami, to prawie na pewno zostanie pokonane.


1
range(11*n)Zawsze będzie zawierać wystarczającą liczbę kompozytów?
FlipTack

1
@FlipTack Tak, 5*nwystarczy.
Martin Ender

12

Galaretka , 19 18 17 znaków

Zadanie 1

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

Wypróbuj online!

Zadanie 2

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

Wypróbuj online!

Zadanie 3

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

Wypróbuj online!

Zadanie 4

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

Wypróbuj online!

Jak to działa

Każda linia w programie Jelly definiuje osobne łącze (funkcję). Ostatni jest głównym łączem i jest wywoływany automatycznie podczas wykonywania programu. O ile ten główny link w jakiś sposób nie odwołuje się do innych, nie mają one żadnego efektu. Pamiętaj, że nawet niesprawdzone łącza mogą nie zawierać błędów analizatora składni.

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

Zadanie 2

Ten jest trywialny: ×jest to mnożenie atomu, a szybkie þ(tabela) stosuje się ×do każdej kombinacji elementów w lewym i prawym argumencie. Jeśli argumentami są liczby całkowite (które tu są), to również rzutuje je na pierwszy zakres.

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

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

Cieszę się, że ÆḞto się już przydaje!
Lynn,

9

Mathematica, 60 znaków

Zadanie 1: Kompozyty

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

Zadanie 2: Tabliczka mnożenia

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

Zadanie 3: Fibonacciego

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

Zadanie 4: Suma mocy

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

Każde przesłanie jest zestawem wyrażeń, które są ignorowane, po których następuje nienazwana funkcja, która implementuje dane zadanie.

Napisałem prosty skrypt CJam, który „optymalnie” łączy surowe rozwiązania, przygotowując komentarz. Potem skończyło się na tym, że zaoszczędziłem trzy bajty, ręcznie pozbywając się każdego komentarza (co wymagało trochę przestawienia, aby uzyskać poprawną składnię w każdym przypadku). Skrypt znacznie ułatwił wypróbowanie prostych wariantów rozwiązań, aby sprawdzić, czy obniżyłyby ogólny wynik. Skorzystaj ze skryptu samodzielnie.


Mam komentarz, ale nie chodzi o sam kod: P. (Ładna odpowiedź, btw). Twój skrypt CJam pomija prostą wadę: jeśli wejdę abi bajako skrypty, da mi (**)abi (**)bazamiast abi ba.
HyperNeutrino,

@AlexL. Tak, nie bierze również pod uwagę faktu, że (**)sam mógłby zostać użyty do zakrycia niektórych znaków, jeśli byłyby użyte w innym programie.
Martin Ender

9

MATL , 29 28 26 znaków

Zadanie 1 (co trzeci numer złożony)

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

Wypróbuj online!

Zadanie 2 (tabliczka mnożenia)

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

Wypróbuj online!

Zadanie 3 (detektor Fibonacciego)

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

Wyświetla odpowiednio 1/ 0dla Fibonacciego / nie-Fibonacciego.

Wypróbuj online!

Zadanie 4 (suma uprawnień)

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

Wypróbuj online!

Czek

Ten program wprowadza cztery ciągi i wyświetla je posortowane, aby wizualnie sprawdzić, czy używają tych samych znaków.

Objaśnienia

%jest symbolem komentarza. Wszystko po jego prawej stronie jest ignorowane.

Zadanie 1 (co trzeci numer złożony)

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

Zadanie 2 (tabliczka mnożenia)

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

Zadanie 3 (detektor Fibonacciego)

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

Zadanie 4 (suma uprawnień)

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

Kiedy po raz pierwszy spojrzałem na wyzwanie, pomyślałem, że Hey MATL would be perfect for this!mnie pobiłeś. +1
DJMcMayhem

@DJMcMayhem Przepraszam, mam tendencję do udzielania wielu odpowiedzi. Następnym razem ping mnie, a ja powstrzymam się, jeśli nad tym pracujesz :-) W każdym razie, dlaczego nie iść dalej? Może możesz to przerobić
Luis Mendo,

3
@DJMcMayhem, proszę również opublikować odpowiedź, nawet jeśli nie uda się przebić Luisa. Chciałbym, aby więcej osób publikowało odpowiedzi w językach, które są już używane, nawet jeśli nie uda im się wygrać z pierwszym.
Stewie Griffin

@stewiegriffin Haha, dobrze, jasne. Nie mam jeszcze ważnej odpowiedzi, ale jeśli ją otrzymam (i będzie wystarczająco inna), opublikuję ją.
DJMcMayhem

7

Perl 6 , 61 bajtów

{(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

Drugi powraca, ((1,2,3,4),(2,4,6,8),(3,6,9,12),(4,8,12,16))gdy zostanie podany4

Perl 6 tak naprawdę nie ma maksymalnej liczby całkowitej, ale trzeci działa natychmiast z wejściem 15156039800290547036315704478931467953361427680642. Jedynymi ograniczającymi czynnikami byłyby pamięć i czas.

W przeciwnym razie wszystkie będą działać „natychmiast” dla danych wejściowych znacznie wykraczających poza to, co konieczne.

Wypróbuj online


6

JavaScript (ES6), 101 100 95 93 91 bajtów

(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

Edycja: Zapisano 1 bajt, nie obsługując 0jako liczby Fibonacciego. Zapisano 5 bajtów plus kolejne 2 bajty (1 dzięki @Arnauld) poprzez zmianę nazw zmiennych. Zapisane 2 bajty, przełączając +1, ++i +=1.


Zastąpienie wszystkich wystąpień czmiennej Apowinno zaoszczędzić jeden bajt.
Arnauld

(I miał sugerować, że można również wymienić dz y, ale dnie jest zdefiniowana w obecnej wersji, więc prawdopodobnie chcesz, aby ustalić, że pierwszy)
Arnauld

@Arnauld Dziękujemy za zwrócenie na to uwagi, ale udało mi się to naprawić i zaoszczędzić kolejny bajt, zmieniając nazwę ana m.
Neil,

4

MATL , 30 znaków

Zestaw znaków, z którym poszedłem to:

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

Nie mogłem wygrać z drugą odpowiedzią MATL, ale dobrze się bawiłem wymyślając to rozwiązanie.

Zadanie 1:

Trzecie liczby zespolone.

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

Wypróbuj online!

Zadanie 2:

Tabliczka mnożenia. Zdecydowanie najłatwiejsze zadanie, ze względu na sposób działania MATL

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

Wypróbuj online!

Zadanie 3:

Tester Fibonacciego. Wyświetla dodatnią liczbę całkowitą (1 lub 2) dla prawdziwych danych wejściowych, a 0 dla danych fałszywych.

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

Wypróbuj online!

Zadanie 4:

Suma mocy

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

Wypróbuj online!

Później dokładniej wyjaśnię, ale na razie należy zauważyć, że %jest to znak komentarza, więc programy są naprawdę:

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

4

PowerShell , 95 94 bajtów

( TimmyD znów zjada mój bekon)

Zadanie 1:

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

Wypróbuj online!


Zadanie 2:

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

Wypróbuj online!


Zadanie 3:

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

Wypróbuj online!


Zadanie 4:

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

Wypróbuj online!


Och, ta rygoryzacja "$args"zamiast $args[0]jest genialna. Odtąd będę tego używał.
AdmBorkBork

@TimmyD Tak, używałem tego do jednobajtowych oszczędności na cokolwiek z jednym parametrem.
briantist

@TimmyD dobry punkt! Musiałbym ponownie napisać je wszystkie, aby się upewnić, ale mogę je ponownie odwiedzić i zastosować. Kiedy skończyłem wszystkie 4, poniekąd przegrałem pod względem optymalizacji.
briantist

Cóż, miałem na myśli przerobienie linków TIO i tym podobnych, ale FINE @TimmyD Przestanę być leniwy i skorzystam z twojej hojnej sugestii, która wcale nie jest tak duża, jak robię! (edytowane) :-p
briantist

Możesz wyeliminować ;z Zadania 4, manipulując obliczeniami, ("$args"..1|%{$s+="$_*"*$_+1|iex})-(-$s)aby zapisać kolejny ogólny bajt.
AdmBorkBork

3

Haskell , 77 76 znaków

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

Wypróbuj online!

--rozpoczyna komentarz liniowy, więc wszystkie cztery programy mają formę <program>--<unused chars>.

Zadanie 1:

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

Najdłuższy program. [x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]daje nieskończoną listę liczb zespolonych plus początek, 1który koryguje indeksowanie 0. Stosowanie:

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

Zadanie 2:

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

Stosowanie:

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

Zadanie 3:

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

Zwraca [0]za prawdę i []za fałsz. Stosowanie:

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

Zadanie 4:

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

Stosowanie:

Prelude> o 5
3413

3

05AB1E , 21 bajtów

Zadanie 1

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

Wypróbuj online!

Zadanie 2

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

Wypróbuj online!

Zadanie 3

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

Wypróbuj online!

Zadanie 4

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

Wypróbuj online!

Objaśnienia

Dla wszystkich zadań qkończy program, więc poniższy kod nigdy nie zostanie wykonany.

Zadanie 1

To największy bajt-wieprz. Mała poprawka tutaj może przejść długą drogę.

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

Zadanie 2

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

Zadanie 3

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

Zadanie 4

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

1

Ruby, 83 82 80 78 znaków

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

Uwaga: Detektor liczb Fibonacciego przy użyciu metody doskonałego kwadratu opisanej na Wikipedii: https://en.wikipedia.org/wiki/Fibonacci_number#Recognizing_Fibonacci_numbers


jeśli masz znaki do wypalenia, dlaczego nie użyć komentarza na końcu zamiast ciągu? To oszczędza 2 liter w linii '';vs#
Alexis Andersen

Dzięki, ale dla mnie to jest jak oszustwo.
GB
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.