Odliczanie
Twoim celem w tym golfowym wyzwaniu jest odliczanie, a tymczasem recykling liczb. Pozwól mi wyjaśnić.
Najpierw twoja aplikacja odczytuje liczbę jako argument programu lub za pomocą stdin. Następnie musisz po prostu odliczać w następujący sposób:
10 9 8 7 6
(w kolejności malejącej )
Ale czekaj, jest więcej!
Recykling
Są sytuacje, w których możemy wydrukować każdy numer, ale nie wymieniaj każdego numeru, możemy dokonać recyklingu! Dam szybki przykład:
Input: 110
Output: 11091081071061051041031021010099... etc
Recycled: 10 1
Nadal wymieniamy wszystkie liczby, 110, 109, 108, ale przetworzyliśmy cyfry 0 i 1 .
Inny przykład:
Input: 9900
Output: 9900989989897989698959894... etc
Recycled: 9 98
Golf-wyzwanie
- Przeczytaj liczbę (argument lub standardowe wyjście)
- Wyświetlaj odliczanie w kolejności malejącej , jednocześnie przetwarzając wszystkie możliwe liczby (na standardowe wyjście lub plik)
- Zatrzymaj się, gdy osiągniesz 1 LUB w momencie przetworzenia od 0 do 9 (cokolwiek stanie się najpierw)
Prosty przykład (do osiągnięcia 1):
Input: 15
Output: 15141312110987654321
(Notice the 110 instead of 1110)
Bardziej zaawansowany przykład (wszystkie poddane recyklingowi):
Input: 110
Output: 110910810710610510410310210100998979695949392919089887868584838281807978776757473727170696867665646362616059585756554535251504948474645443424140393837363534332313029282726252423221
Recycled: 10 9 8 7 6 5 4 3 2
(We've recycled all 0-9)
Odpowiedzi:
T-SQL -
291277267217199191166158153145142128117Po podejściu do tego w nowy sposób udało mi się zejść do 145 (142 po kilku drobnych poprawkach), niezbyt odrapanych. Oznacza to, że mogę konkurować o srebro lub brąz. ^^
To nie drukuje listy, wybiera wyniki. Pytanie nigdy nie zawierało szczegółowych informacji na temat wyników, więc powinno być dobrze. To wciąż ma ten sam limit 100 na wejściu, częściowo dlatego, że nadużywam faktu, że co 11 termin poniżej 100 traci znak, a częściowo z powodu domyślnego limitu 100 rekurencji w typowych wyrażeniach tabelowych.
źródło
Python 143
147Wcięcie pierwszego poziomu to spacja, drugi poziom to tabulator.
źródło
p=o=''
znaków: Dodaj do funkcji takie parametry jak opcjonalne parametry; można użyć*
doand
wn and r<1023
a może nawetr<1023*n
;while x-1:
może ogolić przestrzeń jakowhile~-x
. Ponadto może być krótsze użycie zestawu cyfr zamiast maski bitowej do przechowywania, które cyfry zostały użyte.Haskell,
154149147145128 128120119117 bajtówdodanie kontroli recyklingu kosztowało wiele znaków ... westchnienie
grał trochę w golfa, pamiętając, które cyfry nie zostały jeszcze przetworzone i zatrzymując się, gdy lista jest pusta. następnie grałem w golfa nieco bardziej, przechodząc do wyraźnej rekurencji i kilku innych sztuczek.
przykładowe dane wyjściowe:
źródło
Python 2:
119117Oznaczając to jako wiki społeczności, ponieważ jest to bardziej golfowa wersja odpowiedzi Willa .
źródło
d=s,={''}
działad=s,={''}
jest równoważne zd={''}; s,={''}
.s,={''}
używa rozpakowywania sekwencji, funkcji częściej stosowanej w instrukcjach takich jaka, b = (b, a)
, ale można go również użyć do wyodrębnienia jedynego elementu z sekwencji jednoelementowej.len(d)%11*n
, choć wygląda na to , że jest to dyskusyjne przy użyciu pętli exec.set()
niż zestaw z jednym elementem{x}
. Tak więc flornquake inicjuje go elementem wypełniającym i sprawdza, czy ma wszystkie dziesięć cyfr, sprawdzając, czy ma jedenaście elementów. Ponieważ należy zainicjować pusty ciągs
, służy on jako ten element wypełniający, łącząc te inicjalizacje w celu zapisania znaków.len(d)%11*n
byłoby miło. :)Rubin,
145139130 bajtówPodobne podejście do Willa, z tym, że nie używam maski bitowej, ale zestaw tablic nieużywanych cyfr. Wejście odbywa się przez STDIN.
Istnieje alternatywna wersja używająca
while
zamiast,times
ale cokolwiek spróbuję, liczba bajtów jest taka sama:źródło
CJam,
8077655754 znakówPrawdopodobnie wcale nie jest zoptymalizowany, alePo wielu optymalizacjach i debugowaniu tutaj jest bezpośrednia konwersja mojej odpowiedzi ES6 w CJam:Wypróbuj online tutaj . Funkcja przyjmuje numer jako STDIN i generuje odliczanie do recyklingu, zatrzymując się pomiędzy, jeśli recykling jest zakończony.
Spróbuję dalej zagrać w golfa.
Jak to działa:
Podstawową ideą jest to, że dla każdego numeru odliczania C sprawdź, czy pierwsze cyfry H są równe ostatnim cyfrom H wynikowego łańcucha, gdzie H zmienia się z liczby cyfr w C na 0
źródło
JavaScript ES6,
149146 znakówTaki pełny, wiele postaci, wow.
Uruchom go w najnowszej konsoli internetowej Firefox.
Po uruchomieniu tworzy metodę,
C
której możesz użyć podobnieAKTUALIZACJA : Czasami zwykły stary
return
jest krótszy niż zamknięcie funkcji strzałki :)źródło