Bir sayı düşünüyorum (Polisin Konusu)


32

Hırsızın Konu burada

Bu mücadelede polisler pozitif bir tamsayı düşüneceklerdir. Ardından, sayı girişi yapıldığında bir değer, diğer tüm pozitif tamsayılar için başka bir değer veren bir program veya işlev yazarlar. Daha sonra polisler, sayıyı gizli tutan bir cevapta programı ortaya çıkaracak. Soyguncular numarayı bularak cevap verebilirler.

İşte yakalamak var: Bu edilir değil yerine puanınız düşük puan daha iyi olmak gizli bir sayı olacaktır. Açıkçası, soyguncular hala bulmaya çalışırken puanınızı açıklayamazsınız. Yayınlanmasından bir hafta sonra kırılmayan bir cevap, puanının açıklanmasına ve güvenli olarak işaretlenmesine neden olabilir. Güvenli cevaplar kırılamaz.

Muhtemelen söylemeye gerek yok ama cevabınızı puanlayabilmelisiniz. Karar makineniz tarafından hangi değerin kabul edildiğini tam olarak bilmeniz gerekir. Sadece bir tane olduğunu bilmek yeterli değildir.

Şifreleme fonksiyonlarının kullanımı

Sizden, şifreleme işlevlerini kullanmamanızı isteyen çoğu polis ve soyguncunun meydan okumasından farklı olarak, bu zorluk yalnızca tamamen izin vermekle kalmaz, aynı zamanda onları teşvik eder. Kazanmaya çalıştığınız sürece cevaplar oluşturmakta özgürsünüz. Olduğu söyleniyor, diğer yöntemleri kullanarak cevaplar da burada açıktır. Mücadelenin amacı kazanmaktır ve hile yapmadığınız sürece hiçbir şey masaya yatırılmaz.


1
Kritografik fonksiyonlara izin verirseniz, programlara bir zaman sınırı koymanızı tavsiye ederim.
Okx,

12
Bu meydan okumayı reddettim, çünkü çoğu dilde bir harita algoritması ya da basit bir döngü kullanılarak kolayca kırılabilir. Polisler ve soyguncular mücadelesi için biraz kolay olduğunu düşünüyorum .
Bay Xcoder,

2
Birinin (muhtemelen en küçük) kabul edilen değeri bilen, ancak daha doğru cevaplar olup olmadığını veya ne olduklarını bilmeyen bir sürü polis olacakmış gibi hissediyorum.
histocrat

12
@ Mr.Xcoder Oy vermekten çekinmekte özgürsünüz, ancak bunun bence bu bir sorun değil, bence bir kusur değil. Zorluk, hesaplamayı yavaşlatarak kaba kuvvet kuvvetini zorlaştırmak zorunda kalan polisler için çok eğlenceli. Daha yaratıcı cevaplar, daha küçük ve daha küçük sayıları kullanmalarına izin vererek kaba zorlamayı daha da zorlaştırmalıdır.
Buğday Sihirbazı,

1
Bunun kazanan olmaz varsayalım @WheatWizard, ama sadece girdi karşılaştırır mesela bir programı kırmak mümkün olmazdı A(9,9)nerede AAckerman işlevidir.
kusur

Yanıtlar:


10

Tampio , Çatlak

m:n tulos on luvun funktio tulostettuna m:ään, missä luku on x:n kerrottuna kahdella seuraaja, kun x on luku m:stä luettuna
x:n funktio on luku sadalla kerrottuna sadalla salattuna, missä luku on x alempana sadan seuraajaa tai nolla
x:n seuraajan edeltäjä on x
x:n negatiivisena edeltäjä on x:n seuraaja negatiivisena
nollan edeltäjä on yksi negatiivisena
x salattuna y:llä on örkin edeltäjä, missä örkki on x:n seuraajan seuraaja jaettuna y:llä korotettuna kahteen
sata on kiven kolo, missä kivi on kallio katkaistuna maanjäristyksestä
kallio on yhteenlasku sovellettuna mannerlaatan jäseniin ja tulivuoren jäseniin
tulivuori on nolla lisättynä kallioon
mannerlaatta on yksi lisättynä mannerlaattaan
maanjäristys on kallion törmäys
a:n lisättynä b:hen kolo on yhteenlasku kutsuttuna a:lla ja b:n kololla
tyhjyyden kolo on nolla
x:n törmäys on x tutkittuna kahdellatoista, missä kaksitoista on 15 ynnä 6
x ynnä y on y vähennettynä x:stä

Çalıştır:

python3 suomi.py file.suomi --io

Tercüman yükleme talimatları Github sayfasına dahil edilmiştir. Lütfen bunu yönetmekte zorluk çekiyorsanız söyleyin.

Sözde koddaki program. Tercümanım süper verimsiz olduğu için program çok yavaş çalışıyor. Ayrıca, değerlendirme süresini birkaç dakikadan 10 saniyeye kadar düşürebilen herhangi bir optimizasyon optimizasyonu da kullanmadım.


1
Tampio için çevrimiçi tercüman yok mu?
Shaggy,

@Shaggy Henüz değil, ne yazık ki. Muhtemelen TIO'ya eklenip eklenmeyeceğini sormalıyım.
fergusq


5

Perl 6 - Çatlak!

Kesin olarak, bu kabul edilebilir bir sunum değildir, çünkü kazanmak için çok uğraşmaz. Bunun yerine, hoş bir bulmaca sunmayı umuyor.

Tefekkürle kırılması amaçlanan bir "saf matematik" programıdır. Eminim ki çözümü zorlaştırabildiğinizden eminim (bilerek yaptığım bazı özensiz programları temizledikten sonra), ancak “tam kredi” için (: -)), matematik alanında ne yaptığını açıklayabilmelisin. .

sub postfix:<!>(Int $n where $n >= 0)
{
	[*] 1 .. $n;
}

sub series($x)
{
	[+] (0 .. 107).map({ (i*($x % (8*π))) ** $_ / $_! });
}

sub prefix:<∫>(Callable $f)
{
	my $n = 87931;
	([+] (0 .. $n).map({
		π/$n * ($_ == 0 || $_ == $n ?? 1 !! 2) * $f(2 * $_/$n)
	})).round(.01);
}

sub f(Int $in where $in >= 0)
{
	 { series($_)**11 / series($in * $_) }
}

F () işlevini kırmanız gerekiyor. (Bu, bir doğal sayı alan ve iki sonuçtan birini döndüren işlevdir .) Uyarı: @ Nitrodon tarafından gösterildiği gibi, program aslında yanlış davranır ve sonsuz sayıda girdiyi "kabul eder" . Nasıl düzeltileceği hakkında hiçbir fikrim olmadığı için, aklımdaki sayının 70000'den az olduğunu ileri sürdüğünü söyleyeceğim .

Eğer TIO bu çalıştırmayı denediğinizde, bu olacak zaman aşımına. Bu kasıtlı. (Çünkü hiç çalıştırılmaması gerekiyordu!)

Sonunda, oldukça açık bir kod yazmaya çalıştım. Dile aşina olmasanız bile, çoğunlukla akıcı bir şekilde okuyabilmelisiniz. Sadece iki Açıklamalar: [köşeli parantez op ] operatörü ile bir liste (Haskell lingo, "katlama") azaltmak anlamına op ; ve çağrılan alt postfix:<!>aslında adlı bir postfix operatörünü tanımlar! (yani, bu şekilde kullanılır 5!- tam olarak beklediğiniz gibi yapar). Benzer şekilde prefix:<∫>bir tane için.

Umarım birileri bu hoşuna gider, ama zorluk doğru anladım emin değilim. Yorumlarda beni şaşırtmaktan çekinmeyin: --).

Çevrimiçi deneyin!



4

JavaScript, Kırık

Bu cevabın içine sığamayacağı bir noktaya, bunu elimden geldiğince karıştırdım.

Burada dene! Çalıştır'ı tıklayın ve ardından konsola yazınguess(n)

Yanlış cevap alırsanız undefined döndürür, aksi takdirde true döndürür.

Düzenleme: Bir şekilde puanımın sayı olduğu kısmına bakmıştım. Neyse, numaram çok çok büyük. Yine de çözmede iyi şanslar.



3

Jöle , skor: ... 1 ( kırılmış )

5ȷ2_c⁼“ḍtṚøWoḂRf¦ẓ)ṿẒƓSÑÞ=v7&ðþạẆ®GȯżʠṬƑḋɓḋ⁼Ụ9ḌṢE¹’

Çevrimiçi deneyin!

1 Gerçekten bunu açıklamamı mı bekliyorsun? Haydi! Oh iyi, 134 puan var. İşte dedim!



@ Mr.Xcoder Uzun yaşadı ...
Outgolfer Erik

Yeni girdim Ç€Gve 1...1000girdi olarak aralık : P
Mr. Xcoder

5ȷ2_Parçayı doğru gördün mü?
Outgolfer Erik,

Hayır, lol koduna bile bakmadım. Test takımını yeni ekledim ve nerede 1olduğunu gördüm , sonra dizgiyi baştan 1bir Python betiğine yapıştırdım ve
sıfırdan

3

Python 2 (kırık)

Ben kaba kuvvet önermem. Jeneratörleri seversin!

print~~[all([c[1](c[0](l))==h and c[0](l)[p]==c[0](p^q) for c in [(str,len)] for o in [2] for h in [(o*o*o+o/o)**o] for p,q in [(60,59),(40,44),(19,20),(63,58),(61,53),(12,10),(43,42),(1,3),(35,33),(37,45),(17,18),(32,35),(20,16),(22,30),(45,43),(48,53),(58,59),(79,75),(68,77)]] + [{i+1 for i in f(r[5])}=={j(i) for j in [q[3]] for i in l} for q in [(range,zip,str,int)] for r in [[3,1,4,1,5,9]] for g in [q[1]] for s in [[p(l)[i:i+r[5]] for p in [q[2]] for i in [r[5]*u for f in [q[0]] for u in f(r[5])]]] for l in s + g(*s) + [[z for y in [s[i+a][j:j+r[0]] for g in [q[0]] for a in g(r[0])] for z in y] for k in [[w*r[0] for i in [q[0]] for w in i(r[0])]] for i in k for j in k] for f in [q[0]]]) for l in [int(raw_input())]][0]

Çevrimiçi deneyin!

Çıkışlar 1doğru sayıda, 0aksi halde.



@ LeakyNun Vay, beklediğimden biraz daha hızlı.
Sisyphus

Online bir sudoku çözücü bulmak zor değil.
Sızdıran Rahibe

Sudoku denetleyicinizde bazı sorunlar var: yatay çizgileri ve dikey çizgileri iyi kontrol ettiniz, ancak yalnızca ilk üç hücreyi kontrol ettiniz.
Sızdıran Rahibe

@LeakyNun Haklısın, bir aolmalı i+a. Çözdüm ama yine de kırık omuz silkme
Sisifos

3

Haskell , kırık

Bu sadece aritmetik dayanmaktadır. Not myfunederken, asıl fonksiyonu olan hbir yardımcı fonksiyonudur.

h k = sum $ map (\x -> (x*x)**(-1) - 1/(x**(2-1/(fromIntegral k)))) [1..2*3*3*47*14593]
myfun inp | inp == (last $ filter (\k -> h k < (-7.8015e-5)  )[1..37*333667-1]) = 1
          | otherwise = 0

main = print $ show $ myfun 42 -- replace 42 with your input

Çevrimiçi deneyin!


Program tüm girişlerde hatasız bitmelidir. Bu sınırsız hafızada bir gün içinde bile bitiyor mu?
michi7x7

Biraz hafızaya ihtiyacınız var ama kesinlikle sınırsız hafızaya ihtiyacınız yok. Muhtemelen uygulamaya ve donanımınıza bağlıdır. Ancak, açıkça kaba kuvvet saldırılarını zorlaştırmak ve programın analiz edilmesini teşvik etmek için hesaplama yapmak için biraz zaman harcanması planlanmıştır. İyi şanslar :)
kusur


2

Java, Nitrodon Tarafından Kırık

import java.math.BigDecimal;

public class Main {
    private static final BigDecimal A = BigDecimal.valueOf(4);
    private static final BigDecimal B = BigDecimal.valueOf(5, 1);
    private static final BigDecimal C = BigDecimal.valueOf(-191222921, 9);
    private static BigDecimal a;
    private static BigDecimal b;
    private static int c;

    private static boolean f(BigDecimal i, BigDecimal j, BigDecimal k, BigDecimal l, BigDecimal m) {
        return i.compareTo(j) == 0 && k.compareTo(l) >= 0 && k.compareTo(m) <= 0;
    }

    private static boolean g(int i, int j, BigDecimal k) {
        c = (c + i) % 4;
        if (j == 0) {
            BigDecimal l = a; BigDecimal m = b;
            switch (c) {
                case 0: a = a.add(k); return f(C, b, B, l, a);
                case 1: b = b.add(k); return f(B, a, C, m, b);
                case 2: a = a.subtract(k); return f(C, b, B, a, l);
                case 3: b = b.subtract(k); return f(B, a, C, b, m);
                default: return false;
            }
        } else {
            --j;
            k = k.divide(A);
            return g(0, j, k) || g(1, j, k) || g(3, j, k) || g(3, j, k) || g(0, j, k) || g(1, j, k) || g(1, j, k) || g(3, j, k);
        }
    }

    private static boolean h(int i) {
        a = BigDecimal.ZERO; b = BigDecimal.ZERO; c = 0;
        return g(0, i, BigDecimal.ONE);
    }

    public static void main(String[] args) {
        int i = Integer.valueOf(args[0]);
        System.out.println(!h(i) && h(i - 1) ? 1 : 0);
    }
}

Her zamanki karma ve rastgele işlevlerden farklı bir şey denemek istedim. Numarayı komut satırı argümanı olarak iletebilirsiniz. Çıkışlar 1Doğru numarayı verilir ve eğer 0aksi. Küçük sayılar için çevrimiçi olarak da deneyebilirsiniz .

İpucu:

Programın ana kısmı, çok iyi bilinen bir algoritmanın bir türevidir . Ne yaptığını öğrendikten sonra, gizli numarayı hesaplamak için verilen programı optimize edebileceksiniz.

Açıklama:

Bu program, iyi bilinen Koch eğrisinin ikinci dereceden değişkeninin (tip 2) değişimini uygular (Vikipedi'den görüntü): Gizli sayı, noktadan geçmeyen ilk yinelemedir (B, C). Nitrodon tarafından doğru bir şekilde tanındığı gibi , ilk yineleme hariç, eğrinin belirli bir noktadan geçmeyen tüm bölümlerinin tekrarını güvenli bir şekilde görmezden gelebiliriz. Orijinal programdaki bir çizgiyi buna göre değiştirerek, çevrimiçi tercümanda bile doğru numarayı kontrol edebiliriz .

Quadratic_Koch_curve_type2_iterations.png


Kırık sanırım; çalışma süresi doğrudan doğrulamak için çok uzun, ancak daha kolay değerleri kontrol ettim ve çatlaklarım çalışıyor gibi görünüyor.
Nitrodon


1

Octave, skor: ???

Başka hiçbir numaranın, numara listesinin sonunda aynı 20 rastgele numaraya sahip olmayacağı garanti edilmektedir 1e8.

function val = cnr(num)
rand("seed", num);
randomints = randi(flintmax-1,1e4,1e4);
val = isequal(randomints(end+(-20:0))(:), ...
 [7918995738984448
  7706857103687680
  1846690847916032
  6527244872712192
  5318889109979136
  7877935851634688
  3899749505695744
  4256732691824640
  2803292404973568
  1410614496854016
  2592550976225280
  4221573015797760
  5165372483305472
  7184095696125952
  6588467484033024
  6670217354674176
  4537379545153536
  3669953454538752
  5365211942879232
  1471052739772416
  5355814017564672](:));
end

1Gizli numara için çıktılar , 0aksi takdirde.

Bunu Octave 4.2.0'da koştum.


"Uykular ve diğer yavaşlamalar, kaba kuvvetlendirme sırasında kaldırılabilir."

Bununla iyi şanslar :)


tio üzerinde bile çalışmıyor gibi görünüyor
Okx

1
@Okx TIO'da zaman aşımına uğradı, ancak masaüstü sürümünde çalışıyor.
18'de

1
Neden aşağı oy?
Buğday Sihirbazı,

3
@WheatWizard muhtemelen çoklu sayıları olması teorik olarak mümkün. Ayrıca, biraz sıkıcı tbh. Daha fazla matematik çözümü görmek isterdim, RNG biraz sıkıcı.
36'da

1
@Riker Ancak, bir çekirdeği RNG'ye göre tahmin ettiğiniz için, RNG'nin kendisini aslında deterministik olan bir işlevi olarak kullanıyor. Ama evet, umduğunuzun tek yönlü bir işlev olduğunu tersine çevirmenin zorluğuna bağlı olduğunu düşünürsek, belki de bir "gerçek" dizesini rastgele bir sayı ile şifrelemek ve ardından neredeyse her hangi bir şifreleme şemasını seçmeme engel olmak zor olacaktır. Özel anahtarı bulmak için
Shufflepants

1

Ly , skor 239, kırık.

(1014750)1sp[l1+sp1-]28^RrnI24^=u;

Çevrimiçi deneyin!

Burada Ly'yi tanıyan hiç kimsenin bankacılığını yapıyorum, bunun ne kadar kolay değişebileceğini bilmeme rağmen ... terler

Açıklama:

(1014750)1sp[l1+sp1-]              # meaningless code that counts up to 1014750 and discards the result
                     28^Rr         # range from 255 to 0
                          nI       # get the index from the range equal to the input
                            24^=   # check if it's 16
                                u; # print the result


1

Brain-Flak , skor 1574 ( çatlak )

<>(((((((((((((((((((([([(((()()()){}){}){}])]){})))){}{}{}{}()){}){})){}{})){}{})){}((((((((()()){}){}){}){}[()]){}){}){}){}())){})){}){}{}{}){})(((((((((((((((((((()()){}){}()){}){}){}()){}){}()){}){})){}{}())){}{})){}{}){}){}){})(((((((((((((((()()){}()){}()){}){}){}()){}){}){}()){}){}){}()){}()){}()){})<>{({}[()])<>({}({})<({}({})<({}({})<({}({}))>)>)>)<>}({}<>(){[()](<{}>)}<>)

Çevrimiçi deneyin!



1

dC

#!/bin/dc
[[yes]P] sy [[no]P] sn [ly sp] sq [ln sp] sr [lp ss] st [ln ss] su
?  sa
119560046169484541198922343958138057249252666454948744274520813687698868044973597713429463135512055466078366508770799591124879298416357795802621986464667571278338128259356758545026669650713817588084391470449324204624551285340087267973444310321615325862852648829135607602791474437312218673178016667591286378293
la %
d 0 r 0
=q !=r
10 154 ^ 10 153 ^ +
d la r la
<t !<u
1 la 1 la
>s !>n

Çevrimiçi deneyin!


Not: Bu gönderi gönderildiğinden beri değiştirildi. Orijinal başvuru (aşağıda) geçersiz ve aşağıdaki açıklamalarda Sleafar tarafından kırılmıştı. (Bir girdi 1çıktıya yol açar yes, ancak aynı sonucu veren başka bir sayı daha vardır.)

#!/bin/dc
[[yes]P] sy [[no]P] sn [ly sp] sq [ln sp] sr
?  sa
119560046169484541198922343958138057249252666454948744274520813687698868044973597713429463135512055466078366508770799591124879298416357795802621986464667571278338128259356758545026669650713817588084391470449324204624551285340087267973444310321615325862852648829135607602791474437312218673178016667591286378293
la %
d 0 r 0
=q !=r
10 154 ^ 10 153 ^ +
d la r la
<p !<n

Çevrimiçi deneyin!


Çevrimiçi tercüman "1" girişi için "evet" döndürür. Bu şimdi çatlamış sayılıyor mu?
Sleafar

@Sleafar Sigh ... evet, bu benim açımdan aptal bir hataydı.
John Gowers

Ancak, bu zorluğun şimdi geçersiz olduğu anlamına gelir, çünkü baskıyı evet yapan iki girdi vardır, bu yüzden talep etmenize izin verilip verilmediğinden emin değilim. Bu gönderiye düzeltilmiş bir sürüm ekleyeceğim, ancak orijinal olmanız durumunda orijinali bırak.
John Gowers

1

Yakut , güvenli, puan:

63105425988599693916

#!ruby -lnaF|
if /^#{eval [$F,0]*"**#{~/$/}+"}$/ && $_.to_i.to_s(36)=~/joe|tim/
  p true
else
  p false
end

Çevrimiçi deneyin!

Açıklama:

İlk şartlı narsisizm için giriş sayısını kontrol eder . İlk başta yazdığım konu tesadüfen çarpıştı, ben de bunu yayınladım, ama kimse fark etmedi sanırım. İkincisi, sayıyı rakam olarak harf kullanan basamağa (36) dönüştürür ve dizenin "joe" veya "tim" içerip içermediğini kontrol eder. Narsisistik sayılar sonlu olduğu için (tükenme yoluyla) Joe veya Tim (Joe) adında sadece bir narsisistik sayı olduğu kanıtlanabilir. Sonlu olduklarının kanıtı: n basamaklı bir sayı almanın sonucu, her basamağı basamaklı güce yükseltir ve toplama, yukarıdan*9^n, bir n basamaklı sayının değeri aşağıda n ^ 10 ile sınırlandırılmıştır. Bu terimler arasındaki oran n * (9/10) ^ n'dir ve sonuçta n arttıkça monotonik olarak azalır. 1'in altına düştüğünde n rakamlı narsisistik rakamlar olamaz.


1

PHP, güvenli, puan:

60256

<?php

$a = $argv[1];

$b ='0123456789abcdefghijklmnopqrstuvwxyz';

$c = strlen($b);

$d = '';
$e = $a;
while ($e) {
    $d .= $b[$e % $c];
    $e = floor($e / $c);
}

echo ((function_exists($d) && $d($a) === '731f62943ddf6733f493a812fc7aeb7ec07d97b6') ? 1 : 0) . "\n";

Doğru ise 1, aksi takdirde 0 çıkış verir.

Düzenleme: Kimsenin bunu çözmeye çalıştığını bile sanmıyorum çünkü:

kaba kuvvet uygulamak kolay olurdu.

Açıklama:

Girdiyi alıp "baz 36" ya çeviriyorum, fakat son sayıyı elde etmek için kalanları ters çevirmiyorum. 60256 sayısı, 36 tabanındaki "1ah" dir. Geri alınmadan, yani PHP'de bir işlev olan "sha1" dır. Son kontrol sha1'in (60256) hash değerine eşittir.



0

Python 3, puan: ???

Umarım bu, eğer bir şey olursa, bir sorunun ne kadar kırıldığını gösterir:

from hashlib import sha3_512

hash_code = 'c9738b1424731502e1910f8289c98ccaae93d2a58a74dc3658151f43af350bec' \
            'feff7a2654dcdd0d1bd6952ca39ae01f46b4260d22c1a1b0e38214fbbf5eb1fb'


def inc_string(string):
    length = len(string)
    if length == 0 or all(char == '\xFF' for char in string):
        return '\x00' * (length + 1)
    new_string = ''
    carry = True
    for i, char in enumerate(string[::-1]):
        if char == '\xFF' and carry:
            new_string = '\x00' + new_string
            carry = True
        elif carry:
            new_string = chr(ord(char) + 1) + new_string
            carry = False
        if not carry:
            new_string = string[0:~i] + new_string
            break
    return new_string


def strings():
    string = ''
    while True:
        yield string
        string = inc_string(string)


def hash_string(string):
    return sha3_512(string.encode('utf-8')).hexdigest()


def main():
    for string in strings():
        if hash_string(string) == hash_code:
            exec(string)
            break


main()

Temel olarak, bu kodun yaptığı şey, dizelerden biri tam olarak hash_codeyukarıda eşleşen bir kareye sahip olana kadar, mümkün olan her dizgiyi tembel olarak oluşturur . Hasarsız kod, temel biçimini alır:

num = int(input('Enter a number:\n'))
if num == <insert number here>:
    print(1)
else:
    print(0)

Bunun dışında <insert number here>bir sayı ile değiştirilir ve kodu neredeyse tartışılmaz kılmak amacıyla kodda yorumlar vardır.

Bu görevden faydalanmamamı sağlamak için her türlü önlemi aldım. Yeni başlayanlar için bu topluluk wiki, bu yüzden bunun için rep elde edemeyeceğim. Ayrıca, puanım oldukça büyük, umarım çok daha yaratıcı bir cevap ortaya çıkıp kazanacaktır.

Umarım cevabımda çok kızmazsınız, sadece polislerin ve soyguncuların göndermelerinin neden genellikle algoritmaların yasaklandığını göstermek istedim.


Giriş stdin'den alınmıştır. Çıktı, 1 (doğru tahmin edilmiş bir sayı için) veya 0 (yanlış tahmin edilmiş bir sayı için) şeklindedir.
sonar235

Bunu neden topluluk wiki yaptın bilmiyorum. Bu, cevabınızı, yapılması gereken önemli işlere benzeyen cevabınız. Bu sorunun cevabını kesinlikle kırıldığını da söyleyemem. Bu akıllıca bir cevaptır, muhtemelen iyi sonuç verebilir, (bunun 1 için işe yaramadığını bile ispat edemiyorum). Bir sorunun amacı, soruya zekice ilginç şekillerde yaklaşan cevapları çekmek (ve aynı zamanda eğlenmek ama eğlenceniz için kefil olamam) ve endişelendiğim kadarıyla bunu yapar.
Buğday Sihirbazı,

3
Aslında bu cevap geçersiz. Neredeyse kesinlikle (hash ile eşleşen 512 bit uzunluğunda hiçbir dizginin astronomik olasılığı olmadan) exec () muhtemelen amaçlanan koda ulaşmadan önce muhtemelen geçerli bir python kodu bile olmayan bir şey yapacaktır.
Joshua,

1
@ sonar235: Parça şablonunuzda 512'den fazla bit var.
Joshua,

1
Joshua'nın cevabını genişletmek için: kod parçanız 102 karakter uzunluğunda. Özellikle, programınız kodunuza girmeden önce her 100 karakterlik dizgiyi yineleyecektir. Kodunuz 0x00-0xFF aralığındaki karakterleri yinelediğinden, yani 256 ^ 100ya da 2 ^ 800dizeleridir. Bu arada, sadece 2 ^ 512olası 512 bitlik karma var. Bu, yinelemekte olduğunuz dizgilerin, olası karmaları en az 2 ^ 288bir sayıya düşürdüğü anlamına gelir - evrendeki atom sayısından 10,000 kat daha fazladır. Kullanılmamış hashın kullanılmamış olma olasılığı inanılmaz derecede küçük .
John Gowers

0

Python 3 , 49 bayt, sonar235 tarafından Kırık

x = input()
print(int(x)*2 == int(x[-1]+x[0:-1]))

Çevrimiçi deneyin!


Sıfır, pozitif bir tamsayı fyi değil. Bunun amaçlanan çözüm olup olmadığını bilmiyorum ama işe yarıyor.
Buğday Sihirbazı,

0 amaçlanan çözüm değildir.
ED,

8
Uhh, TIO sayfanız çözümü gösteriyor ...
LyricLy

2
Ayrıca, "sayı girişi yapıldığında bir değer, diğer tüm pozitif tamsayılar için başka bir değer veren bir program veya işlev yazın "
Jonathan Allan,


0

Java, skor: 3141592 ( Kırık )

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0063\u006c\u0061\u0073\u0073\u0020\u004d\u0061\u006e\u0067\u006f\u0020\u007b
\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0076\u006f\u0069\u0064\u0020\u0063\u006f\u006e\u0076\u0065\u0072\u0074\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u0020\u0073\u0029\u007b\u0066\u006f\u0072\u0028\u0063\u0068\u0061\u0072\u0020\u0063\u0020\u003a\u0020\u0073\u002e\u0074\u006f\u0043\u0068\u0061\u0072\u0041\u0072\u0072\u0061\u0079\u0028\u0029\u0029\u007b\u0020\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u0028\u0022\u005c\u005c\u0075\u0030\u0030\u0022\u002b\u0049\u006e\u0074\u0065\u0067\u0065\u0072\u002e\u0074\u006f\u0048\u0065\u0078\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0063\u0029\u0029\u003b\u007d\u007d
\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0061\u0072\u0067\u0073\u0029\u0020\u007b\u0069\u006e\u0074\u0020\u0078\u0020\u0020\u003d\u0020\u0049\u006e\u0074\u0065\u0067\u0065\u0072\u002e\u0070\u0061\u0072\u0073\u0065\u0049\u006e\u0074\u0028\u0061\u0072\u0067\u0073\u005b\u0030\u005d\u0029\u003b
\u0064\u006f\u0075\u0062\u006c\u0065\u0020\u0061\u003d\u0020\u0078\u002f\u0038\u002e\u002d\u0033\u0039\u0032\u0036\u0039\u0039\u003b\u0064\u006f\u0075\u0062\u006c\u0065\u0020\u0062\u0020\u003d\u0020\u004d\u0061\u0074\u0068\u002e\u006c\u006f\u0067\u0031\u0030\u0028\u0028\u0069\u006e\u0074\u0029\u0020\u0028\u0078\u002f\u004d\u0061\u0074\u0068\u002e\u0050\u0049\u002b\u0031\u0029\u0029\u002d\u0036\u003b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0028\u0061\u002f\u0062\u003d\u003d\u0061\u002f\u0062\u003f\u0022\u0046\u0061\u0069\u006c\u0022\u003a\u0022\u004f\u004b\u0022\u0020\u0029\u0029\u003b
\u007d\u007d

1
Şaşkınlığın ilk adımını eklemek dışında şaşkınlığın bir şey yapacağını sanmıyorum.
Mühendis Toast


2
@EngineerToplam hayır, gerçekten değil, tembel insanları korkutmak içindi.
user902383,

0

Python 3, skor 1 (güvenli)

Çok ilginç bir çözüm değil, ölü bir polisten daha güvenli bir polis.

import hashlib

def sha(x):
    return hashlib.sha256(x).digest()

x = input().encode()
original = x

for _ in range(1000000000):
    x = sha(x)

print(int(x==b'3\xdf\x11\x81\xd4\xfd\x1b\xab19\xbd\xc0\xc3|Y~}\xea83\xaf\xa5\xb4]\xae\x15wN*!\xbe\xd5' and int(original.decode())<1000))

Aksi takdirde 1hedef numara için çıktılar 0. Giriş stdin'den alınmıştır. Son kısım ( and int(original.decode())<1000) yalnızca bir cevabı sağlamak için mevcuttur, aksi takdirde sınırsız sayıda cevap olacaktır.


1
Bir TIO bağlantısı ekler misiniz lütfen?
Shaggy,

1
Gelecekteki soyguncular için: Tamsayı daha küçük görünmüyor 100000000.
Bay Xcoder,

1
@ Shaggy TIO'da zaman aşımına uğrayacak, SHA256'nın milyarlarca yinelemesini çalıştırmak bilgisayarımda yaklaşık yarım saat sürdü.
L3viathan

2
Herhangi bir soyguncular bunu çözmek için bir ekip oluşturmayı isterler mi? Rakamları aramızdaki 1000'den daha az sayıya bölmemiz gerekiyor, bu yüzden son başvuru tarihinden önce yinelenmiş-SHA sindirimini hesaplamak için zamanımız var.
John Gowers

2
Tek çözümün 1 olduğunu kanıtlayamazsanız , bu cevap geçersiz. İspat külfetinin geçerli bir cevabı olduğunu iddia eden kişi üzerinde olmalıdır.
Dennis,

0

C (gcc) , puan ???

#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <wmmintrin.h>

#include <openssl/bio.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>

union State
{
    uint8_t u8[128];
    __m128i i128[8];
} state;

void encrypt()
{
    BIO *key = BIO_new_mem_buf
    (
        "-----BEGIN PUBLIC KEY-----\n"
        "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5CBa50oQ3gOPHNt0TLxp96t+6\n"
        "i2KvOp0CedPHdJ+T/wr/ATo7Rz+K/hzC7kQvsrEcr0Zkx7Ll/0tpFxekEk/9PaDt\n"
        "wyFyEntgz8SGUl4aPJkPCgHuJhFMyUflDTywpke3KkSv3V/VjRosn+yRu5mbA/9G\n"
        "mnOvSVBFn3P2rAOTbwIDAQAB\n"
        "-----END PUBLIC KEY-----\n",
        -1
    );

    RSA *rsa = PEM_read_bio_RSA_PUBKEY(key, &rsa, NULL, NULL);

    uint8_t ciphertext[128];

    RSA_public_encrypt(128, state.u8, ciphertext, rsa, RSA_NO_PADDING);
    memcpy(state.u8, ciphertext, 128);
}

void verify()
{
    if (memcmp
    (
        "\x93\xfd\x38\xf6\x22\xf8\xaa\x2f\x7c\x74\xef\x38\x01\xec\x44\x19"
        "\x76\x56\x27\x7e\xc6\x6d\xe9\xaf\x60\x2e\x68\xc7\x62\xfd\x2a\xd8"
        "\xb7\x3c\xc9\x78\xc9\x0f\x6b\xf0\x7c\xf8\xe5\x3c\x4f\x1c\x39\x6e"
        "\xc8\xa8\x99\x91\x3b\x73\x7a\xb8\x56\xf9\x28\xe7\x2e\xb2\x82\x5c"
        "\xb8\x36\x24\xfb\x26\x96\x32\x91\xe5\xee\x9f\x98\xdf\x44\x49\x7b"
        "\xbc\x6c\xdf\xe9\xe7\xdd\x26\x37\xe5\x3c\xe7\xc0\x2d\x60\xa5\x2e"
        "\xb8\x1f\x7e\xfd\x4f\xe0\x83\x38\x20\x48\x47\x49\x78\x18\xfb\xd8"
        "\x62\xaf\x0a\xfb\x5f\x64\xd1\x3a\xfd\xaf\x4b\xaf\x93\x23\xf4\x36",
        state.u8,
        128
    ))
        exit(0);
}

static inline void quarterround(int offset)
{
    int dest = (offset + 1) % 8, src = offset % 8;

    state.i128[dest] = _mm_aesenc_si128(state.i128[src], state.i128[dest]);
}

int main(int argc, char *argv[])
{
    if (argc != 2)
        exit(0);

    uint64_t input = strtoull(argv[1], NULL, 0);

    state.i128[0] = _mm_set_epi32(0, 0, input >> 32, input);

    for (uint64_t round = 0; round < 0x1p45; round += 2)
    {
        quarterround(0);
        quarterround(2);
        quarterround(4);
        quarterround(6);

        quarterround(7);
        quarterround(1);
        quarterround(3);
        quarterround(5);
    }

    encrypt();
    verify();
    puts("something");
}

Kriptografik çözümler teşvik edildiğinden, burada. Kesinlikle bir pozitif tamsayı bir şey basar , diğerleri de hiçbir şey basmaz. Bu uzun zaman alıyor, bu yüzden çevrimiçi olarak test edilemiyor.


0

Java, 164517378918, güvenli

import java.math.*;import java.util.*;
public class T{
    static boolean f(BigInteger i){if(i.compareTo(BigInteger.valueOf(2).pow(38))>0)return false;if(i.longValue()==0)return false;if(i.compareTo(BigInteger.ONE)<0)return false;int j=i.multiply(i).hashCode();for(int k=3^3;k<2000;k+=Math.abs(j%300+1)){j+=1+(short)k+i.hashCode()%(k+1);}return i.remainder(BigInteger.valueOf(5*(125+(i.hashCode()<<11))-7)).equals(BigInteger.valueOf(0));}
    @SuppressWarnings("resource")
    public static void main(String[]a){long l=new Scanner(System.in).nextLong();boolean b=false;for(long j=1;j<10;j++){b|=f(BigInteger.valueOf(l-j));}System.out.println(f(BigInteger.valueOf(l))&&b);}
}

0

TI-BASIC, skor: 196164532 yarışmacı değil

Gizli numara için 1, aksi takdirde 0 döndürür.

Ans→rand
rand=1

Daha fazla bilgi için randkomuttaki bu sayfadaki nota bakın .


8
Bunun tam olarak eşleşen bir giriş numarasına sahip olması garanti ediliyor mu?
Rɪᴋᴇʀ

@Riker: TI hesaplayıcısının dahili olarak bir tür kayar nokta kullandığını düşünüyorum; RAND geri kalanıyla aynı kayan noktayı kullanıyorsa, sadece 1 çözüm olduğundan eminim.
Joshua

@Joshua L' Ecuyer'in Algoritmasını kullandığına inanıyorum .
kamoroso94 15

@Joshua "oldukça emin" yeterli değil. Yalnızca 1 çözümün var olduğunu ispat edemezseniz, bu geçerli bir cevap değildir.
Rɪᴋᴇʀ

1
@Dennis: 196164532 * 2 için prob; eğer bu başka bir çözüm olmayan bir çözüm değilse.
Joshua

0

Python 3 , skor :?

def check(x):
    if x < 0 or x >= 5754820589765829850934909 or pow(x, 18446744073709551616, 5754820589765829850934909) != 2093489574700401569580277 or x % 4 != 1:
        return "No way ;-("
    return "Cool B-)"

Çevrimiçi deneyin!

Basit, ama kaba kuvvet için biraz zaman alabilir ;-) Hızlı bir çatlak için bekliyorum ;-)

Dipnot: ilk iki ve son koşullar cevabı benzersiz kılar.

BTW puan nasıl hesaplanır?

1. İpucu

İçinde 2 64 cevap olacağını bekleyebilirsiniz 0 <= x < [the 25-digit prime], ancak aslında sadece 4 tane vardır ve son koşul diğer 3'ü ortadan kaldırır. Bunu çözebilirseniz diğer 3 çözümü de bileceksiniz.



0

Aseto , güvenli

  P'*o*7-9JxriM'lo7*9Yxx.P',xe*ikCKxlI.D+∑\a€'#o*84/si5s:i»I9Ji8:i+∑€isi.s1+.i2\H/iQxsUxsxxsxiss*i1dJi/3d2*Ji-d*id*IILCh98*2JixM'e9hxBNRb!p

Doğru ise TrueFalse, aksi takdirde FalseFalse çıktılar

Sayı

15752963

Çevrimiçi deneyin!


-2

C #, Mono, Linux, Alfa, puan 1 (güvenli)

class Program
{
public static void Main()
{
//Excluding out-of-range inputs at ppperry's request; does not change solution
//original code:
//var bytes = System.BitConverter.GetBytes((long)int.Parse(System.Console.ReadLine()));
int i;
if (!int.TryParse(System.Console.ReadLine(), out i || i <= 0 || i > 1000000) { System.Console.WriteLine(0); Environment.Exit(0); }
var bytes = System.BitConverter.GetBytes((long)i);
using (var x = System.Security.Cryptography.HashAlgorithm.Create("MD5"))
{
    for (int i = 0; i < 1000000; ++i)
            for (int j = 0; j < 86400; ++j)
                    bytes = x.ComputeHash(bytes);
}
if (bytes[0] == 91 && bytes[1] == 163 && bytes[2] == 41 && bytes[3] == 169)
    System.Console.WriteLine(1);
else
    System.Console.WriteLine(0);
}
}

Dikkatli. İçtenlikle söyledim. Dışarıda bir sürü alfa simülatörü var. Bir jitter ile birini kullanın, yoksa bu bitmeyecek.

Bu, Alpha'nın büyük harfli olmasına ve birisi bunu x86 veya x64'te denerse, System.BitConverter'ın yanlış şeyi yapmasına neden olur. Bu cevabı, mücadelenin kötülüğünü her şeyden daha fazla göstermek için yazdım.


1
Bunun tek bir çözümü olamaz; Orada tamsayılar sonsuz sayıda vardır ve MD5 işlevi olası çıkışların sınırlı sayıda vardır, bu nedenle bir çarpışma olmalı
pppery

@ pperry: Sadece 2 milyar var ve yine de pozitif kayıtları değiştiriyoruz.
Joshua,

Bu şekilde düşünürseniz, 2 ^ 31'den büyük girişlerde bu hata olur ve bu nedenle geçersizdir.
pppery

@ pppryry: Orada şimdi bu konuda bir hata olmaz.
Joshua,

2
Tek çözümün 1 olduğunu kanıtlayamazsanız , bu cevap geçersiz. İspat külfetinin geçerli bir cevabı olduğunu iddia eden kişi üzerinde olmalıdır.
Dennis,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.