Wyzwanie
Biorąc pod uwagę liczbę całkowitą podzielną przez 9 i jedną brakującą cyfrę, znajdź brakującą cyfrę.
Brakująca cyfra może być reprezentowana przez dowolny znak inny niż cyfry 0–9, o ile jest spójny.
Jeśli brakująca cyfra może wynosić 0 lub 9, wypisz coś, co to oznacza.
Załóżmy, że użytkownik jest wystarczająco inteligentny, aby wstawić tylko jedną brakującą cyfrę i jedną liczbę itp.
Przypadki testowe
W przypadkach testowych brakująca cyfra jest reprezentowana przez znak zapytania
123? -> 3
?999 -> 0 or 9
?0023 -> 4
000?1 -> 8
code-golf
math
arithmetic
NK1406
źródło
źródło
0
? Co z[0, 9]
(tablica lub lista 2 liczb)??
możliwy wkład?Odpowiedzi:
Python , 21 bajtów
Wypróbuj online!
Kiedyś
I
reprezentowałem brakującą cyfrę.źródło
Alice , 12 bajtów
Wypróbuj online!
Wyprowadzane,
0
jeśli wynikiem może być 0 lub 9.Wyjaśnienie
źródło
&
Mogą być usunięte, ponieważ tryb Cardinal interpretuje pierwotnego wejście co najwyżej 2 całkowitymi.JavaScript (ES6), 40 bajtów
Wyjścia 9, jeśli może to być 0 lub 9.
źródło
f=
; funkcje anonimowe są całkowicie poprawne.Japt, 7 bajtów
Wypróbowałem kilka rozwiązań, ale najkrótszy był podobny do większości innych, z tym, że nie musimy wymieniać
?
na początku.Może przyjąć dowolny znak nienumeryczny jako brakującą cyfrę. Dane wyjściowe,
0
gdy rozwiązaniem może być to lub9
.Spróbuj
Wyjaśnienie
Domniemane wprowadzanie ciągu
U
.¬
dzieli na tablicę pojedynczych znaków,x
zmniejsza tablicę, dodając ignorując elementy nienumeryczne,*J
mnoży każdy element przez -1 iu9
otrzymuje dodatni moduł wyniku.źródło
JavaScript (ES6), 18 bajtów
Oczekuje
+
brakującej cyfry. Zwraca9
za 0 lub 9 .Przypadki testowe
Pokaż fragment kodu
źródło
05AB1E ,
76 bajtówDane wyjściowe
0
oznaczają, że wynik może wynosić 0 lub 9 .Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
Python 2 ,
444135 bajtów-6 bajtów dzięki RiaD
Wypróbuj online!
Użytkownicy
]
za brakującą cyfrę.Wyprowadzane,
0
jeśli brakująca cyfra może wynosić 0 lub 9.źródło
0
dla niejednoznacznej sprawy, co ma sens, ponieważ9%9 == 0
Pyth,
97 bajtówUżywa spacji jako separatora i zwraca 0, jeśli wynikiem może być 0 lub 9.
Wypróbuj online
Wyjaśnienie
źródło
Prolog (SWI) , 59 bajtów
Wypróbuj online!
Yay dla programowania logicznego!
Wyjaśnienie
Najpierw tworzymy predykat
*
, który zachowuje się po zastosowaniu do zera i pustej listy. Nasz predykat zachowuje się również, gdy na początku listy znajduje się między 0 a 9, a gdy dodamy wiodącą cyfrę mod 9, predykat zachowuje.Następnie definiujemy,
+
aby być po prostu tym predykatem0
jako pierwszym argumentem. To znaczy, że chcemy, aby suma cyfrowa była wielokrotnością 9.Prolog wykonuje całą tę cholerną robotę, znajdując dla nas rozwiązania.
źródło
Befunge-93 , 16 bajtów
Wypróbuj online!
Wersja jedna linia Jamesa Holderness' befunge odpowiedź , że udaje się golić dwa bajty. To zasadniczo kompresuje kod do jednej linii, odwraca kierunek i wykorzystuje fakt, że Befunge nie przeskakuje na końcu linii. Zasugerował, żebym zamieścił osobną odpowiedź z wyjaśnieniem. Kod przyjmuje * jako symbol brakującej cyfry i zwraca 9 dla 0 lub 9.
Jak to działa
*
(Wartość ASCII 42) została wybrana jako brakujący znak, ponieważ przeciwdziała początkowej wartości cyfry, 3.źródło
LaTeX, wiele bajtów (
1000628614)LaTeX, nieczytelny (
348334 bajty)LaTeX, 132 bajty
W tym kodzie dozwolone jest tylko miejsce jako nieznana cyfra.
źródło
J ,
1412 bajtów-2 bajty dzięki @BolceBussiere
Szczerze mówiąc, nie wiem, dlaczego
"."0
interpretuje?
jako 0, ale dzieje się tak w moim tłumaczu i TIO, więc nie zamierzam tego kwestionować. (Aktualizacja: zobacz komentarze wyjaśniające dlaczego).To podejście po prostu pobiera sumę cyfr, neguje je, odejmując od 9, i przyjmuje modulo 9.
Wypróbuj online!
źródło
Galaretka ,
1196 bajtówWyjaśnienie
Wyjście 0 oznacza, że wynikiem może być 0 lub 9.
Wypróbuj online!
Zaoszczędzono 2 bajty dzięki Mr. Xcoder . Podczas korzystania z funkcji Each quick (
€
) podczas oceny dzielenie liczby na cyfry było zbędne.Zaoszczędzono 3 bajty dzięki Dennisowi . Może bitowo LUB wprowadzić wartość 0 zamiast ręcznie parsować dane wejściowe jako liczbę, usuwając jednocześnie zera i cyfry.
źródło
|0
działa zamiastfØDV€
.Szybki , 51 bajtów
Wypróbuj online!
źródło
Befunge-93 (PyFunge) ,
2221 bajtówUświadomiłem sobie, że nie muszę używać
?
do reprezentowania nieobecnej cyfry, więc użyłem cyfry, która jest wielokrotnością 9 po odjęciu 48:x
Pozwoliło mi to grać w golfa
3+
, ale zaoszczędziło mi to tylko 1 bajt ze względu na długość pierwsza linia przed warunkowym :(Port mojego befunge-98 odpowiedzi:
5 więcej bajtów w celu sprawdzenia, czy dotarliśmy EOF,
1 bajt bardziej naciskać 48 (
"0"
vs'0
),1 bajt więcej, aby wydrukować odpowiedź z
.@
,i 1 bajt, ponieważ drugi linia ma miejsce
na 8 dodatkowych bajtów.
Wypróbuj online!
Wyprowadzane,
0
jeśli brakująca cyfra może wynosić 0 lub 9.Działa to tylko w interpretatorze PyFunge z powodów wyjaśnionych poniżej.
Wyjaśnienie
Znaczna część tego wyjaśnienia została skopiowana z mojego wyjaśnienia Befunge-98 , ponieważ ten program jest bardzo podobny do tego. bezwstydna wtyczka
W pierwszym wierszu programu sumujemy cyfry, w tym x, który jest traktowany jak 72 z powodu jego wartości ASCII. Jednak suma będzie taka sama, kiedy zmienimy na 9, więc nie ma to znaczenia.
Gdybyśmy tylko zmienili na 9, zostalibyśmy z niewłaściwą cyfrą, ponieważ chcemy
9 - (sum % 9)
. Możemy jednak zrobić coś lepszego niż9\-
, co odejmowałoby resztę od 9: jeśli zrobimy sumę ujemną przed modowaniem o 9, otrzymamy pozytywny wynik, równoważny z9 - (sum % 9)
niektórymi tłumaczami. To wymaga od nas korzystania z interpreterów PyFunge zarówno dla Befunge 93, jak i 98, ponieważ jest to jedyny w TIO, który to robi. Pozostałe dają nam wartość od -8 do 8 zamiast od 0 do 8źródło
Befunge-98 (PyFunge) ,
1513 bajtówUświadomiłem sobie, że nie muszę używać
?
do reprezentowania nieobecnej cyfry, więc użyłem jednej, która jest wielokrotnością 9 po odjęciu 48:x
To pozwoli mi grać w golfa
3+
.Wypróbuj online!
Używa
x
jako brakującej cyfry, ponieważ jego wartość ASCII jest podzielna przez 9 po odjęciu 48 (i to dobrze, ponieważ jest powszechnie używana jako zmienna w matematyce).Wyjścia przez kod wyjścia (bo
q
jest jeden bajt krótszy niż.@
)Wyjścia
0
, jeśli brakuje cyfra może być 0 lub 9.Działa to tylko w interpretatorze PyFunge z powodów wyjaśnionych poniżej.
Wyjaśnienie
W pierwszym wierszu programu sumujemy cyfry, w tym cyfrę
x
, która jest traktowana jak 72 ze względu na jej wartość ASCII. Jednak suma będzie taka sama, kiedy zmienimy na 9, więc nie ma to znaczenia.Gdybyśmy tylko zmienili na 9, zostalibyśmy z niewłaściwą cyfrą, ponieważ chcemy
9 - (sum % 9)
. Możemy jednak zrobić coś lepszego niż9\-
, co odejmowałoby resztę od 9: jeśli zrobimy sumę ujemną przed modowaniem o 9, otrzymamy pozytywny wynik, równoważny z9 - (sum % 9)
niektórymi tłumaczami . To wymaga od nas korzystania z interpreterów PyFunge zarówno dla Befunge 93, jak i 98, ponieważ jest to jedyny w TIO, który to robi. Pozostałe dają nam wartość od -8 do 8 zamiast od 0 do 8.źródło
Ruby , 22 bajty
Używa
'
(0
zrobi to każdy znak, który ma odległość do tego, który można podzielić przez „0”, włączając0
siebie).Wyjście
0
oznacza albo0
albo9
.Wypróbuj online!
Wyjaśnienie
źródło
Ruby ,
46, 41 bajtów-5 dzięki @Unihedron
Wypróbuj online!
źródło
chars
zamiast.split(//)
, 2.'<'
można zastąpić przez?<
chars
Befunge-93,
28271918 bajtówKredyt musi zostać przekazany Mistah Figgins , której odpowiedź PyFunge pokazała mi, że nie potrzebujesz specjalnego czeku na brakującą cyfrę, jeśli upewniłeś się, że wartość ASCII jest wielokrotnością dziewięciu.
Dodatkowe podziękowania dla Jo Kinga, który pokazał, że nie trzeba w pełni konwertować znaków na ich numeryczny odpowiednik, i mógł po prostu odjąć 3, aby uzyskać wartość względną do podstawy 9 (ASCII
0
minus 3 to 45, wielokrotność 9) .Wypróbuj online!
Aby to zadziałało, należy użyć znaku
*
dla brakującej cyfry (są też inne, które mogą również działać, ale to jest najładniejsze).Wyprowadzane,
9
jeśli brakująca cyfra może wynosić 0 lub 9.Wyjaśnienie
Zasadniczo obliczamy sumę wszystkich cyfr plus 45 na cyfrę (która zostanie ostatecznie anulowana, gdy zmienimy na 9). Suma ta jest odejmowana od 3 (nasza początkowa suma), a dodatkowe 39 jest odejmowane przez brakującą cyfrę (ASCII
*
minus trzy). Ponownie, 3 minus 39 to wielokrotność 9, więc jest anulowane, gdy modyfikujemy za pomocą 9.Na koniec obliczamy sumę ujemną wszystkich cyfr, mod 9 plus 9, tj
A to daje nam brakującą cyfrę.
źródło
Befunge-98 (PyFunge) , 8 bajtów
Wypróbuj online!
Dane wyjściowe za pośrednictwem kodu wyjścia. Podobnie jak w przypadku odpowiedzi Mistah Figgin , działa tylko z Pyfunge, gdzie mod liczby ujemnej mod 9 staje się dodatni. Używa x jako brakującej cyfry.
źródło
PowerShell , 40 bajtów
Wypróbuj online! lub Zweryfikuj wszystkie przypadki testowe
Pobiera dane wejściowe jak
'123x'
w$a
. Konstruuje zakres0
do9
i korzysta zWhere-Object
(tutaj w skrócie|?
), aby wyciągnąć te liczby całkowite, które pasują do klauzuli. Klauzula przyjmuje$a
, wykonuje wyrażenie regularne w-replace
celu zastąpieniax
bieżącej cyfry$_
i otrzymuje mod 9 z%9
. Zatem jeśli 9 równomiernie podzieli, będzie to zero. Bierzemy wartość logiczną, której nie zera, która zmienia zera w prawdziwe, a wszystko inne falsey, co spełnia klauzulę Where-Object. Te wyniki są pozostawione w potoku, a dane wyjściowe są niejawne.źródło
Haskell , 35 bajtów
Wypróbuj online!
źródło
Siatkówka ,
353425 bajtówJeśli to
?
możliwe0 or 9
, wynik jest wyświetlany jako9
.Wypróbuj online
Wyjaśnienie
źródło
\d
można zmienić na sprawiedliwy,.
a następujący wiersz na$*
.?
kiedy to napisałem.Perl 5 , 23 bajtów
Wypróbuj online!
Nie obchodzi, jaki znak oznacza brakującą cyfrę, o ile nie jest to cyfra.
źródło
Tcl, 53 bajty
Podobnie jak w przypadku innych odpowiedzi, jest to krótsze, ponieważ nie mówi się wprost „0 lub 9”.
Zamiast tego wynik „9” oznacza albo 0, albo 9.
Wypróbuj online!
Wyjaśnienie
Działa to po prostu. Wykorzystuje wyrażenie regularne do:
znak (znaki)inny niż cyfrowyNastępnie ocenia 9 - (sum_of_digits mod 9), aby dojść do końcowej wartości w 1..9, którą następnie
puts
.Początkowe 0 (in
0$argv
) jest wymagane na wypadek, gdyby znak zapytania pojawił się jako pierwszy na wejściu; wiodący znak plus w sekwencji transformowanej nie stanowi problemuexpr
.źródło
Pyth , 8 bajtów
Wypróbuj online!
Używa
I
zamiast?
.źródło
APL (Dyalog) , 13 bajtów
Wypróbuj online!
Brakująca cyfra to
⍬
.źródło
pieprzenie mózgu , 50 bajtów
Wypróbuj online!
Drukuje 9 dla 0 lub 9. Brakujący znak jest reprezentowany przez:
Jak to działa
Brakująca postać musi być postacią, która ma mod 9 na 4, +3, ponieważ odejmujemy 3 od normalnych cyfr i +1 dla inicjalizacji sumy jako 1.
Na marginesie, kod jest bardzo nieefektywny ze względu na grę w golfa, ponieważ każda cyfra zresetuje łącznie 5 razy, zamiast tylko raz, jeśli odejmę 48 zamiast 3.
źródło
> <> ,
3533252115 bajtówDane wyjściowe
0
oznaczają, że wynik może wynosić 0 lub 9 .Wypróbuj online!
Zaoszczędzono 6 bajtów dzięki Jo Kingowi ,
'
reprezentując brakujące cyfry.źródło
'
znaku zamiast?
Java 8,
3634 bajtówZwraca
9
gdy oba0
i9
są ważne.Wyjaśnienie:
Wypróbuj online.
źródło