トップページ⇒tech
1001コメント296KB

トリッキーなコード その2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
独りよがりのためのスレッド
大体トリッキーなコードを書く奴に限って
致命的なバグを出したりするんだけど、
書きたいもんはしょうがない。

・・・らしい


前スレ http://pc3.2ch.net/test/read.cgi/tech/983191866
0002デフォルトの名無しさんNGNG
自由と正義の名の下に2ゲット!

       ./"´:;;::;;;: ::::;::"ソヽ
       / ,ヘ〜-ー'´⌒``ヽ:ヽ
      / ノ 彡:三:三:三:ミ |: \
      | |. __,,;;ィ  t;;;;,,,_ :ヽ│
       | |シ ,ィェァ') (.yェュ、 ミ| |
      !r、|  ''''''. | | ''''''  Y )
      ヽ{ ヽ. (r、 ,n)  /:: };ノ
       し}  : 、___二__., ;:::::jJ   
        !、.:. ´ ..::::... `ノ::::ノ  
        _,〉、ゝ '""'ノ/:|      
      __,,ィ';;;;ト `ニニ: ::..ノ|ヽ、 _ 
 -ー''''"";;;;;;;;;;;;ヽ \::::::::/ /;;;;;;;;;;;`''ー-、,,,,__
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ   ><  /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"''
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ /|;;;jヽ、/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
自由と正義の名の下に、このスレにアメリカが介入しました。
以下、大統領に従ってください。

>>1弱いくせに調子に乗るなよこのジャップ豚(プ
>>2
>>3スモウレスラーかと思ったら、ただのデブか(プ
>>4コリアもジャップも同類だろエテ公(プ
>>5米ばっか食ってんな(プ
>>6トマホークかますぞ(プ
>>7エロアニメが文化かよ(プ
>>8ロリコン必死だな(プ
>>9イラクの次はお前だな(プ
0003デフォルトの名無しさんNGNG
うにしす
0004デフォルトの名無しさんNGNG
↓タリバソ
0005デフォルトの名無しさんNGNG
↑アソパソマソ
0006デフォルトの名無しさんNGNG
↓エロカイダ
0007デフォルトの名無しさんNGNG
↑ザビエロ
0008デフォルトの名無しさんNGNG
True = Not False
まさにトリッキー
0009デフォルトの名無しさんNGNG
>8
True = Not False
証明して下さい
0010デフォルトの名無しさんNGNG
0011デフォルトの名無しさんNGNG
0012デフォルトの名無しさんNGNG
0013デフォルトの名無しさんNGNG
_;main(){(9^_^9);} /* こんなの見た */
0014デフォルトの名無しさんNGNG
// 知られざるC言語の演算子

// 標準仕様には入っていない(と思う)のですが、
// 初期ccでサポートされていたこともあり、
// たいていのコンパイラで実装されている知られざる演算子をご存じですか?

int main(void)
{
  int a=10,b=7;
  printf("割ってかける演算子、かけて割る演算子\n");

  // 3で割ってから3でかける演算子
  a/*=3;
  
  // 5でかけてから5で割る演算子
  b*/=5;

  printf("a=%d b=%d\n",a,b);
  return 0;
}
0015デフォルトの名無しさんNGNG
#include <stdio.h>
int main (void)
{
printf ("( ´_ゝ`)フーン\n");
return 0;
}
0016デフォルトの名無しさんNGNG
前スレのお題を変えてみて……

◆ある図形内に点が含まれるかどうかを高速に判断する

という問題はどう?
図形は、n個の点(x_1,y_1)-(x_n,y_n)で与えられるとしましょう。
n>=3で、(x_n,y_n)と(x_1,y_1)は繋がっていると考えてください。
このn個の点は、隣同士を線で結んでも、線が交わることがないものとします。

高速化のために条件を付加してもOKですが、明記してください
(例えば、凹んでいる部分は絶対に無い、n==4である、とか)

難しそう
0017デフォルトの名無しさんNGNG
短形(x1,y1)-(x2,y2)なら、最速は
(x>=x1 && x<=x2 && y>=y1 && y<=y2)
でいいのかな?
0018デフォルトの名無しさんNGNG
>>14
a=5 b=7 となるだけだが ?
(なんで、b*/=10; にしないんだろう...。)
0019デフォルトの名無しさんNGNG
>>18
コンパイラバグってるよ。アセンブラ出力して確認汁。
0020デフォルトの名無しさんNGNG
>>18
それって古典的なネタじゃん
main() {
printf("%03d\n", 001);
printf("%03d\n", 010);
printf("%03d\n", 100);
}
これといい勝負。
0021デフォルトの名無しさんNGNG
>>19
いくつになるのが正解なの ?
0022デフォルトの名無しさんNGNG
>>21
自分でソース打ち込んで試せ。
ちゃんと自分でエディタを使って打てよ。
あとメモ帳やviみたいな色分けもできんような
エディタはミスしやすいから使うなよ。
0023デフォルトの名無しさんNGNG
>>22
viは最近は色分けできるよ
002422NGNG
>>23
それは vim ではなかと?
0025デフォルトの名無しさんNGNG
>>24
ごめん、そうだね。
0026デフォルトの名無しさんNGNG
>>21
Cなら
// 3で割ってから3でかける演算子
でエラーが出るのが妥当 (でも無いかも知れない)
C++なら
a=5, b=7 ;
で>>18で正しい
0027デフォルトの名無しさんNGNG
>>26
今の時代、Cコンパイラにだって
C++のコメントを許容するオプションくらいあるでしょ
0028デフォルトの名無しさんNGNG
10/3*3
なんだから
a=9
じゃないの??
0029デフォルトの名無しさんNGNG
>>28
正しいC環境がインストールされていませんね。
0030デフォルトの名無しさんNGNG
>>28
だから自前で書いて試せって。
色付け可能なエディタでな。
0031デフォルトの名無しさんNGNG
>>28
/* だからネタなんだって */
0032デフォルトの名無しさんNGNG
a/*=3;
b*/=5;
は
a
/*=3; b*/
=5;
だから
a=5;
0033デフォルトの名無しさんNGNG
>>32
(゚Д゚)ハァ?
0034デフォルトの名無しさんNGNG
>>33
(゚Д゚)ハァ?
0035デフォルトの名無しさんNGNG
まぁ初めて見たやつには面白いネタだったろうな。

初めて見ました。
0036デフォルトの名無しさんNGNG
>>35
一人ボケ一人突っ込みかよ。
0037デフォルトの名無しさんNGNG
よく似たネタに、ポインタが指す値で割るというのがあるね。
 a = 1/*p;
0038デフォルトの名無しさんNGNG
>>36
むしろ一人突っ込み一人ボケ。
0039デフォルトの名無しさんNGNG
>>37
普段から
a = 1 / *p;
のように演算子の前後に空白を開けてれば問題ない。
0040デフォルトの名無しさんNGNG
正直、面白かった。
0041デフォルトの名無しさんNGNG
まだよく解かってないヤシがいるみたいだな

俺の事です
0042デフォルトの名無しさんNGNG
まさにトリッキー
楽しかった。
0043デフォルトの名無しさんNGNG
age
トリッキーの1ってここのスレの人?
0044デフォルトの名無しさんNGNG
前スレのコレすげー・・・
↓
xor eax, ebx
xor ebx, eax
xor eax, ebx

いただきました。
0045デフォルトの名無しさんNGNG
ax固定の命令を使わなければ
入れ替える必要は、ほとんど無いだろ
0046デフォルトの名無しさんNGNG
前スレ読んだら解った。トリッキーの1は前スレの1だね。
すげー盛り上がっててかなりいい感じだったね<前スレの最初の方。
このスレにも降臨してくれないかな・・
0047デフォルトの名無しさんNGNG
宿題キボンヌ
0048デフォルトの名無しさんNGNG
漏れはむしろ↓に衝撃を受けた。
int main=0xc3;
0049デフォルトの名無しさんNGNG
0xc3ってx86系のリターンだっけ…?
0050デフォルトの名無しさんNGNG
>>44
最近のCPUではパイプラインが有効に働かず遅くなるだけ。
0051デフォルトの名無しさんNGNG
>>50
その言い方、ダウトっぽい
0052デフォルトの名無しさんNGNG
100 nop
101 jmp 100
0053デフォルトの名無しさんNGNG
repeat
loop
0054デフォルトの名無しさんNGNG
;トリッキー
0055デフォルトの名無しさんNGNG
#!/usr/bin/perl
$x=$_='#!/usr/bin/perl&$x=$_=";&s/\046/\n/g;s/\042/\047$x\047/;print;&';
s/\046/\n/g;s/\042/\047$x\047/;print;
0056デフォルトの名無しさんNGNG
なんで、誰も >>17 の短形に突っ込んでないの?
おまいら皆アフォ?
矩形(くけい)だろ、ヴォケ
0057デフォルトの名無しさんNGNG
>>56
2ch でその突っ込み...、しかも10日も立ってから...。
はっ !! もしかして本人なのか ?
005856NGNG
いや、今日初めてこのスレ読んだ
今前スレ読んでるんだが面白いな

短形ってがいしゅつとかの類かね、素で間違ってそうなんだが
005956NGNG
スマソ、前スレのラストのほうでちゃんと矩形って書いてたな
0060デフォルトの名無しさんNGNG
>>56
いきなりキレかよ!
0061デフォルトの名無しさんNGNG
>>60
思わず短小、もとい苦笑
006256NGNG
スマソ、知り合いに「たんけい、たんけい」と連発するヤツが居てな
いつも突っ込めずに居るんだ(;´д`)ストレスタマルヨー
0063デフォルトの名無しさんNGNG
前スレみたいなノリキボンヌ
006456NGNG
スレ汚した詫びにネタ振り

任意の文字列を、10進数に変換するコードを書きなさい。
char *binary = "11011100";
int decimal;
/* */
printf("%s is %d\n",binary,decimal);
0065デフォルトの名無しさんNGNG
> 任意の文字列を、10進数に変換するコードを書きなさい。

この文がどれだけ曖昧で意味不明か、自分でわかってる?
数値自体は2進数で「表示」しようと10進数で「表示」しようと
同じ値だから変換もなにもないし、
そもそも元の文字列が何進数を文字列にしたものなのかわからない。

多分、「任意の2進数を表す文字列を数値に直し、10進数として表示しなさい」
って意味だと思うけど。
0066デフォルトの名無しさんNGNG
>65
uzeeeeeeeeeeeee
いつも客にうだうだ言ってそう
0067デフォルトの名無しさんNGNG
見りゃ分かるだろ、何か嫌な事でもあったか?

0068デフォルトの名無しさんNGNG
>>67
> 見りゃ分かるだろ、
仕様書もまともに書けない客にこう言われてカリカリしてたんじゃないですか。
0069デフォルトの名無しさんNGNG
>>55
だれも反応してくれないけど,地雷だと思った?
実行すると,自分自身を表示するperlプログラムでした.
Cで同じことするプログラム キボンヌ
0070デフォルトの名無しさんNGNG
取りあえず職場でXPもどきを導入しはじめてるんだが

仕様書まともに書けない客=普通
客から仕様を上手く引き出せない技術屋=無能

だと思った。
0071デフォルトの名無しさんNGNG
>>69
> 実行すると,自分自身を表示するperlプログラムでした.
それは分かるけど、

> Cで同じことするプログラム キボンヌ
そういう意図が隠されていたとは気づかなかった。
0072デフォルトの名無しさんNGNG
仕様の問題は激しくスレ違いだと思います。
ワインバーグの「要求仕様の探検学」でも読みましょう、ということで
http://www.amazon.co.jp/exec/obidos/ASIN/4320023528/ref=sr_aps_b_/249-2652411-1648337

>>69
前スレ見てね。不動点プログラムで検索すれば見つかるよ。
トリッキーの1によれば、
10 LIST
だそうです(笑)

>>64
まずは素直なコードから。コンパイルしてないのでエラーあったらスマソ
char* p=binary;
while(*(p++));
for(int r=0,i=0;p!=binary;--p,++i) r+=(1<<i)*(*p-'0');
0073デフォルトの名無しさんNGNG
>>70
> 客から仕様を上手く引き出せない技術屋=無能
技術屋つってもいろいろあるわけだが、「客から仕様を引き出す」ってのがSE
の仕事だから、それがうまくできないSEなら無能だな。
0074デフォルトの名無しさんNGNG
>>72
自己レスすまそ。バグ内包してますな。
でもまぁトリッキーでないコードなので修正はやめておきます
0075デフォルトの名無しさんNGNG
>>70
うちはいつまでたっても ひとりXP ですよ
0076デフォルトの名無しさんNGNG
>>62
「もしかしてクケイの事?(笑)」ぐらいにして
0077デフォルトの名無しさんNGNG
最近思うんだが、数年前に比べて格段に質の低いレスを見ると、
このスレに限らずこの板の全体的な(技術or人間)レベルが落ちている
可能性が高いな
0078デフォルトの名無しさんNGNG
まぁ俺がいるぐらいだからな
0079デフォルトの名無しさんNGNG
>>64
どうでしょ?
char *p = binary;
decinal = 0;
while (*p) decimal = (decimal << 1) | (*p++ - '0');
008079NGNG
s/decinal/decimal/;
00818NGNG
>>9
小売だからそれ以上証明できない
0082デフォルトの名無しさんNGNG
>>79
お前さぁ、それに"10"を渡したらなんて表示されるか考えてみたか?
0083デフォルトの名無しさんNGNG
2進数文字列解析
多分最速ではないかと

unsigned int d=0,i=sizeof(int)*8;
char *p=binary;

while(*p!='\0') (*(p++)-'0')?d+=(1<<(--i)):i--;
d>>=i;
0084デフォルトの名無しさんNGNG
あ、最速ではないな…
文字列→変数のマップを用意して(以下略)
0085デフォルトの名無しさんNGNG
>>56
char *p="任意の文字列";
long num = (int)p;

「任意の文字列を10進数に変換しろ」だけではこーいう解釈も(無理矢理)成り立つ罠。
元の文字列の条件と、読み取りルールをきちんと書け。
ex.
「'0'と'1'からなる任意の文字列を2進数として読み取り、
 結果を数値型変数に格納せよ」
0086デフォルトの名無しさんNGNG
>>85
いや、もうその話題は終わったから

つーか何でそんなに粘着なの?
0087デフォルトの名無しさんNGNG
>>82
何処からどう見ても2
0088デフォルトの名無しさんNGNG
もろもろの判定を含め、さらにトリッキーに
#include <limits.h>
char *p=binary;
unsigned int c,d=0,i=sizeof(int)*CHAR_BIT+1;
while(((c=*p++-'0')>>1)==0&&--i)d=(d<<1)+c;
0089デフォルトの名無しさんNGNG
toiuka、>>79ではなにが悪いの?
0090デフォルトの名無しさんNGNG
矩形の問題はどうなったのか気になったり気にならなかったり
0091デフォルトの名無しさんNGNG
更にトリッキーに (評価順はpの再利用を考え)
while(--i&&((c=*p++-'0')>>1)==0)d+=d+c;
0092デフォルトの名無しさんNGNG
どの辺がトリッキーなのかと小一時間(ry
七行かぶれで短くしてるだけやん
0093デフォルトの名無しさんNGNG
アセンブラでトリッキーなのいってみよ
0094デフォルトの名無しさんNGNG
Windows上で動くAssembler Virusとか。
0095デフォルトの名無しさんNGNG
某CADソフトのAPIの仕様はカナーリトリッキーです。

なにせ「ファイルを自動で開く」という至極基本的な動作を行う
プラグインが簡単に作れない。
0096デフォルトの名無しさんNGNG
>>95
よー知らんけど、それはお前の技術力がないからということはないのか ?
0097デフォルトの名無しさんNGNG
>>95
漏れに技術力があるかどうかは知らんが、
そのソフトのAPIだけでは実現できず(どーやっても選択ダイアログが出る)、
キーストロークのエミュレートしたり、DDEコマンド投げたりせんと実現できん
というのはどう考えても変だと思うんだよ…

ちなみにマニュアルには「スクリプトを実行しる!」みたいな事が書いてあった。
しかも上記の手を使ってもプラグイン実行中に開けない。
(本体がコマンド受付状態になってからでないと開かない)
0098デフォルトの名無しさんNGNG
それはトリッキーなんじゃなくて、クソなだけじゃないか?
0099デフォルトの名無しさんNGNG
>>98
禿同、回避方法がトリッキーだったりするけど。
0100デフォルトの名無しさんNGNG
そのトリッキーはなんかスレ違いの香り
100get
010195NGNG
スレチガイスマンカッタ。
オブジェクトGetした後の開放手段がバラバラ
(free、delete、独自関数、開放不要のごちゃ混ぜ)
とかいった話はマ板でネタにしてきます。
これで業界トップのシェア持ってるというから、驚きなんだよなぁ…
■ このスレッドは過去ログ倉庫に格納されています