Użyj dowolnego języka programowania, aby wyświetlić liczby od 1 do 99 (w tym oba) w taki sposób, aby:
- liczby są oddzielone pojedynczym odstępem,
- jeśli liczba jest podzielna przez 3, powinna być w nawiasach,
- jeśli liczba jest podzielna przez 4, powinna być w nawiasach kwadratowych,
- jeśli liczba jest podzielna przez 3 i 4, powinna znajdować się zarówno w nawiasach, jak i nawiasach kwadratowych (z nawiasami kwadratowymi bliższymi liczbie).
Twój program powinien wyświetlać dokładnie:
1 2 (3) [4] 5 (6) 7 [8] (9) 10 11 ([12]) 13 14 (15) [16] 17 (18) 19 [20] (21) 22 23 ([24]) 25 26 (27) [28] 29 (30) 31 [32] (33) 34 35 ([36]) 37 38 (39) [40] 41 (42) 43 [44] (45) 46 47 ([48]) 49 50 (51) [52] 53 (54) 55 [56] (57) 58 59 ([60]) 61 62 (63) [64] 65 (66) 67 [68] (69) 70 71 ([72]) 73 74 (75) [76] 77 (78) 79 [80] (81) 82 83 ([84]) 85 86 (87) [88] 89 (90) 91 [92] (93) 94 95 ([96]) 97 98 (99)
code-golf
kolmogorov-complexity
Monolica
źródło
źródło
Odpowiedzi:
05AB1E , 23 bajty
-1 bajt dzięki Kevin Cruijssen
Wypróbuj online!
źródło
}?ð?
na]ðý
(zamknij pętlę if i pętlę i połącz cały stos spacjami)Å€
Python 2 ,
686560 bajtówWypróbuj online!
źródło
R , 61 bajtów
Wypróbuj online!
źródło
Galaretka ,
2120 bajtówWypróbuj online!
Jak to działa
źródło
D , 110 bajtów
Wypróbuj online!
Przeniesiony z odpowiedzi C ++ @ HatsuPointerKun.
źródło
Węgiel drzewny , 30 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
J ,
5453 bajtów1 bajt mniej dzięki @Jonah
Wypróbuj online!
źródło
stdout
tu robić ... Nigdy wcześniej tego nie widziałem. @FrownyFrog#
. I wprowadził pomocniczy czasownik przestrzennego z()
i[]
:g=. {.@[ , ":@] , {:@[
. uogólnienie!LF
zamiast_
. ten drugi też wydaje się działać.C, C ++,
136133131129128124 bajtów-5 bajtów dzięki Zacharýowi i zainspirowanemu funkcją write () w języku D (patrz Zacharý odpowiedź)
-2 bajty dzięki mriklojn
-12 bajtów dla wersji C dzięki mriklojn
-4 bajty dzięki pułapkowi cat
Optymalizacja specyficzna dla C: 115 bajtów
źródło
inf f()
? Przepraszam za usunięcie moich komentarzy, myślałem, że mam coś krótszego (nie miałem)printf
. Nie mógłbyś wtedy użyć C stdio?int i
zewnętrzną funkcję (w zakresie globalnym), wówczas jej wartość domyślnie wynosi 0, a typ danych domyślnieint
. Powoduje to, że twoja pętla zaczyna się od 0, a aby to naprawić, możesz przenieść przyrost do wyrażenia warunkowego w swojej pętli for, dzięki czemu będzie wyglądać taki;f(){for(;++i<=99;)
")\0"+i%3
zamiasti%3?"":")"
. Myślę też, że musisz dodaći=0
na początku pętli.PowerShell, 60 bajtów
Wyjaśnienie:
$_, "($_)", "[$_]", "([$_])"
[!($_%3)+2*!($_%4)]
Skrypt testowy mniej golfowy:
Wydajność:
źródło
MathGolf ,
41403429 bajtówUWAGA: Ma spację końcową
Tylko moja druga odpowiedź MathGolf ..
-5 bajtów dzięki @JoKing .
Wypróbuj online.
Wyjaśnienie:
źródło
q
można to pominąć i odbywa się to pośrednio w pętlach. Nie wiedziałem też, że jest wbudowany ciąg 2/3/4. Szkoda, że sztuczka obracania nie działa z opakowaną tablicą.Haskell , 77 bajtów
Wypróbuj online!
Zastanawiam się, czy
show[n]
można go jak dotąd skrócić, ale bezskutecznie .źródło
Lua,
161123 bajtówWypróbuj online!
Nie golfowany:
źródło
Python 2 ,
1059788868584 bajtówWypróbuj online!
źródło
C (gcc) , 84 bajtów
Na początku każdego „łańcucha nawiasu” znajduje się bajt zerowy.
Wypróbuj online!
źródło
PowerShell ,
6762 bajtówWypróbuj online!
Zasadniczo FizzBuzz wykorzystujący mnożenie ciągów zmiennych boolowskich (domyślnie rzut na 1 lub 0). Te ciągi są pozostawione w potoku i zebrane w bloku skryptu w cudzysłowie. Ponieważ domyślną
$OutputFieldSeparator
tablicą są spacje, domyślnie daje nam to elementy tablicy rozdzielone spacjami.źródło
C #,
124117123 bajtów-5 bajtów dzięki Kevin Cruijssen
Testuj z:
źródło
x
zamiast tegoi
, więc nie musisz się martwićint
? (Oczywiście nadal musiałbyś to ustawić).i
i fakt, że mogę zainicjować go na 0, kiedy jaInvoke
. Ale czy to nie znaczy, że musiałbym dołączyć deklarację t (Action<int>
) i call (t.Invoke(0)
) do bajtu?x=>{for(x=0;x++<99;)Console.Write((x%3==0?"(":"")+(x%4==0?"[":"")+x+(x%4==0?"]":"")+(x%3==0?")":"")+(x%99==0?"":" "));};
by działało.==0
może być<1
.Czerwony ,
9997 bajtówWypróbuj online!
źródło
Rubin ,
7266 bajtówDzięki @ jonathan-frech i @ conor-obrien za dodatkowe przycinanie.
źródło
a.join b
tablicaa
i ciąg znakówb
są równoważnea*b
PowerShell,
988274676362 bajtówOgromne -31 bajtów dzięki @Veskah -5 bajtów dzięki @ ASCII-only
Wypróbuj online!
Nadal nie jestem pewien, co tu zrobiłem.
źródło
"$a"
nadal będziesz podstawiał wartość. (Uwaga: Pojedyncze cudzysłowy nie zastępują$foo
, tylko podwójne cudzysłowy). Inną sztuczką jest, jeśli zależy tylko na 0 lub 1, więc możesz użyć logiki boolowskiej, aby zapisać bajtperl -E, 60 bajtów
Niektóre bajtów mogą być zapisywane, jeśli możemy użyć nowej linii pomiędzy numerami: w tym przypadku, możemy usunąć
$,=$";
, zmienićmap
się wfor
pętli, natomiast przesunięciesay
w pętli.źródło
/^1$|^(11+?)\1+$/
Perl 6 ,
5148 bajtówWypróbuj online!
źródło
Partia, 145 bajtów
Kod wpada do podprogramu, ale w tym momencie łańcuch został już wydrukowany, więc kod działa nieszkodliwie.
źródło
PHP 103
for(;$i<1e2;$i++)$a.=$i%12==0?"([$i]) ":($i%3==0?"($i) ":($i%4==0?"[$i] ":"$i "));echo substr($a,5,-1);
https://www.ideone.com/SBAuWp
źródło
Czysty , 100 bajtów
Wypróbuj online!
źródło
sfk , 225 bajtów
Wypróbuj online!
źródło
Bash, 61 bajtów
-14 bajtów, dzięki Dennisowi
wyjaśnienie
Całkiem proste:
seq
produkuje 1..99awk
z separatorem rekordów wyjściowych (ORS
) ustawionym na spację, aby wynik był pojedynczą linią.Wypróbuj online!
źródło
JavaScript (Node.js) , 57 bajtów
Wypróbuj online!
Zmieniono na społeczność, ponieważ optymalizacja polega na nim zbyt mocno
źródło
${n%4?n:`[${n}]`}
PHP, 65 bajtów
lub
(wymaga PHP 5.5 lub nowszego)
Uruchom je
-nr
lub wypróbuj online .źródło
Python 2 , 78 bajtów
Wypróbuj online!
Wyobraziłem sobie takie fajne podejście do krojenia,
'([%0d])'
ale nie mogę skrócić wyrażeń.źródło
Java 8,
9291 bajtów-1 bajt dzięki @Dana
i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}
Wypróbuj online!
Alternatywne rozwiązanie, 82 bajty (ze spacją na wyjściu - nie jestem pewien, czy jest to dozwolone):
i->{for(;i++<99;)out.printf((i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)+" ",i);}
Wyjaśnienie:
for(;i++<99;)
- pętla for, która przechodzi od wartościi
(ponownie użytej jako dane wejściowe, przyjmowanej w tym przypadku jako 0) do 99out.printf(<part1>+<part2>,i);
- formatuje ciąg przed natychmiastowym wydrukowaniem go na standardowe wyjście z wartościąi
gdzie
<part1>
jest(i>1?" ":"")
- drukuje spację przed wydrukowaniem liczby, chyba że liczba ta wynosi 1, w którym to przypadku pomija spacjęi
<part2>
jest(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i)
- jeślii
jest podzielne zarówno przez 3, jak i 4,i
ma wokół siebie nawiasy kwadratowe i okrągłe; w przeciwnym razie jeślii
można podzielić przez 3,i
ma nawiasy okrągłe; w przeciwnym razie jeślii
można podzielić przez 4,i
ma nawiasy kwadratowe; jeszcze,i
nie ma nawiasów.źródło
(i>1:" ":"")
i->{for(;i++<99;)out.printf((i>1?" ":"")+(i%12<1?"([%d])":i%3<1?"(%d)":i%4<1?"[%d]":i),i);}
?