Uznałem, że „łuk” jest najlepszym sposobem na opisanie tego wzoru liczb:
1234567887654321
1234567 7654321
123456 654321
12345 54321
1234 4321
123 321
12 21
1 1
Formalnie zdefiniowany, każdy wiersz składa się z liczb od 1 do 9-n
, (n-1)*2
spacji i liczb 9-n
do 1 (gdzie n
jest bieżąca linia).
Twoim zadaniem jest napisanie, używając możliwie najkrótszego kodu, małego skryptu / programu, który drukuje powyższy wzór z zastrzeżeniem następujących ograniczeń:
- Nie możesz zakodować całego wzoru na stałe. Możesz zakodować maksymalnie tylko jedną linię wzoru.
- Twój program musi wydrukować nowy wiersz (dowolną kombinację
\n
lub\r
) na końcu każdej linii.
Gotowi do startu start!
code-golf
ascii-art
number
kolmogorov-complexity
Nathan Osman
źródło
źródło
123456787654321
ponieważ jest równa11111111^2
;-)11111111^2 == 123465787654321 != 1234567887654321
(zauważ powtórzenie8
)Odpowiedzi:
Python 2,
65555351Skrócono przy użyciu niektórych pomysłów ugorena .
źródło
s=s[1:]
na pętlę iwhile s:
GolfScript (25 znaków)
źródło
APL (18)
Wyjaśnienie:
1↓⎕D
: ciąg cyfr („0123456789”) minus pierwszy element↑∘(1↓⎕D)¨⌽⍳8
: wybierz pierwsze [8..1] znaków („12345678”, „1234567” ...)↑
: formatuj jako macierz (wypełniając nieużywane znaki spacjami)k,⌽k←
: zapiszk
i wyświetl,k
a następnie wykonaj odbicie lustrzane w pioniek
źródło
Rubin:
6150 znakówPrzykładowy przebieg:
źródło
Befunge - 3 x 18 = 54
Czułem, że muszę coś zrobić z befunge, minęło już dużo czasu, odkąd go ostatnio używałem. Ten problem wydawał się najbardziej odpowiedni dla języka.
Jest strasznie powolny ze względu na pętlę drukowania, która wykonuje około 8 akcji na znak (style liczenia różnią się).
źródło
JavaScript, 71
źródło
s="1234567887654321";for(i=10;--i;)console.log(s=s.split(i).join(" "))
na 70 znaków, @SteveWorleyC, 83 znaki
źródło
Python 2,
7562Nie przebije odpowiedzi Volatility, ale oto inne podejście z użyciem zmiennych ciągów Pythona (
bytearray
):Edytować
Znalazłem krótszą wersję, używając
str.replace
:źródło
Perl, 41
plus
-E
przełącznik. Całkowita liczba znaków w wierszu poleceń: 50wymaga co najmniej perl5, wersja 10.
źródło
-E
jest jednobajtowym dodatkiem do programu.Mathematica
92 85 67 5451Metoda nr 1 : (54 znaki) Tworzy tablicę za pomocą wiersza #, col # i odległości od lewej-prawej krawędzi.
Metoda nr 2 : (67 znaków) Pad coraz krótszych zakresów.
Metoda nr 3 : (85 znaków) Selektywnie wypełnij każdy wiersz tablicy.
Zacznij od listy 8 znaków spacji. Zamień pozycje 1 i 16 na „1”; wymienić „2” w pozycjach 2 i 15 itd.
Metoda nr 4 : (86 znaków) Selektywnie opróżnij każdy wiersz tablicy.
Metoda nr 5 : Używanie ciągów znaków (92 znaki)
źródło
()
i wymienić#1
z#
:Grid@Array[If[#2<9,#2,17-#2]/.x_/;x+#>9:>" "&,{8,16}]
Array
czasami można tworzyć fajne stoły bez konieczności dodawania iteratorów.PHP, 68
(Zainspirowany odpowiedzią HamZy)
for($n=8;$n;$r[]=$n--)echo str_replace($r," ","1234567887654321\n");
Okazuje się, że str_replace PHP może zaakceptować tablicę do wyszukiwania i ciąg znaków do zamiany, to zastąpi każdy element w tablicy danym ciągiem. Po każdej iteracji bieżący numer jest dodawany do tablicy wyszukiwania, usuwając go z następnej pętli.
Przykład kodu w akcji: http://ideone.com/9wVr0X
źródło
<pre>
znaczniki. Interpretowane jako tekst HTML spacje są zwinięte, a znaki nowej linii są ignorowane, ale jeśli zaznaczysz źródło, zobaczysz inaczej.Cudowny 165
Pseudo kod:
źródło
Python 2.x -
73656361 znakówźródło
PHP, 76
źródło
K, 28
.
Możesz uogólnić na 36:
{-1_a,'|:'a:(#*m)$'m:{-1_x}\,/$1+!x}
źródło
JavaScript, 67 znaków
Zainspirowany odpowiedzią Steveworleya (skomentowałbym, gdybym mógł):
Fragment kodu
Obecność ostatniego nowego wiersza jest zgodna z zasadami.
aktualizacja: wytnij 2 znaki usuwając nawiasy (pierwszeństwo operatora) i 1 usuwając niepotrzebne miejsce
Wyglądało na to, że mnie trolluje, ponieważ bez względu na to, ile różnych sposobów starałem się skrócić lub uprościć, odkodowawszy fragment kodu, długość pozostała taka sama, dopóki nie pozwoliłem na zastosowanie poniższej reguły „Myślę, że to się liczy”.
(Jeśli drukowanie liczy się jako to, co powraca, gdy jest wykonywane w konsoli chrome)
źródło
Brainfuck: 542 bajtów
źródło
Mathematica , 59
61 wykorzystując własne pomysły:
Lub 59, zapożyczając z odpowiedzi Dawida:
źródło
R: 52
źródło
Haskell, 84
Punktem wyjścia dla kogoś do poprawy:
Najprawdopodobniej częścią byłoby
l++reverse l
uwolnienie punktu, pozwalając nam pozbyć się tego stwierdzenialet
, ale mogę znaleźćap
, że wymaga importu.źródło
PostScript: 105 znaków
Obsługa ciągów znaków nie jest łatwa w PS, ale może być stosunkowo prostym kodem:
Nieco dłuższa wersja ze 120 znakami, ale może generować różne łuki liczbowe, zastępując 8 na początku drugiej linii dowolną liczbą z zakresu od 1 do 9:
źródło
GoRuby 2.1
36 znaków
Nie golfił
źródło
K 20
źródło
TSQL, 148
Edycja: do 148 z sugestią manatwork i dostosowanie do ORDER BY.
Czytelny:
Gra w golfa:
Wydajność:
źródło
1
zamiast ciągu znaków w'1'
miejscu, w którym je od razucast
umieszczaszvarchar
. To daje mi 149 znaków:with t as(select 1n,cast(1as varchar(max))o union all select n+1,o+char(n+49)from t where n<8)select o+space(16-2*n)+reverse(o)from t order by o desc
.Haskell, 79
Działa to poprzez zamianę znaków> n na, przy
' '
czym znaki n pochodzą z „87654321” (który okazuje się być ogonem ciągu, na którym należy wykonać podstawienie).źródło
PHP: 61 znaków (lub 60 znaków, jeśli zastąpisz \ n prawdziwą nową linią ASCII)
(Zainspirowany odpowiedzią GigaWatta i HamZy)
http://ideone.com/FV1NXu
źródło
PowerShell: 38
Kod do gry w golfa
Przewodnik
8..1|%{
...}
potokuj liczby całkowite od 8 do 1 w pętli ForEach-Object.-join(
...)
łączy wynik zagnieżdżonego kodu w jednym ciągu bez separatorów.1..$_
wyprowadza w pętli liczby całkowite od 1 do bieżącej liczby całkowitej.+" "*(8-$_)
dodaje do wyjścia podwójną spację pomnożoną przez różnicę między 8 a bieżącą liczbą całkowitą.+$_..1
dodaje do wyjścia liczby całkowite, malejące od bieżącej liczby całkowitej do 1.źródło
JavaScript z lambdas, 147
Można to sprawdzić w przeglądarce Firefox.
źródło
CJam, 22 znaki
Niepoprawna odpowiedź (ponieważ język został opracowany po pytaniu) i nie jest najkrótsza, ale oto:
Wypróbuj online tutaj
źródło
Lua, 62
źródło