Cops - Quadrat mal Quadratwurzel


37

Hinweis: Dies ist der Thread der Polizei , in dem man den verschlüsselten Code posten sollte. Hier ist der Räuber-Thread, in dem die geknackte Quelle veröffentlicht und mit der Antwort des Polizisten verknüpft werden sollte.


Aufgabe: Schreiben Sie das kürzeste sichere Programm, das die Quadratwurzel einer ganzen Zahl n mit dem Quadrat von n multipliziert

Das sind , daher gelten folgende Regeln:

  • Schreiben Sie in Ihrer Antwort eine verschlüsselte Version Ihres Quellcodes (die Zeichen sollten in beliebiger Reihenfolge geschrieben werden). Die verschlüsselte Version sollte nicht funktionieren!
  • Sie können Eingaben auf jede übliche Art und Weise vornehmen. Gleiches gilt für die Ausgabe. Hardcoding ist verboten
  • Nachdem der Code von den Räubern geknackt wurde (falls dies passiert), müssen Sie erwähnen, dass Ihr Code in Ihrem Titel geknackt wurde, und einen Spoiler mit Ihrem genauen Code in den Körper Ihrer Antwort einfügen
  • Das gleiche gilt für sichere Antworten (erwähne, dass es sicher ist und füge den Spoiler hinzu )
  • Der Code gilt als sicher, wenn ihn innerhalb von 5 Tagen nach seiner Veröffentlichung niemand geknackt hat, und Sie können dies optional im Titel angeben
  • Sie müssen Ihre Programmiersprache angeben
  • Sie sollten Ihre Byteanzahl angeben
  • Sie müssen den Rundungsmechanismus in Ihrer Antwort angeben (siehe unten)

Sie können davon ausgehen, dass das Ergebnis niedriger als 2 32 ist und n immer positiv ist. Wenn das Ergebnis eine Ganzzahl ist, müssen Sie den genauen Wert mit oder ohne Dezimalstelle zurückgeben. Andernfalls beträgt die minimale Dezimalgenauigkeit 3 ​​Dezimalstellen mit einem beliebigen Rundungsmechanismus, sie kann jedoch auch mehr enthalten. Sie müssen den Rundungsmechanismus in Ihrer Antwort angeben. Sie dürfen nicht als Bruchteile zurückgeben (Zähler-, Nennerpaare - sorry, Bash!)

Beispiele:

In -> Out

4 -> 32.0 (or 32)
6 -> 88.18163074019441 (or 88.182 following the rules above)
9 -> 243.0
25 -> 3125.0

Die kürzeste sichere Antwort bis Ende April wird als Gewinner gewertet.


2
Verbunden. (Gleiche CnR-Regeln, andere Aufgabe.)
Martin Ender

2
@MartinEnder Wenn sich nur die Aufgabe unterscheidet, ist es dann kein Duplikat?
Nathan Merrill

1
@ NathanMerrill Ich weiß nicht, ich glaube nicht, dass wir irgendwelche doppelten Richtlinien für das Herausfordern von Bullen und Räubern haben, aber wenn ich eine neue Code-Golf- Herausforderung stelle , ist das "einzige", was sich von einem früheren Code-Golf unterscheidet Die Aufgabe wird normalerweise nicht als Duplikat betrachtet. ;) (Trotzdem stimme ich zu, dass CnRs wahrscheinlich interessanter sind, wenn wir den CnR-Teil der Herausforderung und nicht die zugrunde liegende Aufgabe ändern.)
Martin Ender

1
Viel Glück euch allen! Ich freue mich sehr, dass Sie sich dazu entschlossen haben, das wieder zu eröffnen. Freue mich auf interessante Antworten!
Mr. Xcoder

2
Ich hatte meinen Code geschrieben, um für eine Eingabe von bis zu 2 ^ 32 zu arbeiten ... Deshalb habe ich nach Rundungsfehlern gefragt und war zu diesem Zeitpunkt
ziemlich daneben

Antworten:


2

05AB1E, 20 Byte - sicher

Ein ganz anderer Ansatz als meine vorherigen Antworten.

****++/133DDFPTs}¹¹Ð

Keine Rundung.

Beispiel läuft

In   -> Out
0    -> 0
4    -> 32.0
6    -> 88.18163074019441
25   -> 3125.0
7131 -> 4294138928.896773

Ich habe keinen Zweifel, @Emigna wird es im Handumdrehen knacken, aber eh, man muss es versuchen! :-D


Lösung

D1TFÐ*D¹3*+s3*¹+/*}P

Dies beruht auf der Tatsache, dass diese Sequenz:

u_0 = 1, u_ {n + 1} = u_n * (u_n ^ 2 + 3 x) / (3 u_n ^ 2 + x)

Konvergiert zu sqrt (x) und ist dabei kubisch schnell (ich habe leider nicht herausgefunden, wie man mathematische Gleichungen in PCG formatiert).

Ausführliche Erklärung

D1TFÐ*D¹3*+s3*¹+/*}P
D1                   # Duplicate the input, then push a 1: stack is now [x, x, 1] (where x is the input)
  TF                 # 10 times (enough because of the cubic convergence) do
    Ð                # triplicate u_n
     *               # compute u_n ^ 2
      D              # and duplicate it
       ¹3*+          # compute u_n ^ 2 + 3 x
           s         # switch that last term with the second copy of u_n ^ 2
            3*¹+     # compute 3 u_n ^ 2 + x
                /    # compute the ratio (u_n ^ 2 + 3 x) / (3 u_n ^ 2 + x)
                 *   # compute u_n * (u_n ^ 2 + 3 x) / (3 u_n ^ 2 + x), i.e. u_{n+1}, the next term of the sequence
                  }  # end of the loop
                   P # compute the product of the whole stack, which at that point contains u_10 (a sufficiently good approximation of sqrt(x)), and the 2 copies of the input from the initial D: we get x ^ 2 * sqrt(x)

Probieren Sie es online!



11

MATL , 12 Bytes ( geknackt von @tehtmi )

'Un&0P'/^:+1

Keine Rundung; verwendet Gleitkomma.

Geplante Lösung (anders als von @tehtmi gefunden):

:&+n10U'P'/^

Erläuterung

:&+ % Create a matrix of size n × n, where n is implicit input
n % Number of elements. Gives n^2
10U % 10 squared. Gives 100
'P' % 'P' (ASCII code 80)
/ % Divide. Gives 1.25
^ % Power. Implicit display



@tehtmi In der Tat! Gut gemacht! Meine beabsichtigte Lösung war anders; Ich habe es gerade gepostet
Luis Mendo


10

Perl, 42 Bytes (sicher)

Es gibt 41 Byte Code und -pFlag (keine anderen Flags).

/"/4~~r..rso4r<_$4va=eg1de|i/h0-&$c={}l+"

Das Ergebnis wird nicht gerundet (oder vielmehr auf den gleichen Punkt aufgerundet, den Perl damit aufgerundet hätte $_ = (sqrt $_) * ($_ ** 2)).

Lösung:

$_=eval".i44<4}{|~"=~s/./chr-10+ord$\&/gre
(ohne den \vor dem &- markdown stehenden Spoiler scheint das nicht zu gefallen, $gefolgt von &)
Probier es online aus!

Erläuterung:

.i44<4}{|~wird $_**2*sqrtaber mit jedem Zeichen durch das Zeichen mit seinem ASCII-Code + 10 ersetzt (ASCII-Code von $ist 36, also wird es .dessen ASCII-Code 46usw.).
Der Zweck von s/./chr-10+ord$\&/greist dann, diese Transformation rückgängig zu machen: Es ersetzt jedes Zeichen durch das Zeichen mit dem ASCII-Code 10 niedriger. ( chr-10+ord$\&Ist wahrscheinlich klarer, als chr(ord($\&)-10)wenn chrdas Zeichen, das einem ASCII-Code entspricht, und ordder ASCII-Code, der einem Zeichen entspricht, zurückgegeben wird.) wertet
schließlich evaldiesen String aus und berechnet so das Ergebnis, das in gespeichert ist $_, das am Ende dank -pflag implizit gedruckt wird .


Wahr. Ich habe versucht, schnell zu editieren, weil ich 4 Wiederholungsstimmen gesehen habe und gehofft, die Frage zu klären, bevor die 5. Besetzung stattgefunden hat. Wenn die Frage bis zu ihrer Fertigstellung im Sandkasten belassen worden wäre, wäre es für alle Beteiligten besser gewesen.
Peter Taylor

@PeterTaylor Sicher, kein Problem, und trotzdem war es fett so ziemlich sichtbar (ich gab niemandem die Schuld, sondern wies nur auf einen kleinen Fluss hin (den ich sofort korrigierte (Tippfehler in den Prozess einführend)). Und ich konnte mich über den Sandkastenteil nicht mehr einigen.
Dada

kannst du es ein bisschen erklären
Phuclv

@ LưuVĩnhPhúc Du meinst, wenn ich dir ein bisschen helfen kann, es zu knacken? mmh ... der Code beginnt mit $_=. Und evalirgendwo ist ein . (das ist nicht viel, aber ich glaube, ich kann dir nicht mehr geben, ohne dir zu viele Informationen zu geben)
Dada

8

Oktave, 43 Bytes (Sicher)

$'()*+,-/23579:[]aelnouv'*,-23:[]lu',-23]',

Dies ist ein Skript, das Eingaben über die Befehlszeile erfordert (es ist keine Funktion). Es ist Gleitkommagenauigkeit (also keine Rundung).

Lösung:

eval(-[5,-2:3,-3:2]+['nlouu*$$',39,']2/7'])

Erläuterung:

eval( <string> ) % Evaluated the string inside the brackets and executes it
Alles innerhalb des evalAnrufs wird wie ausgewertet input('')^2.5

?

-[5,-2:3,-3:2] % A vector: [-5, 2, 1, 0, -1, -2, -3, 3, 2, 1, 0, -1, -2]
['nlouu**$$',39,']2/7'] % This is a string: nlouu**$ concatenated with the number
. % 39 (ASCII ']'), and ']2/7'. Thus, combined: 'nlouu**$$']2/7'

Wenn Sie den ersten Vektor zu dieser Zeichenfolge hinzufügen, wird er in den ganzzahligen Vektor
[105, 110, 112, 117, 116, 40, 39, 39, 41, 94, 50, 46, 53]

evalkonvertiert. Dies wird implizit in eine Zeichenfolge konvertiert, und diese Zahlen lauten zufällig: input('')^2.5


1
Das war schwer. Gut gemacht!
Luis Mendo

7

C, 50 Bytes ( geknackt von Fergusq )

%(())   ,-12225;>\\aaabbdddeeefffllnoooprrttuuuuw{

Verwendet die Standardrundung nach IEEE754. Wie in der Antwort von fergusq angegeben, kann dies -lmabhängig von Ihrem Compiler erforderlich sein .



@fergusq richtig und fast genau das, was ich hatte. Gut gemacht; Ich dachte, ich hätte genug rote Heringe da drin gelassen, um die Leute noch viel länger zu beschäftigen!
Dave

@ Dave Wow, das sieht zunächst nach einem Syntaxfehler aus.
Erik der Outgolfer

6

Mathematica, 131 Bytes, nicht konkurrierend ?, geknackt

Dies wurde von @ lanlock4 geknackt ! Ich habe jedoch immer noch Internetpunkte, mit denen ich jemanden beschenken kann, der die ursprüngliche Lösung findet, bei der alle Charaktere tatsächlich benötigt werden ....

f[y_]:=With[{x=@@@@@@#####^^&&&(((()))){{}}111111,,+-/y},Print[#,".",IntegerString[Round@#2,10,3]]&@@QuotientRemainder[1000x,1000]]

Dies ist als Puzzle gedacht. Obwohl Sie die obigen Zeichen verwenden können, wie Sie möchten, möchte ich, dass die Antwort dem Formular folgt

f[y_]:=With[{x=
    @@@@@@#####^^&&&(((()))){{}}111111,,+-/y
},Print[#,".",IntegerString[Round@#2,10,3]]&@@QuotientRemainder[1000x,1000]]

Die erste und dritte Zeile sind nur ein Wrapper, um die Rundung und Anzeige zu ermöglichen (jede Ausgabe wird auf genau drei Dezimalstellen gerundet), und die zweite Zeile ist die verschlüsselte Version der Eingeweide des Codes. Beispielausgaben:

6 -> 88.182
9 -> 243.000
9999 -> 9997500187.497

(Mathematica ist keine freie Software, aber es gibt eine Wolfram-Sandbox, in der es möglich ist, bescheidene Codemengen zu testen. Zum Beispiel das Ausschneiden und Einfügen des Codes

f[y_]:=With[{x=
    y^2.5
},Print[#,".",IntegerString[Round@#2,10,3]]&@@QuotientRemainder[1000x,1000]]

definiert eine Funktion, die Sie anschließend wie f@6oder aufrufen können f[9]und die das Gleiche tut wie die unverschlüsselte Version des obigen Codes. Muss das wirklich konkurrenzlos sein?)



6

Swift - 64 Bytes (sicher)

prot Fdnufi;nooitamunc xetgru(->atl)Ior:n{tFn pg,F(ao.o25t)(w)l}

Keine Rundung und zeigt eine .0Gerade an, wenn das Ergebnis eine Ganzzahl ist.




4

C #, 172 Bytes ( geknackt von SLuck49 )

       (((((())))))***,,,,......1225;;;;;;<====>CFLMMMMMPPPRSSSSSWaaaaaaabbbbcccddddddeeeeeeeeeeegghiiiiiiiillllllmmnnnnnnnooooooooqqqqrrrssssssssstttttttttuuuuuuuvvwyy{{}}

Dieser Code ist ein vollständiges Programm.

Am Anfang stehen sieben Leerzeichen.

Die Eingabe wird von STDIN gelesen und auf STDOUT gedruckt. Das Ergebnis ist in double, keine Rundung erfolgt.

Originalcode ungolfed:

using System;
using S = System.Console;

class P
{
    static void Main()
    {
        var t = S.ReadLine();
        double q = int.Parse(t);
        Func<double, double, double> M = Math.Pow;
        S.Write(M(q, 2 * .25) * M(q * q, 1));
    }
}




3

Python 3.6, 59 Bytes

ba(,b5,d' (,a/([m:'-)oa)(bl*aadplma dba](r)d )l*d,:)*m:-mml

Keine Rundung. Fließkomma-Genauigkeit.


Wirklich 3 Lambdas?
Mr. Xcoder

3

Haskell, 64 Bytes ( geknackt von Laikoni )

$$$$$$(((((())))))**,...0<<<>>>[]cccccdddeffiiiiilloopppprrsstuu

Standard Haskell Gleitkommaoperationen.

Meine ursprüngliche Version ist:

Produkt. ((($ succ $ cos $ 0) (Flip (**).) [ID, Rezept])). Flip (ID)



@Laikoni: gut gemacht!
Nimi

3

Fourier , 124 119 Bytes

((()))*******--011111<=>>>HHINNNN^^^eeehhhhkkkkmmmmmmmmmmmmmmmmossuuuuuuuuuuuuuuuuu{{{{{{{{{{}}}}}}}}}}~~~~~~~~~~~~~~~~

Es gibt keine Leerzeichen oder Zeilenumbrüche.

Die Quadratwurzel wird auf die nächste ganze Zahl gerundet, da Fourier nur Ganzzahlen zu verarbeiten scheint (und da @ATaco die Erlaubnis erhalten hat, hoffe ich, dass dies in Ordnung ist).

Behebung eines Bearbeitungsfehlers. Wenn Sie dies bereits geknackt haben, war das vorherige funktionsfähig

Es wurde mir klar, dass ich einen Teil des Codes falsch verstanden hatte und mehr Zeichen verwendete, als ich brauchte

Wenn ich etwas verpasst habe, lass es mich wissen




3

Oktave, 30 Bytes (Sicher)

(((((())))))**++/:@eeeiiijmsu~

Ein bisschen einfacher als meine erste. Sollte nicht zu schwer sein, aber es ist hoffentlich ein lustiges Puzzle.


2
Nein ^? Hmmm ...
Luis Mendo

1
Kam damit @(e)(e**((i/(i+i))+~sum(e:j)))klar, aber es ist nur n^1.5... das ist knifflig.
Kyle Gullion

3

Ohm, 11 Bytes

M ⁿ¡D¼½;+1I

Verwenden Sie mit -cFlagge. Verwendet CP-437-Codierung.


Es tut mir leid, aber sind Sie sich ziemlich sicher, dass dies richtig ist?
user4867444

Nun, da es in der angegebenen Zeit noch niemand geknackt hat, haben Sie bitte etwas dagegen, Ihre Lösung mitzuteilen? Ich bin sehr neugierig :)
user4867444

Dies ist vorerst die kürzeste Antwort, die als sicher gilt. Ich werde es akzeptieren, aber wenn Sie Ihren ursprünglichen Code nicht innerhalb von 5 Tagen veröffentlichen, werde ich dies deaktivieren, da ich nicht sicher bin, ob dies möglich ist. Auch EAGER sieht Ihre Lösung
Mr. Xcoder

2
@ RomanGräf versuch doch bitte deine lösung zu finden. Andernfalls werde ich dies deaktivieren ...
Mr. Xcoder

1
@ RomanGräf: ping? Immer noch sehr gespannt auf diese Lösung :)
user4867444


2

Javascript, 123 Bytes, Gebrochen von notjagan

 """"""((((((((()))))))))********,--.....//2;;======>>Seeeeeeegggggggggggghhhhhhhhhhhilllllnnnnnnnnnnorrrsstttttttttttttu{}

Dieser Code ist eine vollständige Funktion

Ganz am Anfang der Zeichenliste befindet sich ein Leerzeichen

Die Rundung dieser Antwort ist die Gleitkomma-Genauigkeit für Javascript, die Genauigkeit liegt bei jeder Antwort innerhalb von 10 ^ -6.

Wurde kürzer, weil die Präzision nicht so hoch gehalten werden musste, wie ich dachte.

Ich hatte erkannt, dass es viel einfacher zu lösen sein würde, als ich es ursprünglich gemacht hatte, aber es war bereits da: P

Anfangscode:

g=t=>t-(t*t-n)/("le".length*t);e=h=>{n=h*h*h*h*h,s=2**(n.toString("ng".length).length/"th".length);return g(g(g(g(g(s)))))}

Newton-Methode, angewendet 5 mal ab der nächsten Potenz von 2







2

Excel, 26 Bytes

=(())*//11122AAAIINPQRSST^

Keine Rundung.

Hinweis: Da Excel eine kostenpflichtige Software ist, funktioniert dies auch im kostenlosen LibreOffice


1
Gibt es eine Möglichkeit, dies auszuführen, ohne Excel zu kaufen? Derzeit herrscht Konsens darüber, dass nicht freie Sprachen bei Bullen und Räubern nicht verwendet werden können.
Weizen-Assistent

1
Sollte im freien Libreoffice arbeiten, aber ich werde nachsehen und zurückgreifen.
Pajonk

1
Funktioniert gut.
Pajonk



2

RProgN 2 , 6 Bytes ( geknackt von @notjagan )

š2]^*\

Keine Rundung, zeigt viele Nachkommastellen an. Zeigt für eine ganzzahlige Lösung keine an.


2
Funktioniert das wirklich n²√n? Ich kann es leicht berechnen lassen n² + √n, aber ich kann nicht für das Leben von mir sehen, wie Sie die Ausdrücke bekommen, um sich zu multiplizieren.
Notjagan

@notjagan ich auch ... habe 2 Stunden lang versucht, es zu knacken und nichts funktioniert. ATaco sind Sie sicher, dass die Quelle korrekt ist?
Mr. Xcoder

@ Mr.Xcoder Ah, du bist ganz richtig. Entschuldige, dass du deine gemeinsamen Zeiten verschwendest! Bitte beachten Sie die bearbeitete Quelle.
ATaco

Jetzt macht es Sinn!
Mr. Xcoder

Ein bisschen spät, weil ich beschäftigt war, aber geknackt .
Notjagan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.