Twój szef chce, żebyś napisał taki kod:
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, na /codereview//a/117294/61929 )
co jest wydajne i tak, ale nie jest fajnie pisać. Ponieważ chcesz zminimalizować liczbę naciśnięć klawiszy, które musisz wykonać, piszesz krótszy program lub funkcję (lub metodę), która wyprowadza tę funkcję za Ciebie (lub zwraca ciąg do wyjścia). A ponieważ masz własną niestandardową klawiaturę z pełnym zakresem unicode ze wszystkimi 120 737 kluczami wymaganymi dla wszystkich unicode 8.0, zamiast naciśnięć klawiszy liczymy znaki unicode. Lub bajty, jeśli twój język nie używa kodu źródłowego Unicode.
Każde wejście, które Twój program lub funkcja bierze pod uwagę, liczy się do twojego wyniku, ponieważ oczywiście musisz to również wpisać.
Wyjaśnienia i zmiany:
- Usunięto 3 końcowe spacje po ostatnim
}
- Usunięto pojedyncze spacje końcowe po
return
- Zwracanie ciągu danych wyjściowych z funkcji / metody jest w porządku
źródło
0==Math.log10(input)%1
while(input%10==0) input/=10; return input == 1;
Odpowiedzi:
PostgreSQL, 158 znaków
źródło
Klawisze Vima 97
Cóż, jestem dziś na dobrej drodze z Javą produkującą vim, więc dlaczego nie kontynuować trendu!
źródło
fL
go$
może uratować Ci naciśnięcie klawiszainput == 1L
jest również wyrównana o jeden bajt ...x
powinna zostać zmieniona na,r<sp>
a następnie liczba naciśnięć klawiszy pozostanie niezmieniona05AB1E ,
999796949387 bajtówKod:
Wypróbuj online!
Wykorzystuje kodowanie CP-1252 .
źródło
CJam, 52 znaki
Wypróbuj online!
Scena 1
Używając znaków Unicode od U + 10000 do U + 10FFFF, możemy zakodować 20 bitów w jednym znaku. CJam używa 16-bitowych znaków wewnętrznie, więc każdy z nich będzie kodowany jako para surogatów , jeden w zakresie od U + D800 do U + DBFF, a następnie jeden w zakresie od U + DC00 do U + DFFF.
Biorąc bitowe ORAZ każdego surogatu z 1023, otrzymujemy 10 bitów informacji, które koduje. Możemy przekonwertować wynikową tablicę z bazy 1024 na bazę 128, aby zdekodować dowolny ciąg znaków Unicode poza BMP na ciąg ASCII.
Kod wykonuje następujące czynności:
Etap 2
Powyższy proces dekodowania daje następujący kod źródłowy ( 98 bajtów ).
Wypróbuj online!
Kod wykonuje następujące czynności:
źródło
Java,
217215220219192 bajtówGra w golfa:
Nie golfowany:
(pierwsza odpowiedź, wuhu)
Dzięki!
-2 bajty: user902383
-1 bajt: Denham Coote
Zmiany:
źródło
()->{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 bajtów) Teraz zwraca ciąg zamiast drukowania, ale to krócej.for(int i=1;i<19;i++)
możesz napisać,for(int i=1;i++<19;)
co oszczędza bajtint i=1,k;
a następnie możesz napisaćfor(;i++<19;)
ifor(k=0;k++<i;)
PowerShell, 120 bajtów
Pierwsze dwa wiersze to po prostu literały łańcuchowe, które są wyprowadzane w niezmienionej postaci.
Trzecia linia zaczyna się od trzech spacji, a kończy,
L;`n}"
kończąc ostatnie kilka bajtów. Środkowy bit wewnątrz bloku skryptu$(...)
jest konstruowany przez zapętlanie%
od0
do18
i każda iteracja konstruuje ciąg, który zaczyna się odinput == 1
konkatenacji z odpowiednią liczbą zer. Spowoduje to wyrzucenie tablicy ciągów. Następnie-join
wykonujemy każdy element tablicy wL`n ||
celu uzyskania rur newline. Ten duży ciąg jest wyjściowym blokiem skryptu, który jest automatycznie wstawiany do środka i generowany.źródło
Pyth,
118106103 bajtówWypróbuj online!
Cały ten ciąg kodowania naprawdę zjada dużo bajtów
, ale nic na to nie poradzę.Aktualizacja: Zapisano 3 bajty za pomocą spakowanego ciągu. Dzięki @ user81655 za podpowiedź!
źródło
r
i łączenien
wyników w tym (98 bajtów).C # (CSI)
181180179 bajtówW grę wchodzi tylko jedna sztuczka. Najprostszym sposobem na napisanie tego byłoby:
za pomocą ciągu zawierającego pierwsze 18 znaków potrzebnego mi tekstu mogę pozbyć się długiego Enumerable.Range. Działa to, ponieważ ciąg implementuje IEnumerable i istnieje wersja Select, która przekazuje element (niepotrzebny) i indeks, który chcemy do funkcji lambda.
źródło
{ return ... }
można je zastąpić=>...
.JavaScript,
172157152150148 bajtówPokaż fragment kodu
źródło
${10**i}
zamiast1${'0'.repeat(i)}
.C,
158155 bajtówWypróbuj online tutaj .
źródło
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);}
Galaretka, 75 bajtów
(Są to bajty na niestandardowej stronie kodowej Jelly ).
Wypróbuj tutaj.
Wyjaśnienie
źródło
Vimscript, 120 bajtów
Równie dobrze można użyć odpowiedniego narzędzia do pracy.
Zakłada się, że autoindent itp. Nie zostały ustawione.
^[
i^M
są znakami zmiany znaczenia odpowiednio dla znakówESC
iCR
.a
Makro powiela bieżącą linię i dodaje 0 do kopii.:norm
Linia generuje cały boilerplate iindent == 1L
linię, a następnie wykorzystujea
do tworzenia innych.W przypadku, gdy końcowe spacje, które przykładowy wynik zawierał w dwóch wierszach, nie były literówkami, oto 126-bajtowa wersja, która je zawiera.
źródło
Oracle SQL 9.2, 311 bajtów
źródło
Perl 5 -
130141EDIT: fixed to have exact indentation
źródło
g
flag for the substitution. Also as you have a single\n
in that string, you can simply match it and everything after it:$s[$#s]=~s/\n.+/;\n}/
. But ajoin
based one would still be shorter: pastebin.com/hQ61Adt8ES6, 139 bytes
I do so love these triangle generation questions.
źródło
Kotlin,
194193 charactersTest it at http://try.kotlinlang.org/
źródło
Ruby,
125119 bytesThanks to manatwork for -6 bytes!
źródło
jq, 123 characters
(121 characters code + 2 characters command line option.)
Sample run:
On-line test (Passing
-r
through URL is not supported – check Raw Output yourself.)źródło
Javascript 175 bytes
Let's do this regularly
Pretty small. Now, some javascript magic, like no semicolons needed, or no var's, etc.:
źródło
Python (3.5)
137136 bytesPrevious version
źródło
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.
źródło
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!
źródło
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)
źródło
CJam, 112 chars
źródło
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.
źródło
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 :)
źródło
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
źródło
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).źródło
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:
źródło
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.źródło
==
?