悪魔の数は、10進表現が6のみで構成される正の整数です。悪魔の数のリストは、6、66、666、6666で始まります。
正の整数を指定すると、最も近い悪魔の数が出力されます。2つある場合は、大きい方を出力します。
テストケース:
n output
1 6
2 6
3 6
6 6
35 6
36 66
37 66
100 66
365 66
366 666
666 666
999 666
これはcode-golfです。バイト単位の最短回答が優先されます。
悪魔の数は、10進表現が6のみで構成される正の整数です。悪魔の数のリストは、6、66、666、6666で始まります。
正の整数を指定すると、最も近い悪魔の数が出力されます。2つある場合は、大きい方を出力します。
テストケース:
n output
1 6
2 6
3 6
6 6
35 6
36 66
37 66
100 66
365 66
366 666
666 666
999 666
これはcode-golfです。バイト単位の最短回答が優先されます。
回答:
lambda n:'6'*len(`-~n*3/11`)
x=>'6'.repeat((''+-~(x*3/11)).length)
3.6666... = 11/3
です。
f=(x,s='6')=>x<3+s?s:f(x,s+6)
「だからこそ、私は弱さを喜んでいる[…]私が弱いとき、それから私は強い。」
;I≜+{6}ᵐ
;I The list [Input, I]
≜ Assign a value to I: 0, then 1, then -1, then 2, etc.
+ Sum Input with I
{6}ᵐ All its digits must be 6
String c(int n){String r="";for(n*=11/3;n>1;r+=6,n/=10);return r;}
Port of @orlp amazing Python 2 answer。
私の66バイトカウントも悪魔だと思います。;)
(Javaの最短の答えではありません。代わりに@JollyJokerの答えを参照してください。
"6"
ていたはずです""
。
Ẇa6ḌạÐṂ⁸Ṫ
モナドリンク。
オンラインでお試しください!-このリンクにはほとんど意味がありません(以下を参照)!
真のゴルファーのスタイルでは、これは非常に非効率的です。365テストケースのTIOで60秒間のタイムアウトになります。ローカルでは、これは37秒で終了します。
Ẇa6ḌạÐṂ⁸Ṫ - Main link: n
Ẇ - all sublists - this has an implicit make_range on it's input
- so, for example, an input of 3 yields [[1],[2],[3],[1,2],[2,3],[1,2,3]]
- the important things are: that it contains both a list of the length of the
- decimal number, and a list 1 shorter; and that it's lists only contain
- non-zero numbers and are monotonically increasing in length.
6 - literal 6
a - and (vectorises), this changes all the values to 6s
- so, the example above becomes [[6],[6],[6],[6,6],[6,6],[6,6,6]]
Ḍ - convert to decimal (vectorises) [ 6, 6,, 6, 66, 66, 666 ]
⁸ - link's right argument, n
ÐṂ - filter keep those with minimal:
ạ - absolute difference (for 366 this keeps 66 AND 666; same goes for 3666; etc.)
Ṫ - tail - get the rightmost result (for 366 keeps 666, since it's longer)
TIO で365および366の 60 秒間の制限内で同じアルゴリズムを実行するためのパッチは、Ḍ
with の暗黙的なベクトル化を回避することですẆa6Ḍ€ạÐṂ⁸Ṫ
(試してください)が、これは999の入力に対してseg-faultになります(Triangle(999)は499,500ですが、それぞれが整数のリストであり、合計でTetrahedral(999)= 166,666,500整数になります。少なくともPythonでは、メモリ効率がよくありません)。
a;b;d(n,m){return(m*6)+(n>0?d(n-1,m*10):0);}
f(n){a=d((int)log10(n)-1,1);b=d((int)log10(n),1);return(n-a<(b-a)/2)?a:b;}
純粋な機能:
Max[NestList[6+10#&,6,#]~Nearest~#]&
説明:
NestList[6+10#&,6,#]
反復は、の値から始まるNestList
パターンに従うことを使用して、入力に等しい長さのリストを作成します。6+10x(previous_value)
6
~Nearest~#
次に、このリストで入力に最も近い値を見つけます。
Max[ ]
最後に、最も近い値のリストから最大値を取得します。
数学は任意の精度の長さの数値を処理できるため、リストの長さは非常に非効率的ですが、このプログラムは物理メモリによってのみ制限されます。
Fun<Ap<Fun<If<lt<A<1>,Add<A<2>,A<3>>>,A<3>,Ap<A<0>,A<1>,Mul<A<2>,I<10>>,Add<Mul<A<3>,I<10>>,I<6>>>>>,A<1>,I<30>,I<6>>>
ゴルフをしていない:
Fun<Ap<Fun<If<lt<A<1>, Add<A<2>, A<3>>>,
A<3>,
Ap<A<0>, A<1>, Mul<A<2>, I<10>>, Add<Mul<A<3>, I<10>>, I<6>>>>>,
A<1>, I<30>, I<6>>>
-ライリーのおかげで1バイト
6׌ΣI-Ä}¬
上記のコードにはパフォーマンスの問題がある可能性があります。10バイトのわずかに効率的なバージョンを次に示します。TIOの代替
6׌ΣI-Ä}¬ Main link. Argument n
6× Push string containing '6' n times
Œ Push substrings
Σ } Sort by result of code
I-Ä Absolute difference between n
¬ Head, implicit output
steenberghのおかげで-1バイト
𝐥𝐈Γ6Θℝ)₁>𝕔
説明:
Implicit input: [366]
𝐥 Push the length of the input
[3]
𝐈 Inclusive range
[[1, 2, 3]]
Γ For each
ℝ Repeat
6 6
Θ currently looped value times
[[6, 66, 666]]
) End for each
𝕔 Get the closest value to
₁ The first line of input...
> ...incremented by one
[666]
Implicitly print entire stack
残念ながら、 𝕔
2つの数値の差が同じ場合、リストの低い値が返されるため、そのために2バイトを追加する必要がありました。
などの非競合>
、<
およびℝ
この質問は頼まれた(そして後に追加された𝐥
数字だけでなく、リストで動作するように修正されました)
注:長さが19以上の数値では機能しません。Javaの長さが大きすぎて処理できないためです。(ただし、これは非常に大きな値であり、問題ないはずです)
Γ6Θℝ)
しΓΘ𝐈Γ6)𝐣)
ますか?
n->(""+-~n*3/11).replaceAll(".","6");
行くケビンCruijssenの例と単なる文字列を返します。
* 3/11トリックを実行して適切な長さを取得し、すべてを6で置き換えます。
-~
...私は注意を払ったい場合、私はこのページで10回を見ている必要があること
≈!@36`!<=:|A=A+!6$]?_sA,2,a
Maths™を使用する代わりに、文字列操作を使用して、Demonic Domains(36、366、...)内のブレークを見つけるようになりました。@ eush77のJS回答に触発されました。
説明
≈ | WHILE <condition>
! ! a numerical cast of
@ ` the string literal A$
36 starting out as "36"
<= is smaller than or equal to
: cmd line argument 'a'
A=A+ 6 Add a 6 to the end of A$ (36 ==> 366 ==> 3666)
! $ as a string-cast
] WEND (ends the WHIOLE loop body)
?_sA PRINT a substring of A$ n=37, A$ = 366
,2 starting at index 2 ^
,a running well past the end of the string 66
dsxZ1-10r^d11*2-3/dsylx[0r-]s.<.3*ly+d[6]s.0=.
dsxZ1-10r^d11*2-3/dsylx[0r-]s.<.3*ly+d[6]s.0=.
Z1-10r^ Nearest power of 10
11*2-3/ The number in between 6ⁿ and 6ⁿ6
d lx[0r-]s.<. Check which side we're on
3*ly+ Get the answer for x≥3
d[6]s.0=. Return 6 for x<3
a=>{var c=(a+"").Length;return int.Parse(a<int.Parse(3+new string('6',c==1?2:(c==10?1:c)))?new string('6',c-1):new string('6',c==10?c-1:c));};
36666ごとに次のデーモン番号にジャンプする必要があるという事実を使用しています...より読みやすい形式で:
var c = (a + "").Length;
return int.Parse(a < int.Parse(3 + new string('6',
c == 1 ? 2 : (c == 10 ? 1 : c)))
? new string('6', c - 1)
: new string('6', c == 10 ? c - 1 : c));
;3*11/z+[6:10/]
orlpのPythonソリューションの算術を使用します。
; Read an integer from stdin
3*11/ Multiply by 3 and divide by 11
z+ If result is zero, add one
[6:10/] While not zero, print '6' and divide by 10
フィードにはこの質問は表示されず、偶然につまずいただけです。とにかく私の答えは次のとおりです。
n=>`${-~n*3/11|0}`.replace(/./g,6)
数値の回答用に1バイトを追加します。もともとこのES7の未回答の回答(37バイト、すでに数値)に基づいています:
n=>(10**(Math.log10(-~n*3/11)|0)*2-2)/3
迷惑なことに、OPは36を6より66に近づけたいと考えています。説明:11/3 = 3.666...。したがって、これで除算すると、範囲7..36、37..366などが範囲1..9.9、10にスケーリングされます。 ..99.9など。これは、切り捨てて文字列に変換し、すべての文字を数字6に変更するのがゴルファーではありますが、次の10のべき乗よりも1/3少ない2/3を取ることで純粋に数値的に解決できます。本当に賢い再帰的な答えほどゴルフ好きではありません。)
Jonathan AlanのJelly提出ほど遅くはありませんが、O(n²)メモリが必要です(nは入力番号)。うん。
ri)__{)'6*i}%f-_:z_:e<#=-
これは、次のPythonと同等です。
num = int(input()) + 1 # CJam: ri)__
demondiffs = [int("6" * (i + 1)) - num for i in range(num)] # CJam: {)'6*i}%f-
absdiffs = [abs(i) for i in demondiffs] # CJam: _:z
mindex = absdiffs.index(min(absdiffs)) # CJam: _:e<#
print(num - demondiffs[mindex]) # CJam: =-
ri)3*B/s,'6*
これは、orlpのアルゴリズムをCJamに変換したものです。
説明:
ri e# Read integer: | 36
) e# Increment: | 37
3* e# Multiply by 3: | 111
B/ e# Divide by 0xB (11): | 10
s e# Convert to string: | "10"
, e# String length: | 2
'6 e# Push character '6': | 2 '6
* e# Repeat character: | "66"
e# Implicit output: 66
キャラクター6をトリミングする
for(;trim($x=$argn+$i,6)>"";)$i=($i<1)-$i;echo$x;
代わりにtrim($x=$argn+$i,6)>""
、Regexソリューション!preg_match("#^6+$#",$x=$argn+$i)
+11バイトまたはカウント6
比較strlen($x=$argn+$i)-strspn($x,6)
+10バイトに等しい文字列長を使用できます。
HAI 1.4
CAN HAS STRING?
I HAS A i
GIMMEH i
I HAS A l ITZ I IZ STRING'Z LEN YR i MKAY
I HAS A s ITZ "3"
IM IN YR a
BOTH SAEM I IZ STRING'Z LEN YR s MKAY AN l
O RLY?
YA RLY
GTFO
OIC
s R SMOOSH s AN 6
IM OUTTA YR l
I HAS A o
DIFFRINT i AN BIGGR of i AN 4
O RLY?
YA RLY
VISIBLE 6
NO WAI
BOTH SAEM i AN SMALLR of i AN s
O RLY?
YA RLY
o R DIFF OF l AN 1
NO WAI
o R l
OIC
I HAS A f
IM IN YR b UPPIN YR k TIL BOTH SAEM k AN o
f R SMOOSH f AN 6
IM OUTTA YR b
VISIBLE f
OIC
KTHXBYE
ワオ。ここに、UngolfedとExplainedがあります:
HAI 1.4
CAN HAS STRING?
I HAS A input
GIMMEH input
I HAS A length ITZ I IZ STRING'Z LEN YR input MKAY BTW this is using the length function of the STRING library.
I HAS A sixes ITZ "3" BTW the average of for example [6...] and 6[6...] is 3[6...].
IM IN YR foreverloop BTW this loop fills the sixes variable.
BOTH SAEM I IZ STRING'Z LEN YR sixes MKAY AN length # In LOLCODE, a statement containing only an expression assigns the implicit variable IT.
O RLY? # Tests the current value in IT.
YA RLY
GTFO
OIC
sixes R SMOOSH sixes AN 6 BTW SMOOSH automatically casts things to YARN. It also does not need a MKAY unless there's something after it on the line.
IM OUTTA YR foreverloop
I HAS A outputlength
DIFFRINT input AN BIGGR of input AN 4 BTW LOLCODE doesn't have a built-in inequality operator. This just means input < 4
O RLY?
YA RLY
VISIBLE 6 BTW If it's less than 4, the algorithm of comparing to the nearest 3.6*10^n.
NO WAI
BOTH SAEM input AN SMALLR of input AN sixes BTW input<=sixes
O RLY? BTW This if statement makes sure that if the input is less than 3.6*10^length, it goes to the previous place value's demon number.
YA RLY
outputlength R DIFF OF length AN 1
NO WAI
outputlength R length
OIC
I HAS A final
IM IN YR forloop UPPIN YR iterator TIL BOTH SAEM iterator and outputlength
final R SMOOSH final AN 6
IM OUTTA YR forloop
VISIBLE final
OIC
KTHXBYE
まだすごい。擬似javascrythonをいくつか紹介します。
hello()
import string
var i
i=input()
var l=string.len(i)
var s="3"
while True:
if(string.len(s)==l):
break
s=s+6
var o
if(i!=max(i,4)): # Basically if(i<4)
print 6
else:
if(i==min(i,s)): # Basically if(i<=s)
o=l-1
else:
o=l
var f
for(var k=0;k<o;k++):
f=f+6
print(f)
exit()
まだわからない?このプログラムは基本的に(入力1〜3を除く)入力を3.6 * 10 ^ nと比較します。nは入力の長さです。その数よりも小さい場合は、長さより1少ない6の数を出力します。その数以上の場合、6の数が現在の長さです。
ゴルフの手助けをしてください!
,+>+++[>>+<<-]>>[<<<[>+>+<<-]>>[<<+>>-]>-]<+++++++++++<[>>+<<-]>>[<[>>+>+<<<-]>>>[<<<+>>>-]<[>+<<-[>>[-]>+<<<-]>>>[<<<+>>>-]<[<-[<<<->>>[-]]+>-]<-]<<<+>>]<[-]+<[>-]>[<+>->]++++++[<+++++++++>-]<<<[-]++++++++++>[>.<[<<+>>-]<<[>[<<+<+>>>-]<<<[>>>+<<<-]>[<+>>-[<<[-]<+>>>-]<<<[>>>+<<<-]>[>-[>>>-<<<[-]]+<-]>-]>>>+<<]>>]
ここで実行します。3 *(n + 1)の値を処理できるセルサイズを選択します。したがって、すべてのテストケースが機能するには、16を選択します。これを機能させるには、動的(無限)メモリをオンにする必要があります。これにより、テープを左に拡張できます。整数を入力するには\366
、n = 366のように入力します。
このソリューションと同じアルゴリズムを使用します。各ステップで使用されるアルゴリズムは、このページから取得されます。使用されるアルゴリズムはすべて非ラッピングであるため、入力が大きくなってもプログラムが中断することはありません。
,+ # n = n plus 1
>+++ # 3
[>>+<<-]>>[<<<[>+>+<<-]>>[<<+>>-]>-] # n = n*3
<+++++++++++ # 10
<[>>+<<-]>>[<[>>+>+<<<-]>>>[<<<+>>>-]<[>+<<-[>>[-]>+<<<-]>>>[<<<+>>>-]<[<-[<<<->>>[-]]+>-]<-]<<<+>>] # n = n/10
<[-]+<[>-]>[<+>->] # if (n == 0) { n = n plus 1 }
++++++[<+++++++++>-] # '6' (54)
<<<[-]++++++++++> # 10
[ # while (n above 0)
>.< # print '6'
[<<+>>-]<<[>[<<+<+>>>-]<<<[>>>+<<<-]>[<+>>-[<<[-]<+>>>-]<<<[>>>+<<<-]>[>-[>>>-<<<[-]]+<-]>-]>>>+<<]>> # n = n/10
]
6s×ηs.x
Program # Input ====================|> 2
--------#---------------------------+--------
6s× # Push N 6's as a string. | 66
ηs # Prefixes of this. | [6, 66]
.x # Closest element to input. | 6