穴の開いていないものを使用して穴の全体を書く


55

ASCII文字 126に10進数33からは、次のとおりです。

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

ほとんどのフォントでは、これらの文字のうち25個に「穴」があることに注意してください(0よりも大きい属

#$%&04689@ABDOPQRabdegopq

他の68個の「穴なし」文字は次のとおりです。

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

あなたの仕事は、穴の開いていない文字だけを使用して、最短のプログラムを作成し、穴の開いた文字を任意の順序で1回だけ出力することです。

スペース、タブ、改行(ラインフィードやキャリッジリターン)は空のスペースであるため、プログラムまたはその出力に表示される場合があります。それらはまだ文字数にカウントされます。他のASCII文字は使用されない可能性があります(もちろん非ASCII文字は使用されません)。

ノート

  • 穴の開いていない文字をすべて使用する必要はなく、それぞれを1つだけ使用する必要もありません。
  • 出力には、穴の開いていない文字を含めることはできません。
  • 空白の言語を使用することができます。
  • 出力はstdoutに送られるか、ファイルに送られます。入力がないはずです。

ボーナス:ただの楽しみとして、穴の開いた文字を使用してすべての穴のない文字を印刷してみてください。私はそれが既存の言語でできることには懐疑的です。


9
タイトルに+1。私たちはこのようなものが大好きです。
ジェイコブ14

1
Perlソリューションはどこにありますか?!
ピエールアラード14

4
さて、HaskellまたはCでは解決策はありません。それがあなたが望むプログラムであるなら、あなたは綴る必要がありますmain
ライモイド14

2
ボーナスは空白を使用して行うことができます。
ジョシュア14

1
私が忘れたことに誰も気付かなかったのです~か??
カルバンの趣味

回答:


18

Pyth43 35文字

tTFk"*+,-7;=?GHIKVWXYhiklnvwx"C-Ck7

ここで試してみてください

9が先頭にあり、改行で区切られていることを除いて、文字を順番に印刷します。

文字列には、必要な文字よりも大きい7文字すべてが含まれますが、9文字は@になるため、特殊なケースです。@Howardのおかげでアルゴリズム。

説明:

tT                print(10-1)                T=10, t(x)=x-1 if x is an int.
Fk"<string>"      for k in "<string>":
C-Ck7             print(chr(ord(k)-7))       Note that C is overloaded as ord and chr.

24

GolfScript、37 36文字

[":=<?)-/! YX[]VIHKx{}|~vih"{25^}/]+

ここでコードを試してください。

文字列には、25でxorされた禁止文字が含まれます。幸い、すべての文字は有効な文字にマップされます。


22

ブレインファック119

--[------->++<]>-.+.+.+.++++++++++.++++.++.++.+.+++++++.+.+.++.+++++++++++.+.+.+.[------>+<]>--.+.++.+.++.++++++++.+.+.

ええと、--最初は...そこの最初のレジスターで254に戻っていますか?
WallyWest 14

1
うん:)ループを36に短縮します(35に到達するため)
テウンプロンク14

まあ、それは確かに...よく行って...私の275を打つ
WallyWest

@ Calvin's Hobbies申し訳ありませんが、入力は許可されていません。ただし、OPは明確にしたいかもしれません。
isaacg 14

@isaacg私が知っている、それが私のメインコードが入力を受け取らない理由であり、最後の例は深刻なものではありません:)
テウンPronk 14

20

ボーナス-DC、179文字

ああ、P許可されている別の制限された文字セットの挑戦。

6A44469PD684P44D4898PDB99P4008D0BP486B48BPA60BPD096P4A68666P460A0D4P690490AP8084088P6B6AB66P6BBB608P80D4BAAPA046PBAD4P60A6668P480DD96P4A040BBP848BP40DD8D0P46840B6P696B48BP48D64BAP

dc説明が必要なほどわかりにくいので(この辺りの奇妙なことを考えると奇妙なことに!)ここに概要があります:

これは主に、任意精度の演算を備えたRPN計算機です。しかし、この課題のためにP、数字をベース256の一連の文字として解釈して印刷するコマンドを使用しています。例:65 P印刷A(ASCIIコード65)。16706 P印刷AB(16706 = 65 * 256 + 66)。

それとは別に、唯一の興味深い機能は0-9A-F、16進数に含まれていない場合でも16進数のすべてを認識することです。10進数の入力がデフォルトであるため、入力トークン999はに相当すること9 hundreds + 9 tens + 9ABC意味10 hundreds + 11 tens + 121122ます。

ABD10進数の数字を使用する機能は、を使用できないことを部分的に12357補い、順序付けとグループ化の選択が残りを行います。(私はいくつかの数字が必要な場合はxyzと彼らは許さ数字で表現できないされ、その後、私が代表してみてくださいx*256*256+y*256+z代わりに。)

プログラムは、より大きなグループを使用することで、おそらく少し短くすることができます。私は数字ごとに3バイトを超えていませんでした。


1
@DigitalTraumaとは逆に、問題の説明の最後にボーナスがありました。

ハ!私は逃しました!優れた!+1
デジタルトラウマ14

これを説明できますか?これを実行できる場所はありますか?
カルビンの趣味14

4
実行できる場所ですか?dcは、読みにくいプログラムを作成するために設計された馬鹿げた言語ではなく、真面目な計算機です。任意のUNIXマシン(またはcygwin)で実行します。en.wikipedia.org/wiki/Dc_(computer_program)

@ Calvin'sHobbiesほぼすべてのLinuxまたはUnixマシン(OSXを含む)にアクセスできる場合は、bonus.dcなどのテキストファイルとして保存してからを実行しdc bonus.dcます。dcは、最も古い言語の1つであり、文字通り何十年もの間、* nixの恒久的な備品です。おそらく、その難解で読みにくいRPN構文のために、あまり知られていません。しかし、いくつかのコードゴルフの挑戦に最適です;-)
デジタル外傷14

12

Bash + coreutils、56バイト

tr \(-y \!-r<<<'*+,-7;=?GHIKVWXYhiklnvwx'
tr C-F 7-:<<<E

運がよければ、穴の開いた文字のASCII値に7を追加すると、穴の開いていないすべての文字が生成されます(「9」を除く)。したがって、この変換を逆に実行し、次に同様の変換(「E」から12を引く)を実行して「9」を取得します。

出力:

#$%&0468@ABDOPQRabdegopq
9

7
私は、最初の行が文字の束から7を引く方法が好きで-7、句読点文字の間に顕著に表示され、これらの2つの事実は互いに関係ありません。

@ WumpusQ.Wumbley気付かなかった:)
デジタル外傷

6

Perl-49バイト

symlink".",':=<?)-/! YX[]VIHKx{}|~vih'^chr(25)x25

これはかなりハワードのソリューションのPerlバージョンです。文字列と25のXOR。出力は、という名前のファイルです#$%&04689@ABDOPQRabdegopqsymlink他のすべてが禁止されているため、出力形式として使用するアイデアとファイル名を取得しました。

ここに私が思いついた別のPerlソリューションがあります。おそらく大幅に改善される可能性があり、かなり長いので、今は読みやすい形式のままにしておきます。

until(y/1/1/>32){s//1/}
until(y/1/1/>125+1){
    if(chr(y/1/1/)!~/[!"'()*+,-.\/12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\\\]^_`cfhijklmnrstuvwxyz{|}~]/) {
        symlink".",chr y/1/1/;
    }
    s/^/1/
}

これは多くのファイルを出力し、各ファイルの名前は文字の1つです。禁止文字を使用せずに文字列を追加する方法がわかりませんでした。

forwhilemapsayprintevals///e、および任意の変数名は、(変数で始まる使用することはできません@か、$Perlで)これが困難になっています。

情報を出力する他のすべての方法が禁止された文字のいずれかを使用していると確信しているため、ファイル名が出力形式として問題ないことを願っています。


創造性を高めるために+1を提供します!コードの非常に巧妙な使用!
WallyWest

私はこれはかなり古いですけど、画面に出力を印刷して使用して数バイトを保存することが可能です-pフラグをして*_=\(... )オンラインそれをお試しください!
ドムヘイスティングス

@DomHastingsかっこいい!-p旗にはp穴があるので禁止されていると思います。
hmatt1

5

MATLAB、36バイト

とても近い....現在の勝者(isaacg)よりも1バイトだけ多い!これは、さらに詳しく調べてみると、私が設定したことをすでに実行していました。まあ、車輪の再発明に害はありません...

私はこれが古い挑戦であることを知っていますが、私はそれに興味を持ち始めたにのみ気付きました。

['*+,-7;=?GHIKVWXYhiklnvwx'-7,57,'']

個別の''...提案なしで文字列が必要であることをMATLABに理解させることができた場合、誰か?


4

Brainfuck 303 275

++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>+++.--->----.+.+.++>.>----.++.++.+.->.+.+.-->----.++++>-.+.+.+.-->>+.+.-->----.+.++.+>-.+.+.

Brainfuck、究極の穴のない難解な言語(ホワイトスペースは別として);)


1
古いフラグメントを削除してください。取り消し線を使用しないでください。
isaacg 14

2
あなたはあなたのコードスニペットのために引用物を使用したことがわかります(本名を知らない)。コードを選択してCtrl+ を押した方が簡単かもしれませんK:)
Teun Pronk 14

@isaacg完了。TeunPronk、できました!
WallyWest

6
または、1〜2行だけの場合は、スペースバーを4回押します。@TeunPronkこれ?`それはバックティックです。(「アクセント」とも呼ばれますが、「quote thingies」は私にとっては新しいものです:P)
Doorknob

1
@Doorknobそれから私たちは今日何かを学びましたが、とにかくあなたが学んだことは間違っています:P
テウンプロンク14

4

JS-196-やってみて

h=(c=!1+[])[1];i=c[2*2];j=(f=[]+{})[1];this[i+'v'+h+'l'](h+'l'+i+'rt('+h+'t'+j+f[2]+'("Iy\x51lJj\\x'+2*2+'1\\x3'+~-1+'Nj\\x'+2*3+'75\x51EFC\x52E\\x3'+3*3+'\x51UVJhYm\x52lZ2\\x3'+3*3+'wc\x51=="))')

1
まあ、これはクレイジーです。Jsは最も
悪用可能な

乱用はい、これは単なる斑点は@bebe申し訳ありませんが...私のエントリに比べてですが、私はアウトJS'dます。この時間をしました...
WallyWest

1
@WallyWest私は戦争を宣言します。
ベベ14

1
217h=1-1;j=3+3;k='\\x';m=!i+k;c=m[1];f=m[i=2+2];l=k+3;n=k+j;r=k+i;this[f+'v'+c+'l'](c+'l'+f+'rt("\\x23\\x2'+i+k+25+k+2+j+l+h+l+i+l+j+l+2*i+l+3*3+r+h+r+1+r+2+r+i+r+'f\\x5'+h+k+51+k+52+c+n+2+n+i+f+n+7+n+'f\\x7'+h+k+'71")')-インライン化l、短縮mi最初の使用時に宣言され、繰り返しパターンのいくつかの余分な変数を作成しました(出力される文字の順序を微調整することでこれを改善できますが、それは私の忍耐を超えています:P)。
アルコニャ14

2

GolfScript、89文字

71 22+,{33+}/]''+'!"\'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}'-

すべてのASCII文字の配列を作成し、それらから「穴の開いていない」文字を減算します。

71 22+,  # Builds array of 0..93
{33+}/]  # Converts to 33..126
''+      # Convert ASCII codes to string
'stuff'- # Subtracts "stuff" (the non-holed characters) from the string

2

Befunge 98-69バイト

"()+ijWI=*">:5j2 ,-5_"157:h">:5j2 ,-1_"=>?LMN^_lmn">:5j2 ,+3_"?"1+s <

3つの部分で行います。穴の開いていない文字の値が穴の開いた文字と5異なる1つ。次に1の異なるもの、最後に穴の開いた文字と3の異なる穴のない文字のリスト。Befungeのプログラム終了命令は「@」(char値64)なので、最後に「?」をロードします。(char値63)1を追加してから、命令「s」を使用してコードに追加します。

3つを統合することでもっとゴルフできるかもしれません

>:5j2 ,(differ value)_

セクションですが、おそらくそうではありません。


2

JavaScript 240 228

最初の提出:

z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;1[_="c\157nstruct\157r"][_](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()

さて、これは素晴らしいスタートです、それがどのように分解するかです...

z=(!1+"")[1];        // assigns "a" to z, !1+"" === "false"
y=(!!1+"")[3];       // assigns "e" to y, !!1 === "true"
x={}+"";             // assigns "[object Object]" to x
w=x[1];v=x[2]        // assigns "o" to w, and "b" to v
u=z+"t"+w+v;         // creates the mystical "atob" command, yes, I'm gonna use it!
1[_="c\157nstruct\157r"][_] // sets up the primitive to a number object... this acts similar to the "window" primitive object so that I can play off functions...
z+'l'+y+'rt(         // starts creating an alert call
'+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')()
// Above line abuses atob command with a couple of nested instances of the command, also using hex and octal equivalents of characters

そして、私は... "もっと簡単な方法があるに違いない..."と思いました...

修正された提出: z=(!1+"")[1];y=(!!1+"")[3];x={}+"";w=x[1];v=x[2];u=z+"t"+w+v;this[y+"v"+z+"l"](z+'l'+y+'rt('+u+'("Iy\x51lJj"+'+(t=u+'("\x51\x51==")')+'+'+u+'("M"+'+t+'+"==")+"Nj"+'+u+'("Zw==")+"5\x51EFC\x52E\71\x51UVJhYm\x52lZ2\71wc\x51=="))')

私が使用することができます見てeval (一緒@bebeからインスピレーションを、それを縫い合わせによって、使用してより多くの速くなるconstructorconstructornumber...)私は228にそれをドリルダウン...私はそれは、この特定のゴルフチャレンジを獲得しないことがあり知っています、これは、JavaScriptをどれほど悪用しても、望ましい結果が得られることを示すための私の方法です...


2

メイン- 不眠症、50

FFy~~jF~y<={*n<<ztf>={.f=(tHL~k<yf={*n>Lj(FunLn<j~

以下を出力します:

abdegopq04689@ABDOPQR#$%&

ボーナス-不眠症、268

ogeeoddp@poe@ggep@oe@opge@gee@%d@p@gqeo@p@ge@e9de49ed9e4dppe@%e@geee@ge@p%ee@%e@dp@%ep@%ee@%d@%eeee@%e@%ee@%e@geee@%e@gee@ggopop@peo@ggep@p@ge@ggeep@ge@gee@%e@geee@ge@gee@ge@ppoep@%ee@%edep@gepe@ge@%ee@%e@geee@ge@%ee@%%eeoe@ge@pep@%gep@p@%e@%%eep@%e@gee@e%e@oe@%gep@p@

以下を出力します:

!"'()*+,-./12357:;<=>?CEFGHIJKLMNSTUVWXYZ[\]^_`cfhijklmnrstuvwxyz{|}~

出力を再配置する場合、プログラムの長さを短くすることは可能だと思いますが、これを行うには検索プログラムを変更する必要があります。

ケースを示すために、制限された文字数で動作できる別の言語を示します。ちなみに、ソースに3つの一意の文字のみを含むほぼすべての出力を書き込むことができます。

現在、これは、既存のすべての回答の中でメインチャレンジとボーナスの両方を実行できる唯一の言語です。

不眠症通訳


1

Befunge 98-46バイト

isaacgのPythエントリのBefunge化バージョン:

"xwvnlkihYXWVKIHG?=;7-,+*">:5j2 ,-7_"?"1+:,s <

1

Japt、33バイト

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

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

isaacgのPyth提出と同じアルゴリズムとで短くなっています。

使い方

7+2+"*+,-7;=?GHIKVWXYhiklnvwx"c-7

7+2           Obviously the number 9
    "..."c-7  Apply -7 on each char's charcode of this string
   +          String concatenation

はい、それはJS、だ最も乱用の言語の1、ちょうど短い(とあなたが必要としないalertか、console.logここに)。

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