ブールまたは非負の整数入力をとる完全なプログラムを作成します。ちがいない:
- 入力値が偽である場合、独自のソースコードを出力します
- 入力値が真実であれば、独自のソースコードを逆に出力します
あなたのプログラムは回文的ではありませんし、いかなる方法でもそれ自身のソースコードを読むことはできません。
これはコードゴルフです-バイト単位の最短コードが勝ちます。
ブールまたは非負の整数入力をとる完全なプログラムを作成します。ちがいない:
あなたのプログラムは回文的ではありませんし、いかなる方法でもそれ自身のソースコードを読むことはできません。
これはコードゴルフです-バイト単位の最短コードが勝ちます。
回答:
{`"_~"+Wq~g#%}_~
標準クインのかなり簡単な修正。17バイトのその他のソリューション:
{`"_~"+q~{W%}&}_~
{`"_~"+q~!2*(%}_~
入力が0または1(ブール値の代用として、CJamには専用の型がない)のみであると仮定できる場合、以下を省略すると15になりますg
。
{`"_~"+Wq~#%}_~
{`"_~"+ e# Standard generalised quine framework. Leaves the source code on the stack.
W e# Push a -1.
q~ e# Read and evaluate input.
g e# signum, turning truthy values into 1 (leaving 0 unchanged).
# e# Power. -1^0 == 1, -1^1 == -1.
% e# Select every Nth element: a no-op for 1 and reverses the string for -1.
}_~
g
。
...私は...私はCJamを破っている!(叫ぶ)ママ!ほらほら
'rd3 * i86 *-)rl \ O
説明:
'rd3 * i86 *-(rl \ O 標準的なクイン、しかしひねりを加えたもの: 'ソースコードを文字列としてキャプチャします rd3 * ASCIIで '文字を作成します i86 *-入力文字をASCIIとして取得し、それから48を引きます。 ゼロの場合、ifステートメントは次の命令をスキップします。 (rスタックの一番上の項目がゼロの場合、次の項目を実行しないでください。 ここの次の項目は逆です。 l \ Oスタックを印刷します。
v'rd3 *} v)rZ v変数として入力をキャプチャーします。 '別のものに遭遇するまでソースをキャプチャする' rスタックを逆にします。 d3 * 'をスタックにプッシュします。 }スタックを右に回転させます。 v)変数(入力)をスタックにプッシュし、ゼロでないかどうかをテストします。 rその場合、スタックを逆にします。 Zスタック内のすべてを出力します。
prompt()
Node.JSに切り替えない限り、その手段が必要だと思います。私は$=_=>(A=`$=${$};$(prompt())`,alert(_?A:[...A].reverse().join``));$(prompt())
適切に動作すると信じていますが、おそらくもっとゴルフダウンすることができます。
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh
説明:
Burlesqueには、高度なスタックおよびコード操作が組み込まれています。実際、プログラムのソースコードにはアクセスできませんが、将来実行される残りのコードにはアクセスできます。これは#Q
、それに続くすべてのコードを返すことを意味します。そのため、私#Q
たちがやっているコードにすべてを追加する必要がありますri#Q
。
blsq ) #Q1 2++
12 -- this is the result of 1 2++
{1 2 ++} -- this is the result of #Q
++1 2
スタックベースであるため、技術的に違法なコードです。しかし、次のように実行するようにコードを操作できます1 2++
。
blsq ) #Q<-#q++1 2
12
これらのビルトインでの作業は非常にトリッキーであり、クインに関連するものを除いて誰も生産的なものに使用していません。あなたが逆の場合は++1 2
、あなたが得る2 1++
生み出すことになる21
とはありません12
。上記のコードが生成理由が12
あるためである#Q
も含ま<-
ので、最終的に我々はよりちょうどより多くのことを実行してしまう2 1++
P:。を実行すること2 1++#q<-
になります12
。
実際にコード内のものを置き換えることができます。たとえば、このコードは?+
、それ自体のすべての出現を?*
blsq ) #Q(?+)(?*)r~5.-#q5 5?+
25
使用法:
$ echo "1" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
hs fi sp "-<" j +. /\ "Q#ir" -~ HS 2Q#ir
$ echo "0" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh
"66*2-n,?r$O.
これは、次の4つの文字を除き、標準のクインとまったく同じですn,?r
。n
入力から整数を取り、,
それを反転するので、入力が真実であれば?
スキップr
します。それ以外の場合はr
、スタックを逆にして、逆順に出力します。
interface N{static void main(String[]a){var s="interface N{static void main(String[]a){var s=%c%s%1$c;s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}";s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}
b->{var s="b->{var s=%c%s%1$c;s=s.format(s,34,s);return b?new StringBuffer(s).reverse():s;}";s=s.format(s,34,s);return b?new StringBuffer(s).reverse():s;}
説明:
interface N{ // Class
static void main(String[]a){ // Mandatory main-method
var s="interface N{static void main(String[]a){var s=%c%s%1$c;s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}";
// Unformatted source code
s=s.format(s,34,s); // Format the source code (the quine-String)
System.out.print( // Print:
new Boolean(a[0])? // If the input is true:
new StringBuffer(s).reverse() // Print the quine-String reversed
: // Else:
s);}} // Print the quine-String as is
クインの説明:
var s
未フォーマットのソースコードが含まれています%s
この文字列をそれ自体に入れるために使用されます s.format(...)
%c
、%1$c
、および34
二重引用符をフォーマットするために使用されていますs.format(s,34,s)
すべてをまとめるそして、new StringBuffer(s).reverse()
必要に応じて、入力ブール値に基づいてquine-Stringを反転するために使用されます。
0"D34çý‚sè"D34çý‚sè
を追加することによるデフォルトのクインの 変更。0"D34çý"D34çý
‚sè
説明:
0 # Push 0 to the stack
# STACK: [0]
"D34çý‚sè" # Push the string 'D34çý‚sè' to the stack
# STACK: [0, 'D34çý‚sè']
D # Duplicate this string
# STACK: [0, 'D34çý‚sè', 'D34çý‚sè']
34ç # Push '"' to the stack
# STACK: [0, 'D34çý‚sè', 'D34çý‚sè', '"']
ý # Join the stack with '"' delimiter
# STACK: ['0"D34çý‚sè"D34çý‚sè']
 # Bifurcate (short for Duplicate & Reverse)
# STACK: ['0"D34çý‚sè"D34çý‚sè', 'ès‚Âýç43D"ès‚Âýç43D"0']
‚ # Pair them up:
# STACK: [['0"D34çý‚sè"D34çý‚sè','ès‚Âýç43D"ès‚Âýç43D"0']]
s # Swap to get the boolean input (0 or 1)
# STACK: [['0"D34çý‚sè"D34çý‚sè','ès‚Âýç43D"ès‚Âýç43D"0'], 1]
è # Index the input into the list
# STACK: ['ès‚Âýç43D"ès‚Âýç43D"0']
# (Output the top of the stack implicitly)
PS:末尾の改行を自動的に印刷します。これも逆にする必要がある場合は、代わりに23バイトです。
0"D34çý‚sè?"D34çý‚sè?
オンラインでお試しください。(?
は改行なしの明示的な印刷です)