Napisz krótki program dla algorytmu 196 . Algorytm zaczyna się od liczby całkowitej, a następnie dodaje odwrotność do momentu osiągnięcia palindromu.
na przykład
input = 5280
5280 + 0825 = 6105
6105 + 5016 = 11121
11121 + 12111 = 23232
output = 23232
Wkład
liczba całkowita, która nie jest liczbą lyrchrela (tzn. ostatecznie daje palindrom w ramach tego algorytmu, zamiast kontynuować w nieskończoność)
Wydajność
dotarł palindrom.
code-golf
palindrome
Eelvex
źródło
źródło
Odpowiedzi:
APL (22 znaki)
Działa to w Dyalog APL. Oto wyjaśnienie od prawej do lewej:
{ ... }⍞
: Uzyskaj dane wejściowe od użytkownika jako znaki (⍞
) i wprowadź je do naszej funkcji ({ ... }
).⋄
rozdziela instrukcje, więc patrzymy na nie od lewej do prawej):a≡⌽a←⍕(⍎⍵)+⍎⌽⍵ : a
: Oceń (⍎
)⍵
odwrotność (⌽
) odpowiedniego argumentu ( ) i dodaj to do sprawdzonej wersji samego argumentu. Następnie sformatuj wynik (⍕
tj. Podaj jego reprezentację znaków), przypisz (←
) to zmienneja
, a na końcu sprawdź, czya
odwrotność jest równoważnaa
(tj. Czya
palindrom?). Jeśli to prawda, wróća
; Inaczej...∇a
:a
Wróć do naszej funkcji (∇
to ukryte odniesienie).Przykład:
źródło
{⍵=A←⍎⌽⍕⍵:⍵⋄∇A+⍵}⎕
. Zapisujesz szelki, odwrotność i eval.GolfScript, 29 znaków
Wybrany komentarz
Mięsem programu jest
do
oczywiście pętla. Więc po prostu to omówię..`
kopiuje numer i go strituje..-1%
kopiuje tę wersję ciągu i odwraca ją..@
kopiuje wersję odwróconą i przenosi oryginalną wersję nieodwróconą na pierwszy plan.Więc powiedzmy, że numer jest 5280. Na tym etapie, stos jest:
5280 "0825" "0825" "5280"
. Etap jest ustawiony do porównania. (Po porównaniu stos pozostanie5280 "0825"
bez względu na to, co --- przedmioty do porównania zostały usunięte).;
) i zwróć 0 (aby zakończyćdo
pętlę).~
) odwrócony ciąg (aby był liczbą), dodaj (+
) to do pierwotnego numeru i zwróć 1 (aby kontynuowaćdo
pętlę).źródło
Python 2, 55 bajtów
Zgodnie z sugestią JPvdMerwe:
Python 2, 62:
źródło
n
int, możesz skrócić o 6 znaków, sprawdź kod: meta.codegolf.stackexchange.com/q/75/62Rubin - 56 znaków
źródło
Po prostu ćwiczę moje umiejętności Pythona, a nie poważny kandydat.
Pyth, 16 bajtów
Odpowiednik Python 3:
źródło
J 25
2731źródło
CJam,
2221 bajtówCJam powstał po zadaniu tego pytania, więc technicznie jest to nieprawidłowe przesłanie. Ale pytanie uznałem za interesujące, więc oto:
Wyjaśnienie:
Podstawowa logika polega na tym, że w każdej iteracji „do zrobienia” najpierw sprawdza się, czy palindrom został osiągnięty, czy nie. Jeśli nie, dodaj odwrotną liczbę. Prawie, jaki jest algorytm!
Wypróbuj online tutaj
źródło
To jest prawdziwy pretendent, odkąd J istnieje już od dziesięcioleci.
J (16 bajtów)
Jest to czasownik, więc można go przypisać do zmiennej w sesji J i używać w następujący sposób:
Jak to działa:
źródło
Python: 66
źródło
Perl, 40 znaków
źródło
Scala 82
źródło
JAGL Alpha 1.2 - 19, 21 ze standardowym
Nie kłócę się , tylko trochę doświadczenia z moim językiem
Oczekuje liczby od standardowego
Wyjaśnienie
źródło
05AB1E , 7 bajtów (niekonkurujące)
Nie konkuruje , ponieważ język jest późniejszy niż wyzwanie.
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
hello
. Rozgałęzienie zachowa oryginalny ciąg i popycha go do tyłu. To skrót od duplikatu i odwrócenia .Brachylog , 8 bajtów
Wypróbuj online!
Nieco podobny do jednego z pierwszych programów Brachylog, które widziałem i byłem zaintrygowany, z wideo wprowadzającego Brachylog .
źródło
PHP -
5448 znakówTest:
źródło
$str =
kocie rzeczy do przyszłego golfa. O wiele lepszy niż używanieSTDIN
i wciąż lepszy niż$argv[0]
.Bash (64)
Zadzwoń za pomocą: bash <nazwa_pliku> <numer>
źródło
C # -
10399 znakówC # nigdy nie radzi sobie najlepiej w golfie. Elegancki, ale pełny.
źródło
W Q (39 znaków)
Przykładowe użycie:
Edytować:
Do 34 lat, to samo użycie:
źródło
źródło
Galaretka , 9 bajtów (nie konkuruje)
Bardzo prosta odpowiedź, tylko na wyzwanie związane z kodowaniem w języku ezoterycznym.
ṚḌ+µŒḂ¬$¿
Wypróbuj online!
Jeśli ta odpowiedź będzie niejasna lub błędna na jakimkolwiek poziomie, możesz ją wskazać.
Dziękuję Dennisowi za pomoc przy tym pierwszym małym fragmencie kodu.
źródło
Pyton. 85 znaków:
Jeśli nie chcesz danych wyjściowych przy każdej iteracji:
(jeden mniej znaków)
źródło
Windows PowerShell (63)
Nadal nienawidzę tego, że nie ma łatwego sposobu na odwrócenie łańcucha.
źródło
long
co jest największym zintegrowanym typem obsługiwanym przez PowerShell, ale wciąż tracę dwa znaki.Haskell
8987 znakówNieco czytelna wersja:
Wersja do gry w golfa została stworzona przez ręczne wstawianie i zmianę nazw pozostałych funkcji na nazwy pojedynczych znaków.
źródło
until
z Preludium, a także wyodrębniając wzór stosowania operatora binarnego dox
ir x
. Ponadto użyjreadLn
zamiastgetLine
iread
. Rezultat oszczędza 20 znaków:f%x=f x$read.reverse.show$x;main=readLn>>=print.until((==)%)((+)%)
r=(=<<read.reverse.show)
i po prostu użyjr(==)`until`r(+)
. Oprócz tego oszczędzania nie musi to być pełny program, prawidłowe przesłanie może być po prostu nienazwaną funkcją z wcześniejszego okresu. Zmniejsza to do 41 bajtów: Wypróbuj online!befunge, 57 bajtów
chociaż kod jest umieszczony w siatce 4x19, więc można go nazwać 76.
źródło
C ++ TMP (256 znaków)
Tę wersję można nieco skrócić, ale odpowiedź na 256 znaków jest trudna do pominięcia. Oto wersja bez gry w golfa:
źródło
Pyke, 13 bajtów (niekonkurencyjny)
Wypróbuj tutaj!
źródło
Dodaj ++ , 57 bajtów
Wypróbuj online!
Jak to działa
źródło
PowerShell,
6362 bajty-1 bajt dzięki @AdmBorkBork
Skrypt testowy:
źródło
;
pomiędzyparam($m)
ifor
.GNU dc, 46 bajtów
Wymaga GNU dc, wersja min 1.4 (do
R
komendy).Wejścia i wyjścia są jak zwykle na szczycie stosu. Odwrócenie cyfr w dc wymaga zaskakująco dużej ilości kodu (chyba że czegoś mi brakuje, co jest dalekie od niemożliwego). Ma zakres liczbowy, dzięki któremu dobrze się zachowuje w przypadku takich danych wejściowych (które na przykład przepełnią arytmetykę 32-bitową bez znaku):
Wyjaśnienie
źródło
R
komendy. Jednak dobre rozwiązanie!R
było nowe. Czekamy na Twoją metodę!R ,
193109105 bajtów-84 bajty dzięki Giuseppe! -4 pa dzięki JayCe!
Wypróbuj online!
źródło
strsplit(x,"")
jest krótszy niżstrsplit(x,NULL)
iel(L)
krótszy niżL[[1]]
.as.double
jest krótszy niżas.numeric
istrtoi
jest krótszy niż oba; zamiast ustawieniat
po prostu użyj go bezpośrednio wif
wyciągu. jest to również funkcja rekurencyjna, jeśli się nie mylę, więc należy jąf=
podać w ramach przesłania.utf8ToInt
konwersję na cyfry iintToUtf8
konwersję z powrotem. To będzie duża oszczędność bajtów!while
pętlę-
in place ofU
. I also replacedrev
with!
but it does not save any byte...