Розшифруйте вихідний код [грабіжник для спроб злому]


44

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

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

Виграє грабіжник з найбільшою кількістю очок (успішних тріщин).

Таблиця лідерів

Занадто багато вирішує

20 розв’язувань

15 вирішує

10 вирішує

7 вирішує

5 розв’язувань

4 рішення

3 вирішує

2 рішення

1 вирішити


1
Perl 5, розмір 27, автор Morot - print'pin '= ~ tr (a-za) (za-z) r

@ WumpusQ.Wumbley Ми всі були там ...;)
Мартін Ендер

3
Я відмовляюсь витрачати свій час, намагаючись його заспокоїти.

Зважаючи на два органи запитань, виявляється, що
скрембліровані / незашифровані

Відповіді:


32

CJam, розмір 20, автор Мартін Бюттнер

Hi "petStorm!", mame

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

Як це працює

Hi                      "           int(17)                     ";
   "petStorm!",         "                    len('petStorm!')   ";
                ma      "     atan2(       ,                 )  ";
                  me    " exp(                                ) ";
                        " exp(atan2(int(17), len('petStorm!'))) ";

Зламування коду

Бажаний вихід, 2.956177636986737- або Double, або Double, а за ним - Long.

Використовуючи лише символи в "Stop, Hammer time!", є чотири вбудовані оператори, які повертають не цілі парні пари:

  • mS, який asin
  • ma, який atan2
  • me, який exp
  • mt, який tan

Усі вони містять анну m, тому ми можемо використовувати максимум три з них. Є лише одне Sі одне a.

Усі ці оператори потребують введення, і maце єдиний, який споживає два входи. У нас є лише три способи підштовхнути Лонгса:

  • "...",, що висуває довжину струни (строго менше 18).
  • H, який штовхає 17.
  • ...!, що підштовхує логічне НЕ ....

У нас немає можливості підштовхнути щось хибне ..., тому останній варіант завжди натискатиме 0.

Вихід не починається і не закінчується 17або 0. Оскільки 15 десяткових цифр - це звичайна кількість цифр для подвійних, здавалося, що вихід є простим Double.

Якщо припустити це, код повинен належати до однієї з наступних категорій:

  • <Long> <mS|me|mt>{1,3}
  • <Long> <mS|me|mt>{x} <Long> <mS|me|mt>{y} ma <mS|me|mt>{z}.
  • Будь-яке з перерахованого вище, з деяким відхиленням до Long ( i) або округлення ( mo), застосованим до Double.

У другому випадку x + y + zце або 1, або 2, а один із Лонгів 0 або 17.

Решта була в основному грубою силою. Після кількох спроб,

18 , {H \ ma me 2.956177636986737 =} =

повернувся 9, маючи на увазі, що

H 9 ma me

виробляє бажаний вихід.

Залишилося лише усунути з рядка всі, крім 9 символів. Пробіли - це шуми, і iце довга на Лонгсі, тому "petStorm!"є одним із можливих варіантів.


1
Це божевільно - як ти з'ясував, яке було число?
Sp3000

1
Я шукав логарифм (та інші) цієї кількості, але не отримав жодного результату. Тепер я виявив, що використовую занадто високу точність.
jimmy23013

2
@ Sp3000: я відредагував свою відповідь.
Денніс

1
Дуже хороша! Я мав би витягнути ще два символи зі струни, напевно. У моєму оригіналі у мене фактично були пробіли всередині рядка, але mrперед тим, як взяти довжину. Не те, щоб ви не зрозуміли це в якийсь момент. ;)
Мартін Ендер

25

Python 3, розмір 12, від xnor

()and bciprt

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


1
У Python 3 IDLE це виводиться ().
Hosch250

@ hosch250 Оскільки його в програмі (файл python), нічого не виводиться, як немає print.
matsjoyce

Я бачу. Я бігав від речі командного рядка.
Hosch250

47
.... "річ" ....
TheDoctor

4
@Imray Через коротке замикання - Python завантажує кортеж і перевіряє, чи значення кортежу є правдивим, оскільки воно порожнє, воно помилкове. Код для завантаження змінної bciprtніколи не виконується, тому він ніколи не створює NameError.
Mateon1

20

Python, розмір 74, від xnor

any(print(set is
set)for i in oct(chr is
map))and aeeeeeggiilnnpprrrrrstvw

Ну це було весело. Завдяки FryAmTheEggman, hosch250 та isaacg за пропозиції / допомогу.


1
Хороша робота! Моє рішення було дуже схоже: list(\nprint(range is range)for aacdeeeeehmppprrrrssvwy in\noct(int is int)).
xnor

@xnor LOL це ім'я змінної. Чи погано, що я ніколи про це не думав? : P
FryAmTheEggman

2
@FryAmTheEggman Я думаю, що всі чекали, що я використаю трюк від мого першого копа .
xnor

@FryAmTheEggman Не хвилюйся, ти не єдиний: P
Sp3000

13

Python 2, розмір 50, від Geobits

print 2**2**2*2**2-22-2**2**2**2/2**2**2**2**2/2/2

Виходи 42.


1
Майте крапку :) Для довідки оригінал був print 2**2**2**2/2**2**2/2**2**2/2-2**2**2*2**2-22, але зовсім не дивно, що більш ніж один варіант є правильним.
Геобіц

13

GolfScript, розмір 13, Пітер Тейлор

,22,{.4&?+.}/

Перевірте це тут.

Ще одне, що я лише тріснув з великою допомогою Sp3000. Дякую!

Отже ось як ми потрапили. Sp3000 помітив купу пробігів послідовних чисел у висновку:

1,2,3,4,[2608852181],4582,4583,4584,4585,4586,[253225388392299],
142924,142925,142926,142927,142928,[302928],497409,497409

Виходячи з цього, ми зробили припущення, що це послідовність, що збільшується, що дозволяло лише одне можливе розщеплення решти чисел:

1,2,3,4,260,885,2181,4582,4583,4584,4585,4586,25322,53883,92299,
142924,142925,142926,142927,142928,302928,497409,497409

Це 23 числа, які були сильним показником для повторення блоку 22 рази, а також закінчення блоку з .(дублікат верхнього елемента стека), таким чином, що попередній результат залишився на стеку і таким, що остаточна ітерація з'явиться на стек двічі. Ось так 22,{____.}/.

Тепер, дивлячись на прогалини, вони виявляються четвертими силами (що приємно, бо ми маємо 4і ?). Точніше, вони є четвертою потужністю індексу поточного числа. Отже далі ми розглянули, які індекси створили розрив:

4,5,6,7, 12,13,14,15, 20,21,..?

У двійковій такі є

00100
00101
00110
00111
01100
01101
01110
01111
10100
10101

Усі вони мають третій набір бітів, а це означає, що індекс, мабуть, просто побітовий-і'ед 4(що знову-таки приємно, тому що ми можемо зробити інший 4з .і мати а &). Це працює особливо добре, оскільки ця операція призводить до 0або 4, і, якщо ми використовуємо це як показник, ми отримуємо 1або четверту потужність, і саме це нам потрібно. Тож давайте складемо це разом:

22,{.4&?+.}/

Ось що робить блок:

.      # Duplicate current index
 4     # Push a 4
  &    # Bitwise and
   ?   # Raise index to resulting power
    +  # Add to previous result
     . # Duplicate for use in next iteration

Зараз залишилися дві проблеми: у нас був бродячий, якого ,ми ще не використовували, і перша ітерація - це особливий випадок, оскільки немає значення попередньої ітерації, до якої ми могли б додати речі при зустрічі +. Ми з’ясували, що завдяки незв’язаному коментарю користувача user23013, який випадково згадав, що GolfScript починається з порожнього рядка на стеку (якщо на STDIN нічого немає). Таким чином, ми могли використати цю іншу ,праворуч на початку, щоб перетворити цю струну в a 0, що було саме тим, що нам було потрібно як початок ітерації.


Пляма на. На це надихнула послідовність в OEIS, яку я зараз не можу знайти.
Пітер Тейлор

3
І саме тому мати окрему нитку для грабіжників - хороша ідея. Хороша робота!
Денніс


11

Ruby, розмір 17, від Doorknob

p 2,%r~n~i=~'*tN'

Це було чудово весело. Спасибі Sp3000 за те, що допомагає мені в цьому! І я дізнався, що %r?...?літерали можуть мати будь-які роздільники. :)


10
Реквізит до Дорнобу за те, що він шалено вводив в оману print, лише для того, щоб розділити його на pдрук, %rшрифти та iневідчутне вирівнювання регексу.
Sp3000

11

PHP, розмір 49, автор bwoebi

print@substr(new exception,+~$$a+=++$$m+$$i+2+n);

Це було абсолютно ментально .

Це дісталося

print@substr(new exception,);

досить швидко, в цей момент мені потрібно було щось, що дає -6після коми, виїхавши $++$++$++$+=$~main$2.

Основний улов в тому , що $a, $mі $iвсе NULL, тому їх використання побічно в змінних величин , означає , що вони вказують на один і той же змінної. Однак PHP, здається, робить деякі дивні речі щодо вирішення змінних змінних. З нормальними змінними ви можете робити такі речі

echo $a+$a=2;

який друкує 4( 2присвоюється, $aа потім додається до себе). Але якщо я те ж саме роблю зі змінними змінними:

echo $$a+$$a=2;

Я отримую 2, тому що зараз перший $$aоцінюється перед завданням.

Врешті-решт мені вдалося примусити певний порядок, наклавши певний приріст на РЗС, +=який повинен був оцінюватися перед цим додаванням-призначенням. Таким чином я дістався до 5якого я міг тоді просто доповнити трохи. Все-таки ... відбуваються якісь загадкові речі, і я не маю уявлення, чому половина речей, які я спробував, працювала, а не працювала.


Для довідки, мій оригінал:print@substr(new exception,~$$mn+=2+$$a+++$$i++);
bwoebi

Btw. Я сподіваюсь, що всі знаки долара та той факт, що всі літери за те, що mainбули в рядку, вас дуже ввели в оману. Також, {main}я думаю , досить незвичний спосіб видобутку ;-)
bwoebi

@bwoebi mainдійсно не вводити в оману мене, після того, як плямистість exception, newі substr. Я думав, що вони будуть просто змінними іменами. Мені знадобилося трохи придумати використання змінних змінних, і ніж я витратив більшу частину часу на з'ясування певного порядку операцій, який би фактично дав a, 5який я міг би доповнити, не використовуючи іншого набору дужок.
Мартін Ендер

Що ж, наступного разу, якщо є більше доларів, ніж символів, зазвичай це змінні змінні. (У цьому випадку я також зловживав варварами, щоб змусити оцінку зліва направо.) Скільки часу знадобилося тобі, щоб помітити новий виняток субстрату? Також, до речі, я глибше знаю двигун Zend, тому я можу прекрасно пояснити собі, чому все оцінюється в якому порядку, і це приємно для цих проблем ;-) Якщо є конкретна річ, якої ти не розумієш, я ' з радістю поясню це вам.
bwoebi

@bwoebi Приходьте в чат завтра, і ми можемо поговорити про це, але я сьогодні витратив досить довго на це. ;) Що стосується вашого першого питання, exceptionбуло очевидним, що залишило бродячих персонажів substrі newлежачи навколо. Це було буквально перше, що я побачив, коли почав працювати над ним.
Мартін Ендер

9

Ruby, розмір 38, від Doorknob

[$><<(!$pece60).to_s[rand($win)].succ]

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

Ось як це працює. $><<це просто вихід. $pece60і $winє невизначеними глобальними змінними, які тому справедливі nil(і вони дозволили мені позбутися деяких сторонніх символів). !$pece60робить a trueі to_sдає рядок "true".

Протягом століть я намагався отримати 2або -2отримати доступ uдо цього, але тоді зрозумів, що можу просто взяти tта зателефонувати .succ(ессор), щоб зробити u.

randз nilпараметром повертає випадковий поплавок в інтервалі [0,1). Використовуючи поплавці для індексації в рядки, вони обрізаються цілими числами, тому це завжди поверне перший символ.

Нарешті, у мене була запасна пара, []тому я просто загорнув все в неї, тому що, на щастя, це все вираз у Рубі.

Завдяки Sp3000 за те, що ви кидали в чаті деякі ідеї.


8
Рубі - страшно виглядає мова.
feersum

8

C, 51 по es1024

c=0xf.cp9,hhtaglfor;main() {;; printf("%d",(++c));}

Після 20 років програмування C сьогодні я дізнався про шістнадцяткові постійні плаваючої точки.


8

Рубі, 45 (історик)

%q[zyfnhvjkwudebgmaclprs x].to_i(36)/51074892

Woohoo! Це моя перша тріщина при проблемі з кодом з гольфом, і мені не вистачає респондентів, щоб коментувати оригінальний пост. Я одразу визнав використаний трюк, оскільки насправді часто знаходив його використання у виробничому коді. Знадобилося близько 5 хвилин, щоб розібратися в більшій частині структури і кілька годин, щоб придумати повну відповідь.

Пояснення:

  • %q[]є альтернативним методом створення рядків. Також можуть використовуватися парентези та фігурні дужки.
  • String#to_i в Ruby приймає числа в будь-якій базі від 2 до 36. Він буде ігнорувати перший символ у рядку, який не входить до числа, тому будь-які зайві символи можуть бути "викинуті" після пробілу.

І ось код, який я використовував, щоб зламати його:

require 'set'

# return true if the string is made up of unique characters
def uniq(s)
  a = s.each_char.to_a
  return a == a.uniq
end

def uniq_while_same(a,b)
  s = Set.new
  a.each_char.zip(b.each_char).each do |ai, bi|
    return true if ai != bi
    return false if s.include? ai
    s << ai
  end
  return true
end

def ungolf(answer)
  # For each base that even makes sense
  [            36, 35, 34,     32, 31, 30,
   29, 28, 27, 26, 25, 24, 23,     21, 20,
   19, 18, 17, 16, 15, 14, 13, 12,     10].each do |base|
    # Ignore bases where it is not possible to create a unique-string number greater than answer
    next if answer > base ** base
    # Pick digits for the denominator that are not duplicates of the digits in base
    denominator_digits = ('1234567890'.each_char.to_a - base.to_s.each_char.to_a)
    # For each permutation of those digits for the denominator
    (1..10).each do |denominator_length|
      denominator_digits.permutation(denominator_length) do |denominator_s|
        # Maybe the denominator is in octal
        denominator_base = 10
        if denominator_s[0] == '0'
          next if denominator_s.include?('8') || denominator_s.include?('9')
          denominator_base = 8
        end
        denominator_s = denominator_s.join
        denominator = denominator_s.to_i denominator_base
        print "#{"\b"*64}(%q[#{(answer * denominator).to_s(base).ljust(36)}].to_i #{base})/#{denominator_s.ljust(10)}" if rand < 0.01
        # Ignore denominators that are definitely impossible to have answers for
        next unless uniq_while_same "qtoi#{base}#{denominator_s}#{(answer * denominator).to_s(base)}",
                                    "qtoi#{base}#{denominator_s}#{((answer + 1) * denominator).to_s(base)}"

        # For each numerator that gives answer when divided by the denominator
        (answer * denominator...(answer + 1) * denominator).each do |numerator|
          print "#{"\b"*64}%q[#{numerator.to_s(base).ljust(36)}].to_i(#{base})/#{denominator_s.ljust(10)}" if rand < 0.01
          # Remove any that are still not unique
          s = "#{numerator.to_s(base)}#{base}#{denominator_s}qtoi"
          next unless uniq s
          # Done. Compute which characters need to be thrown away to fill the remaining space
          remains = ('0123456789abcdefghijklmnopqrstuvwxyz'.each_char.to_a - s.each_char.to_a).join
          print "#{"\b"*64}#{" "*64}#{"\b"*64}"
          return "%q[#{numerator.to_s(base)} #{remains}].to_i(#{base})/#{denominator_s}"
        end
      end
    end
  end
  print "#{"\b"*64}"
  puts "\nnone"
  return nil
end


print ungolf 9410663329978946297999932

Шлях втілення проблеми NP у загадці. Мене ретельно обдурили. Хороша робота!


Я додав коментар до оригінальної для вас відповіді.
FireFly

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

* facepalm Ну, я все одно розважався.
charredUtensil

2
@charredUtensil, якщо ви не проти запустити свій сценарій ще раз, я думаю, що друк просто переходить pдо цього виразу. Імовірно, інші символи можуть бути використані для формування констант, як ви робили.
FireFly

Мені насправді не потрібно запускати його знову. Останні кілька символів рядка можна переставити, не змінюючи результату - p %q[zyfnhvjkwudebgmaclrsx].to_i(36)/51074892я знаю, що я порушив фактичну спробу
зламування

7

Оболонка Python [будь-якого] розміром 44, від Caridorc

__name__[3]  or (enfin_____[42], manager[1])

Я впевнений, що у ній повинно було бути більше, ніж у цьому, але оскільки __name__прирівнюється до цього __main__, вибирається 4-й символ 'a', а решта рядка ніколи не оцінюється.


Для довідки оригінальна програма[__name__ for ___name__ in range(1,4)][2][3]
Caridorc


7

CJam, розмір 13, користувачем23013

G,Cf#If/sE*K%

Перевірте це тут.

Вирішується вручну так:

По-перше, деякий фон для не-CJammers:

  • CEGIKвсі змінні, які попередньо инициализируется 12, 14, 16, 18, 20, відповідно.
  • s перетворює верхній елемент стека в рядок.
  • Струни технічно є лише масивами символів.
  • fдосить магія. Для цієї відповіді спрощеною версією є те, що для масиву a, деякого іншого значення bта оператора gпослідовність abfgвідображається g(_,b)на a(де кожен елемент aпереходить у _слот).
  • / це поділ і розбиття масивів (серед іншого).
  • * це множення та повторення масиву (серед іншого).
  • %- це модуль і деяка дивна операція, яка у формі ad%для масиву aі цілого числа dприймає кожен dелемент a(наприклад, нарізка Python з шириною кроку d).
  • # - це експоненція (серед іншого).
  • ,перетворює числа в діапазони (від 0до n-1) і повертає довжину масиву.

Гаразд, що з шляху ...

Було досить очевидно, що нам потрібно ,перетворити число в діапазон, тому що єдиним іншим способом отримати масив було б побудувати більше число і перетворити його в масив символів s- але тоді ми не могли зробити жодного подальша арифметика на ній. І нам потрібен масив, щоб зробити щось із fs.

Я спершу припустив, що fs використовувались #і %, але це означало б, що нам знадобиться цифра близько 90, щоб отримати потрібну кількість цифр у підсумку. Крім того, це не пояснило, що з чим робити s, і оскільки відповідь виглядала справді гостро, я сумнівався, що користувач23013 просто додав sкудись як ефективний запуск, щоб скинути людей.

Тож я подумав, можливо, він навіть не підтримує малі числа %, але натомість він створює масив з величезних чисел, поєднує їх рядкове представлення s, але потім вибирає з нього лише якийсь непарний фрагмент %. Тому я трохи розігрався з наступними рамками:

__*,_f#_f/s_%

(Ви не можете зробити це _f/першим, тому що це дасть нуль принаймні для перших 12 елементів.)

Де _перестановка змінних. Я не пробував усіх, перш ніж мені нудно, і головна проблема з цим полягала в тому, що послідовність цифр, як завжди, занадто довга.

У якийсь момент мені спало на думку, що нам не знадобиться такий великий діапазон (тобто добуток двох чисел), якби замість цього ми використовували *для повторення отриманого рядка. Через невідповідність параметрів *і %це не призведе до повторення результату:

_,_f#_f/s_*_%

Це дало результати довжини, дуже близької до того, що я шукав. Я б перепробував всі 240 з них, але досить швидко (третя чи четверта спроба) я натрапив на

E,Cf#If/sG*K%

яка врожайність

03081942753650251594592190492275006661328850322159030034930530649722385533653290754678977

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

  • Я не міг змінитись, Kбо це взагалі вибирало б різні цифри.
  • Я не міг змінитись, Cабо Iтому, що це змінило б числа, отримані в результаті двох операцій з картою.
  • Якби я змінив, Gце змінило б лише кількість повторень, що нічого не змінило б тривалість результату. (Що добре.)
  • Якби я змінив E, це змінило б діапазон масиву, але діапазон все-таки почався з [0 1 2 3 ...], тому це не вплине на обчислення. Це буде впливати на довжину базового рядка , що підлягає поверненню s, що також означало б , що K%б вибрати різні цифри від додаткових повторень.

Так що я просто намагався обмінювати Eі Gі вуаля:

030819828850379075460427536222159187897761502517030034671154875945928930530907551421904962649729

У підсумку, ось що робить код:

G,            "Push [0 1 2 3 ... 13 14 15].";
  Cf#         "Raise each element to the 12th power.";
     If/      "Divide each element by 18.";
        s     "Concatenate all numbers into a string.";
         E*   "Repeat 14 times.";
           K% "Pick every 20th digit.";


6

Pyth, розмір 11, від isaacg

:\\w$ ",d,N

Це дещо середнє зловживання помилками саме там. Цей компілюється для:

Pprint("\n",at_slice("\",input(), ",d,N))

Відповідна помилка полягає в тому, що \\компілюється "\"замість "\\", що дозволяє компілювати Pyth у рядок.


Повинен Pprintбути print, або принаймні pprint?
FireFly

@FireFly Саме так вказано вихід налагодження. Може, інтерпретатор Pyth визначає власний Pprint?
Мартін Ендер

О, гаразд, майте на увазі тоді.
FireFly

6

Python, розмір 69, від Sp3000

print(sum(list(map(ord,str((dict(((str(dict()),list()),)),str()))))))

Це було важко ...


1
Приємно! Для довідки, оригінал був print(sum(map(ord,str((dict(list(((str(),str(dict())),))),list()))))), але очевидно, що багато різних перестановок ключових слів працювали б.
Sp3000

2
Ось такий рівень парівок LISP!
xnor

6

Python 3, 37 байт, Sp3000

print(sum(b"a".zfill(len(str(...)))))

Очевидно, що найскладніша частина полягала в тому, щоб перетворити рядок у байти. Мені довелося спати на ній, і в ніч зрозумів: "а, це байт буквально!"


Ахаа прекрасно зроблено, я думав, що Еліпсіс може
відключити

Я бачив еліпсис і zfill, але не знав про об'єкти байтів. Вони можуть бути корисні в гольф-масивах цілих чисел!
feersum

Чудова робота! Я бачив лише друк та .zfill, і знав, що сума може бути частиною цього, але не могла його вирішити. Майте +1.
Hosch250

6

PHP, 53, від PleaseStand

Нарешті тріснув:

for($d=57,$o=35;$o+$d<999;)$o+=printf("$d%o",$d+=$o);

Рішення прийшло досить швидко, коли я помітив, що послідовність складається з чергування десяткових і восьмеричних чисел:

Dec: 57...92...132...177...228...285...348...417...492....573....661....756....858....
     571349220413226117734422843528553434864141775449210755731225661136475615328581707
Oct: ..134..204...261...344...435...534...641...754...1075...1225...1364...1532...1707
==Dec:  92  132   177   228   285   348   417   492    573    661    756    858    967

Також інтервали між кожним набором чисел зростали зі швидкістю, що дорівнює значенню, поверненому printf()(тобто кількості записаних символів).


3
Нічого собі, приємна детективна робота!
Sp3000

6

Пітон 2, розмір 132, від Vi.

exec('from string import printable as e\nprint "cqance"\x2Ereplace("q",e[len("fgiillmmooprrsstt")])or ",,,\016:::S[]____tuuvyy" ""')

Дякую за всі зворотні риси та лапки :)


Редагувати: оновлена ​​версія 96 символів:

exec "try:exec'from __future__ import braces\\nt(12)'\nexcept SyntaxError as q:print(q[0][6:])"

Це повністю взято з рішення Алекса на https://codegolf.stackexchange.com/a/41451/32353


Хе, приємно. Цікаво, що таке рішення про індексованість ...
FireFly

Це не призначене рішення. Оригінальне рішення не має «одноразову» речей , як fgiillmmooprrssttабо ,,,\016:::S[]____tuuvyy.
Ві.

exec? Мій код міг бути коротшим ... Я емулював його з compile+ evalчерез те, що забув про exec...
Vi.

Реалізовано більш коротку версію. Спробуйте вияснити оригінальний трюк.
Ві.

5

CJam, розмір 15, автор Ypnypn

98,{7%}%{6+}%:+

З даних персонажів я здогадався, що це має бути одна з трьох наступних форм:

__,{_%}%{_+}%:+
_,{_%}%{__+}%:+
__,{_+}%{_%}%:+

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


Блін, я просто вирішив це також: /
Оптимізатор


5

Python 2, розмір 61, автор FryAmTheEggman

print(dir('~s]l.c:st_''-p_tp.l]-~.:o:Te[_u[.i_')[10][2:][:3])

Я був би дуже здивований, якщо це відповідає оригіналу.


Це не так, але все-таки вітаю! Мій код був:print''.__doc__[::2][::3].split()[1].split('.')[0][:-~-~True]
FryAmTheEggman

Заздалегідь я не мав би включати цитати ...;)
FryAmTheEggman

@FryAmTheEggman О, вау - приємна програма! Я був переконаний, що ви принаймні використовували dir()для пошуку "отримати". І так, без лапок було б дуже складно.
grc

5

Python 3, Sp3000, розмір 44

print(~(~(()<((),))<<(()<((),))))<<((()<()))

Тут мені допоміг Python 3, оскільки Noneпісля друку відповіді я зміг викликати помилку (зсув ліворуч на щось).


Гм ... схоже, я був досить марнотратний своїми паренами. Мав print(~(~(()<())<<((()<((),))<<(()<((),)))))спочатку.
Sp3000

5

PHP, розмір 52, від kenorb

_:@print_r(chr(@++$i+pow(3<<5,1)));if($i<2*4)goto _;

(Боже, скільки часу знадобилося мені, щоб зрозуміти, що робити з рештою _rсуфікса. Поки я не помітив, що це не так print, але print_r...)


І я не знаю, як ви це зрозуміли :) Оригінал : _:print_r(chr(3*pow(2,5)+@++$i));if(@$i<4<<1)goto _;.
kenorb

3
@kenorb a) вам потрібно надрукувати щось, так що це echoне можливо; printзалишився; б) вам потрібна певна петля, але для forциклу не вистачало крапки з комою, і ну, є двокрапка ... так що, мабуть, мітка там у поєднанні з goto; в) тоді він потребує, якщо перервати гото-цикл. Маючи зараз X:print($Y);if($Y)goto X;(X і Y є заповнювачами); г) є ++, але ні =, тому, ймовірно, деякі ++$Zвід 1 до 8; д) щоб отримати літери з цілого числа, нам потрібно chr()(як правило) - воно було там; f) тепер мені просто потрібно було знайти числа 96 і 8 для chr і if. Потім заповніть заповнювачі та волі.
bwoebi


5

C, es1024, довжина 70

e='C',f;main(g){Chorkil:f=printf("40%.d",e+e-  -g);}hAx;*hotpoCkats();

Важка частина в кінцевому підсумку полягала в тому, щоб слідкувати за всіма непотрібними персонажами ... серйозно ... Мені довелося повторювати їх близько 10 разів. Єдине, що мене хвилювало - це, .але я якось застряг у середині printfрядка формату, і він став невидимим!



5

Хаскелл, розмір 34, Петро Пудлак

main=print(0xb2f3d5^0x7f1f27::Int)

Зауважте, що ця програма повинна бути запущена на 32-розрядній машині. Якщо ви хочете перевірити, чи це правильна програма, і у вас 64-розрядна машина, ви можете використовувати це замість цього:

import Data.Int
main=print(0xb2f3d5^0x7f1f27::Int32)

Згадати "кадр" програми було досить просто main=print(0x<hex digits>^0x<hex digits>::Int). Вся магія полягала в тому, щоб шукати правильний спосіб розділити і замовити цифри. Я не робив тут дуже розумного, просто грубий пошук ... хоч я і подбав про те, щоб зловживати тим фактом, що деякі цифри дублювалися, мабуть, приблизно однакова кількість цифр у базі та експоненті, і остання цифра бази майже напевно не була рівною. Повний код пошуку включений нижче; він використовує пакет мультисети-гребінець . Повний пошук займає на моїй машині близько 10:33 (і, звичайно, дає лише одну правильну відповідь).

{-# LANGUAGE NoMonomorphismRestriction #-}
import Control.Monad
import Data.Int
import Data.List (inits, tails, group)
import Numeric
import Math.Combinatorics.Multiset

main = print (searchFor (-1121766947))

searchFor n = do
    nl <- [6,5,7,4,8,3,9,2,10,1,11]
    (l_, r_)  <- chooseSubbag nl digits
    l <- perms l_
    guard (last l /= '2')
    r <- perms r_
    guard ((fromString l :: Int32) ^ (fromString r :: Integer) == n)
    return (l, r)

chooseSubbag n = chooseSubbag' n . group
chooseSubbag' n xss = go (drop (n-1) (concat xss)) n xss where
    go _  n xss | n < 0 = []
    go _  0 xss = [([],concat xss)]
    go [] n xss = []
    go m  n (xs:xss) = do
        (kx, tx) <- zip (tails xs) (inits xs)
        (k , t ) <- go (drop (length tx) m) (n-length kx) xss
        return (kx++k, tx++t)

digits = "1223577bdfff"
fromString = fst . head . readHex
perms = permutations . fromList

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