프로젝트 오일러 [인터넷 사이트] by 바죠

프로젝트 오일러 : 수학과 컴퓨터 프로그래밍 관련된 문제 제공 사이트

http://euler.synap.co.kr/
https://en.wikipedia.org/wiki/Leonhard_Euler

프로젝트 오일러, 컴퓨터 프로그래밍 실력을 키울수 있는 최고의 사이트라고 생각합니다.
많은 문제들을 해결함으로써 프로그래밍 실력을 재미있게 그리고 자연스럽게 쌓을 수 있을 것으로 판단합니다.
여러 문제들을 풀다가 보면 스스로 서브루틴, 모듈들을 만들게 될 것입니다.
아무튼, 컴퓨터 언어 교재를 떠나서 간단한 프로젝트를 할 수 있게 만들어주는 사이트입니다.
문제를 풀다가 보면 인터넷 자료도 개인적으로 찾아보게 되는 부가적인 효과가 있습니다.

최근 컴퓨터 교육을 많은 사람들이 이야기 하고 있습니다.
매우 유용한 교육자료가 여기에 이미 있었습니다.
프로젝트 오일러는 놀이하는 인간(호모 루덴스, Homo Ludens)을 추구합니다.

https://en.wikipedia.org/wiki/Computer_programming


참조 : 구글 이미지

유사 사이트:

http://mathschallenge.net/links/programming

http://projecteuler.net

http://www.usaco.org/

http://delphiforfun.org

http://uva.onlinejudge.org/




IEEE_IS_FINITE(), IEEE_IS_NAN() by 바죠

컴퓨터 계산을 하다보면 정말 예기치 않은 상황을 맞이할 때가 있다.
바로 NaN이라는 것이있다. 해당 변수를 출력하면 이렇게 나타난다. 이것은 Not-a-Number를 표현한다. 해당 변수가 더이상 숫자가 아니라는 것이다. 프로그램에서 무엇인가를 잘못해서 변수가 숫자가 되어야 하는데 변수가 숫자가 아닌것이 된 것이다.
예를 들어 0.0으로 다른 숫자를 나누려고한 경우나, -1.0에 대한 제곱근을 구하려고한 경우가 바로 NaN에 해당된다. 즉, 컴퓨터는 해당 계산을 수행한 다음 NaN을 변수에 주게된다.

프로그램에서 이러한 경우가 발생하지 않도록 사전에 조치를 취해야만 할 것이다.
하지만, 우선 발견을 해야 조치를 취할 수 있는 법이다. 물론 원인을 파악할 수 있으면 조치는 매우 간단하게 될수있다.
대부분 원인을 찾으면 처방은 의외로 간단하다.  
그래서 우선 찾아내는 방법이 필요하다.
https://en.wikipedia.org/wiki/NaN





http://fortranwiki.org/fortran/show/ieee_arithmetic

http://www.ibm.com/support/knowledgecenter/SS2MB5_14.1.0/com.ibm.xlf141.bg.doc/language_ref/isnan.html
https://software.intel.com/en-us/node/692942



Elemental Module Intrinsic Function (Generic): Returns whether an IEEE value is Not-a-Number (NaN).


Module

USE, INTRINSIC :: IEEE_ARITHMETIC


Syntax

result = IEEE_IS_NAN (x)


x
 
(Input) Must be of type REAL.


Results

The result type is default logical. The result has the value true if the value of x is NaN; otherwise, false.



!234567890
       USE, INTRINSIC :: IEEE_ARITHMETIC, ONLY : IEEE_IS_FINITE,IEEE_IS_NAN
       implicit none
       integer i
       real*8 tmp,tmq,tmr

       call random_seed()

       call random_number(tmp)
       i=tmp*10+1
       tmp=exp(1000.**53)/exp(1000.**53)
       if(isnan(tmp))then
       write(6,*) tmp,' isnan'
                     endif
       write(6,*)
       if(ieee_is_nan(tmp))then
       write(6,*) tmp,' ieee_is_nan'
                           endif
       write(6,*)
       tmp=1./0.
       if(.not. IEEE_IS_FINITE(tmp))then
       write(6,*) tmp, 'is not finite'
                                    endif
       write(6,*)
       do i=1,10
       call random_number(tmp)
       write(6,*) tmp
       enddo

       stop
       end

------------------------------------------------------------------------------------------------------------------
!234567890
       subroutine tonormal(xxx)
       USE, INTRINSIC :: IEEE_ARITHMETIC, ONLY : IEEE_IS_FINITE,IEEE_IS_NAN
       implicit none
       real*8 xxx
       real ranmar

       if(isnan(xxx)) xxx=ranmar()
       if(IEEE_IS_NAN(xxx)) xxx=ranmar()
       if(.not. IEEE_IS_FINITE(xxx)) xxx=ranmar()
       end subroutine tonormal
------------------------------------------------------------------------------------------------------------------



 NaN                      isnan
 
 NaN                      ieee_is_nan
 
 Infinity                is not finite
 
  0.613091965258501    
  0.579116799042060    
  0.430375181409478    
  0.310413425967628    
  0.960177203926751    
  0.910488043628391    
  0.247542977352232    
  9.715453361074204E-002
  0.710741738981122    
  0.838028752353247    




------------------------------------------------------------------------------------------------------------------
!234567890
       USE, INTRINSIC :: IEEE_ARITHMETIC, ONLY : IEEE_IS_FINITE,IEEE_IS_NAN
       implicit none
       integer i
       real*8 tmp,tmq,tmr

       call random_seed()

       call random_number(tmp)
       i=tmp*10+1
       tmq=exp(1000.**53)/exp(1000.**53)
       if(isnan(tmq))then
       write(6,*) tmq,' isnan'
       call tonormal(tmq)
       write(6,*) tmq,'after'
                     endif
       write(6,*)
       tmp=exp(1000.**53)/exp(1000.**53)
       if(ieee_is_nan(tmp))then
       write(6,*) tmp,' ieee_is_nan'
       call tonormal(tmp)
       write(6,*) tmp,'after'
                           endif
       write(6,*)
       tmp= 1./0.
       if(.not. IEEE_IS_FINITE(tmp))then
       write(6,*) tmp, 'is not finite'
       call tonormal(tmp)
       write(6,*) tmp,'after'
                                    endif
       write(6,*)
       tmp=-1./0.
       if(.not. IEEE_IS_FINITE(tmp))then
       write(6,*) tmp, 'is not finite'
       call tonormal(tmp)
       write(6,*) tmp,'after'
                                    endif
       write(6,*)
       do i=1,10
       call random_number(tmp)
       write(6,*) tmp
       enddo

       stop
       end
!234567890
       subroutine tonormal(xxx)
       USE, INTRINSIC :: IEEE_ARITHMETIC, ONLY : IEEE_IS_FINITE,IEEE_IS_NAN
       implicit none
       real*8 xxx
       real*8 tmp
!      real ranmar

       call random_number(tmp)
       if(isnan(xxx)) xxx=tmp
       call random_number(tmp)
       if(IEEE_IS_NAN(xxx)) xxx=tmp
       call random_number(tmp)
       if(.not. IEEE_IS_FINITE(xxx)) xxx=tmp
       end subroutine tonorma

 ./a.out
 NaN                      isnan
  0.493219157179643      after
 
 NaN                      ieee_is_nan
  0.118539605325025      after
 
 Infinity                is not finite
  0.500495532314348      after
 
 -Infinity               is not finite
  0.569107576913266      after
 
  9.011590371832784E-002
  6.196648220864624E-002
  3.774360064799240E-002
  0.635909791594525    
  0.907416096017866    
  0.868245692365281    
  0.995646819300007    
  0.985228747941758    
  0.633871650266967    
  0.731964336343559    


Infinity, -Infinity, NaN 모두 인수로 전달이 가능하다.

------------------------------------------------------------------------------------------------------------------
https://www.ibm.com/support/knowledgecenter/SS2MB5_14.1.0/com.ibm.xlf141.bg.doc/language_ref/isnan.html

USE, INTRINSIC :: IEEE_ARITHMETIC
REAL :: X = -1.0
IF (IEEE_SUPPORT_DATATYPE(X)) THEN
  IF (IEEE_SUPPORT_SQRT(X)) THEN    ! IEEE-compliant SQRT function
    IF (IEEE_SUPPORT_NAN(X)) THEN
      PRINT *, IEEE_IS_NAN(SQRT(X)) ! Prints true
    ENDIF
  ENDIF
ENDIF

USE, INTRINSIC :: IEEE_ARITHMETIC
REAL :: X = -1.0
IF (IEEE_SUPPORT_STANDARD(X)) THEN
  PRINT *, IEEE_IS_NAN(SQRT(X))     ! Prints true
ENDIF

------------------------------------------------------------------------------------------------------------------
http://en.cppreference.com/w/cpp/numeric/math/isnan


------------------------------------------------------------------------------------------------------------------
http://incredible.egloos.com/4786138
http://incredible.egloos.com/4811847


ifort  -CB -check all -warn interface -assume realloc_lhs   aaa.f90

pgf90

g Options
              -C -g -gopt -M[no]bounds -Mchkfpstk -Mchkptr -Mchkstk -Mcoff -Mdwarf1 -Mdwarf2 -Mdwarf3 -Melf -Mnodwarf -M[no]pgicoff -[no]traceback


------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------


정수 그리고 자리수 역전 정수 by 바죠

[문제]
네자리 정수가 있다. 그 정수의 자리수를 꺼꾸로 배치한 또 다른 정수를 정의한다. 정수가 주어지면 이러한 또 다른 정수를 정의할 수 있다.  각각의 자리수는 0, 1, 2,....9 로 표시되고 중복을 허용하지 않는 경우만 생각한다. 10진법을 가정한다. 예를 들어, 123은 네자리수를 가정하고 있으므로 0123과 같다. 또한, 이 네자리수 정수에 대한 자리수 역전 정수는 3210 로 본다. 네자리수를 가정한 상태에서 10진법을 고려하면 쉽게 받아 들일수 있는 가정이다.

네자리로 이루어진 한 정수(A)가 주어졌을 때, 그 자리수 순서가 꺼꾸로 된 네자리 정수(A')를 얻고 그들 사이의 차이를 계산한다. (큰 값에서 작은 값을 뺀다. A > A' 이면 A-A'을 계산함. A' > A 이면 A'-A 을 계산함.) 이렇게 얻어진 정수(N=A-A' 또는 A'-A)에 대해서  자리수를 꺼꾸로 배치한 또 다른 정수(N')를 얻어낸다. 이 번에는 이들 두 정수를 더하면(N+N') 9999 이거나 10890 이 된다. 이 사실을 증명하라.

{컴퓨터 프로그램을 활용한 문제 풀이의 경우 보다 더 자세한 연산을 요구할 수 있다. 매우 유사한 형식의 문제가 구글 입사 시험에서 출제된 적이 있다. 다양한 컴퓨터 계산으로 증명이 가능하다.}



--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


 네 자리수 정수가 있다. 이 정수를 abcd 형태처럼 자릿수를 맞추어서 적을 수 있고, 또한  나열하여도 그 의미가 변하지 않는다.
a, b, c,d 를 1, 2, 3, 4라고 하면 이는 자연수 1234에 해당한다. a, b, c, d는 0, 1,2,3,4,5,6,7,8, 9 중에 한 자리수에 해당한다.

0123 은 단순히 자연수 123에 해당한다.  4500 은 자연수 4500에 해당한다.  abcd의 자리수 관점에서 역전시키면 dcba 에 해당한다. 이것은 1234를 4321 로 바꾼것에 해당한다.  여기서 a, b, c, d <-- [0, 1, 2, ..., 9].

그러한 관계에 놓인 두 정수 사이의 빼기는 아래와 같이 정의 된다. 물론 계산을 수행할 수 있다.  4자리수가 아니라 5자리수의 경우를 고려해도 결과는 마찬가지 이다. 

4자리수 경우:
1000a + 100*b + 10*c +d
1000d + 100*c + 10*b +a
-------------------------------
999a + 90b -90c -999*d = 9  [111a+10b-10c-111d]

5자리수 경우:
abcde
edcba

10000a+1000b+100c +10d +e
-a -10b-100c-1000d-10000e
_______________________________
9999a + 990b -990d - 9999e

즉, 정수와  자리수 역전 정수의 차이 값은 9의 배수에 해당한다는 결론을 얻을 수 있다. 

A = (a, b, c, d), 네 자리수. 예를 들어, 0123 의 역순서 정수는 3210 으로 취하는 것을 가정하였습니다.
A' = 역순서로 잡은 수 = (d, c, b, a) 십진수 표현식으로 정의함.

즉, A-A' = 9의 배수를 증명함. A-A' = 9*l

N = A-A' = 9*ㅣ 라고 정의하면, 우리는, 최종적으로, N' + N =? 을 계산하고자 함.


M= (d, c, b, a)로 표현되었다면,

M = a + 10b + 100c + 1000d 
   = a + (b + 9b) + (c + 99c) + (d + 999d) 
   = (a + b + c + d ) + (9b + 99c + 999d )
   = (a + b + c + d ) + 9*(b + 11c + 111d )
즉, 일반으로 M = SumDigits(M) + 9r


N = SumDigits(N) + 9*m = 9*l, 따라서, SumDigits(N) = 9*p

N'= SumDigits(N') + 9*n

즉, N+N' = SumDigits (N') + SumDigits (N) + 9*(m+n) 그런데, SumDigits (N') = SumDigits (N) 입니다.

N + N' = 2 SumDigits (N) + 9*(m+n) = 2 * (9*p) + 9*(m+n) = 9*[2*p + m + n]

N' = 9*[2*p + m + n] -N = 9*[2*p + m + n] -9*l = 9*( [2*p + m + n]-l )

즉, N, N' 모두 9의 배수라는 것을 증명.

9의 배수가 될 수 있는 조합: N=189은 O.K.

N = 9*l 이면 SumDigits(N)= 9q 이다.

비중복 조건으로부터, 10*9*8*7 = 5040 가지가 존재하고, A-A' = 9*l, 즉, 모두 9의 배수임을 증명.

N + N' 처럼되면,  SumDigits(N+N')=36, 18 으로서 적절함.  N+N' 은 반드시 11의 배수임.
(차이는 9의 배수, 합은 11의 배수)

4자리수 경우:
1000a + 100*b + 10*c +d
1000d + 100*c + 10*b +a
-------------------------------
1111a + 110b +110c +1111*d = 11  [101a+10b+10c+101d]
즉, 정수와  자리수 역전 정수의 합은 11의 배수에 해당한다는 결론을 얻을 수 있다. 

결국, N+N' 은 반드시 9*11의 배수가 되어야함.

SumDigits(N) = SumDigits(A-A') = 18 인 경우가 적절함.  9가 될 수 없음. 9의 배수가 될 수 있지만 결코 9가 될수는 없음.

왜냐하면, N=189, N=9621,  N=A-A' 이 가질 수 있는 각각 최소, 최대값이기 때문.
두 가지 모두, SumDigits(N) =9 을 여전히 만족함. 참고로 189+ 9810 = 9999,  9621+ 1269  = 10890 
(참고로 189+ 9810 = 9999,  9621+ 1269  = 10890, 즉, N+N' 은 9999 보다 작을 수 없음. 또한, 10890 보다 더 클 수 없음.)
또한, 앞서 증명한 바와 같이 반드시 99의 배수가 되어만 함.  9999=9*1111 = (9*11) * 101, 10890=9* 1210 =(9*11) * 110
9999와 10890 두 가지만 가능함. 

10890    :  09801
9999      :   9999

9999+99*9
10890
9999+99*8
10791
9999+99*7
10692
9999+99*6
10593
9999+99*5
10494
9999+99*4
10395
9999+99*3
10296
9999+99*2
10197
9999+99*1
10098
9999+99*0
9999

9801/9
1089
9801/9/11
99
9801/99
99
9801/11
891

SumDigits(N+N') =SumDigits( SumDigits(N)+ SumDigits(N') ) = 9의 배수. N + N', 십진수로 환산하면 반드시 4자리수, 아니면 5자리수가 되어야만 함.

9의 배수에 대해서 계속해서, SumDigits()을 취하면 결국에는 9로 수렴하게됨.
99 --> 9+9 --> 18 --> 1+8 --> 9

(N + N') mod 9  = ( 여러번 SumDigits (N+N')) mod 9
 
N 마지막 자리수,  N'의 마지막 자리수, 두 수를 더하면 0 또는 10이 된다. 각각 2520,  2520 가지가 가능하다.

마지막 자리들의 합이 10 이면 10890
마지막 자리들의 합이 9 이면 9999
(첫 자리들의 합이 10이면 10890
첫 자리들의 합이  9 이면 9999 )

mod 9을 잡으면 0 이 되어야 함. 9 도 mod 9으로 잡으면 0이다.

5040/2= 2520

-------------------------------------------------------------------------------------------------------------------



!234567890
!      Written by In-Ho Lee, January 8, 2017
        implicit none
       integer i,j,k,l,kount,kount2,kount3
       integer il,iu,i1,i2,i3,i4,m,n,i34(6),i44(6)
       character*4 str3,str4
       integer isize

       isize=4
       il=9999999 ; iu=-9999999
       kount=0 ; kount2=0 ; kount3=0
       do i=0,9
       do j=0,9
       if(j == i) cycle
       do k=0,9
       if(k == i) cycle
       if(k == j) cycle
       do l=0,9
       if(l == i) cycle
       if(l == j) cycle
       if(l == k) cycle
       kount3=kount3+1
       i1=1000*i + 100*j + 10*k + l
       i2=1000*l + 100*k + 10*j + i
       if(i1 > i2) i3=i1-i2 ; if(i2 > i1) i3=i2-i1
       if(iu < i3) iu=i3 ; if(il > i3) il=i3
!      write(6,*) i3
       call xnumeral(i3,str3,isize)
       do m=1,4
       read(str3(m:m),*) n
!      write(6,*) n
       i34(m)=n
       i44(5-m)=n
       enddo
!      write(6,*) i3,mod(i3,9)
!      write(6,*) (i34(m),m=1,4)
!      n=1000*i44(4) +100*i44(3) +10*i44(2) +i44(1)
       i4=1000*i44(1) +100*i44(2) +10*i44(3) +i44(4)
!      write(6,*) i4,mod(i4,9)
!      write(6,*) (i44(m),m=1,4)
!      write(6,*) i3+i4,mod(i3+i4,9)
       write(6,'(4i8)') i3,i4,i3+i4, i34(1)+i34(2)+i34(3)+i34(4)
!      if(43560 == 4*(i3+i4)) kount=kount+1
!      if(43560 /= 4*(i3+i4)) kount2=kount2+1
       if(10890 == i3+i4) kount=kount+1
       if( 9999 == i3+i4) kount2=kount2+1
       enddo
       enddo
       enddo
       enddo
       write(6,*) il,iu
       write(6,*) kount,kount2
       write(6,*) kount3
       stop
       end
-------------------------------------------------------------------------------------------------------------------
c
c
c ###################################################
c ## COPYRIGHT (C) 1992 by Jay William Ponder ##
c ## All Rights Reserved ##
c ###################################################
c
c #############################################################
c ## ##
c ## subroutine numeral -- convert number to text string ##
c ## ##
c #############################################################
c
c
c "numeral" converts an input integer number into the
c corresponding right- or left-justified text numeral
c
c number integer value of the number to be transformed
c string text string to be filled with corresponding numeral
c size on input, the minimal acceptable numeral length, if
c zero then output will be right justified, if
c nonzero then numeral is left-justified and padded
c with leading zeros as necessary; upon output, the
c number of non-blank characters in the numeral
c
c
      subroutine xnumeral (number,string,size)
      implicit none
      integer i,number,size,multi,pos
      integer length,minsize,len
      integer million,hunthou,tenthou
      integer thousand,hundred,tens,ones
      character*1 digit(0:9)
      character*(*) string
      logical right,negative
      data digit / '0','1','2','3','4','5','6','7','8','9' /
c
c
c     set justification and size bounds for numeral string
c
      if (size .eq. 0) then
         right = .true.
         size = 1
      else
         right = .false.
      end if
      minsize = size
      length = len(string)
c
c     test the sign of the original number
c
      if (number .ge. 0) then
         negative = .false.
      else
         negative = .true.
         number = -number
      end if
c
c     use modulo arithmetic to find place-holding digits
c
      million = number / 1000000
      multi = 1000000 * million
      hunthou = (number-multi) / 100000
      multi = multi + 100000*hunthou
      tenthou = (number-multi) / 10000
      multi = multi + 10000*tenthou
      thousand = (number-multi) / 1000
      multi = multi + 1000*thousand
      hundred = (number-multi) / 100
      multi = multi + 100*hundred
      tens = (number-multi) / 10
      multi = multi + 10*tens
      ones = number - multi
c
c     find the correct length to be used for the numeral
c
      if (million .ne. 0) then
         size = 7
      else if (hunthou .ne. 0) then
         size = 6
      else if (tenthou .ne. 0) then
         size = 5
      else if (thousand .ne. 0) then
         size = 4
      else if (hundred .ne. 0) then
         size = 3
      else if (tens .ne. 0) then
         size = 2
      else
         size = 1
      end if
      size = min(size,length)
      size = max(size,minsize)
c
c     convert individual digits to a string of numerals
c
      if (size .eq. 7) then
         string(1:1) = digit(million)
         string(2:2) = digit(hunthou)
         string(3:3) = digit(tenthou)
         string(4:4) = digit(thousand)
         string(5:5) = digit(hundred)
         string(6:6) = digit(tens)
         string(7:7) = digit(ones)
      else if (size .eq. 6) then
         string(1:1) = digit(hunthou)
         string(2:2) = digit(tenthou)
         string(3:3) = digit(thousand)
         string(4:4) = digit(hundred)
         string(5:5) = digit(tens)
         string(6:6) = digit(ones)
      else if (size .eq. 5) then
         string(1:1) = digit(tenthou)
         string(2:2) = digit(thousand)
         string(3:3) = digit(hundred)
         string(4:4) = digit(tens)
         string(5:5) = digit(ones)
      else if (size .eq. 4) then
         string(1:1) = digit(thousand)
         string(2:2) = digit(hundred)
         string(3:3) = digit(tens)
         string(4:4) = digit(ones)
      else if (size .eq. 3) then
         string(1:1) = digit(hundred)
         string(2:2) = digit(tens)
         string(3:3) = digit(ones)
      else if (size .eq. 2) then
         string(1:1) = digit(tens)
         string(2:2) = digit(ones)
      else
         string(1:1) = digit(ones)
      end if
c
c     right-justify if desired, and pad with blanks
c
      if (right) then
         do i = size, 1, -1
            pos = length - size + i
            string(pos:pos) = string(i:i)
         end do
         do i = 1, length-size
            string(i:i) = ' '
         end do
      else
         do i = size+1, length
            string(i:i) = ' '
         end do
      end if
      return
      end

-------------------------------------------------------------------------------------------------------------------


         189        9621
        2520        2520
        5040

-------------------------------------------------------------------------------------------------------------------
!234567890
       implicit none
       integer i,j,k,l,kount,kount2,kount3,m
       integer il,iu,inum,idigits(7)
       integer isize

       isize=3
       idigits=0
       do i=0,9
       do j=0,9
       do k=0,9
       inum=i*100+j*10+k
       call num2digits(inum,idigits,isize)
       write(6,*) inum
       write(6,*) (idigits(m),m=1,isize)
       enddo
       enddo
       enddo
       stop
       end
!234567890
       subroutine num2digits(i,idigits,isize)
       implicit none
       integer i,isize,idigits(isize)
       integer m,n
       character*7 str7

       call xnumeral(i,str7,isize)
       idigits(:)=0
       do m=1,isize
       read(str7(m:m),*) n
       idigits(m)=n
       enddo
       return
       end
-------------------------------------------------------------------------------------------------------------------
!234567890
      subroutine idigits(i,isum)
      implicit none
      integer i,isum
      integer j,irem

      isum=0
      j=i
      do while(j /= 0)
      irem=mod(j,10)
      isum=isum+irem
      j=j/10
      enddo
      return
      end
!234567890


-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------



http://incredible.egloos.com/7090839

new.pptx


preprint policy [미국 화학 저널들] by 바죠

ACS 저널들이 드디어 preprint 정책에서 변화를 인정했다. 여전히 버티고 있는 저널들도 아직 있다.

물리학 분야와 달리 화학 분야 저널들은 소위 arXiv에 올라온 논문들을 취급하지 않았었다. 그 자체로 publication으로 인정하여 해당 논문을 접수하지도 않았었다.

하지만, 최근 이러한 일들이 모두 부질없는 짓임을 인정하고 있다.

arXiv, bioRxiv, ChemRxiv  에 올린 논문도 드디어 받아 주는 시대에 도달하려고 하고 있다.

물론, 아직 100%는 아니지만 그래도 많이 바뀌었다.



예를 들어 보면 아래와 같다.

Nano Letters authors are allowed to deposit an initial draft of their manuscript in a preprint service.

ACS Nano authors are allowed to deposit an initial draft of their manuscript in a preprint service.

The Journal of the American Chemical Society considers for publication only original work that has not been previously published and is not under consideration for publication elsewhere. When submitting a manuscript, an author should inform the editor of any prior dissemination of the content in print or electronic format. This includes electronic posting of conference presentations, posters, and preprints on institutional repositories and any other Web sites. Any content that has been made publicly available, either in print or electronic format, and that contains a significant amount of new information, if made part of a submitted manuscript, may jeopardize the originality of the submission and may preclude consideration for publication.


--------------------------------------------------------------------------------------------------------------
http://incredible.egloos.com/6020353

1 2 3 4 5 6 7 8 9 10 다음