Napisz funkcję (lub równoważny podprogram), aby zaakceptować pojedynczy argument o wartości całkowitej i zwrócić (o podobnym typie) wartość znalezioną przez odwrócenie kolejności 10-cyfrowych cyfr argumentu.
Wróć do czasu, gdy liczba była ciągiem, a następnie odwróć ciąg
pmg
2
Pomysł „najkrótszego algorytmu” jest dość podstępny, zwłaszcza jeśli dopuścisz „dowolny język”. Wymyśl algorytm, a dam ci DSL z odpowiednim operatorem „~” ...
3
Uwaga: każda liczba kończąca się na 0 staje się krótszą liczbą cyfr po odwróceniu ...
powtac
44
Znam algorytm, który w ogóle nie zajmuje czasu , ale działa tylko na liczbach palindromowych;)
schnaader
Znalazłem czas, aby samemu napisać od nowa. Mam nadzieję, że pozostanie to układanka, którą Eltond chciał postawić.
dmckee
Odpowiedzi:
85
HTML 21 7 znaków (1 znak, jeśli jestem bezczelny ...)
Nie najkrótszy, ale najbardziej powszechny i uniwersalny.
Kiril Kirov,
3
y=y*10+x%10....
st0le,
1
BrainFuck nie, choć można to obliczyć. a - (n * int(a/n))Zamiast tego można użyć dowolnego języka, który go nie ma a mod n. Ponadto, jeśli spojrzysz tutaj , operacja modułu jest realizowana inaczej w każdym języku. (Patrz tabela po prawej stronie).
mbomb007
13
Perl 6
+$n.flip
lub:
$n.flip
dla dynamicznie wpisywanego kodu.
Liczby mają metody ciągów ze względu na projekt języka.
To jedyne literały , ale z pewnością można przedstawić inne liczby. W przeciwnym razie zwycięską odpowiedzią byłoby Brainfuck z pustym programem. ;-)
FireFly
8
Niezależna od języka / matematyka
Zainspirowany powyższą odpowiedzią Kirila Kirowa. Zainteresowałem się matematycznymi właściwościami odwracania liczby, więc postanowiłem trochę zbadać.
Okazuje się, że jeśli wykreślisz różnicę n - rev(n)dla liczb naturalnych nw jakiejś podstawie r, otrzymasz takie wzory ( (n - rev(n)) / (r - 1)dla r=10, zawinięte w rkolumny, czerwony oznacza liczbę ujemną):
Ta sekwencja może być wygenerowana jako taka (pseudokod):
for i=1 to r:
output 0
for m=0, 1, …
for k=1 to (r-1):
for d=1 to r^m:
for i=0 to (r-1):
output (r-1) * (r+1)^m * (k - i)
Jeśli przechowujesz te wartości w liście / tablicy, n - arr[n]otrzymasz odwróconą formę n. Teraz, aby „matematycznie golfa” to, chcielibyśmy mieć wyrażenie w formie zamkniętej, które daje nam n-tą wartość w sekwencji, abyśmy mogli mieć wyrażenie w kształcie zamkniętym do rozwiązania całego zadania. Niestety nie udało mi się znaleźć takiego wyrażenia ... ale wygląda na to, że powinno być możliwe. :(
Więc tak, nie tyle golfowy kod, co matematyczna ciekawość, ale jeśli istnieje wyrażenie o zamkniętej formie powyższej sekwencji, może być faktycznie przydatne w prawidłowym składaniu PL golfa.
(+0): Legit man! Chociaż technicznie wcale nie jest to potrzebne .(+0), ponieważ fbyłby bardziej polimorficzny niż wymaga tego problem (dozwolone jest zwracanie wyjścia „podobnie typowanego”). Ogoliłbym te 5 postaci.
Powiedziałbym, że to 10 znaków (naciśnięcia klawiszy), jeśli wpiszesz polecenie bezpośrednio w vimie. Przy okazji, nauczyłem się dzisiaj czegoś nowego w vimie, dzięki :)
„nie” jest niezdefiniowane. Myślę, że chciałeś tam wstawić „x”.
David Rivers
3
123456.to_s.reverse jest jeszcze krótszy.
Steffen Roller
@mmdemirbas - dzięki za naprawienie literówki
cielesny
3
Musi być .to_s.reverse.to_izgodny ze specyfikacją.
histocrat
Liczba zaczynająca się od 0 wydaje się nie działać. 0112.to_s.reverse.to_i => 47
Joel
5
Można przekonwertować liczbę na ciąg, a następnie odwrócić ciąg, a następnie przekonwertować ten ciąg z powrotem na liczbę. Ten rodzaj funkcji jest prawdopodobnie dostępny we wszystkich językach. Jeśli szukasz bardziej matematycznej metody, może to pomóc:
int n = 76543;
int r = 0;
while (n > 0) {
r *= 10;
r += n % 10;
n /= 10;
}
Tak, jedyną różnicą jest to, że Twój kod wygląda jak Python.
Ta metoda przepełnia języki z ograniczoną precyzją. try1111111119
st0le
5
Python 3+
Forma funkcji: 28 znaków
r=lambda i:int(str(i)[::-1])
Forma (pod) programu: 25 znaków
print(input()[::-1])
Uważam, że niektóre inne przykłady Pythona są oszustwem, a przynajmniej tanim, ze względu na użycie zakodowanego wejścia i / lub niezupełne spełnienie wymagań.
To bierze argument na stosie i pozostawia wynik na stosie. Korzystam z opcji „podprogramu” w specyfikacji: jeśli nalegasz na funkcję, to o cztery znaki więcej pozostawiając ją na stosie:
Chyba technicznie to nie zwracają podobnie wpisany „numer” ... mógłby zostać skrócony dalej z rev<<<yournumbernp rev<<<132(dla bash / zsh, choć nie za POSIX)
FireFly
1
Wystarczy rev, pytanie nie mówi, że to musi być funkcja. Możesz porównać revdo wbudowanej funkcji, nawet jeśli nie jest to jedna.
nyuszika7h
jest to nieprawidłowe: „rev” nie jest wbudowanym, ale zewnętrznym wywołaniem programu.
Bastian Bittorf,
67-bajtowa powłoka POSIX: X = 1 $; podczas gdy [$ X! = 0]; do Y = $ ((Y * 10 + X% 10)); X = $ ((X / 10)); gotowe; echo $ Y
To nie jest konkurencja, ponieważ ta funkcja została dodana tylko w wydaniu 10.3 z zeszłego tygodnia, ale dla kompletności pomyślałem, że dodam jedyne (jak sądzę?) Wbudowane do tego zadania.
Możesz wykonać następujące czynności w Javie. Zauważ, że konwertuje to na String i wstecz i nie jest matematycznym rozwiązaniem.
public class test {
public static int reverseInt(int i) {
return Integer.valueOf((new StringBuffer(String.valueOf(i))).reverse().toString());
}
public static void main(String[] args) {
int i = 1234;
System.out.println("reverse("+i+") -> " + reverseInt(i));
}
}
To matematyczne rozwiązanie. Matematyka to nie liczby nie jest arytmetyką. Matematyka zajmuje się również ciągami symboli. A w tym szczególnym przypadku konwersja do i z łańcucha znaków jest po prostu konwersją do i z bazy-10.
R. Martinho Fernandes,
Przez „nie matematyczne rozwiązanie” mam na myśli to, że sami nie zajmujemy się matematyką. Metody wykonują dla nas całą analizę i matematykę. W przeciwieństwie do np. Odpowiedzi Kirila Kirowa.
Victor
Przepełni się ...
st0le
2
Lua
Liczby i ciągi znaków są wymienne, więc jest to banalne
Technicznie to się nie liczy (rs został utworzony wcześniej w tym roku), ale nie widziałem żadnych innych odpowiedzi opartych na wyrażeniach regularnych i pomyślałem, że to było fajne.
Odpowiedzi:
HTML
217 znaków (1 znak, jeśli jestem bezczelny ...)zamień na
n
swój numerźródło
Your search -
- nie pasuje do żadnych dokumentów.data:text/html,&%238238;egnahcxEkcatS olleH
Pyton
int(str(76543)[::-1])
EDYTOWAĆ:
Krótsze rozwiązanie sugerowane przez @gnibbler:
lub, jeśli powyższe nie jest jasne:
źródło
s[::-1]
jest znacznie szybszy niż''.join(reversed(s))
Uniwersalny (język agnostyczny / niezależny )
Jeśli chcesz używać tylko liczb (unikaj konwersji liczby na ciąg) i nie chcesz używać określonej biblioteki (uniwersalnej dla dowolnego języka):
To jest python, ale można to zrobić w dowolnym języku, ponieważ jest to tylko metoda matematyczna.
źródło
mod
się%
, że to ważne Python;)y=y*10+x%10
....a - (n * int(a/n))
Zamiast tego można użyć dowolnego języka, który go nie maa mod n
. Ponadto, jeśli spojrzysz tutaj , operacja modułu jest realizowana inaczej w każdym języku. (Patrz tabela po prawej stronie).Perl 6
lub:
dla dynamicznie wpisywanego kodu.
Liczby mają metody ciągów ze względu na projekt języka.
źródło
J - 6 znaków + zmienna
Gdzie y jest twoją wartością.
źródło
|.&.":
„reverse under do”, co jest dosłownie tłumaczeniem zadania.APL (3)
Stosowanie:
źródło
PHP, 9 znaków
Aby to zrobić krótko, gdzie
N
jest stała:źródło
Befunge (3 znaki)
Kompletny program do uruchomienia:
Gdzie
N
jest twój numer Reguły mówią: „zaakceptuj argument o wartości całkowitej ”; W Befunge możesz wprowadzać tylko liczby całkowite od 0 do 9.źródło
Niezależna od języka / matematyka
Zainspirowany powyższą odpowiedzią Kirila Kirowa. Zainteresowałem się matematycznymi właściwościami odwracania liczby, więc postanowiłem trochę zbadać.
Okazuje się, że jeśli wykreślisz różnicę
n - rev(n)
dla liczb naturalnychn
w jakiejś podstawier
, otrzymasz takie wzory ((n - rev(n)) / (r - 1)
dlar=10
, zawinięte wr
kolumny, czerwony oznacza liczbę ujemną):Ta sekwencja może być wygenerowana jako taka (pseudokod):
Jeśli przechowujesz te wartości w liście / tablicy,
n - arr[n]
otrzymasz odwróconą formęn
. Teraz, aby „matematycznie golfa” to, chcielibyśmy mieć wyrażenie w formie zamkniętej, które daje nam n-tą wartość w sekwencji, abyśmy mogli mieć wyrażenie w kształcie zamkniętym do rozwiązania całego zadania. Niestety nie udało mi się znaleźć takiego wyrażenia ... ale wygląda na to, że powinno być możliwe. :(Więc tak, nie tyle golfowy kod, co matematyczna ciekawość, ale jeśli istnieje wyrażenie o zamkniętej formie powyższej sekwencji, może być faktycznie przydatne w prawidłowym składaniu PL golfa.
źródło
Haskell,
2824 znakiźródło
f=read.reverse.show.(+0)
?(+0)
: Legit man! Chociaż technicznie wcale nie jest to potrzebne.(+0)
, ponieważf
byłby bardziej polimorficzny niż wymaga tego problem (dozwolone jest zwracanie wyjścia „podobnie typowanego”). Ogoliłbym te 5 postaci.Wigor
17 znakówźródło
Scala - 33 znaki
źródło
Rubin (14)
źródło
.to_s.reverse.to_i
zgodny ze specyfikacją.Można przekonwertować liczbę na ciąg, a następnie odwrócić ciąg, a następnie przekonwertować ten ciąg z powrotem na liczbę. Ten rodzaj funkcji jest prawdopodobnie dostępny we wszystkich językach. Jeśli szukasz bardziej matematycznej metody, może to pomóc:
źródło
1111111119
Python 3+
Forma funkcji: 28 znaków
Forma (pod) programu: 25 znaków
Uważam, że niektóre inne przykłady Pythona są oszustwem, a przynajmniej tanim, ze względu na użycie zakodowanego wejścia i / lub niezupełne spełnienie wymagań.
źródło
Golfscript, 5 znaków
To bierze argument na stosie i pozostawia wynik na stosie. Korzystam z opcji „podprogramu” w specyfikacji: jeśli nalegasz na funkcję, to o cztery znaki więcej pozostawiając ją na stosie:
źródło
`-1%~
raczej chcieć niż`-1$~
(i pozwoliłem sobie na edytowanie twojej odpowiedzi, żeby tak powiedzieć).W skryptach powłoki:
Mam nadzieję, że to się przydało :)
źródło
rev<<<yournumber
nprev<<<132
(dla bash / zsh, choć nie za POSIX)rev
, pytanie nie mówi, że to musi być funkcja. Możesz porównaćrev
do wbudowanej funkcji, nawet jeśli nie jest to jedna.Trochę późno, ale
APL, 3
Jeśli nalegasz na funkcję
źródło
Mathematica, 14 bajtów
To nie jest konkurencja, ponieważ ta funkcja została dodana tylko w wydaniu 10.3 z zeszłego tygodnia, ale dla kompletności pomyślałem, że dodam jedyne (jak sądzę?) Wbudowane do tego zadania.
źródło
Możesz wykonać następujące czynności w Javie. Zauważ, że konwertuje to na String i wstecz i nie jest matematycznym rozwiązaniem.
źródło
Lua
Liczby i ciągi znaków są wymienne, więc jest to banalne
źródło
Ten RZECZYWISTO pobiera dane wejściowe, w przeciwieństwie do niektórych pozostałych:
Python btw.
źródło
ActionScript
43 znaki. num jako parametr funkcji:
źródło
Groovy
źródło
Perl, 11 znaków
The
p
Flaga jest potrzebne do tego, aby pracy, zawarte w sumie.Stosowanie:
źródło
p
Flaga jest zawarte w sumieClojure (42 znaki)
Przykładowe użycie:
zwraca 12389
źródło
Common Lisp - 60 znaków
dostaniesz 9724.
źródło
(first(list
?parse-integer
już zwraca numer.K, 3 bajty:
Oceń (
.
) odwrotność (|
) rzutowania na string ($
).Przykład użycia:
źródło
rs , 20 bajtów
Technicznie to się nie liczy (rs został utworzony wcześniej w tym roku), ale nie widziałem żadnych innych odpowiedzi opartych na wyrażeniach regularnych i pomyślałem, że to było fajne.
Demo na żywo.
Wyjaśnienie:
Wstaw znak funta na początku ciągu. Jest to używane jako marker.
Ciągle dodawaj ostatni znak głównego ciągu do obszaru przed znacznikiem, dopóki nie pozostaną żadne znaki.
Usuń znacznik.
źródło
mIRC 4,45 (35 bajtów)
źródło