Git biraz Java üret


14

Patronunuz böyle bir kod yazmanızı istiyor:

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, /codereview//a/117294/61929 adresinde )

hangi verimli ve böylece, ama yazmak için eğlenceli değil. Yapmanız gereken tuş basma sayısını en aza indirmek istediğiniz için, bu işlevi sizin için veren (veya çıktıya bir dize döndüren) daha kısa bir program veya işlev (veya yöntem) yazarsınız. Ve tüm unicode 8.0 için gerekli 120,737 tuşa sahip kendi özel tam aralıklı unicode klavyeniz olduğundan, tuş basma yerine unicode karakterleri sayıyoruz. Diliniz unicode kaynak kodu kullanmıyorsa veya bayt.

Programınız veya işlevinizle ilgili herhangi bir girdi puanınıza göre sayılır, çünkü bunu da yazmanız gerekir.

Açıklamalar ve düzenlemeler:

  • Sondan sonra 3 arka boşluk kaldırıldı }
  • Sonrasında tek bir boşluk kaldı return
  • Bir işlev / yöntemden bir çıktı dizesi döndürmek tamam

12
0==Math.log10(input)%1
SuperJedi224

7
" Unicode karakterleri sayıyoruz " diyorsunuz ama sonra hemen " Veya bayt " diyorsunuz . Hangisi o?
Kapı Tokmağı

2
Hangisini tercih ederseniz edin, yani size en düşük puanı veren olanı. Metin kaynağı kullanmayan dillere izin vermek için bayt eklendi.
Filip Haglund

1
while(input%10==0) input/=10; return input == 1;
PSkocik

4
05AB1E bayt olan CP1252 pencerelerini, unicode değil kullanır. Standart kuralları hedefliyorum ama her zaman yanlış olduğumu söyledim.
Filip Haglund

Yanıtlar:


15

PostgreSQL, 158 karakter

select'public static boolean isPowerOfTen(long input) {
  return
   '||string_agg(' input == 1'||repeat('0',x)||'L','
  ||')||';
}'from generate_series(0,18)x

Ben bir kod golf cevap olarak kullanılan bir RDBMS görmedim ... tatlı! +1
Chris Cirefice

@ChrisCirefice SQL aslında bu sitede biraz yaygındır. (Ya da en azından beklenenden daha yaygın.)
Alex A.

@AlexA. Hmm, iyi PCG daha az sıklıkta SE sitelerimden biri, bu yüzden hiç SQL yanıtı görmedim :)
Chris Cirefice

7

Vim 97 tuş vuruşları

ipublic static boolean isPowerOfTen(long input) {
  return
  || input == 1L<esc>qyYpfLi0<esc>q16@yo}<esc>3Gxx

Peki, bugün vim java üreten bir rulodayım, neden eğilime devam etmiyorsunuz?


değiştirilmesi fLile $size bir tuş kurtarabilecek
Çatlak Nun

Ayrıca, üçüncü satır input == 1Lbir bayt tarafından yanlış hizalanmış ...
Leaky Nun

Bu yüzden son xolarak değiştirilmeli r<sp>ve daha sonra tuş vuruşlarının sayısı değişmeyecek
Leaky Nun

7

05AB1E , 99 97 96 94 93 87 bayt

Kod:

“‚Æ£‹ÒŒ€ˆPowerOfTen(“?“¢„î®) {
 «‡
   “?19FN0›i"  ||"?}’ î® == ’?N°?'L?N18Qi';,"}"?}"",

Çevrimiçi deneyin!

CP-1252 kodlamasını kullanır .


7

CJam, 52 karakter

YA#_("𐀑򀺸󆚜񸎟񜏓񞍁򛟯󩥰󾐚򉴍􍼯𹾚򶗜򳙯󭧐񹷜񊽅𸏘򴂃򦗩󧥮𤠐𰑈򶂤𘏧󔆧򇃫󡀽򊠑񊩭򯐙񛌲񊚩𤱶𻺢"f&bY7#b:c~

Çevrimiçi deneyin!

Aşama 1

U + 10000 - U + 10FFFF arasındaki Unicode karakterleri kullanarak, tek bir karakterde 20 bit kodlayabiliriz. CJam dahili olarak 16 bit karakter kullanır, bu nedenle her biri bir çift taşıyıcı olarak kodlanır , biri U + D800'den U + DBFF'ye, ardından U + DC00'den U + DFFF'ye kadar.

Her bir vekilin 1023 ile bit yolunu VE alarak, kodladığı 10 bit bilgiyi elde ederiz. Sonuç dizisini BMP dışındaki Unicode karakterlerin rasgele bir dizesini ASCII dizesine çözmek için taban 1024'ten taban 128'e dönüştürebiliriz.

Kod aşağıdakileri yapar:

YA#    e# Push 1024 as 2 ** 10.
_(     e# Copy and decrement to push 1023.

"𑅰󻢶񹱨񉽌񍍎񄆋򎿙򧃮񑩹󠷽􂼩􉪦񭲣񶿝򭁩󭰺􄔨񍢤𘎖񮧗򦹀𹀠񐢑񜅈𠟏򘍎󾇗򲁺􅀢򅌛񎠲򦙤򃅒𹣬񧵀򑀢"

f&     e# Apply bitwise AND with 1023 to each surrogate character.
b      e# Convert the string from base 1024 to integer.
Y7#    e# Push 128 as 2 ** 7.
b      e# Convert the integer to base 128.
:c     e# Cast each base-128 to an ASCII character.
~      e# Evaluate the resulting string.

2. aşama

Yukarıdaki kod çözme işlemi aşağıdaki kaynak kodunu verir ( 98 bayt ).

"public static boolean isPowerOfTen(long input) {
  return
   ""L
  || input == ":S6>AJ,f#S*"L;
}"

Çevrimiçi deneyin!

Kod aşağıdakileri yapar:

e# Push the following string.

"public static boolean isPowerOfTen(long input) {
  return
   "

e# Push the following string and save it in S.

"L
  || input == ":S

e# Discard the first 6 characters of S. The new string begins with " input".

6>

e# Elevate 10 (A) to each exponent below 19 (J).

AJ,f#

e# Join the resulting array, using the string L as separator.

S*

e# Push the following string.

"L;
}"

Yahudilik gibi bir SE sitesinin sitenin unicode desteğini stres testi yapan siteler olmasını bekleyebilirsiniz, ancak bu çılgınca: D
Filip Haglund

Alıntı işaretleri arasındaki karakterlerin tam ikisini görebiliyorum. Onaltılı mesaj gönderebilir misiniz?
Pavel

Aslında ikisini görebiliyor musunuz? Hiç şansım yok ... Karakterleri UTF-8 olarak kodlamak, hexdump böyle görünecekti. tio.run/nexus/bash#AagAV///eHhkIC1nIDH//…
Dennis

6

Java, 217 215 220 219 192 bayt

golfed:

public static String b(){String s="public static boolean isPowerOfTen(long input) {\n  return\n    input == 1L",z="";for(int i=0;i++<18;){z+="0";s+="\n  || input == 1"+z+"L";}return s+";\n}";}

Ungolfed:

  public static String a(){
    String s = "public static boolean isPowerOfTen(long input) {\n  return\n    input == 1L", z="";
    for (int i=0; i++ < 18;) {
        z += "0";
        s += "\n  || input == 1"+z+"L";
    }
    return s + ";\n}";
  }

(ilk cevap, wuhu)

Teşekkürler!
-2 bayt: user902383
-1 bayt: Denham Coote

değişiklikler:

  • boşluk yerine kullanılan sekmeler
  • üretimin son satırını kaçırdı: 18 -> 19
  • iç döngü kaldırıldı
  • baskıdan dönen dizeye değiştirildi

4
iç için iç parantez gerekmez
user902383

Java 8 sözdizimini kullanın, diğer bazı şeyleri de kısaltın: ()->{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 bayt) Şimdi yazdırmak yerine dizeyi döndürür, ancak bu daha kısadır.
Addison Crump

1
Daha ayrıntılı bir Java programı oluşturmak için ayrıntılı bir Java programı yazmak için +1.
Cyoce

bunun yerine bir bayt kaydeden for(int i=1;i<19;i++)yazabilirsinizfor(int i=1;i++<19;)
Denham Coote

Ayrıca, beyan int i=1,k;ve sonra yazabilirsiniz for(;i++<19;)vefor(k=0;k++<i;)
Denham Coote

5

PowerShell, 120 bayt

'public static boolean isPowerOfTen(long input) {'
'  return'
"   $((0..18|%{" input == 1"+"0"*$_})-join"L`n  ||")L;`n}"

İlk iki satır basitçe dize değişmezleridir.

Üçüncü satır üç boşlukla başlar L;`n}"ve son çift baytı bitirmek için biter . Komut dosyası bloğunun içindeki orta bit $(...), ' %den' 0e geri döngü yapılarak 18ve her bir yinelemenin input == 1karşılık gelen sayıda sıfırla başlayarak başlayan bir dize oluşturmasıyla oluşturulur . Bu bir dizi dizeyi tükürecektir. Daha sonra -joindizinin her elemanını L`n ||, yeni satır borularına ulaşmak için birlikte kullanıyoruz. Bu büyük dize, otomatik olarak ortaya ve çıktıya eklenen komut dosyası bloğunun çıktısıdır.

PS C:\Tools\Scripts\golfing> .\go-generate-some-java.ps1
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;
}

Uzun zaman önce ... :) Çok etkileyici!
mazzy

4

Pyth, 118 106 103 bayt

s[."
{Z-L¡JxÙÿ
LæÝ<­í?¢µb'¥ÜA«Ç}h¹äÚÏß"\nb*4dj"\n  || "ms[." uøs|ÀiÝ"*d\0\L)U19\;b\}

Çevrimiçi deneyin!

Tüm bu dize hardcoding gerçekten çok bayt yiyor , ama bu konuda yapabileceğim hiçbir şey yok .

Güncelleme: Paketlenmiş bir dize kullanarak 3 bayt kaydedildi. @ User81655 ipucu için teşekkürler!


Paketlenmiş dizeleri kullanabilirsiniz ...
user81655

Pyth bilmiyorum ve tam dize (paketleme programı her zaman değiştirir) paketlemek için bir yol olup olmadığından emin değilim ama sonuçlara paketleme rve bu (98 bayt) nsonuçları bitiştirilmesi .
user81655

@ user81655 Teşekkürler, Pyth'in bunu bildiğini bilmiyordum. :) Sadece ilk büyük dizgeyi paketlemek mantıklıdır, form paketini açtığınız yükü küçük dize için buna değmez.
Denker

@ user81655 Bunun farkındayım, ama 103 karakter sayıyorum. 97'ye nasıl ulaştın?
Denker

Hata! Benim hatam, onları yanlış sayıyordum.
user81655

4

C # (CSI) 181 180 179 bayt

string i=" input == 1",e="public static bool";Console.Write(e+@"ean isPowerOfTen(long input) {
  return
   "+i+string.Join(@"L
  ||"+i,e.Select((_,x)=>new string('0',x)))+@"L;
}")

Sadece küçük bir hile var. Bunu yazmanın doğrudan yolu:

string.Join("L\n  || input == 1",Enumerable.Range(0,18).Select(x=>new string('0',x)))

Ben yine de ihtiyacım olan metnin ilk 18 karakteri ile dize kullanarak uzun Enumerable.Range kurtulmak olabilir. Bu, dize IEnumerable uyguladığı ve öğeyi (gerekli olmayan) ve lambda işlevine istediğimiz dizini veren bir Select sürümü olduğu için çalışır.


1
@WashingtonGuedes Teşekkürler
raggy

1
biraz açıklama ekleyin lütfen
Eumel

1
CSI ifade gövdelerini destekliyor mu? Eğer öyleyse, { return ... }ile değiştirilebilir =>....
mınxomaτ

Şu anda bilgisayarda değil, bu yüzden bunu test edemiyorum. Son sözcük dizgisi içindeki braketten kaçıyor mu? Yoksa bilmediğim harika bir numara mı? :)
Yytsi

3

JavaScript, 172 157 152 150 148 bayt

p=>`public static boolean isPowerOfTen(long input) {
  return${[...Array(19)].map((x,i)=>`
  ${i?'||':' '} input == 1${'0'.repeat(i)}L`).join``};
}`


2
ES7'de, ${10**i}yerine kullanarak 9 bayt kaydedebilirsiniz 1${'0'.repeat(i)}.
Neil

3

C, 158155 bayt

i;main(){for(puts("public static boolean isPowerOfTen(long input) {\n  return");i<19;)printf("  %s input == 1%0.*dL%s\n",i++?"||":" ",i,0,i<18?"":";\n}");}

Burada çevrimiçi deneyin .


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);}
Printf

3

Jöle, 75 bayt

(Bunlar Jelly'in özel kod sayfasındaki baytlardır .)

0r18⁵*;@€⁶j“¢œḤḅg^NrÞḢ⁷ẉ»“⁵®UẆƓḃÐL⁴ṖịṛFþẈ¹9}¶ ƁḋȮ¦sẒẆd€Ḟɼ¿ỌṀP^µ\f@»;;“L;¶}”

Burada deneyin.

açıklama

0r18      Range [0..18]
⁵*        Take the 10^ of each number
;@€⁶      Prepend a space to each number
j“...»    Join by compressed string "L\n  || input =="
“...»;    Prepend compressed string "public static ... =="
;“L;¶}”   Append "L;\n}"

3

Vimscript, 120 bayt

İş için doğru aleti de kullanabilir.

Bu, autoindent, vb. Ayarlanmadığını varsayar. ^[ve sırasıyla ve karakterleri ^Miçin çıkış karakterleri .ESCCR

aMakro geçerli satırı kopyalar ve kopyanın 0 ekler. :normHat klişe ve tüm üretir indent == 1Lhattı, daha sonra kullandığı abaşkalarını oluşturun.

:let @a='yyp$i0^['
:norm ipublic static boolean isPowerOfTen(long input) {^M  return^M  || input == 1L^[18@a$a;^M}
:3s/||/ /

Örnek çıktısının iki satırdaki arka boşluklarının yazım hatası olmaması durumunda, bunları içeren 126 baytlık bir sürüm.

:let @a='yyp/L^Mi0^['
:norm ipublic static boolean isPowerOfTen(long input) {^M  return ^M  || input == 1L^[18@a$a;^M}   
:3s/||/ /

2

Oracle SQL 9.2, 311 bayt

SELECT REPLACE(REPLACE('public static boolean isPowerOfTen(long input) {'||CHR(10)||'  return'||c||';'||'}', 'n  ||', 'n'||CHR(10)||'   '),CHR(10)||';', ';'||CHR(10)) FROM(SELECT LEVEL l,SYS_CONNECT_BY_PATH('input == '||TO_CHAR(POWER(10,LEVEL-1))||'L'||CHR(10),'  || ')c FROM DUAL CONNECT BY LEVEL<20)WHERE l=19

2

Perl 5 - 130 141

@s=map{'input == 1'.0 x$_."L\n  ||"}0..18;$s[$#s]=~s/\n  \|\|/;\n}/g;print"public static boolean isPowerOfTen(long input){\n  return\n    @s"

EDIT: kesin girinti olması düzeltildi


Aralık boyunca parantez kullanmaya gerek yoktur. Değişimde kesin girintiyi yeniden oluşturmak güzel olurdu.
manatwork

Unuttuğum parantez için teşekkürler. Kesin girinti için düzelttim.
ChatterOne

gOyuncu değişikliği için bayrağa gerek yoktur . Eğer bir single'ı olarak da \no dizede, sadece eşleştirip her şey ondan sonra olabilir: $s[$#s]=~s/\n.+/;\n}/. Ancak bir jointemel daha kısa olurdu: pastebin.com/hQ61Adt8
manatwork

Teşekkür ederim, ancak çözümünüzü kopyalayıp yapıştırmamın iyi olacağını düşünmüyorum, bu yüzden onu en iyi çabam gibi bırakacağım. Zamanla, golfing daha iyi olacağım :-)
ChatterOne

2

ES6, 139 bayt

_=>"0".repeat(19).replace(/./g,`
 || input == 1$\`L`).replace(`
 ||`,`public static boolean isPowerOfTen(long input) {
  return\n  `)+`;
}`

Bu üçgen üretme sorularını çok seviyorum.


2

Kotlin, 194 193 karakter

fun main(u:Array<String>){var o="public static boolean isPowerOfTen(long input) {\n\treturn"
var p:Long=1
for(k in 0..18){
o+="\n\t"
if(k>0)o+="||"
o+=" input == ${p}L"
p*=10
}
print("$o;\n}")}

Http://try.kotlinlang.org/ adresinde test edin.


Programlama Bulmacalar ve Kod Golf hoş geldiniz. Güzel bir ilk cevap, ancak lütfen çevrimiçi bir tercümana bir bağlantı ekleyin veya başkalarının doğrulayabilmesi için bu programı nasıl çalıştıracağınıza dair bir örnek ekleyin. Ancak, burada iyi vakit geçirin! :)
Denker


2

jq, 123 karakter

(121 karakter kod + 2 karakter komut satırı seçeneği.)

"public static boolean isPowerOfTen(long input) {
  return
   \([range(19)|" input == 1\("0"*.//"")L"]|join("
  ||"));
}"

Örnek çalışma:

bash-4.3$ jq -nr '"public static boolean isPowerOfTen(long input) {
>   return
>    \([range(19)|" input == 1\("0"*.//"")L"]|join("
>   ||"));
> }"'
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;
}

Çevrimiçi test ( -rURL'den geçme desteklenmez - Ham Çıktıyı kendiniz kontrol edin.)


1

Javascript 175 bayt

Bunu düzenli yapalım

var s = "public static boolean isPowerOfTen(long input) {\n\treturn\n\t\tinput == 1";
for (var i = 1; i < 20; i++) {
    s += "\n\t|| input == 1";
    for (var j = 0; j < i; j++) {
        s += "0";
    }
    s += "L" ;
}
s += ";\n}";
alert(s);

Oldukça küçük. Şimdi, bazı noktalı virgüllere gerek yok, noktalı virgül gerekli değil, var var vb.

k="input == 1"
s="public static boolean isPowerOfTen(long input) {\n\treturn\n\t\t"+k+"L"
for(i=1;i<20;i++){s+="\n\t|| "+k
for(j=0;j<i;j++)s+="0";s+="L"}s+=";\n}"
alert(s)

Bu büyünün nasıl çalıştığını açıklayabilir misiniz ? :)
Marv

3
Javascript, en azından anahtar kelimeler (for, while, var, vb.) Anahtar kelimeler başka bir şeye "dokunmayana" kadar noktalı virgüllerle ilgilenmez. Ayrıca, var anahtar sözcüğünü kullanmazsanız, şimdiye kadar bir programlama dilinde gördüğüm en kötü özellik olan global değişkenler elde edersiniz.
Bálint

Bálint @. Neden bu en kötü özellik ?
kaldırıldı

@WashingtonGuedes Çoğu dilde, bir işlevin içindeki bir şeyi yanlış yazıp yazmadığınızı hatırlatırsınız. Javascript bunu tamamen yeni bir değişken oluşturmuş gibi kabul ettiğinden, bunun hakkında hiçbir şey söylemez.
Bálint

Ayrıca, aynısı = doğru döndürmek için de geçerlidir.
Bálint

1

Python (3.5) 137 136 bayt

print("public static boolean isPowerOfTen(long input) {\n  return\n   ",'\n  || '.join("input == %rL"%10**i for i in range(19))+";\n}")

Önceki versiyon

print("public static boolean isPowerOfTen(long input) {\n  return\n   ",'\n  || '.join("input == 1"+"0"*i+"L"for i in range(19))+";\n}")

135 Python 2.7 ile:print "public static boolean isPowerOfTen(long input) {\n return\n %s;\n}"%"\n || ".join("input == %r"%10L**i for i in range(19))
moooeeeep

@moooeeeep haklısın,% r win 1 bayt kullanımı ve python 2 print(parantez olmadan) bir tane daha kazan
Erwan

0

ANSI-SQL, 252 karakter

WITH t as(SELECT '   'x,1 c,1 l UNION SELECT'  ||',c*10,l+1 FROM t WHERE l<19)SELECT 'public static boolean isPowerOfTen(long input) {'UNION ALL SELECT'  return 'UNION ALL SELECT x||' input == '||c||'L'||SUBSTR(';',1,l/19)FROM t UNION ALL SELECT'}   ';

Ungolfed:

WITH t as (SELECT '   ' x,1 c,1 l UNION
           SELECT '  ||',c*10,l+1 FROM t WHERE l<19)
SELECT 'public static boolean isPowerOfTen(long input) {' UNION ALL
SELECT '  return ' UNION ALL
SELECT x||' input == '||c||'L'||SUBSTR(';',1,l/19) FROM t UNION ALL
SELECT '}   ';

Ciddi bir girişim değil, sadece Oracle SQL / T-SQL girişlerine bakıyorum.


40 ek karakter için "ikili" ekleyebilir ve "Oracle SQL" girişi yapabilirim.
user1361991

0

JavaScript (Node.js), 156 bayt

s="public static boolean isPowerOfTen(long input) {\n  return "
for(i=1;i<1e19;i*=10)s+="\n  "+(i-1?"||":" ")+" input == "+i+"L"
console.log(s+";\n}   \n")

i-1Sadece o sadece biraz daha kısadır var (çok ilk turu 0 (ve dolayısıyla Falsey) olacaktır i!=1.

Öneriler hoş geldiniz!


0

Perl 5, 137 bayt

Önceki Perl cevabına dayanmaz, ancak bir şekilde daha kısadır. Döngünün içindeki ilk "girdi" ye dikkat ederek tekrar kısaltılabileceğine inanıyorum, ama henüz hiçbir şey denemedim (iş yerinde)

$i="input";for(1..18){$b.="  || $i == 1"."0"x$_."L;\n"}print"public static boolean isPowerOfTen(long $i) {\n  return\n    $i == 1L;\n$b}"

0

CJam, 112 karakter

"public static boolean isPowerOfTen(long input) {
  return
    input == 1"19,"0"a19*.*"L
  || input == 1"*"L;
}"

0

AWK + kabuk, 157 bayt

echo 18|awk '{s="input == 1";printf"public static boolean isPowerOfTen(long input) {\n return\n    "s"L";for(;I<$1;I++)printf"\n  ||%sL",s=s"0";print";\n}"}'

Soru, yazmanız gereken her şeyi saymaktı. Bu, patron kaçınılmaz olarak fikrini değiştirdiğinde isPowersOfTen yöntemine kaç satır yerleştirileceğini seçme avantajına sahiptir.


Burada bir ipi geçmek borudan daha kısadır echo:awk '…'<<<18
manatwork

Ben burada-dosya biliyorum ama burada-string değil. Bilgi için teşekkürler.
Robert Benson

0

T-SQL 289 , 277 , 250 , 249 bayt

SELECT'public static boolean isPowerOfTen(long input){return '+STUFF((SELECT'||input=='+N+'L 'FROM(SELECT TOP 19 FORMAT(POWER(10.0,ROW_NUMBER()OVER(ORDER BY id)),'F0')N FROM syscolumns)A FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,2,'')+';}'

Güncelleme: Teşekkürler @Bridge, ben de birkaç yer daha buldum :)

Güncelleme2: CTE'yi alt sorgu -27 karakter olarak değiştirdi :) Güncelleme3: Başka bir alan tozu @bridge ısırıyor :)


1
Kodun geri kalanını değiştirmeden 7 boşluk daha (282 bayt) 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, '')+';}'
Köprü

1
Şimdi geriye baktığımda, orijinal yorumumdaki tüm fazla boşlukları görebiliyorum! Kurtulduğunuz bir alan daha buldum - hemen arkasındanROW_NUMBER()
Köprü

0

R, 185 bayt

golfed

options(scipen=999);p=paste;cat(p("public static boolean isPowerOfTen(long input) {"," return",p(sapply(0:19,function(x)p(" input == ",10^x,"L",sep="")),collapse="\n ||"),"}",sep="\n"))

Ungolfed

options(scipen=999)
p=paste
cat(
  p("public static boolean isPowerOfTen(long input) {",
        " return",
        p(sapply(0:19,function(x)p(" input == ",10^x,"L",sep="")),collapse="\n ||"),
        "}",
        sep="\n")
)

0

Perl 6 (115 bayt)

say "public static boolean isPowerOfTen(long input) \{
  return
   {join "L
  ||",(" input == "X~(10 X**^19))}L;
}"

Xoperatör kartezyen ürün çalışmasını listeler, örneğin 10 X** ^19on güç verir (10'dan 0'a 19 gücüne, 0'dan ^sayılan bir aralık operatörü gibi). Dizeleri ile kod blokları olabilir {(bu yüzden ilk örneğinden kaçıyorum).


0

Java, 210/166

Puan, bir işlevden girdi döndürmenin 'çıktı' tanımını karşılayıp karşılamadığına bağlıdır.

Konsol çıkışı (210):

class A{public static void main(String[]z){String a=" input == 1",t="L\n  ||"+a,s="public static boolean isPowerOfTen(long input) {\n  return\n   "+a;for(int i=0;++i<19;)s+=t+="0";System.out.print(s+"L;\n}");}}

Dizi dönüşü (166):

String a(){String a=" input == 1",t="L\n  ||"+a,s="public static boolean isPowerOfTen(long input) {\n  return\n   "+a;for(int i=0;++i<19;)s+=t+="0";return s+"L;\n}";}

Okunabilir sürüm:

String a() {
    String a=" input == 1", t = "L\n  ||"+a,
        s = "public static boolean isPowerOfTen(long input) {\n  return\n   "+a;
    for (int i = 0; ++i < 19;)
        s += t += "0";
    return s + "L;\n}";
}

0

Toplu, 230 208 206 205 bayt

@echo off
echo public static boolean isPowerOfTen(long input) {
echo   return
set m=input == 1
echo    %m%L
for /l %%a in (1,1,17)do call:a
call:a ;
echo }
exit/b
:a
set m=%m%0
echo  ^|^| %m%L%1

Düzenleme: input ==Ekstra noktalı virgül ile satır için alt yordam tekrar ve kaçınarak kaçınarak 22 bayt kaydedildi . Gereksiz alanları kaldırarak 2 3 bayt kaydedildi .


Etrafta boşluklara mı ihtiyacınız var ==?
Pavel

@Pavel Bu kod değil; çıktının bir parçası.
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.