Stała Champernowne to liczba konstruowana przez połączenie pierwszych n
liczb z n
tendencją do nieskończoności. Wygląda to mniej więcej tak:
0.123456789101112131415161718192021222324252627282930...
Teraz opiszę ci numer Rien . Można to uznać za minimalizację stałej Champernowne jako liczby całkowitej. Ja odnoszą się do Rien liczby z pierwszymi n
cyframi, Ri ( n ). Oto jak to sformułować:
- Pierwsze
n
liczby naturalne (sekwencja {1,2,3, ...}) są łączone. - Wynik ten jest następnie sortowany według wartości cyfrowej. Tak
1..12
by wyglądało011111223456789
. - Ponieważ Rien liczba nie może mieć zer, ruszamy wszystko
0
jest tak, że są one znaczące, utrzymując liczbę zminimalizowane, co powoduje, powiedzmy101111223456789
. To jest Ri ( n ), w tym przypadku Ri (12).
Oto kilka wyników dla Ri ( n ):
n Ri ( n ) 1 1 2 12 3 123 7 1234567 9 123456789 10 10123456789 15 101111111223344556789 34 10001111111111111222222222222223333333334444555666777888999 42 100001111111111111122222222222222233333333333333444444455556666777788889999 45 100001111111111111122222222222222233333333333333344444444444555556666777788889999 55 10000011111111111111122222222222222223333333333333333444444444444444455555555555566666777778888899999 100 10000000000011111111111111111111222222222222222222223333333333333333333344444444444444444444555555555555555555556666666666666666666677777777777777777778778888888888888888899999999999999 999100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Cel Biorąc pod uwagę liczbę 1 ≤ n
<10000 jako dane wejściowe (przez argumenty, STDIN lub kodowanie na stałe, jeśli twój język nie obsługuje konwencjonalnego wprowadzania), wyjście / powrót Ri ( n
).
To jest golfowy kod , więc wygrywa najkrótszy kod w bajtach. Możesz używać języka, który został stworzony po tym konkursie, o ile nie został on stworzony do odpowiedzi na to wyzwanie. (Oczywiście możesz go użyć, jeśli stanowi ciekawe rozwiązanie, ale zaznacz swoją odpowiedź jako niekonkurującą).
Realizacja referencyjna
Przetestowałem to w IE, więc naprawdę nie powinno być problemu. Jeśli jest problem, istnieje proste rozwiązanie: zdobądź rozsądną przeglądarkę.
function min(n) {
var seq = [];
for(var i = 1; i <= n; i++) seq.push(i);
seq = seq.join("").split("").map(Number);
var to;
if(seq.indexOf(1) >= 0) to = seq.splice(seq.indexOf(1), 1);
seq.sort(function(a, b) {
return a - b;
});
if(to) seq = to.concat(seq);
return seq.join("");
}
t.onchange = t.onkeyup = function() {
h.innerHTML = min(this.value)
}
* {
font-family: Consolas, monospace;
}
input {
border: 2px dotted #aaaaaa;
border-radius: 5px;
margin: 10px;
}
<input id="t" type="number">
<div id="h">
Tabela liderów
Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań dla każdego języka oraz b) jako ogólnej tabeli wyników.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0
to numer Rien .1
przed nimi0
, tak?Odpowiedzi:
Pyth, 8
Tworzy listę,
[1, .. , input]
następnie usuwa wiodącą, łączy i sortuje, a następnie przygotowuje 1.Pakiet testowy
źródło
Perl,
4442413331 bajtówTak, pierwszy post w historii!
Dzięki primo za 2 bajty.
Podobnie jak inni, usunięcie 1 i ręczne przygotowanie go działa.
Wypróbuj online
źródło
print 1,sort"@{[2..<>]}"=~/\d/g
Japt,
1412 bajtówWypróbuj online!
Jak to działa
źródło
Siatkówka , 78 bajtów
Czas pochwalić się niektórymi nowymi funkcjami Retina (wciąż nie jest zbyt konkurencyjny, ale do dziś prawdopodobnie byłby bliższy 300 bajtów).
Wypróbuj online.
Wyjaśnienie
Chociaż można teraz całkiem wygodnie konwertować między dziesiętną i jednostkową, jest to wciąż dość długie, ponieważ muszę konwertować kilka razy tam iz powrotem, ponieważ niektóre operacje są bardziej wykonalne w systemie dziesiętnym niż w jednostkowym i odwrotnie.
Zacznijmy od konwersji danych wejściowych na jednoargumentowy. Działa to poprzez dopasowanie wejścia, a następnie użycie tego,
$*1
który powtarza1
to wiele razy (ta funkcja powtarzania jest nowa od dzisiaj).Następnie generujemy zakres od
1
doN
w unarnym. Wyjaśniłem, dlaczego to działa w mojej odpowiedzi na FizzBuzz .Konwertujemy każdą liczbę z zakresu z powrotem na dziesiętne, abyśmy mogli pracować z cyframi dziesiętnymi. Odbywa się to poprzez dopasowanie każdej z liczb jednostkowych, tak aby każda
1
generowała osobne przechwytywanie. Następnie zamieniamy to liczbą przechwyceń z grupy pierwszej, stosując nową składnię zliczania przechwytywania$#1
.Spowoduje to usunięcie wiodącego
1
oraz wszystkich spacji z łańcucha, więc pozostały nam tylko cyfry (z wyjątkiem jednego1
).Konwertujemy z powrotem na jednoargumentowe i dodajemy
1
do każdej cyfry (aby upewnić się, że parzyste0
jest niepuste). Wstawiamy również spację przed każdą cyfrą, aby zapewnić ich separację.Wielokrotnie dopasowujemy małą liczbę poprzedzoną większą liczbą i zamieniamy je. To jest sortowanie bąbelkowe w Retinie. :)
Aaa i powrót do miejsca po przecinku.
Na koniec wstawiamy jeden
1
z przodu, aby uwzględnić ten, który usunęliśmy wcześniej.źródło
Haskell, 44 bajty
Niestety
sort
jestData.List
, to 17 bajtów!źródło
JavaScript (ES6),
65625452 bajtyZaoszczędzono 3 bajty dzięki edc65
Tworzy ciąg wszystkich liczb od 2 do
x
, a następnie dzieli, sortuje, łączy i dodaje 1 na początku. To może być nadal możliwe do gry w golfa; sugestie mile widziane!źródło
Array(x-1).map((_,y)=>y+2)
?Array(n).fill().map(...
(patrz wskazówki ES6)n=>1+[...[...Array(n-1)].map(_=>++n,n=1).join``].sort().join``
(1 bajt krótszy, to podział).split()
było tak dziwne ...n=>1+[...[...Array(n+1).keys()].slice(2).join``].sort().join``
CJam, 9
Wypróbuj online
Alternatywnie:
źródło
Mathematica, 52 bajty
Ponownie nastąpiło przetwarzanie ciągów ...
źródło
IntegerDigits
wątki nad listami, więc nie trzeba go mapować.APL (17)
Wyjaśnienie:
Test:
źródło
∊
że spłaszczy tablicę i da ci ciąg. Dobrze wiedzieć.Python 2, 60 bajtów
źródło
ClojureScript, 48 bajtów
Tak samo jak wszystkie inne. REPL dostępny tutaj .
źródło
Rubinowy, 48 bajtów
Anonimowa funkcja. Zasadniczo po prostu Rubyfied kilka innych odpowiedzi tutaj ..
źródło
Brachylog ,
7641 bajtówPobiera na wejściu liczbę.
To rozwiązanie działa z kilkoma zmianami, które wprowadziłem we wbudowanym predykacie Findall
f
. OP najwyraźniej jest w porządku, używając języków starszych niż odpowiedź, więc myślę, że to jest w porządku (zmiany, które wprowadziłem, były zamierzone dawno temu, po prostu zmotywowałem się do tego z powodu tego wyzwania).Wyjaśnienie
źródło
Smalltalk, 76 bajtów
Jak zwykle w Smalltalk, koncepcyjnie bardzo zwięzły, ale tekstowo bardzo gadatliwy ...
Dodaj to jako metodę klasową
String
i wywołaj w ten sposób, np. Dla 20,String f: 20
źródło
Narzędzia Bash + GNU, 58
Wypróbuj online.
źródło
Bash,
3534 bajtówOpiera się to na odpowiedziach @DigitalTrauma i @OlivierDulac . Wypróbuj online z Ideone .
Jak to działa
seq 2 $1
wypisuje wszystkie liczby całkowite od 2 do podanych w wierszu poleceń.fold -1
otacza wszystkie linie o szerokości 1, tzn. umieszcza każdy znak na osobnej linii.-1
wydaje się być nieudokumentowaną funkcją.sort
sortuje znaki według ich wartości liczbowej.printf %d 1`...`
wstawia 1 do pierwszego wiersza i wypisuje każdy wiersz jako liczbę całkowitą (%d
), bez separacji.Wykorzystuje to ciekawą implementację printf Basha, która powtarza ciąg formatu w kółko, aż wszystkie argumenty zostaną zużyte.
źródło
JavaScript ES6,
4946 bajtówDzięki edc65 za 2 bajty
źródło
Julia, 33 bajty
Jest to funkcja lambda, która przyjmuje liczbę całkowitą i zwraca ciąg znaków. Aby go wywołać, przypisz go do zmiennej.
Konstruujemy zakres
2:n
, który będzie pusty dlan
<2, łączymy go w ciąg, splatamy ciąg w tablicę znaków, sortujemy je, łączymy w ciąg i poprzedzamy 1.źródło
APL, 21 bajtów
Jest to nienazwana funkcja monadyczna, która akceptuje liczbę całkowitą po prawej stronie i zwraca ciąg znaków. Aby go wywołać, przypisz go do zmiennej.
Wyjaśnienie:
Wypróbuj online
źródło
Python 2, 60 bajtów
Indeksowanie dla wygranej. :-)
Python 2, 60 bajtów
Po prostu alternatywa.
źródło
Droga Mleczna 1.6.4 , 22 bajty (nie konkuruje)
Musiałem dodać kod sortowania dla tego wyzwania.
Wyjaśnienie
źródło
Poważnie, 10 bajtów
Hex Dump:
Wypróbuj online
Wyjaśnienie:
źródło
Narzędzia Bash i GNU,
5852 bajtówźródło
PowerShell,
6159 bajtówPobiera dane wejściowe,
param($a)
a następnie używa ich do indeksowania w tablicy za pomocą[$a-eq1]
. Jeśli true, indeksujemy drugi element i dane wyjściowe1
. W przeciwnym razie łączymy się"1"
zjoin
tablicą ed utworzoną przez 1) definiując nowy zakres2..$a
, który sam zostałjoin
edytowany razem, 2) rzutując go jako tablicę char, i 3) wysyłając go przezSort-Object
cmdlet, z których wszystkie są następnie wyprowadzane.Edycja 1 - Zapisano 2 bajty, przesuwając
-join
operator wewnętrzny .źródło
Gogh ,
97 bajtówMożesz uruchomić to za pomocą:
źródło
Galaretka , 8 bajtów
Wypróbuj online!
Jak to działa
źródło
Oracle SQL 11.2,
222211 bajtówNie grał w golfa
źródło
MATL , 17 bajtów
Używa bieżącej wersji (7.0.0) języka / kompilatora.
Zainspirowany odpowiedzią FryTheEgggman .
EDYCJA (29 lipca 2016 r.): Możesz wypróbować online z pewnymi modyfikacjami, aby dostosować się do zmian w języku.
Przykład
Wyjaśnienie
źródło
05AB1E , 6 bajtów
Uwaga: w tym zgłoszeniu wykorzystano funkcje, które datują to wyzwanie i dlatego nie są konkurencyjne
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie ISO 8859-1
źródło
Mathcad, 86 „bajtów”
Funkcja s (n) używa pętli for do budowania „liczby całkowitej” Champernowne poprzez konwersję każdej liczby do postaci łańcucha i łączenie ich razem. Łańcuch jest następnie konwertowany na równoważny wektor kodów ASCII i sortowany. Następnie funkcja zamienia wszystkie zera wiodące na pierwsze, ostatecznie przekształcając wektor z powrotem na ciąg.
Aby sprawdzić funkcję, umieściłem przypadki testowe w wektorze vn, a następnie zastosowałem s do vn za pomocą operatora wektoryzacji. Następnie porównuję wyniki z podanymi wartościami przypadków testowych.
Mathcad to aplikacja matematyczna oparta na arkuszach 2D składających się z „regionów”, z których każdy może być tekstem, wyrażeniem matematycznym, programem, fabułą lub komponentem skryptowym.
Instrukcja matematyczna lub programowa jest wybierana z paska narzędzi palety lub wprowadzana za pomocą skrótu klawiaturowego. Do celów gry w golfa przyjmuje się, że operacja („bajt”) to liczba operacji na klawiaturze niezbędnych do utworzenia nazwy lub wyrażenia (na przykład, aby ustawić zmienną a na 3, napisalibyśmy a: = 3. Operator definicji . 1 bajt.
źródło