Ponieważ liczby i sekwencje Fibonacciego wydają się być popularnym tematem dla golfa kodowego, pomyślałem, że może być fajnym wyzwaniem dla kodowania golfa z liczbami Keitha .
Proponuję więc wyzwanie polegające na utworzeniu funkcji, która przyjmuje liczbę całkowitą i zwraca wartość prawda lub fałsz w zależności od liczby lub liczby Keitha.
Więcej o liczbach Keitha
W matematyce rekreacyjnej liczba Keitha lub liczba powtórek (skrót od powtarzalnej cyfry podobnej do Fibonacciego) to liczba w następującej liczbie całkowitej: 14, 19, 28, 47, 61, 75, 197, 742, 1104, 1537, 2208, 2580,…
Numberphile ma wideo wyjaśniające, jak obliczyć liczbę Keitha. Ale w zasadzie bierzesz cyfry liczby. Dodaj je razem, a następnie weź ostatnie cyfry oryginalnego numeru i dodaj je do sumy obliczeń, spłucz i powtórz. I przykład, aby to wyjaśnić.
14
1 + 4 = 5
4 + 5 = 9
5 + 9 = 14
Wejście
Liczba całkowita.
Wynik
Prawda, jeśli liczba jest liczbą Keitha. Fałsz, jeśli nie jest ...
true
/false
czy może być czymś prawdziwym / falsey ?Odpowiedzi:
GolfScript (
3125 znaków)Wprowadź jako liczbę całkowitą na górze stosu. Dane wyjściowe to 0 (fałsz) lub 1 (prawda). Demo online z listą liczb Keitha do 100.
źródło
0>
. Niestety mogę dać +1 tylko raz.Python (
7875)n=n[1:]+[sum(n)]
robi całą magię. Bierze każdy element oprócz pierwszego elementun
, przybija sumęn
(z pierwszym elementem), a następnie ustawia nan
.Chciałbym, żebyś mógł wpisać
list
liczbę całkowitą i oddzielić cyfry.Zwraca
False
wszystkie dane wejściowe poniżej 10. Może być o 8 znaków krótszy, jeśli zostanie zwróconyTrue
.źródło
n[0]
zamiastn[-1]
.print 9<a==n[0]
.n=n[1:]+[sum(n)]
może stać sięn=n[1:]+sum(n),
GolfScript,
3229 znakówImplementacja GolfScript, którą można przetestować online . Dane wejściowe są podawane jako górny element na stosie i zwraca odpowiednio 0 (tj. Fałsz) lub 1.
źródło
APL,
36343936332927Wyjście,
1
jeśli Keith, w0
przeciwnym razieGolfScript uderza ponownie !!
Edytować
Użycie funkcji Right-redukcja (
⊢/
) zamiast Take minus 1 (¯1↑
) bezpośrednio zapisuje 1 znak i pośrednio zapisuje 1 z Disclose (⊃
)Wyjaśnienie
⍎¨⍕x←⎕
pobiera dane wejściowe (traktowane jako liczba) i przypisuje je dox
. Konwertuje go na tablicę znaków (inaczej „ciąg” w innych językach) i zapętla każdy znak (cyfrę), konwertując go na liczbę. W rezultacie powstaje tablica liczbowa cyfr.{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}
jest główną funkcją „pętli”:+/⍵↑⍨-⍴⍕x
pobiera ostatnie⍴⍕x
(liczbę cyfr wx
) liczby z tablicy i sumuje je.⍵,
konkatenuje to do końca tablicy.(x>⊢/⍵)
sprawdzić, czy ostatnia cyfra na tablicy (które nie zostały+/⍵↑⍨-⍴⍕x
jeszcze łączone) jest mniejszy niżx
i powroty1
lub0
∇⍣
Wykonuje tę funkcję w nowej tablicy, że wiele razy. Więc jeśli ostatnia liczba jest mniejsza niżx
, ta funkcja się powtarza. W przeciwnym razie po prostu zwróć nową tablicęPo wykonaniu funkcji tablica zawiera sumy do punktu, w którym 2 liczby są większe lub równe
x
(np.14
Wygeneruje1 4 5 9 14 23
,13
wygeneruje1 3 4 7 11 18 29
)Na koniec sprawdź, czy każda liczba jest równa
x
i wypisz sumę wynikowego pliku binarnego szyk.Edytować
Dodano 2 znaki :-(, aby dane wyjściowe były
0
jednocyfroweJeszcze jedna edycja
Wyjaśnienie
Funkcja usuwa teraz pierwszą liczbę (
1↓
) z tablicy zamiast brać ostatnią⍴⍕x
(↑⍨-⍴⍕x
).Jednak takie podejście
1=
nie jest odpowiednie do obsługi liczb jednocyfrowych. Więc teraz usuwa ostatnią liczbę z tablicy przed sprawdzeniem równościx
, dodając 1 znakZgadłeś: EDYCJA
Porównuje
x
do nowo dodanego elementu zamiast starego ostatniego elementu, więcx
wystarczy upuścić pierwszy (zamiast ostatniego) element przed sprawdzeniem równości, aby zapisać znak minus. Zapisuje kolejne 3 za pomocą innej formy operatora Power (⍣
)I pojawia się 25-znakowa odpowiedź gs (Orz)
Ostatnia edycja
Nie mogę uwierzyć, że to przegapiłem.
Nie mogę już dłużej grać w golfa.
źródło
x∊{1↓⍵,+/⍵}⍣{x≤⊃⍺}⍎¨⍕x←⎕
. W funkcji zasilania⍺
jest wartością „po”.Common Lisp, 134
Czasami CL może być dość nieczytelne.
Niektóre formatowanie, aby uniknąć przewijania w poziomie:
Test:
źródło
F # - 184 znaków
Mam nadzieję, że mogę wziąć udział w moim wyzwaniu.
Edytuj Naprawiono błąd dotyczący małych liczb.
źródło
K, 55
.
źródło
PowerShell:
12012812311111097$i=read-host
pobiera dane wejściowe od użytkownika, przechowuje je w $ i.$j=(
...)-split''|?{$_}
dzieli cyfry z $ i na tablicę i przechowuje je w $ j.While($x-lt$i)
ustawia następującą pętlę podobną do Fibonnaci, aby działała, dopóki zmienna suma, $ x, nie osiągnie lub przekroczy $ i.$x=0
zeruje $ x, więc jest gotowy do użycia do sumowania (konieczne, gdy pętla wróci).$j|%{$x+=$_}
używa pętli ForEach-Object, aby dodać wartości z $ j do $ x.$null,$j=$j+$x
przesuwa wartości w lewo $ j, odrzucając pierwszą, jednocześnie dodając $ x.$x-eq$i
po zakończeniu pętli while sprawdza, czy wartość sumy $ x jest równa wartości początkowej $ i - ogólnie wskazującej na liczbę Keitha.-and$x-gt9
unieważnia liczby jednocyfrowe, zerowe i ujemne, które nie mogą być liczbami Keitha.Ten skrypt jest nieco „niechlujny”. Może z wdziękiem poradzić sobie z pozostawieniem $ i i $ j, ale musisz wyczyścić $ x między biegami.
źródło
-ne''
tak, aby było po prostu?{$_}
.$i=read-host;$j=$i-split''|?{$_}'
go$j=($i=read-host)-split''|?{$_}
.Ruby, 82
Podejrzewam, że Python jest lepszym narzędziem do tego.
źródło
C, 123
test za pomocą uprzęży:
daje:
źródło
i=(i+n-1)%n;t=g[i];g[i]=s;s=s*2-t;
zi+=n-1;t=g[i%n];g[i%n]=s;s+=s-t;
zaoszczędzisz dwóch znaków.R 116
Zdzieranie Pythona:
źródło
Perl, 90
Zabawne ćwiczenie! Wiem, że to stary post, ale zauważyłem, że Perl zaginął!
Jestem pewien, że mogę poprawić sposób, w jaki to buduję, dzięki dokładniejszemu przeanalizowaniu innych odpowiedzi, więc prawdopodobnie wrócę do tego!
źródło
Smalltalk - 136 znaków
Wyślij ten blok
value:
źródło
Java - 1437
źródło
Python3 104
I to jest funkcja;)
źródło
Python - 116 znaków
Nie jestem ekspertem od codegolf, więc proszę bardzo - moja pierwsza próba.
Wprowadź 2 zmiany dla funkcji:
print
nareturn
x
aby był parametremPS I drugi @ beary605 - dodaj wbudowane, aby oddzielić cyfry / znaki / cokolwiek.
źródło
Rubin (z OOP)
źródło