Wyświetl 12 cyfr na tarczy zegara dokładnie tak:
12
11 1
10 2
9 3
8 4
7 5
6
Aby lepiej zobaczyć siatkę, oto jedna z kropkami:
...........12............
.....11...........1......
.........................
.10...................2..
.........................
.........................
9.......................3
.........................
.........................
..8...................4..
.........................
......7...........5......
............6............
Zauważ, że siatka jest rozciągnięta na szerokość dwa razy, aby wyglądała bardziej kwadratowo.
Należy również pamiętać, że liczby dwucyfrowe są wyrównane z cyframi na miejscu. Cyfra 9 powinna być wyrównana do lewej.
Zwróć lub wydrukuj wynik jako ciąg wielowierszowy (nie listę wierszy). Wszelkie spacje końcowe są opcjonalne. Ostateczna nowa linia jest również opcjonalna.
charCodeAt()
05AB1E ,
393331 bajtówDzięki Magic Octopus Urn za uratowanie 6 bajtów!
Kod
Około 33 bajtów alternatywnych:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
ÿ
z.V
, bardzo oryginalny! I zabawne, jak kiedyś12¤
dostałeś oba12
i2
na stosie. Prawdopodobnie bym właśnie użył12Y
, ale myślę, że to nie ma znaczenia, ponieważ oba mają po 12 i 2 na stosie. Gdybym spróbował tego wyzwania w 05AB1E, skończyłbym znacznie wyżej pod względem liczby bajtów. Chyba wciąż mam wiele do nauczenia się. ;)Y
. To byłaby łatwiejsza opcja, hahaha.6xsŸ5L•δ;Ì’•2ôúð.ø‚ζJ012∞S¶×‚ζJ.c
ale możesz tu coś z tego skorzystać.6xŠ»
też się wspiera , nigdy bym o tym nie pomyślał.Kod maszynowy 6502 (C64),
827673 bajty1
specjalnie cyfr wiodącychChodzi o to, aby przechowywać cyfry wszystkich liczb w kolejności, w jakiej są potrzebne. Wymagane dodatkowe informacje to liczba nowych wierszy do dodania i liczba spacji z przodu.
Maksymalna liczba znaków nowej linii wynosi
3
2 bity, a maksymalna liczba spacji to23
5 bitów. Dlatego dla każdej cyfry do wydrukowania możemy wycisnąć tę informację w jednym „bajcie kontrolnym”.Tak więc dane dla tego rozwiązania zajmują dokładnie 30 bajtów: 15 pojedynczych cyfr i 15 powiązanych „bajtów kontrolnych”.
Demo online
Zastosowanie:
SYS49152
na początek.Skomentowany demontaż :
źródło
JSR $FFD2 / DEY / BNE loop / LDA .control,X / RTS
wywołującego zarówno znaki nowego wiersza, jak i spacje? Myślę, że będzie to +10 bajtów długości i zapisanie -12 bajtów w głównym kodzie.JSR $FFD2 / DEY / BPL loop / LDA .control,X / RTS
a punktem wejścia jestDEY
. W ten sposób nie musisz testować0
kodu głównego.DEY / BPL / RTS
nastąpi natychmiastowe zakończenie bez przetwarzaniaJSR $FFD2
. (Należy pamiętać, że w tym schemacie punktem wejścia podprogramu musi byćDEY
.)Perl 6 ,
7674 bajtówWypróbuj online!
Odpowiedź Portu Arnaulda, dopóki nie wymyślę czegoś krótszego.
źródło
R ,
7568 bajtówWypróbuj online!
Skompresowane pozycje cyfr. Zrobił to po spędzeniu dużo czasu próbując znaleźć odpowiedź trygonometryczną (patrz historia zmian).
Zainspirowany inną odpowiedzią R. Kup J.Doe - głosuj!
Zaoszczędź 7 bajtów dzięki J.Doe.
źródło
write
wywołanie, aby użyć domyślnego separatora.HTML + JavaScript (Canvas), 13 + 161 = 174 bajty
Arbitralne pozycjonowanie obszaru roboczego zajmuje 6 bajtów.
Z siatką do porównania:
Objaśnienie wzoru pozycjonowania
Zobacz mój JavaScript z odpowiedzią SVG .
źródło
Java
811,141138 bajtówWypróbuj online (UWAGA:
String.repeat(int)
jest emulowany jakrepeat(String,int)
dla tej samej liczby bajtów, ponieważ Java 11 nie jest jeszcze w TIO).Wyjaśnienie jest podobne do poniższego, ale wykorzystuje
" ".repeat(x-48)
spacje zamiast formatować za pomocą"%"+(x-48)+"s"
.Java 8, 141 bajtów
Wypróbuj online.
Wyjaśnienie:
Dalsze wyjaśnienie
92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G
:92
.)źródło
R,
168159125 bajtówNaiwne rozwiązanie polegające na zapisywaniu liczb w wyznaczonych punktach w matrycy tekstowej. Punkty są przechowywane jako litery UTF-8 dekodowane za pomocą
utf8ToInt
Usunięto 9 bajtów z sugestią JayCe, aby używać
write
i unikać definiowania macierzy.Usunięto kolejne 34 bajty z sugestią JayCe dotyczącą przechowywania.
źródło
m
i nie używająwrite
: TIO . PS: nie musisz dołączać linku TIO do swojej odpowiedzi, ale ładnie formatuje odpowiedź, patrz ikona linku na górze strony TIO.!
operatora, aby dostać się do 125 znaków . Naprawdę fajne rozwiązanie!Haskell,
8887 bajtówMetoda kodowania spacji jako liter (po raz pierwszy zobaczona w odpowiedzi @ Arnaulda ) w Haskell. Używanie
{
i rozwijanie go\n
jest o jeden bajt krótsze niż\n
bezpośrednie.Wypróbuj online!
źródło
Rdza , 96 bajtów
Wypróbuj online!
źródło
pieprzenie mózgu ,
240235 bajtówWypróbuj online!
Skomentowany kod
Rzadki przykład, w którym tekst jest wystarczająco powtarzalny, że program pieprzenia mózgu jest mniej niż
dwarazy 1,6 razy dłuższy niż wynik!2 bajty zapisane według sugestii Jo Kinga:
>>>>>>-
->[<]>-
3 bajty zaoszczędzone poprzez przeniesienie trzeciego 20-miejscowego licznika w dół z skrajnie prawej strony kodów ascii
10 30 50
bezpośrednio na lewo od nich. Oszczędność<<>>
przy wypełnianiu luki między8
i4
, ale dodaje 1 bajt do linii>>>++
.Orginalna wersja
źródło
Python 2 , 97 bajtów
Wypróbuj online!
Oblicza wszystkie odstępy i znaki nowej linii w pętli
źródło
Galaretka , 32 bajty
Pełny program, który drukuje wynik.
Wypróbuj online!
W jaki sposób?
(Jeszcze nie pomyślałem / nie znalazłem nic krótszego niż to,
“¿×¿ Œ4ç4Œ!¿Ø‘
co wydaje mi się długie w tej części - odbijanie / dekompresja / przyrosty, nic nie wydaje się oszczędzać!)źródło
C (gcc) ,
145137125 bajtówTylko pozycje tabulatorów są zakodowane na stałe: wszystkie odstępy między wierszami i wartości zegara są generowane w pętli.
Jeszcze raz dziękuję sufitowi za sugestie.
Wypróbuj online!
źródło
"\r\7\3"[j]
zamiast"NHDA"[j]-65
PHP , 97 bajtów
Wypróbuj online!
Jest to mocno skompresowany ciąg znaków. Nie mogłem znaleźć rozwiązania krótszego niż to!
źródło
file_put_contents($path, '<?=gzinflate("'.gzdeflate($clockString,9).'");');
, ale nie jestem pewien, jak opublikować kod z danymi binarnymi w nim. Taki plik ma 70 bajtów.Pyke , 37 bajtów
Wypróbuj tutaj! (surowe bajty)
Wypróbuj tutaj! (Czytelny dla człowieka)
źródło
pieprzenie mózgu ,
315313 bajtówzapisane 2 bajty dzięki ovs !
Wypróbuj online!
wszystko w jednym bloku kodu:
źródło
++++[>++++<-]>
dla 16 na początku.><
w swoim kodziePowerShell,
948882 bajtówBezpośredni operator formatu PowerShell .
{i,w}
oznacza symbol zastępczy parametru z indeksemi
, szerokość symbolu zastępczego jestw
wyrównana do prawej.PowerShell, 88 bajtów
Odpowiedź JavaScript na Port of Arnauld
-6 bajtów dzięki @AdmBorkBork
Aby lepiej zobaczyć siatkę, użyj
'.'
zamiast tego' '
.źródło
.PadLeft
88 bajtów - Wypróbuj online!-f
. Dołącz linki do Wypróbuj online! aby inni mogli zobaczyć, jak działa Twój kod?This site can’t be reached
tylko błąd . Przepraszam.C (gcc) ,
125109105 bajtówsizeof(wchar_t) == sizeof(int)
- nie będzie działał na Windowsie :) Dzięki ErikF za pomysł.Wypróbuj online!
Jest to część mojego ogólnego pomysłu z rozwiązania 6502 na C. Jest to nieco zmodyfikowane: Zamiast flagi na początku
1
, znak jest drukowany po przecinku przez odjęcie 48, więc 10-12 jest zakodowanych co:
do tego<
.źródło
Attache , 69 bajtów
Wypróbuj online!
To koduje każdy ciąg spacji jako
NTS[count of spaces]
:;NTS
jest wbudowanym „numerycznym do krótkiego”, który umożliwia wyrażanie liczb jako ciągów znaków. Na przykład,NTS[95] = $R1
iNTS[170297] = $XQO
.STN
jest odwrotnością tego wbudowanego.Ta odpowiedź zastępuje (
ReplaceF
) wszystkie wystąpienia liter (/\l/
) na wejściu wynikiem funkcjisp&`*@STN
, która najpierw dekoduje literę, a następnie powtarzasp
(spację) wiele razy.źródło
Szybki ,
178165 bajtówvar b="";for c in"L12nF11L1nnB10T2nnn9X3nnnC8T4nnG7L5nM6"{let i=c.unicodeScalars.first!.value;if c=="n"{b+="\n"}else if i>64{for _ in 0..<(i-65){b+=" "}}else{b+="(c)"}};print(b)
Na podstawie tego, co napisał Downgoat, zmniejszyłem to do 165 bajtów:
print("L12nF11L1nnB10T2nnn9X3nnnC8T4nnG7L5nM6".unicodeScalars.map{let x=Int($0.value);return x==110 ?"\n":(x>64 ?String(repeating:" ",count:x-65):"($0)")}.joined())
Rozwinięty,
$0
przekształcony w nazwaną zmienną:print("L12nF11L1nnB10T2nnn9X3nnnC8T4nnG7L5nM6".unicodeScalars.map { c in let x = Int(c.value) return x == 110 ? "\n" : (x>64 ? String(repeating:" ", count: x-65) : "(c)") }.joined())
Łańcuch wejściowy jest kodowany w następujący sposób: Wielkie litery (
A-Z
) oznaczają bloki spacji, przesunięte o 65.A
Oznacza to 0 spacji,B
1 spację, pierwszeL
11 spacji itp.n
S są konwertowane na znaki nowej linii. Wszystkie pozostałe znaki są drukowane w obecnej postaci.Uruchom tutaj online (dzięki, mbomb007)
źródło
{"L12NF11L1NNB10T2NNN9X3NNNC8T4NNG7L5NM6".unicodeScalars.map({(c)->String in let x=c.value;return x==78 ? "\n" : x>64 ?String(repeating:" ",count:x-65) : "\(c)"}).joined()}
(swift 3 (-swift-version 3
po repl), ponieważ wygląda na to, że odrzucił 4 szybkie odejmowanie)Pure Bash , 123
printf
wykonuje tutaj podnoszenie ciężarów:Wypróbuj online!
źródło
Czerwony , 151 bajtów
Wypróbuj online!
źródło
JavaScript z SVG, 188 bajtów
Dowolna wysokość linii wynosząca 120% wykorzystuje 4 bajty.
Z siatką do porównania:
Objaśnienie wzoru pozycjonowania
Let
f(x) = round(sin(x * π/6) * 6)
.Zakładając, że początek jest środkiem zegara, współrzędne siatki najbardziej prawej cyfry danego numeru zegara
x
to [f(x) * 2
,f(9 - x)
].źródło
Bash, 225 bajtów
Irytujące jest to dłuższe niż naiwne rozwiązanie polegające na drukowaniu każdego wiersza w pętli (132 znaki w przypadku korzystania z tabstops).
źródło
tr -d \<space>
(gdzie<space>
jest znak spacji) działałoby zamiast podstawienia sed?tr -d\
byłoby równoważnesed 's/ //g'
Python 3 ,
1128887 bajtówRozwiązanie wykorzystujące interpolację łańcuchów.
Wypróbuj online!
-25 bajtów dzięki ovs i Hermanowi L.
źródło
{11:7}
.C (gcc) ,
135123110 bajtówWykorzystuje to proste kodowanie, w którym dowolne
c
pomiędzy'a'
i'z'
reprezentujec-'a'+1
powtarzające się spacje,'`'
reprezentuje nowy wiersz, a wszystkie pozostałe znaki pozostają niezmienione.Wypróbuj online!
źródło
*s=L"...";f(i){
zamiastf(i){char*s="...";
T-SQL, 132 bajty
Tylko 12 bajtów krótszych niż trywialne rozwiązanie (
PRINT
całego łańcucha bez zmian).Znalazłem wariant, który podoba mi się, jest znacznie dłuższy (
235226 bajtów), ale znacznie bardziej podobny do SQL:STRING_SPLIT
dzieli go na wiersze w przecinkach iPARSENAME
dzieli każdy wiersz na kropki. 1. i 3. są używane do określenia liczby spacji do wydrukowania, 2. i 4. są używane do wyświetlania.(podział wiersza w tym jest tylko dla czytelności)
źródło
Perl 6 , 116 bajtów
Wypróbuj online!
(Ta @JoKing za zapisanie 26 bajtów)
Perl 6 , 142 bajtów
Wypróbuj online!
Chciałem zrobić coś ... innego. Więc ten oblicza pozycje wszystkich cyfr, za pomocą par znaków, usuwa początkową spację i drukuje linie.
Łatwo modyfikowalny dla różnych parametrów, np. Wersja o szerokości 45 znaków z 17 cyframi .
źródło