Ihr Chef möchte, dass Sie folgenden Code schreiben:
public static boolean isPowerOfTen(long input) {
return
input == 1L
|| input == 10L
|| input == 100L
|| input == 1000L
|| input == 10000L
|| input == 100000L
|| input == 1000000L
|| input == 10000000L
|| input == 100000000L
|| input == 1000000000L
|| input == 10000000000L
|| input == 100000000000L
|| input == 1000000000000L
|| input == 10000000000000L
|| input == 100000000000000L
|| input == 1000000000000000L
|| input == 10000000000000000L
|| input == 100000000000000000L
|| input == 1000000000000000000L;
}
(Martin Smith, unter /codereview//a/117294/61929 )
das ist effizient und so, aber nicht so lustig zu tippen. Da Sie die Anzahl der zu drückenden Tasten minimieren möchten, schreiben Sie ein kürzeres Programm oder eine kürzere Funktion (oder Methode), die diese Funktion für Sie ausgibt (oder eine auszugebende Zeichenfolge zurückgibt). Und da Sie Ihre eigene benutzerdefinierte Unicode-Tastatur mit vollem Funktionsumfang haben, die alle 120.737 Tasten enthält, die für Unicode 8.0 erforderlich sind, zählen wir Unicode-Zeichen anstelle von Tastendrücken. Oder Bytes, wenn Ihre Sprache keinen Unicode-Quellcode verwendet.
Jede Eingabe, die Ihr Programm oder Ihre Funktion vornimmt, zählt für Ihre Punktzahl, da Sie diese natürlich auch eingeben müssen.
Erläuterungen und Änderungen:
- 3 nachgestellte Leerzeichen nach dem letzten entfernt
}
- Ein einzelnes Leerzeichen nach entfernt
return
- Die Rückgabe einer Ausgabezeichenfolge von einer Funktion / Methode ist in Ordnung
quelle
0==Math.log10(input)%1
while(input%10==0) input/=10; return input == 1;
Antworten:
PostgreSQL, 158 Zeichen
quelle
Vim 97 Tastenanschläge
Nun, ich bin heute mit der Java-Produktion von Vim in Fahrt gekommen. Warum also nicht den Trend fortsetzen?
quelle
fL
durch$
könnte Ihnen einen Tastendruck erspareninput == 1L
um ein Byte falsch ausgerichtet ...x
sollte also auf geändert werden,r<sp>
und dann würde die Anzahl der Tastenanschläge unverändert bleiben05AB1E ,
999796949387 BytesCode:
Probieren Sie es online!
Verwendet die CP-1252- Codierung.
quelle
CJam, 52 Zeichen
Probieren Sie es online!
Bühne 1
Mit den Unicode-Zeichen U + 10000 bis U + 10FFFF können 20 Bits in einem einzelnen Zeichen codiert werden. CJam verwendet 16-Bit - Zeichen intern, so dass jeder wird als ein Paar von codiert werden Surrogate , eines im Bereich von U + D800 bis U + DBFF, gefolgt von einer im Bereich von U + DC00 bis U + DFFF.
Indem wir das bitweise UND jedes Ersatzzeichens mit 1023 nehmen, erhalten wir die 10 von ihm codierten Informationsbits. Wir können das resultierende Array von der Basis 1024 in die Basis 128 konvertieren, um eine beliebige Zeichenfolge von Unicode-Zeichen außerhalb des BMP in eine ASCII-Zeichenfolge zu decodieren.
Der Code bewirkt Folgendes:
Stufe 2
Der Dekodierungsprozess von oben ergibt den folgenden Quellcode ( 98 Bytes ).
Probieren Sie es online!
Der Code bewirkt Folgendes:
quelle
Java,
217215220219192 BytesGolf gespielt:
Ungolfed:
(erste Antwort, wuhu)
Vielen Dank!
-2 Byte: user902383
-1 Byte: Denham Coote
Änderungen:
quelle
()->{String s="public static boolean isPowerOfTen(long input) {\n\treturn input == 1L";for(int i=0,k;i++<18;){s+="\n\t|| input == 1";for(k=0;k++<i;)s+="0";s+="L";}return s+";\n}";}
(180 Byte) Gibt jetzt die Zeichenfolge zurück, anstatt sie zu drucken, aber das ist kürzer.for(int i=1;i<19;i++)
können Sie schreiben,for(int i=1;i++<19;)
was ein Byte speichertint i=1,k;
und dann können Sie schreibenfor(;i++<19;)
undfor(k=0;k++<i;)
Pyth,
118106103 BytesProbieren Sie es online!
All diese String-Hardcodierung verschlingt wirklich eine Menge Bytes
, aber ich kann nichts dagegen tun.Update: 3 Bytes mit einem gepackten String gespeichert. Danke @ user81655 für den Hinweis!
quelle
r
und Verketten dien
Ergebnisse in diesen (98 Byte).C # (CSI)
181180179 ByteEs gibt nur einen kleinen Trick. Der direkte Weg, dies zu schreiben, wäre:
Indem ich die Zeichenkette mit den ersten 18 Zeichen des Textes benutze, die ich sowieso brauche, kann ich den langen Enumerable.Range loswerden. Dies funktioniert, weil string IEnumerable implementiert und es eine Version von Select gibt, die das Item (nicht benötigt) und den Index, den wir wollen, an die Lambda-Funktion übergibt.
quelle
{ return ... }
kann die durch ersetzt werden=>...
.PowerShell, 120 Byte
Die ersten beiden Zeilen sind einfach String-Literale, die unverändert ausgegeben werden.
Die dritte Zeile beginnt mit drei Leerzeichen und endet mit
L;`n}"
den letzten paar Bytes. Das mittlere Bit innerhalb des Skriptblocks$(...)
wird durch For-Loop%
von0
bis18
und jede Iteration erstellt, wobei eine Zeichenfolge erstellt wird, dieinput == 1
mit der entsprechenden Anzahl von Nullen verkettet beginnt . Dadurch wird eine Reihe von Zeichenfolgen ausgespuckt. Wir haben dann-join
jedes Element des Arrays mitL`n ||
den Newline-Pipes zu erreichen. Dieser große String ist die Ausgabe des Skriptblocks, der automatisch in die Mitte eingefügt und ausgegeben wird.quelle
Javascript,
172157152150148 BytesCode-Snippet anzeigen
quelle
${10**i}
anstelle von verwenden1${'0'.repeat(i)}
.C,
158155 BytesProbieren Sie es hier online aus .
quelle
i;main(){for(puts("public static boolean isPowerOfTen(long input) {\n return");printf(" %s input == 1%0.*dL%s\n",i++?"||":" ",i,0,i<18?"":";\n}")-37);}
Jelly, 75 Bytes
(Dies sind Bytes in Jellys benutzerdefinierter Codepage .)
Probieren Sie es hier aus.
Erläuterung
quelle
Vimscript, 120 Bytes
Könnte auch das richtige Werkzeug für den Job verwenden.
Dies setzt voraus, dass Autoindent usw. nicht eingestellt wurde.
^[
und^M
sind Escape - Zeichen für dieESC
undCR
Zeichen sind.Das
a
Makro dupliziert die aktuelle Zeile und fügt der Kopie eine 0 hinzu. Die:norm
Linie generiert die gesamte Kesselplatte und dieindent == 1L
Linie und erstellt danna
die anderen.Falls die nachfolgenden Leerzeichen in der Beispielausgabe in zwei Zeilen keine Tippfehler waren, finden Sie hier eine 126-Byte-Version, in der sie enthalten sind.
quelle
Oracle SQL 9.2, 311 Byte
quelle
Perl 5 -
130141BEARBEITEN: Fix für exakte Einrückung
quelle
g
Für die Substitution ist das Flag nicht erforderlich . Auch , wie Sie eine einzelne haben\n
in diesem String, können Sie einfach passen und alles danach:$s[$#s]=~s/\n.+/;\n}/
. Aber einjoin
Basis eines wäre noch kürzer: pastebin.com/hQ61Adt8ES6, 139 Bytes
Ich liebe diese Fragen der Dreiecksgeneration.
quelle
Kotlin,
194193 ZeichenTesten Sie es unter http://try.kotlinlang.org/
quelle
Ruby,
125119 BytesDanke an manatwork für -6 Bytes!
quelle
jq, 123 Zeichen
(121 Zeichen Code + 2 Zeichen Befehlszeilenoption.)
Probelauf:
Online-Test (Das Übergeben einer
-r
URL wird nicht unterstützt. Prüfen Sie die Raw-Ausgabe selbst.)quelle
Javascript 175 Bytes
Machen wir das regelmäßig
Ziemlich klein. Nun, etwas Javascript Magie, wie kein Semikolon benötigt, oder keine var's, etc .:
quelle
Python (3.5)
137136 bytesPrevious version
quelle
print "public static boolean isPowerOfTen(long input) {\n return\n %s;\n}"%"\n || ".join("input == %r"%10L**i for i in range(19))
print
(without parenthesis ) win another oneANSI-SQL, 252 characters
Ungolfed:
Not a serious attempt, just poking at the Oracle SQL/T-SQL entries.
quelle
JavaScript (Node.js), 156 bytes
The
i-1
will only be 0 (and thus falsey) on the very first round (it's just slightly shorter thani!=1
.Suggestions welcome!
quelle
Perl 5, 137 bytes
Not based on the previous Perl answer, but it is somehow shorter. I believe it can be shortened down again by taking care of the first "input" inside the loop, but I didn't try anything yet (at work atm)
quelle
CJam, 112 chars
quelle
AWK+shell, 157 bytes
The question did say to count everything you would have to type. This does have the added bonus of being able to select how many lines would be placed in the isPowersOfTen method when the boss inevitably changes his mind.
quelle
echo
:awk '…'<<<18
T-SQL
289,277,250, 249 bytesUpdate: Thanks @Bridge, I found a few more spaces too :)
Update2: Changed CTE to subquery -27 chars :) Update3: Another space bites the dust @bridge :)
quelle
WITH A AS(SELECT CAST('1'AS VARCHAR(20))N UNION ALL SELECT CAST(CONCAT(N,'0')AS VARCHAR(20))FROM A WHERE LEN(N)<20)SELECT'public static boolean isPowerOfTen(long input){return '+STUFF((SELECT'|| input=='+N+'L 'FROM A FOR XML PATH(''),TYPE).value('.', 'VARCHAR(MAX)'), 1, 3, '')+';}'
ROW_NUMBER()
R, 185 bytes
Golfed
Ungolfed
quelle
Perl 6 (115 bytes)
X
operator does list cartesian product operation, for example10 X** ^19
gives powers of ten (from 10 to the power of 0 to 19, as^
is a range operator that counts from 0). Strings can have code blocks with{
(which is why I escape the first instance of it).quelle
Java, 210 / 166
Score is depending on whether returning the input from a function meets the definition of 'output'.
Console output (210):
String return (166):
Legible version:
quelle
Batch,
230208206205 bytesEdit: Saved 22 bytes by avoiding repeating
input ==
and reusing the subroutine for the line with the extra semicolon. Saved23 bytes by removing unnecessary spaces.quelle
==
?