Powiązana sekwencja OEIS: A008867
Skrócona liczba trójkątna
Wspólną właściwością liczb trójkątnych jest to, że można je ułożyć w trójkąt. Na przykład weź 21 i ułóż w trójkąt o
s:
o oo ooo oooo ooooo oooooo
Zdefiniujmy „obcinanie:” wycinanie trójkątów o tym samym rozmiarze z każdego rogu. Jednym ze sposobów obcięcia 21 jest:
. . . ooo oooo . ooo. . . oo. .
(Trójkąty .
są wycięte z oryginału).
o
Pozostało 12 s, więc 12 to skrócona liczba trójkątów.
Zadanie
Twoim zadaniem jest napisanie programu lub funkcji (lub odpowiednika), która pobiera liczbę całkowitą i zwraca (lub używa dowolnej standardowej metody wyjściowej), czy liczba jest obciętym numerem trójkąta.
Zasady
- Brak standardowych luk.
- Dane wejściowe to nieujemna liczba całkowita.
- Długość cięcia nie może przekraczać połowy długości oryginalnego trójkąta (tzn. Cięcia nie mogą się pokrywać)
- Cięcie może mieć długość boku zero.
Przypadki testowe
Prawda:
0
1
3
6
7
10
12
15
18
19
Falsy:
2
4
5
8
9
11
13
14
16
17
20
Przypadki testowe dla wszystkich liczb całkowitych do 50: TIO Link
To jest golf golfowy , więc wygrane z najkrótszą liczbą bajtów w każdym języku wygrywają!
code-golf
math
decision-problem
number-theory
integer
code-golf
number
decision-problem
functional-programming
code-golf
array-manipulation
matrix
code-golf
string
classification
string
code-challenge
binary
compression
decode
code-golf
string
string
code-challenge
balanced-string
encode
code-golf
number-theory
integer
base-conversion
code-golf
math
number-theory
geometry
abstract-algebra
code-golf
array-manipulation
sorting
optimization
code-golf
math
geometry
image-processing
generation
code-golf
string
cops-and-robbers
repeated-transformation
grammars
cops-and-robbers
repeated-transformation
grammars
code-challenge
restricted-source
tips
source-layout
javascript
code-challenge
kolmogorov-complexity
restricted-source
code-golf
combinatorics
counting
math
fastest-code
linear-algebra
code-golf
math
permutations
matrix
linear-algebra
code-golf
string
decision-problem
restricted-source
code-golf
number
array-manipulation
subsequence
code-golf
number
array-manipulation
matrix
code-golf
brainfuck
code-golf
color
code-golf
quine
source-layout
code-golf
subsequence
code-golf
string
ascii-art
code-golf
string
ascii-art
alphabet
code-golf
decision-problem
interpreter
hexagonal-grid
halting-problem
code-golf
string
polynomials
calculus
code-golf
math
decision-problem
matrix
complex-numbers
code-golf
random
code-golf
number
arithmetic
JungHwan Min
źródło
źródło
Odpowiedzi:
Haskell,
4645 bajtówWypróbuj online!
źródło
Haskell , 46 bajtów
Wypróbuj online!
Rzuciłem kilka teorii liczb na problem (dzięki @flawr), znalazłem następującą charakterystykę:
Oznacza to na przykład, że 4n-1 może nie być podzielna przez 5, chyba że jest dalej podzielna przez 5 2 = 25, a całkowita liczba 5 czynników jest parzysta.
Haskell nie ma wbudowanej faktoryzacji, ale możemy improwizować. Jeśli pracujemy z rozkładami na czynniki pierwsze, takie jak 12 = 3 * 4 , możemy użyć równoważnego wyrażenia:
Możemy wyodrębnić moc prime p zawartym w K jak
gcd(p^k)k
. Następnie sprawdzamy, czy wynik r nie wynosi 5 lub 7 modulo 12 asmod(r-5)12>2
. Zauważ, że r jest nieparzyste. Sprawdzamy również kompozyty jako p , nie mogąc odróżnić ich od liczb pierwszych, ale sprawdzenie minie tak długo, jak czynne są jego czynniki.Wreszcie, negując
>2
do<3
i przełączanieTrue
/False
na wyjściu zapisuje bajt pozwalając nam używaćor
zamiastand
.Pokrewną charakterystyką jest to, że dzielniki 4n-1 wzięte modulo 12 mają więcej całkowitych 1 i 11 niż 5 i 7.
53 bajty
Wypróbuj online!
źródło
Python 2 , 52 bajty
Wypróbuj online!
Wyjścia
True
/False
przerzucone. Wykorzystuje tę charakterystykę:Sprawdzamy, czy któryś
8*n-2+3*b*b
jest idealnym kwadratem dla każdegob
od1
don+1
. Unikamy,b=0
ponieważ daje błąd pierwiastka kwadratowego z ujemnegon==0
, ale nie może to zaszkodzić, ponieważ tylko dziwneb
może działać.Sporządzono nierekurencyjnie:
Python 2 , 53 bajty
Wypróbuj online!
źródło
range
. Tutaj jest blisko, ponieważb>n+1
jest to długa podstawa i0in
jest krótka.R ,
4543 bajtów-2 bajty dzięki Vlo
Wypróbuj online!
Jestem całkiem pewien, że w tym celu musimy sprawdzić tylko pierwsze
n
trójkątne liczby; brutalna siła sprawdza, czyn
występuje w parach różnic liczb trójkątnych i ich potrójnych.źródło
scan()
n<-scan();n%in%outer(T<-cumsum(0:n),3*T,"-")
Galaretka , 10 bajtów
Monadyczny link akceptujący liczbę całkowitą i zwracający prawdziwą wartość (niepusta lista) lub wartość falsey (pusta lista).
Wypróbuj online! (stopka wykonuje reprezentację w języku Python, aby pokazać
[0]
wyniki takimi, jakie są)... lub zobacz zestaw testów (działa od 0 do 20 włącznie)
W jaki sposób?
Biorąc pod uwagę N, tworzy pierwsze N liczb trójkąta, odejmuje N od każdego z nich, dzieli każdy wynik przez 3 i zachowuje wszelkie wyniki, które są jedną z pierwszych N liczb trójkąta.
źródło
Pyt , 10 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
ɐ-
robiHaskell , 48 bajtów
Wypróbuj online!
źródło
a==1
.J , 22 bajty
Wypróbuj online!
Proste i nieco słabo zagrane golfa podejście.
Wyjaśnienie
źródło
e.2,@(!-/3*!)[:i.2+]
e.2,@(!-/3*!)1+i.,]
możeMATL , 12 bajtów
Wyjścia
1
dla prawdy,0
dla fałszu.Wypróbuj online!Lub sprawdź wszystkie przypadki testowe .
Jak to działa, na przykład
Rozważ wejście
6
źródło
Rubin ,
65 57 5248 bajtówWypróbuj online!
Zainspirowany pythonową odpowiedzią xnora
źródło
Python 3 , 84 bajtów
Wypróbuj online!
źródło
05AB1E , 11 bajtów
Wypróbuj online!
Wyjaśnienie
Jest to oparte na tym, że liczba T jest trójkątna, jeśli
8T+1
jest nieparzystym kwadratem idealnym.Zaczynamy od listy trójkątów, które moglibyśmy obciąć, obliczyć na ich podstawie możliwe większe trójkąty i sprawdzić, czy w rzeczywistości jest trójkątny.
źródło
Japt , 16 bajtów
Wypróbuj | Sprawdź wszystkie przypadki testowe
Wyjaśnienie
Alternatywny
Spróbuj
źródło
Dodaj ++ , 36 bajtów
Wypróbuj online!
źródło