Uś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.
~:0`!#|_"0"-+
@.%9-<
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.
~:0`!#|_"0"-+ THE FIRST LINE
~ Gets a character from input - If it is negative, we've reached EOF
:0`! Pushes 0 if the character is positive, 0 otherwise
#|_ Goes to the next line if the value if 0
This also gets the negative value off the stack by using a |
"0"- Subtracts 48 to account for taking in ASCII values
+ Adds this adjusted value to the sum
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 z 9 - (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
@.%9-< THE SECOND LINE
< Redirects the IP onto this line
- Subtracts the sum from an implicit 0, making it negative
%9 Mods the sum by 9
@. Prints the digit and exits
0
? Co z[0, 9]
(tablica lub lista 2 liczb)?