Wenn Sie der Meinung sind, dass dies Spaß machen könnte, aber zu viel Arbeit bedeutet, sollten Sie an dieser viel kleineren Herausforderung teilnehmen.
Ein bisschen Spaß (und möglicherweise Frust!) Für 2016 ... Dyalogs "Puzzle des Jahres" . Genießen!
Das Ziel
Suchen Sie nach Dyalog APL- Ausdrücken ( Download ) (andere Sprachen sind zulässig, siehe Berechtigung unten), die genau die Ziffern 2 0 1 6 enthalten, um den Zahlen 0 bis 100 zu entsprechen. Beispiel:
20=16
×2016
2⌊016
2+0+1*6
...
Ziel ist es, so wenig Zeichen wie möglich in jedem Ausdruck zu verwenden (die Mindestanzahl an Zeichen für einen Ausdruck beträgt 5 - die vier Ziffern 2 0 1 6 und eine einzelne Grundfunktion / einen einzelnen Operator).
Die Regeln
- Jeder Ausdruck muss die Ziffern 2 0 1 6 (in dieser Reihenfolge) und keine anderen Ziffern enthalten. Voreingestellte Konstanten und Variablen sind ebenfalls nicht erlaubt.
- Zusätzlich zu den vier Ziffern 2 0 1 6 können nur eingebaute Symbole und Namen, Klammern, Leerzeichen, hohe Minuszeichen und Dezimalstellen verwendet werden. Die resultierenden Ausdrücke müssen deterministisch sein (dh bei wiederholten Bewertungen das gleiche Ergebnis liefern). Für Nicht-APLs sind auch Funktionen / Operatoren mit einem Namen zulässig. gleiche Regeln wie hier .
- Nehmen Sie alle Standardeinstellungen für Ihre Sprache an. Für Dyalog APL, bedeutet dies ,
⎕ML
und⎕IO
sind beide 1 und⎕PP
10 ist . - Jeder Eintrag, der korrekte Ausdrücke für alle Zahlen von 0 bis einschließlich 100 enthält, wird gemäß der Anzahl der von diesen Ausdrücken verwendeten Zeichen bewertet, wobei redundante Leerzeichen ausgenommen sind (mindestens 505 für alle 101 Ausdrücke).
Teilnahmeberechtigung
Jeder kann eintreten. Sie können in jeder Sprache antworten, es werden jedoch nur APL-Antworten für die Annahme berücksichtigt. Wenn Sie eine andere Sprache als APL verwenden, können Sie Snippets, Programme, Funktionen usw. als Alternativen zu Ausdrücken verwenden und drucken, die Nummer an einem zugänglichen Speicherort belassen oder auf andere Weise das Ergebnis zurückgeben, solange Ihr Code direkt verwendet wird Wertet die gewünschte Zahl als einen beliebigen numerischen Standarddatentyp für Ihre Sprache aus.
Einsendeschluss
30. November 2016.
Preise
- Lass deine Antwort annehmen
- Lassen Sie sich in Dyalogs Hall of Fame 2016 verewigen!
Senden Sie Ihren Eintrag
Nach dem 30. November 2016 akzeptiere ich die kürzeste Antwort und reiche Ihre Antwort in Ihrem Namen in Dyalogs Ruhmeshalle 2016 ein.
FAQ
- Ist
J
(zB 37 =⌈⍟!20J16
) erlaubt? - Nein: Zusätzlich zu den vier Ziffern 2 0 1 6 können nur eingebaute Symbole und Namen, Klammern, Leerzeichen, hohe Minuszeichen und Dezimalstellen verwendet werden.
- Ist die Ausgabe als String akzeptabel?
- Nein: Entspricht den Zahlen 0 bis 100.
- Physische Ziffern oder Datenstellen?
- Datenstellen nach OP: gleiche Regeln wie hier , wo eines der Beispiele enthält
LOG10(
. - Ist die Zuweisung von Variablen dann als Teil des Ausdrucks
a+16+a←20
zulässig (z. B. 56 = )? - Ja, aber Sie dürfen keine Zuweisung von einem Ausdruck in einem anderen verwenden.
Ich habe die ausdrückliche schriftliche Erlaubnis, diese Herausforderung hier zu veröffentlichen, vom ursprünglichen Autor dieser Herausforderung. Sie können dies jederzeit überprüfen, indem Sie dem angegebenen Link folgen und den Autor kontaktieren. Ich habe dem ursprünglichen Autor des Wettbewerbs innerhalb der Minute, in der ich es gepostet habe, den Link zu dieser Seite gegeben, damit er überprüfen kann, ob ich die Antwort von jemandem als meine eigene abschicke.
⎕ML
und⎕IO
(angenommen1
) akzeptabel?Antworten:
Jelly, 686 Bytes
Ich habe ungefähr 50 davon geschrieben und den Rest automatisch generiert, indem ich nach Bedarf
Ḥ
(× 2) und‘’
(± 1) angefügt habe. Ich werde sie später verbessern!quelle
201ÆCo6
. Ich glaube nicht, dass Sie verwenden könnenṾ
(die im Februar implementiert wurde), aber20|16Ḥ‘Ḥ
und20|16‘ḤḤ’
sind ebenso kurz.Ḥ
über‘’
- 46, unter mit vier anderen Zahlen, sollte ein Zeichen kürzer gewesen. Ich habe es durch2016½Ċ‘
das ersetzt, das so lange wie deins ist.Hexagony , 888 Bytes
Okay, zuerst ein paar Grundregeln für Hexagony, falls jemand dies schlagen möchte:
2|016
für 22), aber es scheint am ehesten der Herausforderung zu entsprechen.Also hier ist die Liste. Ich habe die meisten von ihnen getestet, aber nicht alle (einige sind triviale Modifikationen anderer), also hoffe ich, dass ich keine Fehler gemacht habe:
Ich bin gegen Ende etwas faul geworden, also bin ich mir sicher, dass das nicht optimal ist. Könnte interessant (und möglich) sein, diese zu brachialisieren.
quelle
J,
1041... 838 Bytes981961952860859Ich bin bis zum Ende ein bisschen faul geworden, aber es sollte mehr repariert werden als weniger.
Ich glaube nicht, dass ich jemals Hexagony überholen werde, aber du weißt es nie!Hexagonie besiegen! 9 Bytes gespart dank Zgarb! und noch viel mehr für Lynn!Highlights und Hinweise
Ich benutzte Primzahlen viel in diesem. Tatsächlich habe ich in dieser Sache 37- mal die
p:
(N-te Prim) -Funktion verwendet .90 wurde mit einer Gabel gemacht. Yay! Es ist ungefähr so:
Übersetzt als
54 verwendet eine gestaltende Ravel!
Ist äquivalent zu
quelle
!20-16
54:<.^20-16
55:>.^20-16
97:p:!20-16
+:p:-2-016
(4 Bytes kürzer)?2]01+6
, 8 kann sein2%~016
und 12 kann sein2*01]6
.JavaScript, 1021 Bytes
Zwei Bytes dank Charlie Wynn und ETHProductions behoben und gespeichert .
quelle
2-~01+6
als 10 und-~!2016
als 1 verwenden.JavaScript (ES7), 836 Byte
Alles sollte in jedem Browser funktionieren, außer 81, 88 und 97, die den neuen
**
Operator verwenden.Meistens wurde hier alles von Hand gemacht. Ich habe an einem Brute-Forcer gearbeitet, um alles zu verbessern, was verbessert werden kann. Derzeit wurden 103 Byte für verschiedene Elemente gespeichert.
Brute-Forcer
Es ist nicht der schönste Code, aber das scheint in diesen Bereichen keine Rolle zu spielen.
WARNUNG: Führen Sie das Programm nur aus, wenn Sie darauf vorbereitet sind, dass Ihr Browser / Motor einige Minuten lang einfriert. Niemand mag es, 7 verschachtelte Schleifen zu berechnen.
quelle
PowerShell v3 +,
1575 -1499 Byte100% manuelles Golfen - keine Brute-Force-Programme oder andere Hilfsmittel.
Ich fühle, dass 1500 vielleicht in ReichweiteSub-1500 erreicht ist! Mal sehen, wie gut ich damit umgehen kann. (Hinweis: Dies wurde nur in Version 4 getestet, sollte jedoch in Version 3 und 5 ohne Änderungen funktionieren. Funktioniert nicht in Version 2 oder 1, da diese Versionen keine bitweisen Verschiebungsoperatoren hatten.)
Wichtige Punkte sind
##.hashes.##
im obigen Code mit gekennzeichnet.# 11 ist die erste Zuweisung zur Variablen
$a
. Im Gegensatz zu einigen anderen Sprachen müssen Variablen für das Parsen nicht vorinitialisiert werden, und Variablen werden nur während der Ausführung aufgelöst. Da das($a=01)
von Parens umgeben ist, wird es zuerst ausgewertet, und das zweite-$a
ist äquivalent zu-1
. Dies wird von nun an ziemlich häufig ausgenutzt und ist eines der größten Dinge, die den bytecount niedrig halten.# 17 zeigt die erste Verwendung von
!
für Boolean nicht. In PowerShell werden Typen ziemlich locker umgewandelt. Wenn das Umwandeln also impliziert werden kann, funktioniert es. Hier verwenden wir die Tatsache, dass!!20
gleich!$false
ist$true
, was implizit als umgewandelt werden kann[int]1
, was zur Folge hat17
. Dies wird mehrmals verwendet, um entweder eine andere zu erhalten1
oder eine Portion dazu zu bringen, zu gehen0
.# 22 Zeigt den
0x
hexadezimalen Darstellungsoperator, der hier0x16
zu wird22
. Da dies0x16
jedoch die einzige Zahl ist, die wir erhalten können, ist ihr Nutzen begrenzt.# 23 hat den
-bor
Operator für "binär oder". Da jedoch beide-bor
und-bxor
haben niedrigere Priorität als einfache arithmetische Operatoren, sie in der Regel erfordert Pars verwenden, die stark Nützlichkeit einschränkt. Dies ist die einzige, die ich gefunden habe, bei der es kürzer ist, die Binärzahl oder den Operator zu verwenden (ich habe den-bxor
Operator aus 22 entfernt).# 30 ist das erste Mal, dass der
-bnot
Bediener vorgestellt wird. Dies ist der "Binary Not" -Operator und funktioniert ähnlich wie~
in (zB) JavaScript. Normalerweise werden jedoch Parens benötigt, da die Negation als--bnot
und mit einem Syntax- / Parsingfehler angezeigt wird. Da es sich um fünf Zeichen im Vergleich zu einem für handelt~
, wird es sparsam verwendet.# 39 ist die erste Verwendung unserer binären Shift-Operatoren
-shl
und-shr
. Diese ähneln<<
oder sind>>
in anderen Sprachen verfasst, sind jedoch explizit dyadisch, was bedeutet, dass wir auf beiden Seiten eine Nummer benötigen, damit sie funktionieren können, was ihre Nützlichkeit bei dieser Herausforderung einschränkt. Darüber hinaus wird ihre Priorität in der Dokumentation nicht ausdrücklich erwähnt. Tests haben jedoch gezeigt, dass sie niedriger sind als einfache Arithmetik. Dies bedeutet, dass Parens großzügig verwendet werden müssen, sodass sie nicht so gut aussehen wie in anderen Antworten.quelle
CJam,
792791 BytesIch bin gegen Ende etwas faul geworden, viele von ihnen waren nur Inkremente und Dekremente (101 ist eine Menge!), Obwohl ich nicht sicher bin, ob es für ein paar Zahlen einen anderen Weg gibt. Es bleibt noch viel Zeit zum Golfen, wenn ich muss.
Um # 40 gibt es einige winky Gesichter;)
quelle
Mathematica,
2912250222822180 BytesKönnte definitiv weiter golfen werden. Meist werden nur ein paar separate Frobenius-Gleichungen gelöst , wodurch Lösungen mit der Länge O ( n ) erhalten werden. Der Rest wurde von meinem Brute-Forcer generiert.
quelle
c
,16
wann die Zahl gerade und groß ist? Wie für 96 usw. Sie sind sich nicht sicher, wie Ihr Gleichungslöser funktioniert, abera=20
sollte die Verwendung auch für einige dieser Funktionen hilfreich sein?Dyalog APL (Dies ist ein Witz, bitte nicht einreichen), 25.957 Bytes.
Ja, das ist ein Scherzeintrag, wir brauchen eine APL-Lösung, auch wenn sie absolut schrecklich ist. Funktioniert durch Inkrementieren von
≢⍬
(0
)n
Zeiten. Ich möchte keine Geheimnisse über meine tatsächliche Unterwerfung preisgeben.Offensichtlich könnte viel mehr Golf gespielt werden.
quelle
JavaScript, 5244 Zeichen
Könnte wahrscheinlich viel weiter golfen werden. Testen Sie in der Chrome-Konsole. Ich habe um 10 aufgegeben.
quelle
Java 7, 1.083 Bytes
Für die Byteanzahl habe ich nur die Ausdrücke selbst in Klammern gezählt. Also habe ich die
System.out.println
s und ausgeschlossenclass
. Einschließlich dieser wären es 3.049 Bytes .PS: Nicht ganz sicher, ob der Int-Cast für
72
gültig ist. Obwohl es trotzdem 5 Bytes hinzufügt.Ungolfed & Testcode:
Probieren Sie es hier aus.
quelle