Podano dane wejściowe jako liczbę całkowitą bez znaku:
13457
Twoja funkcja / podprogram powinien zwrócić:
75431
Ponieważ jest to konkurs popularności, bądź kreatywny. Kreatywne rozwiązania wykorzystują nietypowe lub sprytne techniki do wykonania danego zadania.
Ograniczenia:
- Nie możesz używać tablic.
- Nie możesz używać łańcuchów.
- Bez zastąpienia RTL (
‮
)
Punkty Brownie za korzystanie z kreatywnej arytmetyki.
Ponieważ jest to konkurs popularności, sugeruję, aby nie używać %
operatora modulo ( ) w kodzie.
O wiodących zerach:
Jeśli dane wejściowe to:
12340
Następnie dane wyjściowe:
4321
byłby do przyjęcia.
popularity-contest
duci9y
źródło
źródło
1230
jest wejście? Czy wolno nam produkować321
? (W przeciwnym razie konieczne są ciągi znaków).Odpowiedzi:
Mathematica, bez modulo!
Rozbijmy to.
Najpierw używamy „kreatywnej arytmetyki”, aby dowiedzieć się, ile cyfr jest w liczbie:
length = Ceiling[Log[10, n]];
Następnie rasteryzujemy liczbę do ładnego dużego obrazu:
Teraz pytamy o ramkę graniczną tego obrazu i wypełniamy szerokość i wysokość (faktycznie używając przesunięcia linii bazowej zamiast wysokości obrazu, ponieważ MM dodaje trochę białych znaków poniżej linii bazowej na obrazie).
Następnie NestList rekurencyjnie odejmuje szerokość obrazu podzieloną przez długość łańcucha, aby umożliwić ImageTake wyrywanie znaków z końca obrazu jeden po drugim, a te są ponownie składane przez ImageAssemble do tego obrazu:
Następnie przekazujemy to do funkcji TextRecognize do optycznego rozpoznawania znaków, która przy tym rozmiarze obrazu i jakości rasteryzacji jest w stanie bezbłędnie rozpoznać ostateczny wynik i podać nam liczbę całkowitą:
Logarytmy i OCR - To jak czekolada i masło orzechowe!
Nowe i ulepszone
Ta wersja wypisuje liczbę, aby poradzić sobie z upartym zachowaniem TextRecognize z małymi liczbami, a następnie odejmuje pad na końcu. Działa to nawet w przypadku liczb jednocyfrowych!
Jednak dlaczego miałbyś wykonywać odwrotną procedurę dla jednego numeru, to dla mnie tajemnica. Ale tylko ze względu na kompletność, nawet sprawiłem, że działał on dla danych wejściowych równych zero i jeden, co normalnie by się zepsuło, ponieważ log logiczny nie zwraca dla nich 1.
źródło
TextRegognize
nie działa dla małych liczb. I masz literówkęheight = b[[3]];
. Proszę również sprawdzić moją odpowiedź! :)TextRecognize
jest to, że zwraca ciąg znaków, co jest niedozwolone, a także trzeba go przekonwertować z powrotem na liczbę.Perl / LuaTeX / Tesseract
Poniższy skrypt Perla odczytuje liczbę jako argument wiersza poleceń, np .:
1234567890
Poniższy skrypt Perla drukuje liczbę za pośrednictwem LuaTeX. Wirtualna czcionka jest tworzona w locie, która odzwierciedla cyfry w poziomie.
Następnie cała liczba jest ponownie dublowana poziomo:
Ostateczny obraz jest ponownie czytany za pomocą OCR (tesseract):
0987654321
źródło
Brainfuck
Zasadniczo jest to tylko program odwracający dane wejściowe.
UPD: Jak zauważył Sylwester w komentarzach, w klasycznych interpretatorach / kompilatorach Brainfuck (bez możliwości przejścia w lewo od punktu zerowego w tablicy pamięci) ten program nie działałby przy braku „>” na początku, więc im bardziej stabilny wersja jest:
źródło
>
na początku utworzenia komórki zerowej przed danymi nie będzie to działać w wielu interpretatorach / kompilatorach.[.<]
z tego powodu nie ma komórki zerowej i nie powiedzie się. Błąd zbf -n rev1.bf
jestError: Out of range! Youwanted to '<' below the first cell.
. Jeśli skompilujesz, możeszsegfault
być może.,[.,]
Haskell
Brak tablic, łańcuchów lub modułu.
Wiem też, że nie powinniśmy używać list ani ciągów, ale uwielbiam to, jak krótko to robisz:
źródło
C ++
źródło
?:
Podejrzewam, że ktoś musi być partypooper.
Grzmotnąć
Ograniczenia rozmiaru zależą od twojej powłoki, ale będziesz w porządku z rozsądku.
źródło
declare -i
. Porównajfoo=089
ideclare -i foo=089
(niepoprawna liczba ósemkowa).JavaScript
EDYCJA : Ponieważ istnieje sugestia, aby nie używać
%
operatora, teraz używam małej sztuczki.Wiem, że to nie jest golf golfowy, ale nie ma powodu, aby go przedłużać.
r(13457)
zwroty75431
Co więcej, jest znacznie szybszy niż metoda string (
n.toString().split('').reverse().join('')
):==> Raport JSPerf <==
źródło
~~
zamiastMath.floor
?~~
zamiastMath.floor
(zmiana sugerowana przez @Victor)Pyton
Nie jestem pewien, czy ta implementacja kwalifikuje się do matematyki twórczej
Nie użyto również operatora% jako takiego, choć można argumentować, że divmod robi to samo, ale wtedy należy przeformułować Pytanie :-)
Realizacja
próbny
Jak to działa?
Jest to rekurencyjne rozwiązanie divmod * To rozwiązanie określa najmniej znaczącą cyfrę, a następnie przesuwa ją na koniec numeru. *
Jeszcze inna implementacja w języku Python
Jak to działa?
Jest to rozwiązanie rekurencyjne, które zamienia skrajne cyfry z liczby
Przykładowy bieg
źródło
Wręcz przeciwnie, nadużywanie operatora modulo:
Zauważ, że zawsze odwraca to 5 cyfr, a 32-bitowe liczby całkowite przepełnią się dla wartości wejściowych większych niż 39045.
źródło
DO#
Oto sposób na zrobienie tego bez
%
operatora Modulus ( ) i po prostu prostej arytmetyki.źródło
%
operatora. :) Rozumiem, co masz na myśli, mój tekst był trochę mylący.Grzmotnąć
źródło
do
Bez ciągów, tablic, modułu lub podziału. Zamiast tego dzielenie przez powtarzające się odejmowanie.
źródło
Matematyka
Tworzenie obrazu z liczby, odzwierciedlanie go, dzielenie go na cyfry. Istnieją dwie alternatywy:
Porównaj każdy obraz odbitej cyfry z przygotowanymi wcześniejszymi obrazami, zamień go na odpowiednią cyfrę i utwórz z tego liczbę.
Odbij każdą cyfrę osobno, stwórz nowy obraz i przekaż go do funkcji rozpoznawania obrazu.
Zrobiłem oba
EDYCJA : Dodano dopełnianie trzech zer, ponieważ
TextRecognise
działa poprawnie tylko przy liczbach całkowitych> 999.źródło
Lua
Nie użyto tablic ani łańcuchów. Liczba jest dzielona na cyfry i ponownie składana za pomocą listy argumentów.
źródło
%
! : PPython2
Zakłada, że „liczba całkowita bez znaku” jest 32-bitowa
Po podaniu danych
1230
wyjściowych0321
.źródło
"Since this is a popularity contest, I suggest not using the modulus (%) operator in your code."
Postscriptum
Bez tablic, bez ciągów, bez zmiennych.
To samo bez
mod
(co jest tylko skrótem, więc nie ma dużej różnicy):źródło
DO#
Nie używa żadnych ciągów ani tablic, ale używa
Stack<T>
typu .NET (EDYCJA: pierwotnie używany operator modułu; teraz usunięty)źródło
do
Ponieważ oczywiste rozwiązanie jest reprezentowane w kilku innych językach, równie dobrze można go opublikować w C.
Gra w golfa:
Nie golfowany:
EDYCJA: Właśnie zobaczyłem edycję modułu.
Gra w golfa (bez modułu):
Nie golfowany (bez modułu):
źródło
Jawa
Oto, co wymyśliłem, bez ciągów, bez tablic ... nawet zmiennych (w Java mam na myśli):
EDYCJA Bardziej czytelna wersja
źródło
PowerShell
Szybkie rozwiązanie w PowerShell. Żadne tablice ani ciągi znaków, niejawne lub jawne.
Testowanie:
źródło
python (łatwo zrobić w asemblerze)
Odwraca bity bajtu. Punkty za nie robienie dokładnie tego samego, co wszyscy inni?
przykład
źródło
C ++
WYNIK
Trzy przebiegi próbne
Testuj z zerami
To także odwraca liczby zmiennoprzecinkowe !!!
Jeśli chcesz uruchomić ten kod, uruchom go na swoim komputerze, ponieważ tworzy on plik tymczasowy podczas jego działania i nie jestem pewien, czy kompilatory online utworzyłyby plik tymczasowy na twoim komputerze
źródło
ECMAScript 6
Następnie:
reverse(12345)
wyjścia54321
reverse(3240)
wyjścia423
reverse(6342975)
wyjścia5792436
źródło
Rozszczepienie
Ten program odwraca wejście.
źródło
NAPRZÓD
Myślę, że jest to przeciwieństwo popularnego ... ale używanie Forth jest zawsze kreatywne ...Stwórzmy nowe słowo
Tutaj używa słowa U /, które zwraca resztę i iloraz, reszta jest wysyłana do wyjścia jako liczba w polu o długości 1 znaku, aż dywidenda wyniesie zero. Ciąg nie jest używany, przynajmniej dopóki coś nie zostanie wysłane do wideo. Nie używam operatora modulo, zamiast tego używam dzielenia liczb całkowitych z resztą i ilorazem. Spróbujmy
źródło
Kod maszynowy Turinga
Korzystając ze składni stąd.
Wypróbuj online!
źródło
Pyton
źródło
rev(1230)
daje321
. Myślę, że to naprawdę powinno dać0321
?do
źródło
Partia
Przegapiłem część dotyczącą nieużywania ciągów - no cóż.
źródło
Python 2
źródło