賢い数字を作る


18

Wiseは、私がしばらく前に設計した単純なビット単位の言語です。Pythonのビット演算に基づいています。いくつかの操作があり、これらのほとんどはPythonの同等のシンボルと同じか、非常に似ています。

  • : スタックの一番上を複製する

  • ? スタックの上部を下部に回転させます

  • ! スタックの下部を上部に回転させます

  • [ ] スタックの最上部がゼロでないときにループする

  • ~スタックの最上部ではない(-(n+1)

  • -スタックのトップを無効にします(-n

  • >スタックの一番上を一度右にビットシフトします(n//2

  • <スタックの一番上を一度左にビットシフトします(n*2

  • ^xorスタックの上位2項目(Pythonと同じ

  • |またはスタックの上位2項目(Pythonと同じ

  • &スタックの上位2項目(Pythonと同じ


Wiseで整数を作成するのは非常に簡単で、ゼロを作成し::^て増分できる~-ので、ゼロを作成して何度も増分できます。しかし、-物事を削除すると、もう少し面白くなります。

残りの操作を使用して、すべての番号を作成できます。たとえば、ここは3です

~<<~

TIO

これ~は、無限の0ビット列であるゼロを負のビット、無限のビット列に変換し1、それぞれが最後にビットを<追加する0ために機能します。終了すると、~それぞれ0が2つ1のsが続くsの文字列になります、またはほとんどの人がそれを呼ぶように3。


仕事

正の整数を指定すると、そのソース(出力のソース、独自のソースで使用可能)nなしで数値を作成するWiseプログラムを出力するプログラムを作成します。スタックの先頭に既にゼロがあると仮定することができます。--

これは はなく ので、必ずしも出力ではなくソースコードの生成を最小限にすることを目指してください。

出力例

このリストは網羅的ではなく、単に可能な出力です

1  -> ~<~
2  -> ~<~<
3  -> ~<<~
4  -> ~<~<<
5  -> ~<~:<<|
6  -> ~<<~<
7  -> ~<<<~
8  -> ~<~<<<
9  -> ~<~:<<<|
10 -> ~<~:<<|<
11 -> ~<<~:><<<|
12 -> ~<<~<<
13 -> ~<<~:<<<|>
14 -> ~<<<~<
15 -> ~<<<<~
16 -> ~<~<<<<

に含まれる0positive integers
colsw

4
いいえ、0は正の整数には含まれません。
ザカリー

どうやら:空のスタックに適用されるプッシュします0。空のスタックから複製することは明らかではないので、これは指定すべきだと思う0
ルイスメンドー

他の文字の構文エラーですか、無視されますか?
-xnor

@Luismendoスタックがゼロの場合、それ以外のスタックの内容も知らない
ウィートウィザード

回答:



7

JavaScript(ES6)、34 33バイト

f=n=>n?f(n&1?~n:n/2)+'<~'[n&1]:''
<input type=number oninput=o.textContent=f(this.value)><pre id=o>

任意の32ビット整数で機能します。


わかった。涼しい!良くやった。
小麦ウィザード

7

Haskell、38バイト

PPCGがHaskellを本当に改善しているように感じます。白猫をストロークします。

f n=mapM(["<","~<~"]<$f)[1..n]!!n>>=id

fを取り、Intを返しますString

オンラインでお試しください!

<$fちなみに私はそれを参照しています。それは、文字を保存し\_->ます。)

(typeの関数)のFunctorインスタンスには、次のものがあります。唯一の制限はそれで、最終版は同じソースタイプを使用する必要があります。インスタンスは完全に遅延しているため、これは評価されません。(->) aax <$ f = fmap (const x) f = const x . f = const xfconst xaf

または、長さは同じで悪さは少ない((l!!)匿名関数):

(l!!)
l=(++)<$>"":tail l<*>["<","~<~"]

オンラインでお試しください!

これらの両方は、@ ETHproductionsのJapt回答と同じ表現を使用しますが、特に最初の回答では、最初にいくつかの冗長なものが提供される場合があります<

最初のものはn "<""~<~"文字列と文字列のすべての組み合わせを計算し、結果のリストにインデックスを付けます。

2番目のものは、リストに既にある各要素にを""追加"<"して"~<~"文字列を追加することで、新しい要素を作成することで形成される無限リストを再帰的に計算します(実際には、""を有効にするために少し短くなりまし"<"た)。


1
それは<$f一体どのように機能しますか?奇妙なファンクターのインスタンス?
-xnor

@xnor Mwahahaha それでは説明を追加すべきだと思います。
Ørjanヨハンセン

3

ルビー118の 116 109 107 105 91バイト

cyoceのおかげで2バイト節約できました!

->n{o={0=>""}
o.dup.map{|c,k|["~~c","<c*2"].map{|t|o[eval t[1..9]]=k+t[0]}}until o[n]
o[n]}

オンラインでお試しください!

これは、整数を入力として受け取り、その整数を表す文字列をWiseで返す関数です。ここでは、1からすべての整数でこのプログラムをテストする、無料版を見つけることができます。

基本的な考え方は、定数の「プール」を記録することです。次に、「ステップ」ごとに、可能な機能ごとに定数がプールに追加されます。私は、機能を選択している~<>私はすべての数を表すのに十分であると信じています、。(少なくとも、10,000未満のすべての数字。)


iircのdup代わりに使用できますclone
チョイス

あなたも必要dupですか?map受信者を変更しません。
チョイス

@Cyoce私はそれがそうだと思う
コナーオブライエン

なるほど。Rubyは、繰り返しながら変更することを好みません。
チョイス

3

Python2、54 52 51バイト。

lambda x:'<'.join('>~<~'*int(i)for i in bin(x)[2:])

2バイトを節約してくれたWheat Wizardと、1バイトのØrjanJohansenに感謝します!これはETHproductionのJapt回答と同じアイデアを使用しますが、置換文字列が異なります(つまり、バイナリ表現を使用)


[ ]ジェネレーターの内部は必要ありませんjoinjoin引数としてジェネレーターを使用できます。
小麦ウィザード

1 '>~<~'*int(i)バイト節約できると思います。
Ørjanヨハンセン

自動化されたスコアボードスニペットなどの利点のために、最新のスコアが最後にリストされることになっていると思います。
Ørjanヨハンセン

遅れてごめんなさい
ザカリー

2

05AB1E、11バイト

bS'<…~<~‚èJ

オンラインでお試しください!

ETHproductionsのJapt回答に似ています。

@Adnanのおかげで4バイト節約されました!


いいね!05AB1Eでは数値が文字列に等しいため、実際に数値を文字列に変換する必要はありません。数値リテラルについても同じです(なしでも実行できます')。インデックスを使用することもできます。これにより、11バイトが得られます。
アドナン

@Adnanありがとうございました!
同志SparklePony

@Adnan簡単な質問ですが、ここでどのように機能しますか?
同志SparklePony

まず、正常に評価された場合に例外が発生するため、引数を交換します。スワップ後0、ゼロ要素と1最初の要素にマップされます(自動的にベクトル化されるため)。ここではそれがどのように動作するかのより明確な例です。
アドナン

1

パイソン2123の 110バイト

def w(x):a=map(int,bin(x)[2:]);return x%2*("~<~:<"+"<".join(":"*e for e in a[-2::-1])+"|"*sum(a))or w(x/2)+"<"

オンラインでお試しください!

としても lambda

w=lambda x:x%2*("~<~:<"+"<".join(":"*int(e)for e in bin(x)[-2:2:-1])+"|"*sum(map(int,bin(x)[2:])))or w(x/2)+"<"

オンラインでお試しください!

短くすることもできますが、これが私の解決策です。バイナリ表現を受け取り、コードに変換します。



0

ゼリー、11 10バイト

Bị“~<~“<”F

これはETHproductionsのJaptの回答の移植版です。ETHproductionsといえば、彼らは私を1バイト節約しました!


文字列を交換して、インデックス付けが0ベースであるふりをしてもらえますか?
ETHproductions

どういう意味ですか?使用可能なインデックスを取得するには、数値のバイナリ表現をインクリメントする必要があるという事実に言及しています。
ザカリー


ない仕事、1が生成しない<ワイズに0を生成する、
ザカリー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.