Кодування URL-адреси у головний мозок


11

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

Мій браузер зламали! Рядок розташування перетворений на перекладача розумних. Мені потрібна програма, яка перетворює URL-адресу в програму, що займається мозком. Мій комп’ютер також дуже повільний, тому якщо програма для епізодів невелика, це краще.

О, і у мене залишилася відкрита лише одна робоча вкладка, мій щебет. Тож ви можете надіслати мені програму лише в твітті.


  1. Напишіть програму, яка вміщається в твітті (140 символів) будь-якою мовою, яка приймає рядок як вхідний і виводить мозкову програму.

  2. Ця програма для мозкових запитів буде запускатися без введення та дасть результат.

  3. Цей вихід буде вставлений у рядок розташування Google Chrome та виконаний.

  4. Якщо поведінка Google Chrome збігається з поведінкою, яку ви отримаєте, ввівши рядок введення з №1, тоді рішення є дійсним. Перенаправлення за допомогою скорочувачів URL вважається різною поведінкою - залишайтеся принаймні на одному домені.

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

Ваш бал визначається сумою тривалості програм, що генерують розум, для кодування наступного набору URL-адрес:

https://www.google.com/
/codegolf/47895/
http://www.golfscript.com/golfscript/examples.html
http://en.wikipedia.org/wiki/Percent-encoding
ftp://ftp.freebsd.org/pub/FreeBSD/
https://github.com/isaacg1/pyth/blob/master/doc.txt#L92
http://ftp.gnu.org/non-gnu/nethack/nethack-3.4.0.tar.gz.back-RSN.README

Найменший рахунок виграє.


Можемо припустити, що вхід буде форматований так: http://www.google.com/чи це колись просто буде google.com? (Обидва дійсні, що стосується Google Chrome, але ваш список містить лише повні форми) PS У мене майже є бажання написати розширення для хрому, яке це робить ...
BrainSteel

2
@BrainSteel Вхід для вашого кодера буде точно таким, як зазначено в питанні (кожен рядок - один вхід). Виведенням мозкового запису може бути будь-який формат, прийнятий Google Chrome, якщо він має таку саму поведінку, як і вихідний рядок введення. Так що, якщо ваша програма отримує вхідні дані http://www.google.com/програми Brainfuck вона виробляє може виводити google.com, www.google.comі т.д., так як вони все результат в одній і тій же сторінці. Але наприклад ftp://ftp.freebsd.org/pub/FreeBSD/це не те саме, що ftp.freebsd.org/pub/FreeBSD/.
orlp

Ах, дякую за уточнення! Вибачте, я трохи повільний сьогодні вранці.
BrainSteel

Я хотів би уточнити, що я не зміг, і ftp://ftp.freebsd.org/pub/FreeBSD/це дійсно те саме, що і ftp.freebsd.org/pub/FreeBSD/в Google Chrome. Це робить виклик трохи легшим, ніж я задумав, але таке життя. Я не буду змінювати вимоги, тому безпечно просто зняти що-небудь раніше ://.
orlp

Відповіді:


7

Pyth - 118 байт, оцінка: 154 + 567 + 597 + 620 + 530 + 875 + 1092 = 6630 6623 4653 4435

Тепер використовуємо альго множення фактора!

Це досить простий алгоритм, хоча і трохи кращий за вищевказані. Я планував використовувати Pyth, але з поточним алгоритмом Python відповідає <140 байт .

=zecz"//"=z?>z4}"www."zz=z?Pzqez\/zFNzKCNJ/^K.5 1=d\+pk+holN[?*-KZd>KZ*-ZK\-+\>*dK+++++\>*Jd"[>"*Jd"<-]>"*-K*JJd)\.=ZK

Спочатку викреслюється http://за допомогою split("//")та на www.і /в кінці. Потім він використовує функцію min, щоб перевірити, який найкращий з трьох розглянутих варіантів:

  1. Використовуйте +або -оновіть поточне значення комірки до потрібного значення комірки
  2. Перейти до нової осередку і просто заправити +х
  3. Перейдіть до нової комірки та використовуйте множення для оновлення, виконавши sqrt (n) * sqrt (n) + залишок, оскільки квадрат має мінімальний периметр постійної площі. http://cydathria.com/bf/bf_ex3.html

Потім я завжди ставлю а .для виведення кожного символу.

Детальне пояснення нового коду незабаром. Я ніби напівзробити гольф, особливо стриптиз www.та /в кінці, але я не можу турбуватися, оскільки мені 20 байт під ліміт.

Це дивно працює на ftp://URLs , оскільки це хром і хром автоматично робить ftp.freebsd.org/pub/FreeBSD/вftp://ftp.freebsd.org/pub/FreeBSD/

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


Розширення Omnibox Brainfuck

Це вірно! Після того, як я побачив коментар @ BrainSteel, я зрозумів, що треба це зробити. Це не бере на себе весь універсальне вікно пошуку тільки тоді , коли ви робите bf, tab. Крім того, що apni omnibox є дивним, він не дозволяє мені пересилати код у всебічне вікно, я повинен сам обробляти його. Тож я роблю власну http://перевірку, а потім встановлюю URL-адресу вкладки.

Оскільки мені не здавалося платити 5 доларів, необхідних для розміщення розширення на веб-магазині, вам доведеться встановити це вручну. Просто завантажте поштовий індекс звідси: https://drive.google.com/file/d/0B0qkKIzGc0QiNzBzVUJjZkRIZ0k/view?usp=sharing , розпакуйте, перейдіть на сторінку розширень в хромі, натисніть поле опцій режиму розширення праворуч та завантажте розпаковане розширення.

Сподіваюся, вам сподобається! :)


Це не працюватиме за ftp://URL-адресою.
PurkkaKoodari

1
@ Pietu1998 ось що я думав спочатку, але Chrome мене здивував. Спробуйте ввести ftp.freebsd.org/pub/FreeBSD/ у свій адресний рядок, а Chrome зробить це ftp: // ftp.freebsd.org/pub/FreeBSD/
Maltysen

@Maltysen На жаль Я навмисно включив цю URL-адресу, щоб запобігти цій оптимізації, але, схоже, я не зміг. Ця URL-адреса справді інша, але, здається, Chrome справді досить розумний, щоб розпізнати та додати ftp://. Що ж, добре.
orlp

4

C, 140 134 132 138 128 139 Байт

263 + 816 + 911 + 955 + 827 + 1355 + 1779 = 7269 6906 байт

Оновлення: на 6 байт менше, завдяки горішкам!

Оновлення ще раз, 128 байт. Код значно менш читабельний. Зараз він також намагається зняти URL-адресу ftp://.

Оновіть третє, на 139 байт. Код трохи зручніше читати і позбувся якоїсь неприємної невизначеної поведінки. Тепер, якщо імені сайту передує www., його знімають. Мені під 7k, але я думаю, що я повинен поступитися Малтісену з Pyth. Молодці.

#define p putchar
a;main(int c,char**V){while(*V[1]++-47);*++V+=1;for(*V+=**V-'w'?0:4;c=**V;*V+=1,p(46))for(;c-a;a+=c>a?1:-1)p(c>a?43:45);}

Трохи розплутали:

#define p putchar
a;
main(int c,char**V){
    while(*V[1]++-47);
    *++V+=1;
    for(*V+=**V-'w'?0:4;c=**V;*V+=1,p(46))
        for(;c-a;a+=c>a?1:-1)
            p(c>a?43:45);
}

Цей код бере URL в командному рядку, і перетворює його в доменну піч , використовуючи тільки ., -і +. Код робить спробу роздягнути рядок ftp://, http://, https://і www.перед перетворенням в BF. Ось перелік результатів виходів:

google.com/
codegolf.stackexchange.com/questions/47895/
golfscript.com/golfscript/examples.html
en.wikipedia.org/wiki/Percent-encoding
ftp.freebsd.org/pub/FreeBSD/
github.com/isaacg1/pyth/blob/master/doc.txt#L92
ftp.gnu.org/non-gnu/nethack/nethack-3.4.0.tar.gz.back-RSN.README

Як щодо використання однієї внутрішньої петлі: for(;c-a;a+=c>a,a-=c<a)p(c>a?43:45)має працювати.
nutki

@nutki Вражає! Дякую!
BrainSteel

"Зверніть увагу, що якщо ми можемо припустити, що жодна URL-адреса не починається з іншого, крім http: //, https: // або ftp: //, ми можемо скинути 10 байт з цього рішення." Ваше рішення має працювати лише для вищезазначеного набору даних, тож ви можете припускати все, що завгодно, до тих пір, поки набір даних все ще буде правильно оброблятися /
orlp

@orlp Ура! Це звучить як 12 байт, з якими можна грати! Дякую за цей виклик, це було дуже весело!
BrainSteel

4

Brainfuck, 77 байт, оцінка = 31647

Оцінка - це сума codepoint+4кожного персонажа.

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

(Використовується реалізація BF з EOF = 0.)

Приклад:

input:
!bar

output:
+++++++++++++++++++++++++++++++++.[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]

0

JavaScript (ES6) - 137 байт, оцінка - 7413

При цьому використовується тільки ., +і -. Ви можете протестувати його в консолі Firefox.

B=s=>[...s.replace(/^h.+\/\//,'')].map((c,i,a)=>(v=i?c[C]()-a[i-1][C]():c[C='charCodeAt']())?'-+'[v>0|0].repeat(v>0?v:-v):'').join('.')+'.'

Це мій рахунок рахунку:

[
    'https://www.google.com/',
    'http://codegolf.stackexchange.com/questions/47895/',
    'http://www.golfscript.com/golfscript/examples.html',
    'http://en.wikipedia.org/wiki/Percent-encoding',
    'ftp://ftp.freebsd.org/pub/FreeBSD/',
    'https://github.com/isaacg1/pyth/blob/master/doc.txt#L92',
    'http://ftp.gnu.org/non-gnu/nethack/nethack-3.4.0.tar.gz.back-RSN.README'
].map(B).join('').length
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.