Показати обличчя годинника


39

Відобразіть 12 чисел на лицьовій частині годинника саме так:

           12            
     11           1      

 10                   2  


9                       3


  8                   4  

      7           5      
            6            

Щоб краще побачити сітку, ось ця з крапками:

...........12............
.....11...........1......
.........................
.10...................2..
.........................
.........................
9.......................3
.........................
.........................
..8...................4..
.........................
......7...........5......
............6............

Зауважте, що сітка розтягується в ширину в два рази, щоб вона виглядала більш квадратною.

Також зауважте, що двоцифрові числа вирівнюються з їхніми цифрами на місці. Дев'ять цифр слід наблизити ліворуч.

Повертайте або друкуйте результат у вигляді рядкового рядка (а не списку рядків). Будь-які пробіли не потрібні. Остаточний рядок також необов’язковий.

Відповіді:


25

Вугілля деревне , 40 байт

F¹²«M⁻↔⁻¹⁴⊗÷×⁴鳦⁸⁻⁴↔⁻⁷÷×⁴﹪⁺³ι¹²¦³P←⮌I⊕ι

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення: обчислює зсуви між кожною цифрою математично. Деревне вугілля індексується 0 (таким чином, для виведення ), тому формули для горизонтального та вертикального зміщення є такими:112

δx=|1424i3|8δy=4|74i3|

де .i=i+3(mod12)


22

JavaScript (Node.js) , 91 байт

Не дуже розумний підхід, але на даний момент я не зміг знайти щось коротше.

_=>`K12
E11K1

A10S2


9W3


B8S4

F7K5
L6`.replace(/[A-Z]/g,c=>''.padEnd(Buffer(c)[0]&31))

Спробуйте в Інтернеті!


4
Мені подобається використання Buffer () в якості альтернативиcharCodeAt()
Downgoat

1
@Downgoat Що мене змушує замислитись, чи не повинні ми мати підказки щодо гольфу у питанні Node.js , щодо особливостей вузла. Не впевнений, що варто того, хоча.
Арнольд

Може, додати окрему відповідь, що містить усі особливості Вузла, або принаймні список, що пов'язує всі різні відповіді?

15

05AB1E , 39 33 31 байт

Завдяки Magic Octopus Urn за збереження 6 байт!

Код

6xsG12N-N•°£•NèØú«тR∞Nè¶×]\6».c

Приблизно 33 байти:

711ćŸā•Σ°w•₂вú‚øJƵt3в¶×‚ø»6xŠ».c¦
6xsŸ5L•Σ°w•₂вúõ¸ì‚ζJï2Ý«ƶ×)ø».c
6xsG¶12N-N•Θ{©•₂вNèú«ƵB∞Nè¶×]6J.c
6xsG12N-N•Θ{©•₂вNèú«тR∞Nè¶×]6s».c

Використовує кодування 05AB1E . Спробуйте в Інтернеті!


Гарна відповідь! Мені подобається використовувати ÿз .V, дуже оригінально! І смішно, як ви звикли 12¤отримувати і те, 12і 2на стеку. Я, мабуть, тільки що використав 12Y, але я здогадуюсь, як це не має значення, оскільки обидва мають 12 і 2 на стеці. Якби я спробував цей виклик у 05AB1E, я б закінчив набагато вище в кількості байтів. Здогадуюсь, мені ще багато чого навчитися. ;)
Кевін Круїссен

@KevinCruijssen О так, я про це забув Y. Це був би простіший варіант ха-ха.
Аднан

Я не знаю, чи я виправляю 6 в 6 байтів: 6xsŸ5L•δ;Ì’•2ôúð.ø‚ζJ012∞S¶×‚ζJ.cале ви можете будь-що корисне тут.
Чарівний восьминога Урна

1
@MagicOctopusUrn Гарний трюк із блискавкою, я про це не думав.
Аднан

1
@adnan 6xŠ»теж підтримує, я б ніколи про це не думав.
Чарівний восьминога Урна

10

Код машини 6502 (C64), 82 76 73 байт

00 C0 A2 0E BD 38 C0 29 03 A8 A9 0D 20 25 C0 BD 38 C0 4A 4A A8 A9 20 20 25 C0
BD 29 C0 20 D2 FF CA 10 E1 60 20 D2 FF 88 10 FA 60 36 35 37 34 38 33 39 32 30
31 31 31 31 32 31 31 2C 1A 4C 0B 5C 03 4C 00 06 2C 00 15 00 2C
  • -6 байт, завдяки Арнольду за розумну ідею :)
  • ще -3 байти після ідеї Арнольда не звертатися до провідних 1цифр спеціально

Ідея тут полягає в тому, щоб зберігати лише цифри всіх чисел у тому порядку, який вони потрібні. Додатковою інформацією є кількість нових рядків для передбачення та кількість пробілів перед.

Максимальна кількість нових рядків є 3, тому для цього нам потрібно 2 біти, а максимальна кількість пробілів - це23 , тому 5 біт достатньо. Тому для кожної цифри для друку ми можемо видавити цю інформацію в один "керуючий байт".

Отже, дані для цього рішення займають рівно 30 байт: 15 одноцифрових і 15 пов'язаних «керуючих байтів».

Демонстрація в Інтернеті

Використання: SYS49152для початку.

Прокоментували розбирання :

         00 C0                          ; load address
.C:c000  A2 0E       LDX #$0E           ; table index, start from back (14)
.C:c002   .mainloop:
.C:c002  BD 38 C0    LDA .control,X     ; load control byte
.C:c005  29 03       AND #$03           ; lowest 3 bits are number of newlines
.C:c007  A8          TAY                ; to Y register for counting
.C:c008  A9 0D       LDA #$0D           ; load newline character
.C:c00a  20 25 C0    JSR .output        ; repeated output subroutine
.C:c00d  BD 38 C0    LDA .control,X     ; load control byte
.C:c010  4A          LSR A              ; and shift by two positions for ...
.C:c011  4A          LSR A              ; ... number of spaces
.C:c012  A8          TAY                ; to Y register for counting
.C:c013  A9 20       LDA #$20           ; load space character
.C:c015  20 25 C0    JSR .output        ; repeated output subroutine
.C:c018  BD 29 C0    LDA .digits,X      ; load current digit
.C:c01b  20 D2 FF    JSR $FFD2          ; output
.C:c01e  CA          DEX                ; decrement table index
.C:c01f  10 E1       BPL .mainloop      ; still positive -> repeat
.C:c021  60          RTS                ; and done.
.C:c022   .outputloop:
.C:c022  20 D2 FF    JSR $FFD2          ; output a character
.C:c025   .output:
.C:c025  88          DEY                ; decrement counting register
.C:c026  10 FA       BPL .outputloop    ; still positive -> branch to output
.C:c028  60          RTS                ; leave subroutine
.C:c029   .digits:
.C:c029  36 35 37 34 .BYTE "6574"
.C:c02d  38 33 39 32 .BYTE "8392"
.C:c031  30 31 31 31 .BYTE "0111"
.C:c035  31 32 31    .BYTE "121"
.C:c038   .control:
.C:c038  31 2C 1A 4C .BYTE $31,$2C,$1A,$4C
.C:c03c  0B 5C 03 4C .BYTE $0B,$5C,$03,$4C
.C:c040  00 06 2C 00 .BYTE $00,$06,$2C,$00
.C:c044  15 00 2C    .BYTE $15,$00,$2C

2
Чи можете ви зберегти 2 байти, використовуючи підпрограму, яка JSR $FFD2 / DEY / BNE loop / LDA .control,X / RTSвикликається як для нових рядків, так і для пробілів? Я думаю, що це було б +10 байт і збереже -12 байт у головному коді.
Арнольд

1
Насправді, я думаю, ви можете зберегти більше байтів, якщо підпрограма працює, JSR $FFD2 / DEY / BPL loop / LDA .control,X / RTSа точка входу - це DEY. Таким чином, вам не доведеться тестувати 0в основному коді.
Арнольд

Дякую приємну ідею, відредагуємо пізніше. Останній, однак, не спрацює, мені потрібен чохол, який пропускає весь цикл.
Фелікс Палмен

1
Якщо Y = 0, DEY / BPL / RTSвийде негайно, не обробляючи жодної JSR $FFD2. (Зверніть увагу, що за цією схемою має бути точка входу підпрограми DEY.)
Арнольд,

1
@Arnauld після досить експериментування, я думаю, що найкоротше зберегти підпрограму, використовуючи вашу пропозицію про збереження всіх цифр :)
Фелікс Палмен


6

R , 75 68 байт

write("[<-"(rep("",312),utf8ToInt('*`®÷ĥĹĚä—M'),1:12),1,25)

Спробуйте в Інтернеті!

Стислі позиції цифр. Це зробили, витративши багато часу, намагаючись придумати тригонометричну відповідь (див. Історію правок).

Натхненний цією іншою відповіді R купіть J.Doe - оновіть це!

Збережено 7 байт завдяки J.Doe.


68 байт - змінили хеш, щоб уникнути арифметики та змінили writeвиклик, щоб використовувати роздільник за замовчуванням.
J.Doe

1
@ J.Doe Це має більше сенсу. Звичайно, не задокументувавши свій гольф, я не маю поняття, чому я в першу чергу
зробив перекручений

5

HTML + JavaScript (полотно), 13 + 161 = 174 байти

Довільне розміщення полотна використовує 6 байт.

with(C.getContext`2d`)with(Math)for(font='9px monospace',textAlign='end',f=x=>round(sin(x*PI/6)*6)*measureText(0).width*2,x=13;--x;)fillText(x,f(x)+80,f(9-x)+80)
<canvas id=C>

З сіткою для порівняння:

with(C.getContext`2d`)with(Math){
    for(font='9px monospace',textAlign='end',f=x=>round(sin(x*PI/6)*6)*measureText(0).width*2,x=13;--x;)fillText(x,f(x)+80,f(9-x)+80)
    for(globalAlpha=0.2,y=-6;y<=6;y++)fillText('.'.repeat(25),6*measureText('.').width*2+80,y*measureText(0).width*2+80)
}
<canvas id=C>


Пояснення формули позиціонування

Дивіться мій JavaScript з відповіддю SVG .


8
Я не думаю, що це враховується, оскільки, оскільки це ASCII-мистецтво, ми повинні генерувати точний байт-потік, вказаний у виклику, в той час як це створює зображення, схоже на вихід.
Пуховина

5

Java 8 11, 141 138 байт

v->{for(var x:"92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G".getBytes())System.out.print(x<59?" ".repeat(x-48):(char)(x>76?10:x-17));}

Спробуйте в режимі он-лайн (ПРИМІТКА: String.repeat(int)емулюється як repeat(String,int)для того ж байтового рахунку, оскільки Java 11 ще не є на TIO.)

Пояснення подібно до наведеного нижче, але воно використовується " ".repeat(x-48)для пробілів замість формату з "%"+(x-48)+"s".


Java 8, 141 байт

v->{for(var x:"92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G".getBytes())System.out.printf("%"+(x>58?"c":x-48+"s"),x>76?10:x>58?x-17:"");}

Спробуйте в Інтернеті.

Пояснення:

v->{                        // Method with empty unused parameter and no return-type
  for(var x:"92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G".getBytes())
                            //  Loop over the bytes of the above String:
    System.out.printf("%"+  //   Print with format:
     (x>58?                 //    If the character is a letter / not a digit:
       "c"                  //     Use "%c" as format
      :                     //    Else:
       x-48+"s"),           //     Use "%#s" as format, where '#' is the value of the digit
     x>76?                  //    If the byte is 'N':
      10                    //     Use 10 as value (newline)
     :x>58?                 //    Else-if the byte is not a digit:
      x-17                  //     Use 48-58 as value (the 0-9 numbers of the clock)
     :                      //    Else:
      "");}                 //     Use nothing, because the "%#s" already takes care of the spaces

Подальше пояснення 92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G:

  • Усі цифри будуть замінені на таку кількість пробілів. (Тому для 11 просторів це 92.)
  • Усі "N" - це нові рядки
  • Усі ['A', 'J'] - це тактові цифри ([0,9])

5

R, 168 159 125 байт

Наївне рішення написання чисел у встановлених точках у текстовій матриці. Бали зберігаються у вигляді букв UTF-8, розшифрованих черезutf8ToInt

"!"=utf8ToInt
write("[<-"(matrix(" ",25,13),cbind(!"LMFGSBCWAYCWGSM",!"AABBBDDDGGJJLLM")-64,-64+!"ABAAAA@BICHDGEF"),1,25,,"")

Випав 9 байт із пропозицією JayCe використовувати write та уникати визначення матриці.

Випав ще 34 байти з пропозицією зберігання JayCe.


Привіт і ласкаво просимо до PPCG! Я думаю, що точки повинні допомогти візуалізувати візерунок, але не є частиною результату.
Джонатан Фрех

Ласкаво просимо до PPCG! ви можете виділити деякі байти, не визначаючи mта використовуючи write: TIO . PS: Ви не зобов’язані включати посилання TIO у свою відповідь, але це відповідь добре форматує для вас, дивіться значок посилання вгорі сторінки TIO.
JayCe

Ви можете зберігати точки в рядку і перевантажувати !оператора, щоб дістатися до 125 символів . Дійсно приємне рішення!
JayCe

5

Haskell, 88 87 байт

f=<<"k12{e11k1{{a10s2{{{9w3{{{b8s4{{f7k5{l6"
f c|c>'z'="\n"|c>'9'=' '<$['a'..c]|1<2=[c]

Метод кодування-пробіли як букви (вперше помічений у відповіді @ Арнаульда ) у Haskell. Використання {та розширення його на \nодин байт коротше, ніж використання \nбезпосередньо.

Спробуйте в Інтернеті!



5

мозковий ебать , 240 235 байт

++++++++++[>++>+>+++>+++++>++>++[<]>-]>>>++...........>-.+.<<.>.....>-..<...........>.<<..>.>.-.>-[<<.>>-]<++.<<...>>+++++++.>>+++[<<<.>>>-]<<------.<<...>..>+++++.<<<-[>>.<<-]>>>----.<<..>......>+++.<...........>--.<<.>............>+.

Спробуйте в Інтернеті!

Коментований код

++++++++++                              Put 10 in cell 0
[>++>+>+++>+++++>++>++[<]>-]            Loop 10 times incrementing to leave 0 20 10 30 50 20 20 in memory 
>>>++                                   30 plus 2 = 32 (ascii space)
...........>-.+.                        print 11spaces followed by 12 (ascii 49 50)
<<.>.....>-..<...........>.             print 1newline 5spaces 11 11spaces 1 
<<..>.>.-.>-[<<.>>-]<++.                print 2newlines 1space 10 19spaces 2
<<...>>+++++++.>>+++[<<<.>>>-]<<------. print 3newlines         9 23spaces 3
<<...>..>+++++.<<<-[>>.<<-]>>>----.     print 3newlines 2spaces 8 19spaces 4
<<..>......>+++.<...........>--.        print 2newlines 6spaces 7 11spaces 5
<<.>............>+.                     print 1newline  12spaces 6

Рідкісний приклад, коли текст є достатньо повторюваним, що програма для епізодів менше ніж удвічі 1,6 рази перевищує довжину виводу!

2 байти, збережені за пропозицією Джо Кінга: >>>>>>-->[<]>-

3 байти збережено, перемістивши третій 20-місцевий нижній лічильник з правого краю коду ascii, 10 30 50щоб одразу зліва від них. Зберігає <<>>при заповненні зазору між 8і , 4але додає 1 байт в рядку >>>++.

Оригінальна версія

++++++++++                              Put 10 in cell 0
[>+>+++>+++++>++>++>++<<<<<<-]          Loop 10 times incrementing to leave 0 10 30 50 20 20 20 in memory 
>>++                                    30 plus 2 = 32 (ascii space)
...........>-.+.                        print 11spaces followed by 12 (ascii 49 50)
<<.>.....>-..<...........>.             print 1newline 5spaces 11 11spaces 1 
<<..>.>.-.>-[<<.>>-]<++.                print 2newlines 1space 10 19spaces 2
<<...>>+++++++.>>+++[<<<.>>>-]<<------. print 3newlines         9 23spaces 3
<<...>..>+++++.>>>-[<<<<.>>>>-]<<<----. print 3newlines 2spaces 8 19spaces 4
<<..>......>+++.<...........>--.        print 2newlines 6spaces 7 11spaces 5
<<.>............>+.                     print 1newline  12spaces 6


4

Желе , 32 байти

⁶ẋ“¿×¿ Œ4ç4Œ!¿Ø‘ż“øn0œ’Œ?D¤Fs25Y

Повна програма, яка друкує результат.

Спробуйте в Інтернеті!

Як?

(Я ще не думав / не знайшов нічого коротшого, ніж “¿×¿ Œ4ç4Œ!¿Ø‘мені здається, дана частина - підстрибуючи / база-декомпресія / приріст, ніби нічого не економить!)

⁶ẋ“¿×¿ Œ4ç4Œ!¿Ø‘ż“øn0œ’Œ?D¤Fs25Y - Main Link: no arguments
⁶                                - space character
  “¿×¿ Œ4ç4Œ!¿Ø‘                 - code-page indices list = [11,17,11,32,19,52,23,52,19,33,11,18]
 ẋ                               - repeat (vectorises) -> [' '*11, ' '*17, ...]
                          ¤      - nilad followed by link(s) as a nilad:
                 “øn0œ’          -   base 250 number = 475699781
                       Œ?        -   first natural number permutation which would be at
                                 -   index 475699781 if all permutations of those same
                                 -   natural numbers were sorted lexicographically
                                 -   = [12,11,1,10,2,9,3,8,4,7,5,6]
                         D       -   to decimal lists = [[1,2],[1,1],[1],[1,0],[2],[9],[3],[8],[4],[7],[5],[6]]
                ż                - zip together = [[' '*11, [1,2]], [' '*17, [1,1]], ...]
                           F     - flatten = [' ',' ',...,1,2,' ',' ',...,1,1,...]
                            s25  - split into chunks of 25 (trailing chunk is shorter)
                               Y - join with new line characters
                                 - implicit print

LOL Я насправді здивований, це наївний підхід.
Ерік Аутгольфер

4

C (gcc) , 145 137 125 байт

Тільки позиції вкладок жорстко кодуються: всі міжрядкові лінії та значення тактових частот генеруються у циклі.

Ще раз дякую стельовій кішці за пропозиції.

i,j,k;f(char*t){for(i=7;i--;t=memset(t+sprintf(t,"%*d%*d"+3*!j,"NHDA"[j]-65,6+i,"AMUY"[j]-65,6-i),10,k=j+i/4)+k)j=i>3?6-i:i;}

Спробуйте в Інтернеті!


Запропонувати "\r\7\3"[j]замість"NHDA"[j]-65
roofcat

3

PHP , 97 байт

<?=gzinflate(base64_decode(U1CAA0MjLghtqIAkyMWlYGiggAmMuLi4LBWwA2OgnIKCBRYZEy6IHQrmSIKmXMhKzAA));

Спробуйте в Інтернеті!

Це жорстко кодований стислий рядок. Я не зміг знайти рішення, коротше цього!


Чи можете ви помістити двійковий стислий рядок у вихідний файл і пропустити базовий64_decode? Я спробував це, і я отримав 'gzinflate (): помилка даних', але це можливо, якщо вихідний файл був написаний шістнадцятковим редактором замість текстового редактора.
bdsl

@bdsl насправді я це робив раніше, і вам не потрібен редактор HEX, ви можете просто використовувати PHP file_put_contents($path, '<?=gzinflate("'.gzdeflate($clockString,9).'");');, але я не впевнений, як розмістити код з бінарними даними всередині нього. Такий файл становить 70 байт.
Ніч2,

3

Пайк , 37 байт

3B 32 35 75 07 0d 13 0c 22 14 35 18 44 74 5F 74 2B 46 6F 68 32 C4 52 7D 74 2A 31 32 25 31 32 7C 60 52 2D 29 73

Спробуйте тут! (необроблені байти)

;25Dt_t+Foh2.DR}t*12%12|`R-)s

Спробуйте тут! (Для людини читається)

                              - o = 0
;25                           - set line width to 25 characters
                              -      `[13, 19, 12, 34, 20, 53, 24]`
                              -       (In hex version, encoded in base 256, regular version in input field)
    t_t                       -     reversed(^[1:])[1:]
   D   +                      -    ^^ + ^
        Foh2.DR}t*12%12|`R-)  -   for i in ^:
         o                    -            o++
          h                   -           ^+1
           2.DR               -          divmod(^, 2)
               }t             -         (remainder*2)-1
                 *            -        quotient * ^
                  12%         -       ^ % 12
                     12|      -      ^ or 12 (12 if 0 else ^)
                        `     -     str(^)
                         R-   -    ^.rpad(i) (prepend spaces such that length i)
                            s -  sum(^)
                              - output ^ (with newlines added)

3

мозковий ебать , 315 313 байт

збережено 2 байти завдяки ов !

++++[>++++<-]>[>+++>+++>+++>+++>>++>+++>+++>+++<<<<<<<<<-]>+++++>++++>+++>++>++++++++++>>+++++++>+><<<...........>>.<<<<.>.>.....>>..<<...........>>.<<<..>.>>.>.<<<...................<<.>...>>++.<.......................<<<.>>...>..>-.<...................<<<<.>>>..>......>-.<...........<<<<<.>>>>.>............>-.

Спробуйте в Інтернеті!

все в одному блоці коду:

++++[>++++<-]>[>+++>+++>+++>+++>>++>+++>+++>+
++<<<<<<<<<-]>+++++>++++>+++>++>++++++++++>>+
++++++>+><<<...........>>.<<<<.>.>.....>>..<<
...........>>.<<<..>.>>.>.<<<................
...<<.>...>>++.<.......................<<<.>>
...>..>-.<...................<<<<.>>>..>.....
.>-.<...........<<<<<.>>>>.>............>-.

Ви можете використовувати ++++[>++++<-]>для 16 на початку.
ов

@ovs Ах, звичайно, дякую !!
Conor O'Brien

Лол, ти маєш ><у своєму коді
Джо Кінг

3

Powershell, 94 88 82 байт

Прямий оператор формату Powershell . {i,w}означає заповнювач для параметра з індексом i, ширина заповнювача - wз правим вирівнюванням.

"{11,13}
{10,7}{0,12}

 10{1,20}


9{2,24}


  8{3,20}

{6,7}{4,12}
{5,13}"-f1..12

Powershell, 88 байт

Відповідь Javascript на порт Арнальда

-6 байт завдяки @AdmBorkBork

[RegEx]::Replace("K12
E11K1

A10S2


9W3


B8S4

F7K5
L6",'[A-Z]',{' '*("$args"[0]-64)})

Щоб краще бачити сітку, використовуйте '.'замість цього ' '.


1
Чому б не множити рядки замість .PadLeft88 байт - Спробуйте в Інтернеті!
AdmBorkBork

Це розумне використання -f. Чому ви не включите посилання, щоб спробувати його в Інтернеті! щоб інші могли бачити, як працює ваш код?
AdmBorkBork

Я маю лише помилку This site can’t be reached. Вибачте.
маззи

Ах, це соромно. Це хороший ресурс. :-(
AdmBorkBork

Я згоден. Спасибі.
маззи

3

C (gcc) , 125 109 105 байт

x,*d=L"<;1:2938475640P`P05";main(i){for(;i=d[12];printf("%*d",i/4,*d++-48))for(x=i&3;x--;)puts("");}
  • -16 байт (-3 для кращого розташування циклу, -13 для прямого включення символів, що не друкуються) завдяки Джонатану Фреху .
  • -4 байти, замінивши поділ на зміну і зловживаючи тим, що в багатьох системах (наприклад, в тій, що розміщує TIO), sizeof(wchar_t) == sizeof(int)- не буде працювати на Windows :) Дякую ErikF за ідею.

Спробуйте в Інтернеті!

Це порт моєї загальної ідеї від 6502 розчину до C. Це трохи модифікована: Замість того , щоб мати прапор для провідної 1, символ друкується у вигляді десяткового дробу, віднімаючи 48, так що 10 - 12 кодуються як :для <.



@JonathanFrech приємна перестановка циклу, мені цікаво, як я пропустив це: o Але я дійсно не очікував, що gcc прийме недрукувальні символи у джерелі :)
Фелікс Палмен

Поки символ може бути представлений у UTF-8, це технічно прийнятно компілятором. Чи хороша це справа, скоріше залежить від того, що ви робите :-)
ErikF

Якщо говорити про Unicode, ви можете зберегти ще 3 байти за допомогою широких символів: Спробуйте це в Інтернеті!
ErikF

1
Ось чому мені подобається гольф з кодом: я зловживаю UB і використовую всі ті "речі, яких ти не повинен робити", які ти збираєш з часом!
ЕрікФ

2

Attache , 69 байт

{ReplaceF["l12
f11l1

b10t2


9x3


c8t4

g7l5
m6",/"\\l",sp&`*@STN]}

Спробуйте в Інтернеті!

Це кодує кожен пробіл як NTS[count of spaces]:; NTS- це вбудований "числовий короткий", який дозволяє виражати числа у вигляді рядків. Наприклад, NTS[95] = $R1і NTS[170297] = $XQO.STNє зворотною стороною цього вбудованого.

Ця відповідь замінює ( ReplaceF) всі випадки букв ( /\l/) у введенні результатом функції sp&`*@STN, яка спочатку розшифровує букву, а потім повторює sp(пробіл) багато разів.


2

Свіфт , 178 165 байт

var 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)

На основі публікації Downgoat я скоротив це до 165 байт:

print("L12nF11L1nnB10T2nnn9X3nnnC8T4nnG7L5nM6".unicodeScalars.map{let x=Int($0.value);return x==110 ?"\n":(x>64 ?String(repeating:" ",count:x-65):"($0)")}.joined())

Розширено, $0перетворене на названу змінну:

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-Z) представляють блоки пробілів, зміщені на 65. Отже, Aзначить 0 пробілів, Bозначає 1 пробіл, перший Lозначає 11 пробілів тощо. nS перетворюються в нові рядки. Усі інші символи друкуються як є.

Запустити його онлайн тут (спасибі, mbomb007)


Ласкаво просимо до PPCG! Багато хто з нас використовує Try It Online (TIO) для онлайн-перекладачів, щоб включити гіперпосилання на програму у наші відповіді. Ось вам відповідь: tio.run/##JY1BC4IwGIb/yvpOSjScqRW2DgV1sVMeOgQx14SBfMacdhB/…
mbomb007

Ось гольф вашої відповіді, який становить 172 байти. Він замість цього використовує функцію: {"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на repl), тому що swift 4
відніс

@Downgoat Я зменшив його ще на 3 байти і зробив сумісність із Swift 4. Дивіться оновлений пост.
Єзекіїль Елін



1

JavaScript з SVG, 188 байт

Довільна висота рядка 120% використовує 4 байти.

with(Math)for(s='<pre><svg viewBox=-8-8+16+16 style=font-size:1;text-anchor:end>',f=x=>round(sin(x*PI/6)*6),x=13;--x;)s+=`<text x=${f(x)*2}ch y=${f(9-x)*1.2}>${x}</text>`
document.write(s)

З сіткою для порівняння:

with(Math)for(s='<pre><svg viewBox=-8-8+16+16 style=font-size:1;text-anchor:end>',f=x=>round(sin(x*PI/6)*6),x=13;--x;)s+=`<text x=${f(x)*2}ch y=${f(9-x)*1.2}>${x}</text>`
for(y=-6;y<=6;y++)s+=`<text x=12ch y=${y*1.2} style=fill:#0002>${'.'.repeat(25)}</text>`
document.write(s)


Пояснення формули позиціонування

Нехай f(x) = round(sin(x * π/6) * 6).

Якщо припустити, що походження є центром годинника, координати сітки найбільш правої цифри будь-якого заданого числа годинника xє [ f(x) * 2, f(9 - x)].


1

Баш, 225 байт

s=(12 0 6 11 0 0 2 19 0 0 0 0 1 23 0 0 0 0 3 19 0 0 7 11 13 0)
n=(12 11 1 10 2 9 3 8 4 7 5 6) j=0;for i in {0..25};{
[ ${s[i]} = 0 ]||{ printf %${s[i]}s " ";echo -n ${n[j]}
j=$((j+1));};[ $((i%2)) -gt 0 ]&&echo;}|sed 's/ //'

Прикро, що це довше, ніж наївне рішення просто надрукувати кожен рядок у циклі (132 символи, якщо використовувати табло).


Чи працював би tr -d \<space>(де <space>пробіл) замість заміни sed?
Kritixi Lithos

@Cowsquack, на жаль, не tr -d\ було б рівнозначноsed 's/ //g'
crystalgecko

1

Пітон 3 , 112 88 87 байт

Рішення за допомогою рядкової інтерполяції.

print(f'''{12:13}
{11:7}{1:12}

 10{2:20}


9{3:24}


  8{4:20}

{7:7}{5:12}
{6:13}''')

Спробуйте в Інтернеті!

-25 байт завдяки овам та Герману Л.


І якщо ви використовуєте рядок форматування Hermans, ви можете отримати це до ~ 85 байт.
ов

Ще один байт с {11:7}.
ов

1

C (gcc) , 135 123 110 байт

Для цього використовується просте кодування, де є будь-яке cміж 'a'і 'z'представляєc-'a'+1 повторні пробіли, '`'представляє новий рядок, а всі інші символи залишаються незмінними.

f(i){char*s="k12`e11k1``a10s2```9w3```b8s4``f7k5`l6`";for(;i=*s;s++)i>96?printf("%*s",i-96,""):putchar(i%86);}

Спробуйте в Інтернеті!


Запропонувати *s=L"...";f(i){замістьf(i){char*s="...";
roofcat

1

T-SQL, 132 байти

PRINT SPACE(11)+'12
     11           1

 10'+SPACE(20)+'2


9'+SPACE(23)+'3


  8'+SPACE(19)+'4

      7           5
            6'

Тільки на 12 байт коротше тривіального рішення (PRINT усього рядка як є).

Знайдений варіант, який мені подобається, набагато довший ( 235 226 байт), але набагато більше подібний до SQL:

SELECT CONCAT(SPACE(PARSENAME(value,4)),PARSENAME(value,3),
              SPACE(PARSENAME(value,2)),PARSENAME(value,1))
FROM STRING_SPLIT('11.1..2,5.11.11.1,. .. ,1.10.20.2,. .. ,. .. ,.9.23.3,
                   . .. ,. .. ,2.8.19.4,. .. ,6.7.11.5,12.6.. ',',')

STRING_SPLIT розбиває його на ряди на коми, і PARSENAME розбиває кожен ряд по крапках. 1-й і 3-й використовуються для кількості пробілів для друку, 2-й і 4-й використовуються для відображення.

(перерви у цьому рядку призначені лише для читання)


1

Perl 6 , 116 байт

my@a=["  "xx 13]xx 13;($_=pi/6*++$;@a[0+|6*(1.1-.cos);0+|6*(1.1+.sin)]=fmt ++$: "%2s")xx 12;@a>>.join>>.&{say S/.//}

Спробуйте в Інтернеті!

(Ta @JoKing для економії 26 байт)

Perl 6 , 142 байти

my@a=[[[32,32]xx 13]xx 13];for 1..12 {$_=$^b*pi/6;@a[round 6*(1-.cos);round 6*(1+.sin)]=[" $b".ords.tail(2)]}
{say S/^.//}(.[*;*].chrs) for @a

Спробуйте в Інтернеті!

Я хотів зробити щось ... інше. Таким чином, цей обчислює позиції всіх цифр, через пари символів, знімає початковий пробіл і друкує рядки.

Легко модифікується для різних параметрів, наприклад, версія в 45 символів із 17 цифрами .



@JoKing: Так, я це вставив у вікі.
Філ Х
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.