Biorąc pod uwagę dodatnią liczbę całkowitą, wypisz wartość prawdy / fałszu, czy liczba może sama zjeść.
Zasady
Najbardziej na lewo jest głowa, najbardziej na prawo jest ogon
Jeśli głowa jest większa lub równa ogonowi, głowa zjada ogon, a nowa głowa staje się ich sumą.
Jeśli to głowa zostaje zastąpiona .
nie można zignorować, jednak numer wejściowy nigdy nie będzie miał żadnych zer wiodących.
Przykład:
number=2632
head-2, tail-2
2632 -> 463
head-4, tail-3
463 -> 76
head-7, tail-6
76 -> 3
If only one digit remains in the end, the number can eat itself.
Jeśli w którymś momencie głowa nie będzie mogła zjeść ogona, odpowiedź będzie fałszywa.
number=6724
072
False (0<2)
Przypadki testowe:
True:
[2632, 92258, 60282, 38410,3210, 2302, 2742, 8628, 6793, 1, 2, 10, 100, 55, 121]
False:
[6724, 47, 472, 60247, 33265, 79350, 83147, 93101, 57088, 69513, 62738, 54754, 23931, 7164, 5289, 3435, 3949, 8630, 5018, 6715, 340, 2194]
To jest golf golfowy, więc wygrywa najkrótszy kod.
code-golf
decision-problem
Wedant Kandoi
źródło
źródło
Odpowiedzi:
JavaScript (ES6),
52 5150 bajtówZapisano 1 bajt dzięki @tsh
Pobiera dane wejściowe jako ciąg. Zwraca wartość logiczną.
Wypróbuj online!
Skomentował
źródło
f=n=>n>[n%10]?f(-(-n[0]-n)%10+n.slice(1,-1)):!n[1]
Galaretka , 11 bajtów
Wypróbuj online!
Jak to działa
źródło
Perl 6 ,
6362 bajtówWypróbuj online!
Wyjaśnienie:
źródło
Java (JDK) , 83 bajty
Wypróbuj online!
Kredyty
źródło
/10
oraz%10
w pętli. Tak dobrze zrobione pokonanie odpowiedzi w języku Python; +1 ode mnie :)r+=
nar=
i?1:0
na?1:r
.r=1
r&=h<n%10?0:r;return r;
Mathematica, 62 bajty
Najpierw wywołuje
IntegerDigits
dane wejściowe, aby uzyskać listę jego cyfr, a następnie wielokrotnie stosuje następującą zasadę:Reguła jest stosowana, dopóki wzór nie będzie już pasować, w którym to przypadku zostaje tylko jedna cyfra (prawda) lub głowa jest mniejsza niż ogon (fałsz).
Zamiast dzwonić
Length[__]==1
, możemy zapisać kilka bajtów0(__)=={0}
, mnożąc wszystkie elementy na liście,0
a następnie porównując z listą{0}
.źródło
Python 3 , 50 bajtów
Pierwsza linia skradziona z odpowiedzi Czarnej Sowy Kai .
Wypróbuj online!
Wyjście odbywa się za pomocą kodu wyjścia. Nie powiodło się (1) dla danych wejściowych fałszowania i zakończeń (0) dla danych wejściowych zgodnych z prawdą.
źródło
p%10<k>q
nie rzuca NameError, jeślip%10 >= k
?p%10<k>q
robi to samo cop%10<k and k>q
.Python 2 ,
1058281 bajtówWypróbuj online!
Wielkie dzięki za ogromne -23 od @ ØrjanJohansen
Dzięki @VedantKandoi (i @ ØrjanJohansen) za kolejne -1
źródło
for
odwróconego wycinka, a także zrobić to%10
tylko podczas testowania: Wypróbuj online!if i[0]<i[-1]:x=0
a następnieelse:....
. @ ØrjanJohansen, również w twojej odpowiedzi.True
przypadków, ale nie dla wszystkichFalse
.Brachylog , 23 bajty
Wypróbuj online!
Jest to 1 bajtowa oszczędność w stosunku do rozwiązania Fatalize . To stosuje podejście rekurencyjne zamiast iteracyjne
Wyjaśnienie
źródło
APL (Dyalog Unicode) , 33 bajty SBCS
Anonimowa funkcja ukrytego przedrostka przyjmująca ciąg znaków jako argument.
Wypróbuj online!
⍎¨
oceń każdy znak (daje nam to listę cyfr){
…}
Zastosuj do tego następujące „dfn”;⍵
jest argumentem (lista cyfr):⌽⍵
odwrócić argument⊃
wybierz pierwszy element (to jest ogon)t←
przypisać dot
(dla t ail)⍵<
dla każdej oryginalnej cyfry sprawdź, czy jest ona mniejsza⊃
wybierz pierwszą wartość prawda / fałsz:
w takim razie:0
zwróć false⋄
następnie:3::
jeśli odtąd wystąpi błąd indeksu (poza zakresem):1
zwróć prawdę¯1↓⍵
upuść ostatnią cyfrę⊢
wydajność, która (oddziela1
i¯1
dlatego nie będą tworzyć pojedynczą macierz)t+@1
dodaj ogon do pierwszej cyfry (głowy)10|
mod-10∇
powrócićKiedy trafimy jedną cyfrę,
¯1↓
spowoduje to, że będzie pusta lista i@1
spowoduje błąd indeksu, ponieważ nie ma pierwszej cyfry, powodując, że funkcja zwróci true.źródło
Python 3 , 77 bajtów
Wypróbuj online!
I moje stare rozwiązanie z podejściem rekurencyjnym
Python 3 , 90 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako ciąg.
źródło
Brachylog , 24 bajty
Wypróbuj online!
Powinienem zmienić
ⁱ
domyślne zachowanie, aby iterowało nieznaną liczbę razy (obecnie iteruje 1 raz, co jest całkowicie bezużyteczne). Nie potrzebowałbym wtedy[…];I[…]⁾
, oszczędzając 3 bajtyWyjaśnienie
Ten program zawiera brzydki widelec wewnątrz widelca. Jest też trochę hydrauliki potrzebnej do pracy na listach cyfr zamiast cyfr (ponieważ jeśli usuniemy głowę i ogon
76
, pozostaniemy z tym0
, co nie działa w przeciwieństwie do[7,6]
miejsca, w którym się skończy[]
).źródło
,
zamiast tego mogę usunąć 1 bajt Wypróbuj online!Haskell,
706460 bajtówDane wejściowe są traktowane jako ciąg.
Wypróbuj online!
Edycja: -6 bajtów za pomocą sztuczki @ Laikoni polegającej na użyciu
||
zamiast osobnych strażników. Kolejne -4 bajty dzięki @Laikoni.źródło
read[l b]
może być takread b
dlatego, że i tak patrzysz tylko na ostatnią cyfrę. Oszczędność 4 dodatkowych bajtów poprzez wstawianielast
: Wypróbuj online!Perl 5 , 64 bajtów
Wypróbuj online!
źródło
Python 2 ,
7567 bajtówWypróbuj online!
Podejście lambda rekurencyjne. Pobiera dane wejściowe jako ciąg. Ogromne podziękowania dla Dennisa za oszczędność 8 bajtów!
źródło
Haskell ,
6964 bajtówWypróbuj online! Przykładowe użycie:
f 2632
dajeTrue
.Edycja: -5 bajtów, ponieważ
mod (h + mod n 10) 10 = mod (h + n) 10
źródło
||
, co pomogło mi również skrócić moją odpowiedź. Dzięki!Ruby, 139 bajtów
Wypróbuj online! (ma dodatkowy kod do przetworzenia danych wejściowych, ponieważ jest to funkcja)
Nieskluczony kod:
źródło
Retina 0.8.2 , 42 bajty
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Konwertuj cyfry na unary i wstaw separatory.
Jeśli ostatnia cyfra nie jest większa niż pierwsza, dodaj je razem.
W razie potrzeby zmniejsz moduł 10.
Powtarzaj tę czynność, aż ostatnia cyfra będzie większa od pierwszej lub pozostanie tylko jedna cyfra.
Sprawdź, czy pozostała tylko jedna cyfra.
źródło
05AB1E ,
262524 bajtówPrawdopodobnie można go trochę pograć w golfa .. Wydaje się to zbyt długie, ale być może wyzwanie jest bardziej skomplikowane pod względem kodu, niż wcześniej myślałem.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
C ++ (gcc) , 144 bajty
Wypróbuj online!
Po raz pierwszy próbuję czegoś takiego, więc jeśli źle sformatowałem coś, proszę dać mi znać. Nie jestem w 100% pewien zasad dotyczących rzeczy takich jak używanie przestrzeni nazw do eliminacji 5 bajtów „std ::”, więc zostawiłem to.
Nie golfowany:
źródło
#include
stwierdzeń. Proponuję jednak programowanie w std lib obiektów subdialect C ++ z wcześniej przygotowanym#include "std_lib_facilities.h"
, co również robiusing namespace std;
. Ten nagłówek został napisany przez autora wersji językowej (ostatnia wersja to 2010) dla studentów, którzy nie znają języka C ++.#import<string>
. Wypróbuj online!#!/usr/bin/sh
newlinegcc -include "std_lib_facilities.h" $@
- czy znajdę kurs C ++ zapewniający ten skrypt powłoki, czy to się liczy?-include iostream
jest to rzeczywiście 144 bajty.C #, 114 bajtów
Wypróbuj online
źródło
C (gcc) (z string.h) ,
110108 bajtówWypróbuj online!
Wciąż stosunkowo nowy w PPCG, więc poprawna składnia do łączenia bibliotek jako nowego języka jest mi obca. Zauważ też, że funkcja zwraca 0 lub 1 dla false / true, a wydrukowanie wyniku do standardowego wymaga stdio. Jeśli jesteśmy pedantyczni, a ćwiczenie wymaga wyników, język wymaga stdio , że dobrze.
Koncepcyjnie podobny do odpowiedzi @ BenH, ale w C, więc pochwały tam, gdzie są należne (Witamy w PPCG, btw), ale przy użyciu rekurencji. Używa również arytmetyki wskaźnika tablicy, ponieważ brudny kod jest krótszy niż czysty kod.
Funkcja jest rekurencyjna, z warunkami wyjścia, jeśli pierwsza liczba nie może zjeść ostatniego lub długość wynosi 1, zwracając odpowiednio fałsz lub prawda. Wartości te można znaleźć, usuwając odwołanie do wskaźnika C-String (który daje znak char) na początku i na końcu łańcucha i wykonując na nim porównania. arytmetyka wskaźnika jest wykonywana w celu znalezienia końca łańcucha. na koniec ostatni znak jest „kasowany” przez zastąpienie go zerowym terminatorem (0).
Możliwe, że arytmetyka modułu może zostać skrócona o bajt lub dwa, ale po manipulacji wskaźnikiem potrzebuję już prysznica.
Wersja bez golfa tutaj
Aktualizacja: Zapisano dwa bajty, zastępując c == 1 znakiem! C. Jest to w zasadzie c == 0. Będzie działać przez dodatkowy czas i niepotrzebnie podwoi się przed usunięciem, ale oszczędza dwa bajty. Efektem ubocznym jest, że łańcuchy o zerowej lub zerowej długości nie spowodują nieskończonej rekurencji (chociaż nie powinniśmy otrzymywać ciągów zerowych, ponieważ ćwiczenie mówi o dodatnich liczbach całkowitych).
źródło
gcc
- chociaż ostrzeżenia zostaną wygenerowane,gcc
z przyjemnością skompilują kod bez#include
s. Możesz także zapisać 4 bajty-DR=return
. Wreszcie w kodzie testowym litery\0
s są niepotrzebne, ponieważ ciąg dosłownie już je domyślnie zawiera.b=case1?res1:case2?res2:res_else;
jest taki sam jakif(case1)return res1;if(case2)return res2;return res_else;
c
: możesz określić, czy łańcuch ma długość zerowąhead-tail
.PowerShell, 89 bajtów
Ważny! Skrypt wywołuje się rekurencyjnie. Zapisz skrypt jako
g.ps1
plik w bieżącym katalogu. Możesz także wywołać zmienną blokową skryptu zamiast pliku skryptu (patrz skrypt testowy poniżej). Te połączenia mają tę samą długość.Uwaga 1: Skrypt używa leniwej oceny operatorów logicznych
-or
i-and
. Jeśli"$args"-notmatch'(.)(.*)(.)'
jest,True
to prawidłowe podwyrażenie-or
nie jest oceniane. Również, jeśli($m=$Matches).1-ge$m.3
jestFalse
to właściwe, to podwyrażenie-and
nie jest również oceniane. Unikamy więc nieskończonej rekurencji.Uwaga 2: Wyrażenie regularne
'(.)(.*)(.)'
nie zawiera kotwic początkowych i końcowych, ponieważ(.*)
domyślnie wyrażenie jest zachłanne.Skrypt testowy
Wydajność:
PowerShell, 90 bajtów
Brak rekurencji. Brak zależności od nazwy pliku i brak zależności od nazwy bloku skryptu.
Powershell domyślnie konwertuje prawy operand na typ lewego operandu. Dlatego
$s-ge$s%10
oblicza prawy operand$s%10
jakointeger
i porównuje go jako,string
ponieważ typ lewego operandu tostring
. I2+$s[0]+$s
konwertuje znak$s[0]
i ciąg znaków$s
na,integer
ponieważ lewy operand2
jest liczbą całkowitą.$s|% S*g 1($s.Length-2)
jest skrótem do$s.Substring(1,($s.Length-2))
źródło
C # (interaktywny kompilator Visual C #) , 69 bajtów
Wypróbuj online!
Sukces lub porażka zależy od obecności lub braku wyjątku . Dane wejściowe mają postać ciągu.
Mniej golfa ...
Istnieje kilka dodatkowych bajtów do radzenia sobie z konwersją znaków i cyfr, ale ogólnie nie miało to większego wpływu na rozmiar.
źródło
Perl 5
-pF
, 53 bajtówWypróbuj online!
źródło
Brachylog , 18 bajtów
Wypróbuj online!
Zajmuje trzy bajty off rozwiązania Fatalize tuż mocy niedeterministycznym superscriptless
ⁱ
istniejącego obecnie, ale traci kolejne trzy wykonując niejasno Jelly inspirowane rzeczyz₁
unikać używaniac
,g
lub naweth
. (Zainspirowany także próbą i bezskuteczności użycia innej nowej funkcji:ʰ
metapredykatem).źródło
PowerShell ,
9491 bajtówWypróbuj online!
Skrypt testowy
Nieskluczony kod:
źródło
$n[0]
swojegofor
oświadczenia - wystarczy sprawdzić$n
.-6
zamiast tego,-96
ponieważ wystarczyreturn
i zapisać 7 bajtówparam($n)
albofunction f($n)
.["1","2","3"]
niepoprawne dane wejściowe, ale tak"123"
jest. jeśli @VedantKandoi ma z tym problem, zdecydowanie mogę to zmienić!