Dla danej dodatniej liczby całkowitej N napisz pełny program, aby znaleźć minimalną naturalną M, tak że iloczyn cyfr M jest równy N. N jest mniejszy niż 1 000 000 000. Jeśli nie ma M, wydrukuj -1. W każdym przypadku Twój kod nie powinien zająć więcej niż 10 sekund.
Sample Inputs
1
3
15
10
123456789
32
432
1296
Sample Outputs
1
3
35
25
-1
48
689
2899
1
dawanie1
jest ważnym przypadkiem testowym.Odpowiedzi:
Golfscript,
45 4340 znakówZastępuje wersję, która nie grupuje małych liczb pierwszych w potęgi i oszczędza przy tym 8 znaków. Uwaga: 12 = podłoga (9 log 10 / log 5).
Podziękowania: dwie postacie uratowane przez nickowanie lewy z @mellamokb; 3 zapisane z podpowiedzią @Nabb.
źródło
12345
daj mi -1, więc może i powinno to działać,123456789
gdybym mógł czekać wystarczająco długo.JavaScript (
84787674727068)http://jsfiddle.net/D3WgU/7/
Edycja: pożyczony pomysł wejścia / wyjścia z innego rozwiązania i krótsza logika wyjścia.
Edycja 2: Zapisano 2 znaki, usuwając niepotrzebne nawiasy klamrowe w
for
pętli.Edycja 3: Zapisano 2 znaki, przepisując
while
pętlę jakoif
instrukcję za pomocąi++
.Edycja 4: Zapisano 2 znaki, przesuwając się i zmniejszając liczbę operacji
i
.Edycja 5: Konwertuj instrukcję if na format potrójny, oszczędzając 2 dodatkowe znaki.
Edycja 6: Zapisz 2 znaki, przechodząc
i--
do prawdziwej części trójki, usuń++i
.źródło
prompt
.m?m:1
=>m||1
JavaScript,
8872787469684 znaki dłuższe, ale w rzeczywistości skrypt wykonywalny (w przeciwieństwie do funkcji).Edycja: Korzystając z pomysłów z innego JavaScript, mogę sprowadzić to do tego:Wreszcie! 69-znakowe rozwiązanie, używa tylko 1 dla pętli;)Okej, wygoliłem jeden przecinek.
źródło
awk (
6361595857)źródło
Perl
(75)(72)zainspirowany kodem javascript mellamokb; przeznaczony do uruchomienia z parametrem
źródło
GolfScript (
6057)Edytować
Ok, myślę, że ta wersja daje teraz prawidłowe wyjście dla każdego przypadku :-)
Edytuj 2
Ogoliłem 3 znaki na sugestie @ Petera.
źródło
1
dawanie1
jest ważnym przypadkiem testowym, jest to nieprzyjemny przypadek specjalny - jedyna liczba, dla której cyfra1
pojawia się na wyjściu. Obawiam się, że łamie twój kod.[
- jeśli nie masz jej[
na stosie podczas oceny]
, bierze wszystko na stos. I prawdopodobnie możesz zapisać dwie postacie pod koniec, nie zawijając-1
tablicy i nie przesuwając finału$
.Haskell
źródło
(show m)
na$show m
.m<-[1..9^9]
.... w przeciwnym razie jest to nieskończona lista ... więc-1
nigdy nie nastąpi ... popraw mnie, jeśli się mylę.Windows PowerShell, 87
źródło
Perl (68)
To wydaje się jak niesamowite sztuczki, które używa @mellamokb w javascript, aby uniknąć pętli zagnieżdżonych byłoby dobrze przekłada się na Perl ale wychodzi dużo bardziej gadatliwy, ponieważ nie można używać
foreach
pętli stylu dłużej. Szkoda też, że Perl nie uważa, żemap
przydałaby się inna pętlaredo
.źródło
scala 106 znaków:
Test i wywołanie:
Czas reakcji: natychmiast <1s na procesorze 2 Ghz.
źródło
Galaretka ,
181310 bajtówWypróbuj online!
13-bajtowe rozwiązanie:
Wypróbuj online!
Objaśnienie z danymi wejściowymi
N
:18-bajtowe rozwiązanie:
Wypróbuj online!
Ostatni link służy tylko do zastąpienia 0 (domyślna wartość falsey galaretki, ponieważ wszystkie listy mają jeden indeks) wartością -1. Jeśli uznasz 0 za wartość OK falsey, program ma 8 bajtów .
źródło
$ƊƲµ
. (2) Ponieważ ciąg-1
i liczba-1
są identyczne, gdy są wypisywane, użycie liczby pozwala zaoszczędzić 2 bajty. (3)P
jest skrótem od×/
. (4) Nie można wprowadzić danych3125
._¬$
powinien działać’¹¬?
o-
jest jeszcze krótszy.µ
mogłem po prostu korzystać_¬
bez tego,$
który zapisał 2 bajty! Ale potem zdałem sobie sprawę,o-
że mogę po prostuµ
całkowicie pominąć i zaoszczędzić 3 bajty!Rubinowy (100)
źródło
Python 2 , 89 bajtów
Wypróbuj online!
Tylko dlatego, że nie ma jeszcze odpowiedzi w języku Python. Naprawdę bolesne jest brak niejawnej konwersji typu między ciągiem a int.
źródło