Привіт Світ! з напівпоширеними персонажами


28

Як деякі з вас, можливо, знають, щоб викласти мову на чудову Деніс Спробуйте в Інтернеті! , Привіт, Світ! потрібна програма. Нещодавно Денніс підняв спосіб завантаження цих програм з веб-сайту. Ось JSON пастбін символів, які використовуються в цих програмах, за частотою, станом на 27 липня 2017 року.

Деяким із цих персонажів потрібна якась любов, тому ваше завдання полягає в тому, щоб випустити Hello, World! (бажано мовою, що бере участь у цьому процесі), використовуючи лише вказані нижче символи. Ці символи - це всі символи, які використовуються між часом 10та 99(включно), а також двома найпоширенішими персонажами, 0і тому, що мені добре.

0 $&*?ABCDEFGIJKLNPQRSTUXYZ\`gjkqwxyz{}÷≤≥=║_

Використання символу має базуватися на його появі в звичайній програмі, а не на його кодовій точці або байтовому значенні.

Ви повинні використовувати принаймні один символ із цього набору, тому програми 0-довжини недійсні.

Це , тому найкоротша відповідь у байтах виграє.

JSFiddle, щоб перевірити, чи відповідає ваша відповідь


чи можу я виділити пробіл у наступному рядку?
dzaima

@dzaima Якщо ви не можете вивести його без місця, зробіть це. Якщо для позбавлення від простору використовується лише більше байтів, позбудьтесь простору
Stephen

Чи існує консенсус спільноти (або специфічний диск / дозвіл тут) щодо недрукувальних символів, які пробиваються у вихід (STDOUT)? Не впевнений, що я бачив, як це було раніше (і це було б легко не помітити), але це суттєво змінює мою стратегію тут ...
brhfl

@brhfl не те, про що я знаю - єдина норма полягає в тому, що звичайні дозволені нові рядки, ви можете запитати у чаті
Stephen

Відповіді:


6

SOGL V0.12 , 89 75 68 байт

z{}xxxx≥x≥x≥xXUqXxq≤qq≤q *R_IIRq  q *R_I0II*IRqxXq≤qxqxq CR_0II÷Rq0*

Спробуйте тут!
Примітка: коли qі тут згадується або вихід, він не з'являється, оскільки спливаючі виводи (будь-які з них oOpP) недоступні або виводять попередній новий рядок.

Пояснення (застаріле. Змінено те, що "H" друкується за допомогою букв алфавітів):

 $             push "$"
  R_           convert to an array of ordinals, then push all the contents to the stack
    0II        push 0+1+1 = 2
       *       multiply by that
        R      convert to character
         q     output
          z    push the lowercase alphabet
           {}  iterate over it, pushing each char, and do nothing. Stack: ["H","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
stack manipulation:
 xxxx ["H","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r"]
 ≥    ["r","H","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q"]
 x    ["r","H","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o"]
 ≥    ["o","r","H","a","b","c","d","e","f","g","h","i","j","k","l","m","n"]
 x    ["o","r","H","a","b","c","d","e","f","g","h","i","j","k","l"]
 ≥    ["l","o","r","H","a","b","c","d","e","f","g","h","i","j","k"]
 xxx  ["l","o","r","H","a","b","c","d","e"]
 q    output the "e"
 ≤    ["o","r","H","a","b","c","d","e","l"]
 qq   output the "l" twice
 ≤    ["r","H","a","b","c","d","e","l","o"]
 q    output the "o"

*                       push "*",
 R_                     convert to an array of ordinals, then push all to stack
   II                   increase by 2
     R                  convert back to character
      q                 output
         q              push a space, then output
           *            push "*"
            R_          convert to an array of ordinals, then push all to stack
              I         increase that
               0II      push 0+1+1 = 2
                  *     multiply
                   I    increase
                    Rq  output as character
stack manipulation: (starting stack: ["r","H","a","b","c","d","e","l","o",","," ","W"])
 x  ["r","H","a","b","c","d","e","l","o",","]
 X  ["r","H","a","b","c","d","e","l","o"]
 q  output the "o"
 ≤  ["H","a","b","c","d","e","l","o","r"]
 q  output the "r"
 x  ["H","a","b","c","d","e","l"]
 q  output the "l"
 x  ["H","a","b","c","d"]
 q  output the "d"

C            push "C"
 R_          convert to ordinal as before
   0II÷      floor divide by 2
       Rq    output as character
         0*  multiply by 0 so nothing extra would be outputted

Забавний факт: усі символи з дозволених символів знаходяться на кодовій сторінці SOGL: D


Отже ... У вас хороша стабільна робота як професійний розробник, правда? Тому що бовтайте, це класна мова ... Також приємний перекладач JS, ви закінчили його минулої ночі :)? Чи можете ви розпочати публікацію документації на якусь мову? Або повідомлення в приватному чаті мені про розташування такої документації? SOGL вбиває його.
Magic Octopus Urn

@MagicOctopusUrn 1) no lol Мені 15 2) Мені особисто це не подобається, тому що те, як це зроблено, є найбільш бодрішою річчю, яку я зробив 3) Перекладач JS був там деякий час 4) останні документи на SOGL (якщо їх можна так назвати) знаходяться тут , корито деяких речей (як palenChars.txt) більш оновлюються тут
dzaima

Знову вітаю скорочення кількості байтів! Я, чесно кажучи, не думаю, що можу знизити шахту !!
Дом Гастінгс

23

Perl 5 , 76 байт

}{${$_=$`x?B?}{?\w$?}{$_=qq{Lg\LLL$&= w$&RLD=}&qq=y}\LLL$&L _$&RLDA=}=$_=\*G

Для цього використовується функція, яка була застаріла, але працює локально в моєму терміналі (як зазначено у версії 5.18.2). У старих версіях Perl ?\w?є синонімом, /\w/який дає мені доступ до збігу з регулярними виразками, і у мене достатньо символів для $&(остання відповідність) та $`(текст, що передує останньому збігу). Мені потрібно це, щоб мати можливість отримати O. Я генерую це, створюючи globпосилання ( $_=\*Gяке, подане на скаляр, є чимось подібнимGLOB(0x7ffb728028d0) ). Після того, як це в $_, ?B?буде відповідати Bі $`буде містити GLO, я можу потім матч проти \w$якої буде зберігатися Oв$&який вставляється в рядки, які я виконую по рядку-AND, щоб створити решту тексту, тіло рядка є нижчим регістром за допомогою \L.

Спробуйте в Інтернеті! - використовує /\w/замість того ?\w?, що версія Perl у TIO занадто нова.


Perl 5 , 65 байт

Це трохи хитріше, оскільки воно покладається на ім'я файлу на TIO (що є .code.tio), тому я не дуже думаю, що це змагається, але я був задоволений результатом!

}{${$_=$0}{?\w$?}{$_=qq{Lg\LLL$&= w$&RLD=}&qq=y}\LLL$&L _$&RLDA=}

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


Я нічого не говорив про зміст прапорів, так -pце добре. Хороша робота, на це я сподівався, коли запитав це :)
Стівен

1
як ... що ... the ...
Okx

@StepHen Я радий, що зобов’язав! Мені справді дуже сподобалось це. Я радий, що ви теж не караєте прапор, я оновлю свою посаду. Спасибі!
Дом Гастінгс

@Okx Я радий, що це вплинуло!
Дом Гастінгс

Ви впевнені, що вам не потрібно додавати 15 байт <3?
Чарівний восьминога Урна

10

Унар , 7 * 10 182 байт

Unary - це Brainfuck, перетворений у двійковий, перетворений в одинаковий, використовуючи 0як лічильник. По суті, вона конденсує програму Brainfuck в число, а вихід - це число 0s. Вони, як правило, дуже великі програми.

Я не вставлятиму програму сюди, бо не знаю, скільки дозволяє текст SE, але я думаю, що це менше, ніж це. Натомість я вставлю точну кількість нулів у цій відповіді:

708184005756841022918598670049178934705323143517361395031673227349803938380119378597780037353721967636097362645175347036417214959141923667629285233360306016978751166690464736541968556

Оскільки це досить дешева відповідь, гарантовано не найкоротша, і я просто її скопіював , я роблю це повідомлення у вікі.


2
"Я не знаю, наскільки дозволяє текст SE", принаймні, це не 7 * 10¹⁸², що waaaaaay більше 65536.
Erik the Outgolfer

9

05AB1E , 137 106 95 байт

X00X00DXX00DXX00XX0X0X00D0XXXX0X00X00XXX00XXX0XXXXXX00XXXXX0XXXX00D0X000DD00XXJC000gDD0000g***B

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

-31 завдяки @Adnan за те, що я зазначив, що я міг би використовувати базу 108.

- ?? завдяки @Riley за те, що він вказав на деякі речі неправильно.


Стара версія (інший метод):

05AB1E , 211 186 166 байт

0g00g000000000gUX000000gXX00000g000g00g000gD0000g0 000g00000gX00000gX00000g0 00000g00000000g0000000g00g00000000gD000000gX0000000g0g00000gUXJX00000000000000000g000g**B

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


Ха-ха! І ТУТ Я ДУМАЮ, що ЕСОЛАНГИ НЕ МАЮТЬ ВІДПОВІДНОГО ШАНСУ!


Спочатку ми отримуємо 255, що зберігаються в X:

00g               # Push 2 (length of 00).
   00000g         # Push 5 (length of 00000).
         00000g   # Push 5.
               JU # Join to 255 and store in X.

Потім, використовуючи однаковий трюк довжини, ми натискаємо: 1296995323340359595058728869715

0g00g000000000g000000g000000000g000000000g00000g000g00g000g000g0000g0 000g00000g000000000g00000g000000000g00000g0 00000g00000000g0000000g00g00000000g00000000g000000g000000000g0000000g0g00000gJ

Де ми просто використовуємо 0<space>замість фокусу довжини нулі.

Потім, нарешті, ми натискаємо 255, які ми зберігали, і перетворюємо з 255 в базу 10 :

X  # Push stored 255.
 B # Convert to base 255.

Все-таки гольф, використовуючи інші дозволені символи, і дублювання, це буде хвилина.


8

Бітник , 148 байт

K QQQQQQQG ZD XA K QQJA KD ZD XA K KG KD ZD ZD ZD XA XA K B KD ZD XA K QQQQF ZD ZD XA K QQQD XA K A Z KD XA ZD XA K B KD XA ZD XA K J Z XA K QQQB XA

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

Пояснення

Beatnik базує інструкцію, виконану на основі шкали слова. Ось скорочене пояснення:

Code         Scrabble Score   Explanation

K            5                push the scrabble score of the next word
QQQQQQQG     72               72 ['H']
ZD           12               pop a value; push it back twice
XA           9                pop a value; print its ASCII character
KD           7                pop two values; push their sum
Z            10               pop two values; push their difference

8

Мурхен (v2.0), 3423 983 923 866 749 716 байт

Я думаю, що це можна трохи пограти в гольф, Мурсен - це непроста мова, з якою можна працювати.

xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU KA xU xU xU xU xU xU xU xU xU xU xU xU KA AA xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU KA xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU KA xU xU xU xU xU xU xU KA KA xU xU xU AA AA AA AA AA KA xU AA KA xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU KA xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU xU KA xU xU xU KA XI XI XI XI XI XI KA XI XI XI XI XI XI XI XI AA AA AA AA AA AA AA AA AA AA AA AA

Пояснення

Moorhens - це мова, заснована на словникових словах. Кожному слову відповідає операція, заснована на його хеші. П'ять операцій , які використовуються тут xU, ER, XI, KA, іAA

  • xU приріст TOS
  • ER ставить новий нуль на стек.
  • XI декременти ТОС
  • KA дублює TOS
  • AA скочує TOS на дно

Ми висуваємо кожен лист із послідовними додатками цих операцій.


5
"Дві операції" - Я не дуже добре розбираюся в езоланге, але, безумовно, це п'ять операцій?
boboquack


1
посилання на мову?
Leaky Nun


5

Гліфо , 480 байт

AABCABABABBAABABAABCABBAABABABBCABBAABABABABABABABBAABBAABABABABABABABBAABBAAABCABBAABABAABCAABCABBAABABABBCABABABBAABBAABABAABCAABCABBAAABCABBAABABABBAABBAABABAABCABCAABABABABABBAABBAABBAABABAABCABAAABABAABAABBAABCAABABABBAABBAAABCAABCABBAABABABBCABABABBCABABABBAABAAABABAABAABABABBAABABABBAABABABAAABABAABAABBAABABABBAAABCABBAABABAABCABCAABABABABABBAABBAABBAABABAABCABCAABAAABABAABAABBAABABABBCAABCABBAAABCAABCABBAAABCABBAABABABBAABABABBCABABABBAABAAABABABCAABBAAABAABACABBBABCB

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



4

Подвійний JavaScript, 318 байт

Я не впевнений, чи це дозволено, я не міг зробити це за допомогою інтерпретатора JavaScript один раз. Це аналогічно використанню, eval()але замість цього я використовую інтерпретатора двічі: (Спробуйте його в консолі, щоб результат був надрукований назад)

`\`\\x${0xA*0xA&0xC}${0xA&0xC}\\x${0xA*0xF&0xF}${0xB*0xF&0xF}\\x${0xA*0xF&0xF}C\\x${0xA*0xF&0xF}C\\x${0xA*0xF&0xF}F\\x${0xE*0xF&0xF}C\\x${0xE*0xF&0xF}${0}\\x${0xB*0xF&0xF}${0xB*0xB*0xF&0xF}\\x${0xA*0xF&0xF}F\\x${0xB*0xB*0xF&0xF}${0xE*0xF&0xF}\\x${0xA*0xF&0xF}C\\x${0xA*0xF&0xF}${0xA*0xA&0xC}\\x${0xE*0xF&0xF}${0**0}\``

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

Оцінюється:

`\x48\x65\x6C\x6C\x6F\x2C\x20\x57\x6F\x72\x6C\x64\x21`

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

Який оцінює Hello, World!


3

Smallf ** k , 266 байт:

zJ$NJ`ZZx*gQYQQ{zqyKKUkUR?AS`zB`JB&UCKCIxQ_G0*000FzzJ&?YwkC\qqgZ`xYQyC}DgY_&_S}KPZ\&?SGAE&{Gw_w} GAgA{qT{gC&`qI?xwCNQwgR}?{*QEwQUj&BT&jR__IJJIqUqAPF0yICXESL?AYR QIAFU& yYwE&$\Njj B0T*F j$?kCzQk*}U}UgI$}Ew_yDL`qYI*E_G}SCjXDFNJKGNIGyIwA\BzLP`*zCILGCNqyYZyq? GwN{q{gKSj

Власне, герої ніби не мають значення. Це лише питання про те, чи має кожен символ парну кодову або непарну кодову точку. Таким чином, я доклав зусиль використовувати кожен доступний символ (крім багатобайтових символів) (хоча, оскільки він був рандомізований, я не намагався це гарантувати).


1
@totallyhuman Ти маєш рацію; Я це зміню. Я просто видалю багатобайтові символи. На ньому насправді немає кодової сторінки; його просто потрібно зберігати як 1 і 0 (1 для непарних ordі 0 для парних ord), так що ви можете сказати, що це 33,25 байт xD
HyperNeutrino

Використання символу має базуватися на його появі в звичайній програмі, а не на його кодовій точці або байтовому значенні.
KSmarts

@KSmarts Я поцікавлюсь в ОП про це.
HyperNeutrino

@KSmarts Це означає, що якщо мова має іншу кодову сторінку і, наприклад, '5'займає регулярну кодову точку 'A', вам заборонено використовувати '5'.
HyperNeutrino

@KSmarts, що просто означає, що якщо у вас нестандартна кодова сторінка, ці символи пересуваються на цій кодовій сторінці. Ви все ще можете використовувати їх кодову точку як частину вашої програми.
Стівен

3

Пайк , 133 144 байт

? BXKKKKRKRKRK\CkJ00q}}}XEjTX}G_E\E\L\LkJjRT}}XRGREkJjR 00q}R? B_RE\ \wkJjRT}}XRGRE\R\L\DkJjRZ0q}}R? B_RER? JR? KREZjZ0q}AREkJjRT}}RG_RE00q}}RAA

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

Жахливий безлад коду, який майже напевно можна скоротити ... Конструює його один за одним символом.

? BXKKKKRKRKRK\CkJ - ".C" - A string that when evaled, gets the character at the point
00q}}}XEj - Construct 64 by doing `((0==0)*2*2*2)**2` and then eval, getting the "@" character and store it in `j`
TX}G_E - Get "h" using `@` by looking it up in the alphabet
\E\L\LkJ - "hELL"
jRT}}XRGREkJ - "hELLo"
jR 00q}R? B_RE  - ","
\ \wkJ - "hELLo, w"
jRT}}XRGRE\R\L\DkJ - "hELLo, woRLD"
jRZ0q}}R? B_RER? JR? KREZjZ0q}AREkJ - "hELLo, woRLD!"
jRT}}RG_RE00q}}RAA - "Hello, World!"

2

постійного струму , 164 162 байт

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzS zzS?zzzzzzzzzzzzS$zzzzzzzzzzzzzzzzzzzzzzzzzzzzzPzzzzzzzzzzzzzzzzSwzzzzzzzzzzzzzzzPzzzzzzzzSLzPzPzzzzPL$PL PLwPzPzzzzPLLPAI*PL?P

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

Можливо, є кращий / цікавіший підхід. Я спробував використовувати трюк ASCII + 256, який dcє, але він видає і додаткові символи (навіть якщо вони не друкуються), і як тільки я дістався до 'o', дивовижно просто 111, я зіткнувся з проблемою, навіть отримуючи значення 111+ (кратне 256), що враховує чистоту. Ось ось досить просте (хоча там, де можливо, гольф) рішення:

В dc, zце команда , яка штовхає глибину стека в стек. Це означає, що ми можемо використовувати його як приріст. Ось так я створюю більшість моїх значень ASCII для цього виклику (надруковано разом P), з яким я натискаю на названі стеки Sта повертаюсь на основний стек L.

dcдозволяє використовувати шестигранні значення AF навіть у тому випадку, коли вхідний радіус є десятковим (за замовчуванням). На щастя, наш перший лист, 72, кратний 12, тому я зберігаю тут байт чи два, множуючи 6 * 12 і друкуючи негайно ( zzzzzzzC*P). Моя версія 164 байтів використовувала перемноження на ранньому етапі, щоб отримати 72 ('H'), що було м'яко розумним, але затримка від попередньої спроби та марно витрачання байтів. Тепер я починаю з збільшення та збереження пробілу, знака оклику та коми, які вийшли з ладу, і тому їх ще не можна надрукувати. Далі я переходжу до "H", який надрукую негайно, перш ніж потрапити на "W", який я мушу зберегти на потім.

Я просто друкую, коли натискаю на 'е', то збільшую до 'l'. Я надрукую дві з них і збережу одну. Коли я роблю це «о», я спочатку подумав , що я повинен врятувати один з тих , на потім, але все начебто в порядку в цій точці. Я надрукую "o", витягую кому, пробіл та "W" з раніше, і тепер я повернувся до "o". Я роздруковую це і збільшую кілька до найвищого необхідного значення, 'r' (114), яке я друкую перед завантаженням та друкуванням 'l', яке я витягнув раніше.

Майже зроблено! 'd' - значення ASCII 100, яке легко робиться множенням 10 * 10 (менше байтів, ніж збереження його раніше та завантаження зараз). Шістнадцяткове значення Aдорівнює 10, як і наш вхідний радіус, який ми можемо отримати за допомогою команди I. Помножте їх, роздрукуйте, а потім завантажте та надрукуйте наш знак оклику раніше. Привіт Світ!

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