आप एक स्याही में क्या देखते हैं? Rorschach जनरेशन '[बंद]


12

इसलिए मैं आपको नीचे की छवि की तरह Rorschach चित्र उत्पन्न करने का प्रयास करना चाहता हूं:

नकली Rorschach चित्र

यहाँ आगे प्रेरणा के लिए एक कड़ी है।

यह एक लोकप्रियता प्रतियोगिता है, लेकिन मैं कहूंगा कि रंग काले और सफेद, साथ ही बनावट के अधिक लोकप्रिय होने की संभावना है।

Rorschach छवियों को स्याही के साथ कागज को मोड़कर बनाया जाता है ताकि एक मानदंड सममिति हो।

ASCII कला वैध है, लेकिन ऊपर के समान मानदंड के अधीन होगा।


1
तो यह कौन है, कोड-गोल्फ, या लोकप्रियता-प्रतियोगिता?
डेविड विल्किंस

2
<उद्धरण रिचर्ड फेनमैन> एक अर्थहीन इंकलबोट है, और दूसरे आपसे पूछते हैं कि आपको क्या लगता है कि आप क्या देखते हैं, लेकिन जब आप उन्हें बताते हैं, तो वे आपके साथ बहस करना शुरू कर देते हैं! </ उद्धरण>
user80551


1
मैं इसके लिए एक स्टिरियोग्राम देखना पसंद करूंगा ।
जस्टिन

1
यह मुझे एक तस्वीर पर याद दिलाता है जिसे मैंने हाल ही में देखा था
VX

जवाबों:


11

फोरट्रान 95

यह कोड एक प्रकार का बड़ा है, लेकिन यह ASCii परिणाम का एक अच्छा (ish) उत्पादन करता है:

program Rorschach
implicit none

integer :: i, j, k, l, N, seed
integer, dimension (24) :: i_zero, j_zero
real :: aux
integer, dimension (17,12) :: matrix_I = 0
character, dimension (17,12) :: matrix_C

! random seed according to system clock
call SYSTEM_CLOCK(count=k)
call RANDOM_SEED(size=N)
allocate(seed(N))
seed=k+37*(/ (i - 1, i = 1, n) /)
call RANDOM_SEED(PUT=seed)

! generating 7 random points
do i=1,7
  call RANDOM_NUMBER(aux)
  i_zero(i) = 15 * aux + 2 ! range = 2-16
  call RANDOM_NUMBER(aux)
  j_zero(i) = 11 * aux + 2 ! range = 2-12
enddo

! generating 7 large spots of ink
do i=1,7
  matrix_I(i_zero(i),j_zero(i)) = 3 ! central points have ink value 3
  do k=-1,1
    do l=-1,1
      if (.NOT.((k==0) .AND. (l==0))) then ! immediate neighbours...
        if ( (((i_zero(i)+k)<=17).OR.((i_zero(i)+k)>0)) .AND. (((j_zero(i)+l)<=12).OR.((j_zero(i)+l)>0)) ) then ! ... that are inside the designed area ...
            if (matrix_I(i_zero(i)+k,j_zero(i)+l) < 2) matrix_I(i_zero(i)+k,j_zero(i)+l) = 2 ! ... and that do not have ink value larger than 2 will be attributed as 2
        endif
      endif
    enddo
  enddo
enddo

! generating N little sparkles of ink
call RANDOM_NUMBER(aux)
N = int(11 * aux) + 20 ! N = 20-30

i = 0
do while (i <= N)
  call RANDOM_NUMBER(aux)
  i_zero(i) = 16 * aux + 1 ! range = 1-17
  call RANDOM_NUMBER(aux)
  j_zero(i) = 11 * aux + 1 ! range = 1-12
  if (matrix_I(i_zero(i),j_zero(i)) < 1) then ! if the selected point already has more ink than 1, then cycle the loop
    matrix_I(i_zero(i),j_zero(i)) = 1
    else
      cycle
  endif
  i = i + 1
enddo

! converting matrix of integers into matrix of characters
do i=1,17
  do j=1,12
    select case(matrix_I(i,j))
      case(0)
      matrix_C(i,j) = " "
      case(1)
      matrix_C(i,j) = "."
      case(2)
      matrix_C(i,j) = "+"
      case(3)
      matrix_C(i,j) = "@"      
    end select
  enddo
enddo

! printing it on the screen + its reflection
do i=1,17
  do j=1,12
    write(*,"(A1)",advance="NO") matrix_C(i,j)
  enddo
  do j=12,2,-1
    write(*,"(A1)",advance="NO") matrix_C(i,j)
  enddo
  write(*,"(A1)") matrix_C(i,1)
enddo

end program Rorschach

कोड पूरी तरह से टिप्पणी की गई है, लेकिन मूल विचार यह है कि यह 0 और 3 के बीच मूल्यों के साथ एक मैट्रिक्स उत्पन्न करता है, उस स्थान पर स्याही की मात्रा का प्रतिनिधित्व करता है। स्याही के 7 बड़े धब्बे हैं (मान 2 से घिरे मूल्य 3 के साथ एक स्थान) और बहुत कम "स्पार्कल" (मूल्य 1)। इस मैट्रिक्स को तब चरित्र मैट्रिक्स में परिवर्तित किया जाता है, जो निम्न रूपांतरण का उपयोग करता है:

0 =  
1 = .
2 = +
3 = @

यहाँ एक परिणाम है:

 +++      .  .      +++ 
 +@++++   .  .   ++++@+ 
 ++++@+.        .+@++++ 
   .+++   ++++   +++.   
          +@@+          
. .   . +++@@+++ .   . .
.       +@++++@+       .
     ++++++  ++++++     
     +@+        +@+     
.    ++++      ++++    .
   .  +@+      +@+  .   
  .  .+++.    .+++.  .  
 . .   .        .   . . 
    .    .    .    .    
   .   ..      ..   .   
 .                    . 

1
FORTRAN! एक व्यक्तिगत पसंदीदा।
प्योरफेरेट

2
धन्यवाद! आमतौर पर फोरट्रान + शुरुआती कोड यहां एक मौका नहीं है, लेकिन लड़के, जब से मैंने इस साइट में भाग लेना शुरू किया है, मैं प्रोग्रामिंग के बारे में बहुत कुछ सीख रहा हूं!
गिल्बर्टोहासनोफब

1
फोरट्रान मेरी नज़र में सूचियों का राजा है, और यह सिर्फ सूचियाँ हैं इसलिए मैं नहीं देखता कि आप कैसे गलत हो सकते हैं।
प्योरफ्रेट

1
फोरट्रान संक्षिप्तता के लिए इतना गर्म नहीं है, लेकिन प्रदर्शन बिंदु पर है।
जोनाथन वान मैट्रे

12

अजगर

सबसे अच्छा या सबसे अच्छा नहीं है, लेकिन यहाँ एक अजगर समाधान है:

from PIL import Image
import random
import sys

imgsize = (int(sys.argv[1]), int(sys.argv[2]))
color = (0, 0, 0)
img = Image.new("RGB", imgsize, "white")

for j in range(0,int(sys.argv[3])):
    start = (random.randrange(0, imgsize[0]/2), random.randrange(0, imgsize[1]))
    point = start
    img.putpixel(point, color)

    blotsize = random.randrange(0, int(sys.argv[4]))
    for i in range(blotsize):
        directions = [(point[0], point[1]+1), (point[0], point[1]-1), (point[0]+1, point[1]), (point[0]-1, point[1])]
        toremove = []
        for direction in directions:
            if direction[0]>=(imgsize[0]/2) or direction[1]>=imgsize[1] or direction[0]<0 or direction[1]<0:
                toremove.append(direction)
        for d in toremove:
            directions.remove(d)
        point = random.choice(directions)
        img.putpixel(point, color)

cropped = img.crop((0, 0, imgsize[0]/2, imgsize[1]))
img = img.transpose(Image.FLIP_LEFT_RIGHT)
img.paste(cropped, (0, 0, imgsize[0]/2, imgsize[1]))

img.save("blot.png")

यह सिर्फ एक धब्बा के लिए "भटक पथ" बनाता है, और उनमें से कई बनाता है।

एक उदाहरण का उपयोग:

py inkblot.py width height blots blotsize
py inkblot.py 512 512 20 10000

और कुछ उदाहरण चित्र: blot1 blot2


PPCG में आपका स्वागत है! हम पोस्टरों को एक प्रमुख हेडर बनाने के लिए प्रोत्साहित करते हैं जो उनके द्वारा प्रयुक्त भाषा को दर्शाता है। आप ऐसा करने के लिए संपादक में मार्कडाउन सिंटैक्स का उपयोग कर सकते हैं, जैसे## Python
जोनाथन वान मैट्रे

5
हो सकता है कि सिंगल पिक्सल के बजाय आप (रैंडम साइज) डिस्क का इस्तेमाल कर सकें।
हावर्ड

1
स्वागत हे! आपके यहाँ कुछ बहुत अच्छे परिणाम हैं।
गिल्बर्टोहासनोफब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.